icplot 0.3.5__tar.gz → 0.4.0__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 (85) hide show
  1. {icplot-0.3.5/src/icplot.egg-info → icplot-0.4.0}/PKG-INFO +40 -9
  2. {icplot-0.3.5 → icplot-0.4.0}/README.md +19 -2
  3. {icplot-0.3.5 → icplot-0.4.0}/pyproject.toml +44 -11
  4. {icplot-0.3.5 → icplot-0.4.0/src/icplot.egg-info}/PKG-INFO +40 -9
  5. {icplot-0.3.5 → icplot-0.4.0}/src/icplot.egg-info/requires.txt +26 -5
  6. {icplot-0.3.5 → icplot-0.4.0}/LICENSE +0 -0
  7. {icplot-0.3.5 → icplot-0.4.0}/setup.cfg +0 -0
  8. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/__init__.py +0 -0
  9. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/charts/__init__.py +0 -0
  10. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/charts/gantt.py +0 -0
  11. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/charts/tree.py +0 -0
  12. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/converter/__init__.py +0 -0
  13. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/converter/cli.py +0 -0
  14. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/converter/convert.py +0 -0
  15. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/converter/image.py +0 -0
  16. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/__init__.py +0 -0
  17. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/base.py +0 -0
  18. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/__init__.py +0 -0
  19. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/cell.py +0 -0
  20. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/edge.py +0 -0
  21. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/mesh.py +0 -0
  22. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/openfoam/__init__.py +0 -0
  23. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/openfoam/blockmesh.py +0 -0
  24. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/openfoam/foamfile.py +0 -0
  25. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/openfoam/polymesh.py +0 -0
  26. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/operations.py +0 -0
  27. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/shapes.py +0 -0
  28. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/vertex.py +0 -0
  29. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/mesh/vtk.py +0 -0
  30. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/operations.py +0 -0
  31. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/shapes.py +0 -0
  32. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/geometry/transform.py +0 -0
  33. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/graph/__init__.py +0 -0
  34. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/graph/axis.py +0 -0
  35. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/graph/plot.py +0 -0
  36. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/graph/plot_group.py +0 -0
  37. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/graph/series.py +0 -0
  38. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/main_cli.py +0 -0
  39. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/py.typed +0 -0
  40. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/__init__.py +0 -0
  41. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/charts/pgfgantt.py +0 -0
  42. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/charts/svggantt.py +0 -0
  43. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/cli.py +0 -0
  44. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/config.py +0 -0
  45. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/formats/__init__.py +0 -0
  46. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/formats/mermaid.py +0 -0
  47. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/formats/plantuml.py +0 -0
  48. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/formats/tex.py +0 -0
  49. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/frontmatter.py +0 -0
  50. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/graph/__init__.py +0 -0
  51. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/graph/color.py +0 -0
  52. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/graph/matplotlib.py +0 -0
  53. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/graph/mpl.py +0 -0
  54. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/graph/renderer.py +0 -0
  55. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/graph/vtk.py +0 -0
  56. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/render.py +0 -0
  57. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/scene/cairo.py +0 -0
  58. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/renderer/video.py +0 -0
  59. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/scene.py +0 -0
  60. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/__init__.py +0 -0
  61. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/cli.py +0 -0
  62. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/color.py +0 -0
  63. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/templates/puml.j2 +0 -0
  64. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/templates/tikz.j2 +0 -0
  65. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/theme.json +0 -0
  66. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/theme.py +0 -0
  67. {icplot-0.3.5 → icplot-0.4.0}/src/icplot/theme/theme_generator.py +0 -0
  68. {icplot-0.3.5 → icplot-0.4.0}/src/icplot.egg-info/SOURCES.txt +0 -0
  69. {icplot-0.3.5 → icplot-0.4.0}/src/icplot.egg-info/dependency_links.txt +0 -0
  70. {icplot-0.3.5 → icplot-0.4.0}/src/icplot.egg-info/entry_points.txt +0 -0
  71. {icplot-0.3.5 → icplot-0.4.0}/src/icplot.egg-info/top_level.txt +0 -0
  72. {icplot-0.3.5 → icplot-0.4.0}/test/test_cairo.py +0 -0
  73. {icplot-0.3.5 → icplot-0.4.0}/test/test_frontmatter.py +0 -0
  74. {icplot-0.3.5 → icplot-0.4.0}/test/test_gantt_chart.py +0 -0
  75. {icplot-0.3.5 → icplot-0.4.0}/test/test_geometry.py +0 -0
  76. {icplot-0.3.5 → icplot-0.4.0}/test/test_image.py +0 -0
  77. {icplot-0.3.5 → icplot-0.4.0}/test/test_line_plots.py +0 -0
  78. {icplot-0.3.5 → icplot-0.4.0}/test/test_mermaid.py +0 -0
  79. {icplot-0.3.5 → icplot-0.4.0}/test/test_meshing.py +0 -0
  80. {icplot-0.3.5 → icplot-0.4.0}/test/test_openfoam.py +0 -0
  81. {icplot-0.3.5 → icplot-0.4.0}/test/test_plot_group.py +0 -0
  82. {icplot-0.3.5 → icplot-0.4.0}/test/test_polymesh.py +0 -0
  83. {icplot-0.3.5 → icplot-0.4.0}/test/test_puml.py +0 -0
  84. {icplot-0.3.5 → icplot-0.4.0}/test/test_tex.py +0 -0
  85. {icplot-0.3.5 → icplot-0.4.0}/test/test_tree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: icplot
3
- Version: 0.3.5
3
+ Version: 0.4.0
4
4
  Summary: Utilities for generating plots and graphics for technical reports.
5
5
  Author-email: "James Grogan, Irish Centre for High End Computing" <james.grogan@ichec.ie>
6
6
  Project-URL: Repository, https://git.ichec.ie/performance/toolshed/icplot
@@ -14,11 +14,6 @@ Classifier: Topic :: System :: Distributed Computing
14
14
  Requires-Python: >=3.10
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: wand
18
- Requires-Dist: matplotlib
19
- Requires-Dist: vtk
20
- Requires-Dist: moviepy
21
- Requires-Dist: scipy
22
17
  Requires-Dist: iccore==0.2.3
23
18
  Requires-Dist: graphviz
24
19
  Requires-Dist: Jinja2
@@ -33,8 +28,27 @@ Requires-Dist: flake8; extra == "test"
33
28
  Requires-Dist: pylint; extra == "test"
34
29
  Requires-Dist: types-PyYAML; extra == "test"
35
30
  Provides-Extra: cairo
36
- Requires-Dist: pycairo; extra == "cairo"
37
31
  Requires-Dist: CairoSVG; extra == "cairo"
32
+ Provides-Extra: scene
33
+ Requires-Dist: pycairo; extra == "scene"
34
+ Provides-Extra: imagemagick
35
+ Requires-Dist: wand; extra == "imagemagick"
36
+ Provides-Extra: plot
37
+ Requires-Dist: matplotlib; extra == "plot"
38
+ Provides-Extra: vtk
39
+ Requires-Dist: vtk; extra == "vtk"
40
+ Provides-Extra: geometry
41
+ Requires-Dist: scipy; extra == "geometry"
42
+ Provides-Extra: video
43
+ Requires-Dist: moviepy; extra == "video"
44
+ Provides-Extra: all
45
+ Requires-Dist: CairoSVG; extra == "all"
46
+ Requires-Dist: pycairo; extra == "all"
47
+ Requires-Dist: wand; extra == "all"
48
+ Requires-Dist: matplotlib; extra == "all"
49
+ Requires-Dist: vtk; extra == "all"
50
+ Requires-Dist: scipy; extra == "all"
51
+ Requires-Dist: moviepy; extra == "all"
38
52
  Dynamic: license-file
39
53
 
40
54
  # icplot
@@ -122,13 +136,30 @@ The library supports themeing with an Angular Material 3 motivated design system
122
136
 
123
137
  # Installation #
124
138
 
125
- The package is available on PyPI. For a minimal installation you can do:
139
+ The package is available on PyPI. The core install is deliberately light — it
140
+ does not pull the heavy rendering backends, so consumers that only need part of
141
+ the library (e.g. a docs build that just converts svg to png) stay small:
126
142
 
127
143
  ``` shell
128
144
  pip install icplot
129
145
  ```
130
146
 
131
- For full functionality, particularly conversion of image formats, `imagemagick` and `cairo` are required. On Mac you can install them with:
147
+ Backends are opt-in via extras:
148
+
149
+ | Extra | Pulls | Enables |
150
+ |---|---|---|
151
+ | `cairo` | CairoSVG | svg → png / pdf conversion |
152
+ | `scene` | pycairo | vector scene drawing (`renderer.scene.cairo`) |
153
+ | `imagemagick` | wand | pdf → png conversion (falls back to the `magick` CLI) |
154
+ | `plot` | matplotlib | 2D plotting (`renderer.graph`, `charts`) |
155
+ | `vtk` | vtk | 3D / mesh rendering (`geometry.mesh`) |
156
+ | `geometry` | scipy | geometry transforms (`geometry.operations`) |
157
+ | `video` | moviepy | video assembly (`renderer.video`) |
158
+ | `all` | all of the above | everything (previous default behaviour) |
159
+
160
+ For example, `pip install icplot[cairo]` for svg conversion, or
161
+ `pip install icplot[all]` for the full toolkit. The native `cairo` and
162
+ `imagemagick` system libraries are also required for those backends; on Mac:
132
163
 
133
164
  ``` shell
134
165
  brew install imagemagick cairo
@@ -83,13 +83,30 @@ The library supports themeing with an Angular Material 3 motivated design system
83
83
 
84
84
  # Installation #
85
85
 
86
- The package is available on PyPI. For a minimal installation you can do:
86
+ The package is available on PyPI. The core install is deliberately light — it
87
+ does not pull the heavy rendering backends, so consumers that only need part of
88
+ the library (e.g. a docs build that just converts svg to png) stay small:
87
89
 
88
90
  ``` shell
89
91
  pip install icplot
90
92
  ```
91
93
 
92
- For full functionality, particularly conversion of image formats, `imagemagick` and `cairo` are required. On Mac you can install them with:
94
+ Backends are opt-in via extras:
95
+
96
+ | Extra | Pulls | Enables |
97
+ |---|---|---|
98
+ | `cairo` | CairoSVG | svg → png / pdf conversion |
99
+ | `scene` | pycairo | vector scene drawing (`renderer.scene.cairo`) |
100
+ | `imagemagick` | wand | pdf → png conversion (falls back to the `magick` CLI) |
101
+ | `plot` | matplotlib | 2D plotting (`renderer.graph`, `charts`) |
102
+ | `vtk` | vtk | 3D / mesh rendering (`geometry.mesh`) |
103
+ | `geometry` | scipy | geometry transforms (`geometry.operations`) |
104
+ | `video` | moviepy | video assembly (`renderer.video`) |
105
+ | `all` | all of the above | everything (previous default behaviour) |
106
+
107
+ For example, `pip install icplot[cairo]` for svg conversion, or
108
+ `pip install icplot[all]` for the full toolkit. The native `cairo` and
109
+ `imagemagick` system libraries are also required for those backends; on Mac:
93
110
 
94
111
  ``` shell
95
112
  brew install imagemagick cairo
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "icplot"
3
- version = "0.3.5"
3
+ version = "0.4.0"
4
4
  authors = [
5
5
  { name="James Grogan, Irish Centre for High End Computing", email="james.grogan@ichec.ie" },
6
6
  ]
@@ -16,14 +16,14 @@ classifiers = [
16
16
  ]
17
17
  keywords = ["Publishing", "Technical Reports", "Graphics"]
18
18
 
19
- dependencies = ["wand",
20
- "matplotlib",
21
- "vtk",
22
- "moviepy",
23
- "scipy",
24
- "iccore==0.2.3",
25
- "graphviz",
26
- "Jinja2"]
19
+ # Core is deliberately light: only what every import path needs. The heavy
20
+ # rendering backends (matplotlib/vtk/scipy/moviepy/wand) are optional extras
21
+ # so consumers that only use the converter or diagram renderer (e.g. the
22
+ # handbook build) can install a small footprint. Use icplot[all] for the
23
+ # previous behaviour of pulling every backend.
24
+ dependencies = ["iccore==0.2.3",
25
+ "graphviz",
26
+ "Jinja2"]
27
27
 
28
28
  [project.urls]
29
29
  Repository = "https://git.ichec.ie/performance/toolshed/icplot"
@@ -42,11 +42,43 @@ test = [
42
42
  "types-PyYAML"
43
43
  ]
44
44
 
45
+ # svg/pdf conversion (converter.svg_to_png / svg_to_pdf). CairoSVG pulls
46
+ # cairocffi, which dlopens libcairo at runtime (no C build step needed).
45
47
  cairo = [
46
- "pycairo",
47
48
  "CairoSVG"
48
49
  ]
49
50
 
51
+ # vector scene drawing (renderer.scene.cairo). pycairo (module `cairo`)
52
+ # builds against libcairo — needs the cairo headers + a C toolchain at install.
53
+ scene = ["pycairo"]
54
+
55
+ # raster conversion via ImageMagick bindings (converter.pdf_to_png);
56
+ # falls back to the `magick` CLI if wand is absent
57
+ imagemagick = ["wand"]
58
+
59
+ # 2D plotting backend (icplot.renderer.graph / icplot.charts)
60
+ plot = ["matplotlib"]
61
+
62
+ # 3D / mesh backend (icplot.geometry.mesh, vtk graph backend)
63
+ vtk = ["vtk"]
64
+
65
+ # geometry transforms (icplot.geometry.operations)
66
+ geometry = ["scipy"]
67
+
68
+ # video assembly (icplot.renderer.video)
69
+ video = ["moviepy"]
70
+
71
+ # convenience aggregate — every backend (pre-split behaviour)
72
+ all = [
73
+ "CairoSVG",
74
+ "pycairo",
75
+ "wand",
76
+ "matplotlib",
77
+ "vtk",
78
+ "scipy",
79
+ "moviepy"
80
+ ]
81
+
50
82
  [build-system]
51
83
  requires = ["setuptools", "wheel"]
52
84
  build-backend = "setuptools.build_meta"
@@ -119,7 +151,8 @@ skip_missing_interpreters = true
119
151
 
120
152
  [tool.tox.env_run_base]
121
153
  description = "Run Unit and Integration Tests"
122
- deps = [".[test, cairo]"]
154
+ # `all` so the full suite (matplotlib/vtk/scipy/moviepy backends) still runs
155
+ deps = [".[test, all]"]
123
156
  commands = [["pytest", "test"]]
124
157
 
125
158
  [tool.tox.env.format_apply]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: icplot
3
- Version: 0.3.5
3
+ Version: 0.4.0
4
4
  Summary: Utilities for generating plots and graphics for technical reports.
5
5
  Author-email: "James Grogan, Irish Centre for High End Computing" <james.grogan@ichec.ie>
6
6
  Project-URL: Repository, https://git.ichec.ie/performance/toolshed/icplot
@@ -14,11 +14,6 @@ Classifier: Topic :: System :: Distributed Computing
14
14
  Requires-Python: >=3.10
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: wand
18
- Requires-Dist: matplotlib
19
- Requires-Dist: vtk
20
- Requires-Dist: moviepy
21
- Requires-Dist: scipy
22
17
  Requires-Dist: iccore==0.2.3
23
18
  Requires-Dist: graphviz
24
19
  Requires-Dist: Jinja2
@@ -33,8 +28,27 @@ Requires-Dist: flake8; extra == "test"
33
28
  Requires-Dist: pylint; extra == "test"
34
29
  Requires-Dist: types-PyYAML; extra == "test"
35
30
  Provides-Extra: cairo
36
- Requires-Dist: pycairo; extra == "cairo"
37
31
  Requires-Dist: CairoSVG; extra == "cairo"
32
+ Provides-Extra: scene
33
+ Requires-Dist: pycairo; extra == "scene"
34
+ Provides-Extra: imagemagick
35
+ Requires-Dist: wand; extra == "imagemagick"
36
+ Provides-Extra: plot
37
+ Requires-Dist: matplotlib; extra == "plot"
38
+ Provides-Extra: vtk
39
+ Requires-Dist: vtk; extra == "vtk"
40
+ Provides-Extra: geometry
41
+ Requires-Dist: scipy; extra == "geometry"
42
+ Provides-Extra: video
43
+ Requires-Dist: moviepy; extra == "video"
44
+ Provides-Extra: all
45
+ Requires-Dist: CairoSVG; extra == "all"
46
+ Requires-Dist: pycairo; extra == "all"
47
+ Requires-Dist: wand; extra == "all"
48
+ Requires-Dist: matplotlib; extra == "all"
49
+ Requires-Dist: vtk; extra == "all"
50
+ Requires-Dist: scipy; extra == "all"
51
+ Requires-Dist: moviepy; extra == "all"
38
52
  Dynamic: license-file
39
53
 
40
54
  # icplot
@@ -122,13 +136,30 @@ The library supports themeing with an Angular Material 3 motivated design system
122
136
 
123
137
  # Installation #
124
138
 
125
- The package is available on PyPI. For a minimal installation you can do:
139
+ The package is available on PyPI. The core install is deliberately light — it
140
+ does not pull the heavy rendering backends, so consumers that only need part of
141
+ the library (e.g. a docs build that just converts svg to png) stay small:
126
142
 
127
143
  ``` shell
128
144
  pip install icplot
129
145
  ```
130
146
 
131
- For full functionality, particularly conversion of image formats, `imagemagick` and `cairo` are required. On Mac you can install them with:
147
+ Backends are opt-in via extras:
148
+
149
+ | Extra | Pulls | Enables |
150
+ |---|---|---|
151
+ | `cairo` | CairoSVG | svg → png / pdf conversion |
152
+ | `scene` | pycairo | vector scene drawing (`renderer.scene.cairo`) |
153
+ | `imagemagick` | wand | pdf → png conversion (falls back to the `magick` CLI) |
154
+ | `plot` | matplotlib | 2D plotting (`renderer.graph`, `charts`) |
155
+ | `vtk` | vtk | 3D / mesh rendering (`geometry.mesh`) |
156
+ | `geometry` | scipy | geometry transforms (`geometry.operations`) |
157
+ | `video` | moviepy | video assembly (`renderer.video`) |
158
+ | `all` | all of the above | everything (previous default behaviour) |
159
+
160
+ For example, `pip install icplot[cairo]` for svg conversion, or
161
+ `pip install icplot[all]` for the full toolkit. The native `cairo` and
162
+ `imagemagick` system libraries are also required for those backends; on Mac:
132
163
 
133
164
  ``` shell
134
165
  brew install imagemagick cairo
@@ -1,16 +1,31 @@
1
+ iccore==0.2.3
2
+ graphviz
3
+ Jinja2
4
+
5
+ [all]
6
+ CairoSVG
7
+ pycairo
1
8
  wand
2
9
  matplotlib
3
10
  vtk
4
- moviepy
5
11
  scipy
6
- iccore==0.2.3
7
- graphviz
8
- Jinja2
12
+ moviepy
9
13
 
10
14
  [cairo]
11
- pycairo
12
15
  CairoSVG
13
16
 
17
+ [geometry]
18
+ scipy
19
+
20
+ [imagemagick]
21
+ wand
22
+
23
+ [plot]
24
+ matplotlib
25
+
26
+ [scene]
27
+ pycairo
28
+
14
29
  [test]
15
30
  pytest
16
31
  pytest-cov
@@ -21,3 +36,9 @@ mypy
21
36
  flake8
22
37
  pylint
23
38
  types-PyYAML
39
+
40
+ [video]
41
+ moviepy
42
+
43
+ [vtk]
44
+ vtk
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
File without changes
File without changes
File without changes
File without changes