nimare 0.5.0rc2__tar.gz → 0.5.1rc1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. {nimare-0.5.0rc2/nimare.egg-info → nimare-0.5.1rc1}/PKG-INFO +1 -1
  2. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/_version.py +3 -3
  3. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/reports/base.py +1 -1
  4. nimare-0.5.1rc1/nimare/tests/test_extract.py +76 -0
  5. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_reports.py +22 -0
  6. {nimare-0.5.0rc2 → nimare-0.5.1rc1/nimare.egg-info}/PKG-INFO +1 -1
  7. nimare-0.5.0rc2/nimare/tests/test_extract.py +0 -46
  8. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/LICENSE +0 -0
  9. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/MANIFEST.in +0 -0
  10. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/README.md +0 -0
  11. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/benchmarks/__init__.py +0 -0
  12. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/benchmarks/bench_cbma.py +0 -0
  13. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/__init__.py +0 -0
  14. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/annotate/__init__.py +0 -0
  15. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/annotate/cogat.py +0 -0
  16. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/annotate/gclda.py +0 -0
  17. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/annotate/lda.py +0 -0
  18. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/annotate/text.py +0 -0
  19. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/annotate/utils.py +0 -0
  20. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/base.py +0 -0
  21. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/cli.py +0 -0
  22. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/correct.py +0 -0
  23. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/dataset.py +0 -0
  24. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/decode/__init__.py +0 -0
  25. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/decode/base.py +0 -0
  26. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/decode/continuous.py +0 -0
  27. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/decode/discrete.py +0 -0
  28. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/decode/encode.py +0 -0
  29. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/decode/utils.py +0 -0
  30. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/diagnostics.py +0 -0
  31. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/estimator.py +0 -0
  32. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/extract/__init__.py +0 -0
  33. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/extract/extract.py +0 -0
  34. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/extract/utils.py +0 -0
  35. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/generate.py +0 -0
  36. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/io.py +0 -0
  37. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/__init__.py +0 -0
  38. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/cbma/__init__.py +0 -0
  39. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/cbma/ale.py +0 -0
  40. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/cbma/base.py +0 -0
  41. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/cbma/mkda.py +0 -0
  42. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/cbmr.py +0 -0
  43. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/ibma.py +0 -0
  44. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/kernel.py +0 -0
  45. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/models.py +0 -0
  46. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/meta/utils.py +0 -0
  47. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/nimads.py +0 -0
  48. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/reports/__init__.py +0 -0
  49. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/reports/default.yml +0 -0
  50. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/reports/figures.py +0 -0
  51. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/reports/report.tpl +0 -0
  52. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/__init__.py +0 -0
  53. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/atlases/Harvard-Oxford-LICENSE +0 -0
  54. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/atlases/HarvardOxford-cort-maxprob-thr25-2mm.nii.gz +0 -0
  55. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/database_file_manifest.json +0 -0
  56. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/english_spellings.csv +0 -0
  57. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/filenames.json +0 -0
  58. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/neurosynth_laird_studies.json +0 -0
  59. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/neurosynth_stoplist.txt +0 -0
  60. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/nidm_pain_dset.json +0 -0
  61. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/references.bib +0 -0
  62. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/semantic_knowledge_children.txt +0 -0
  63. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/semantic_relatedness_children.txt +0 -0
  64. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/templates/MNI152_2x2x2_brainmask.nii.gz +0 -0
  65. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/templates/tpl-MNI152NLin6Asym_res-01_T1w.nii.gz +0 -0
  66. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/templates/tpl-MNI152NLin6Asym_res-01_desc-brain_mask.nii.gz +0 -0
  67. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/templates/tpl-MNI152NLin6Asym_res-02_T1w.nii.gz +0 -0
  68. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/resources/templates/tpl-MNI152NLin6Asym_res-02_desc-brain_mask.nii.gz +0 -0
  69. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/results.py +0 -0
  70. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/stats.py +0 -0
  71. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/__init__.py +0 -0
  72. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/conftest.py +0 -0
  73. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/amygdala_roi.nii.gz +0 -0
  74. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/data-neurosynth_version-7_coordinates.tsv.gz +0 -0
  75. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/data-neurosynth_version-7_metadata.tsv.gz +0 -0
  76. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/data-neurosynth_version-7_vocab-terms_source-abstract_type-tfidf_features.npz +0 -0
  77. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/data-neurosynth_version-7_vocab-terms_vocabulary.txt +0 -0
  78. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/neurosynth_dset.json +0 -0
  79. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/neurosynth_laird_studies.json +0 -0
  80. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/nidm_pain_dset.json +0 -0
  81. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/nimads_annotation.json +0 -0
  82. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/nimads_studyset.json +0 -0
  83. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_baseline.txt +0 -0
  84. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_pain_dataset.json +0 -0
  85. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_pain_dataset_multiple_contrasts.json +0 -0
  86. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_sleuth_file.txt +0 -0
  87. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_sleuth_file2.txt +0 -0
  88. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_sleuth_file3.txt +0 -0
  89. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_sleuth_file4.txt +0 -0
  90. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/data/test_sleuth_file5.txt +0 -0
  91. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_annotate_cogat.py +0 -0
  92. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_annotate_gclda.py +0 -0
  93. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_annotate_lda.py +0 -0
  94. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_dataset.py +0 -0
  95. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_decode_continuous.py +0 -0
  96. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_decode_discrete.py +0 -0
  97. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_diagnostics.py +0 -0
  98. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_estimator_performance.py +0 -0
  99. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_generate.py +0 -0
  100. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_io.py +0 -0
  101. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_meta_ale.py +0 -0
  102. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_meta_cbmr.py +0 -0
  103. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_meta_ibma.py +0 -0
  104. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_meta_kernel.py +0 -0
  105. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_meta_mkda.py +0 -0
  106. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_nimads.py +0 -0
  107. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_stats.py +0 -0
  108. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_transforms.py +0 -0
  109. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_utils.py +0 -0
  110. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/test_workflows.py +0 -0
  111. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/tests/utils.py +0 -0
  112. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/transforms.py +0 -0
  113. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/utils.py +0 -0
  114. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/workflows/__init__.py +0 -0
  115. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/workflows/base.py +0 -0
  116. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/workflows/cbma.py +0 -0
  117. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/workflows/ibma.py +0 -0
  118. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/workflows/macm.py +0 -0
  119. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare/workflows/misc.py +0 -0
  120. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare.egg-info/SOURCES.txt +0 -0
  121. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare.egg-info/dependency_links.txt +0 -0
  122. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare.egg-info/entry_points.txt +0 -0
  123. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare.egg-info/not-zip-safe +0 -0
  124. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare.egg-info/requires.txt +0 -0
  125. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/nimare.egg-info/top_level.txt +0 -0
  126. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/pypi_description.md +0 -0
  127. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/pyproject.toml +0 -0
  128. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/setup.cfg +0 -0
  129. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/setup.py +0 -0
  130. {nimare-0.5.0rc2 → nimare-0.5.1rc1}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nimare
3
- Version: 0.5.0rc2
3
+ Version: 0.5.1rc1
4
4
  Summary: NiMARE: Neuroimaging Meta-Analysis Research Environment
5
5
  Home-page: https://github.com/neurostuff/NiMARE
6
6
  Author: NiMARE developers
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-04-25T13:22:39-0500",
11
+ "date": "2025-05-14T18:30:31-0500",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "9e3b73cbb6235b31a4fab7a9a118e32c1d2f9932",
15
- "version": "0.5.0rc2"
14
+ "full-revisionid": "0d38f6753997f345fc39e3eddb079655f87077b2",
15
+ "version": "0.5.1rc1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -540,7 +540,7 @@ class Report:
540
540
  rowvar=True,
541
541
  )
542
542
  else:
543
- corr = self.inputs_["corr_matrix"]
543
+ corr = self.results.estimator.inputs_["corr_matrix"]
544
544
 
545
545
  similarity_table = pd.DataFrame(
546
546
  index=ids_,
@@ -0,0 +1,76 @@
1
+ """Test nimare.extract."""
2
+
3
+ import os
4
+ from glob import glob
5
+ from io import BytesIO
6
+ from unittest.mock import patch
7
+
8
+ import nimare
9
+
10
+
11
+ def mock_urlopen(url):
12
+ """Mock URL opener that returns appropriate mock data based on file type."""
13
+ if "coordinates.tsv.gz" in url:
14
+ mock_data = b"x\ty\tz\n1\t2\t3\n4\t5\t6"
15
+ elif "metadata.tsv.gz" in url:
16
+ mock_data = b"id\ttitle\n1\tStudy 1\n2\tStudy 2"
17
+ elif "features.npz" in url:
18
+ mock_data = b"mock npz content"
19
+ elif "vocabulary.txt" in url:
20
+ mock_data = b"term1\nterm2\nterm3"
21
+ else:
22
+ mock_data = b"Mock file content"
23
+ return BytesIO(mock_data)
24
+
25
+
26
+ @patch("nimare.extract.extract.urlopen", side_effect=mock_urlopen)
27
+ def test_fetch_neurosynth(tmp_path_factory):
28
+ """Smoke test for extract.fetch_neurosynth.
29
+
30
+ Taken from the Neurosynth Python package.
31
+ """
32
+ tmpdir = tmp_path_factory.mktemp("test_fetch_neurosynth")
33
+ data_files = nimare.extract.fetch_neurosynth(
34
+ data_dir=tmpdir,
35
+ version="7",
36
+ overwrite=False,
37
+ source="abstract",
38
+ vocab="terms",
39
+ )
40
+ # Check data_files structure
41
+ assert isinstance(data_files, list)
42
+ assert len(data_files) == 1
43
+
44
+ # Verify expected files in data_files
45
+ files_dict = data_files[0]
46
+ assert "coordinates" in files_dict
47
+ assert "metadata" in files_dict
48
+ assert "features" in files_dict
49
+ assert len(files_dict["features"]) == 1
50
+
51
+
52
+ @patch("nimare.extract.extract.urlopen", side_effect=mock_urlopen)
53
+ def test_fetch_neuroquery(mock_url, tmp_path_factory):
54
+ """Smoke test for extract.fetch_neuroquery."""
55
+ tmpdir = tmp_path_factory.mktemp("test_fetch_neuroquery")
56
+ data_files = nimare.extract.fetch_neuroquery(
57
+ data_dir=tmpdir,
58
+ version="1",
59
+ overwrite=False,
60
+ source="abstract",
61
+ vocab="neuroquery7547",
62
+ type="count",
63
+ )
64
+ files = glob(os.path.join(tmpdir, "neuroquery", "*"))
65
+ assert len(files) == 4
66
+
67
+ # One set of files found
68
+ assert isinstance(data_files, list)
69
+ assert len(data_files) == 1
70
+
71
+ # Verify mock was called with expected URLs
72
+ assert mock_url.call_count > 0 # Should be called for each file download
73
+ for call in mock_url.call_args_list:
74
+ url = call[0][0]
75
+ assert "neuroquery/neuroquery_data/blob" in url
76
+ assert "?raw=true" in url
@@ -108,3 +108,25 @@ def test_reports_ibma_smoke(tmp_path_factory, testdata_ibma, aggressive_mask):
108
108
  filename = "report.html"
109
109
  outpath = op.join(hedges_dir, filename)
110
110
  assert op.isfile(outpath)
111
+
112
+
113
+ def test_reports_ibma_multiple_contrasts_smoke(tmp_path_factory, testdata_ibma_multiple_contrasts):
114
+ """Smoke test for IBMA reports for multiple contrasts."""
115
+ tmpdir = tmp_path_factory.mktemp("test_reports_ibma_smoke")
116
+
117
+ # Generate a report with z maps as inputs
118
+ stouffers_dir = op.join(tmpdir, "stouffers")
119
+ workflow = IBMAWorkflow(
120
+ estimator=Stouffers(aggressive_mask=True),
121
+ corrector="fdr",
122
+ diagnostics="jackknife",
123
+ voxel_thresh=3.2,
124
+ output_dir=stouffers_dir,
125
+ )
126
+ results = workflow.fit(testdata_ibma_multiple_contrasts)
127
+
128
+ run_reports(results, stouffers_dir)
129
+
130
+ filename = "report.html"
131
+ outpath = op.join(stouffers_dir, filename)
132
+ assert op.isfile(outpath)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nimare
3
- Version: 0.5.0rc2
3
+ Version: 0.5.1rc1
4
4
  Summary: NiMARE: Neuroimaging Meta-Analysis Research Environment
5
5
  Home-page: https://github.com/neurostuff/NiMARE
6
6
  Author: NiMARE developers
@@ -1,46 +0,0 @@
1
- """Test nimare.extract."""
2
-
3
- import os
4
- from glob import glob
5
-
6
- import nimare
7
-
8
-
9
- def test_fetch_neurosynth(tmp_path_factory):
10
- """Smoke test for extract.fetch_neurosynth.
11
-
12
- Taken from the Neurosynth Python package.
13
- """
14
- tmpdir = tmp_path_factory.mktemp("test_fetch_neurosynth")
15
- data_files = nimare.extract.fetch_neurosynth(
16
- data_dir=tmpdir,
17
- version="7",
18
- overwrite=False,
19
- source="abstract",
20
- vocab="terms",
21
- )
22
- files = glob(os.path.join(tmpdir, "neurosynth", "*"))
23
- assert len(files) == 4
24
-
25
- # One set of files found
26
- assert isinstance(data_files, list)
27
- assert len(data_files) == 1
28
-
29
-
30
- def test_fetch_neuroquery(tmp_path_factory):
31
- """Smoke test for extract.fetch_neuroquery."""
32
- tmpdir = tmp_path_factory.mktemp("test_fetch_neuroquery")
33
- data_files = nimare.extract.fetch_neuroquery(
34
- data_dir=tmpdir,
35
- version="1",
36
- overwrite=False,
37
- source="abstract",
38
- vocab="neuroquery7547",
39
- type="count",
40
- )
41
- files = glob(os.path.join(tmpdir, "neuroquery", "*"))
42
- assert len(files) == 4
43
-
44
- # One set of files found
45
- assert isinstance(data_files, list)
46
- assert len(data_files) == 1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes