fugue 0.9.4__tar.gz → 0.9.5__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 (163) hide show
  1. {fugue-0.9.4 → fugue-0.9.5}/PKG-INFO +3 -1
  2. {fugue-0.9.4 → fugue-0.9.5}/fugue.egg-info/PKG-INFO +3 -1
  3. {fugue-0.9.4 → fugue-0.9.5}/fugue.egg-info/requires.txt +2 -0
  4. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/_utils/misc.py +13 -4
  5. fugue-0.9.5/fugue_version/__init__.py +1 -0
  6. {fugue-0.9.4 → fugue-0.9.5}/setup.py +2 -1
  7. fugue-0.9.4/fugue_version/__init__.py +0 -1
  8. {fugue-0.9.4 → fugue-0.9.5}/LICENSE +0 -0
  9. {fugue-0.9.4 → fugue-0.9.5}/README.md +0 -0
  10. {fugue-0.9.4 → fugue-0.9.5}/fugue/__init__.py +0 -0
  11. {fugue-0.9.4 → fugue-0.9.5}/fugue/_utils/__init__.py +0 -0
  12. {fugue-0.9.4 → fugue-0.9.5}/fugue/_utils/display.py +0 -0
  13. {fugue-0.9.4 → fugue-0.9.5}/fugue/_utils/exception.py +0 -0
  14. {fugue-0.9.4 → fugue-0.9.5}/fugue/_utils/interfaceless.py +0 -0
  15. {fugue-0.9.4 → fugue-0.9.5}/fugue/_utils/io.py +0 -0
  16. {fugue-0.9.4 → fugue-0.9.5}/fugue/_utils/misc.py +0 -0
  17. {fugue-0.9.4 → fugue-0.9.5}/fugue/_utils/registry.py +0 -0
  18. {fugue-0.9.4 → fugue-0.9.5}/fugue/api.py +0 -0
  19. {fugue-0.9.4 → fugue-0.9.5}/fugue/bag/__init__.py +0 -0
  20. {fugue-0.9.4 → fugue-0.9.5}/fugue/bag/array_bag.py +0 -0
  21. {fugue-0.9.4 → fugue-0.9.5}/fugue/bag/bag.py +0 -0
  22. {fugue-0.9.4 → fugue-0.9.5}/fugue/collections/__init__.py +0 -0
  23. {fugue-0.9.4 → fugue-0.9.5}/fugue/collections/partition.py +0 -0
  24. {fugue-0.9.4 → fugue-0.9.5}/fugue/collections/sql.py +0 -0
  25. {fugue-0.9.4 → fugue-0.9.5}/fugue/collections/yielded.py +0 -0
  26. {fugue-0.9.4 → fugue-0.9.5}/fugue/column/__init__.py +0 -0
  27. {fugue-0.9.4 → fugue-0.9.5}/fugue/column/expressions.py +0 -0
  28. {fugue-0.9.4 → fugue-0.9.5}/fugue/column/functions.py +0 -0
  29. {fugue-0.9.4 → fugue-0.9.5}/fugue/column/sql.py +0 -0
  30. {fugue-0.9.4 → fugue-0.9.5}/fugue/constants.py +0 -0
  31. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/__init__.py +0 -0
  32. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/api.py +0 -0
  33. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/array_dataframe.py +0 -0
  34. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/arrow_dataframe.py +0 -0
  35. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/dataframe.py +0 -0
  36. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/dataframe_iterable_dataframe.py +0 -0
  37. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/dataframes.py +0 -0
  38. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/function_wrapper.py +0 -0
  39. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/iterable_dataframe.py +0 -0
  40. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/pandas_dataframe.py +0 -0
  41. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataframe/utils.py +0 -0
  42. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataset/__init__.py +0 -0
  43. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataset/api.py +0 -0
  44. {fugue-0.9.4 → fugue-0.9.5}/fugue/dataset/dataset.py +0 -0
  45. {fugue-0.9.4 → fugue-0.9.5}/fugue/dev.py +0 -0
  46. {fugue-0.9.4 → fugue-0.9.5}/fugue/exceptions.py +0 -0
  47. {fugue-0.9.4 → fugue-0.9.5}/fugue/execution/__init__.py +0 -0
  48. {fugue-0.9.4 → fugue-0.9.5}/fugue/execution/api.py +0 -0
  49. {fugue-0.9.4 → fugue-0.9.5}/fugue/execution/execution_engine.py +0 -0
  50. {fugue-0.9.4 → fugue-0.9.5}/fugue/execution/factory.py +0 -0
  51. {fugue-0.9.4 → fugue-0.9.5}/fugue/execution/native_execution_engine.py +0 -0
  52. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/__init__.py +0 -0
  53. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/_builtins/__init__.py +0 -0
  54. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/_builtins/creators.py +0 -0
  55. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/_builtins/outputters.py +0 -0
  56. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/_builtins/processors.py +0 -0
  57. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/_utils.py +0 -0
  58. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/context.py +0 -0
  59. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/creator/__init__.py +0 -0
  60. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/creator/convert.py +0 -0
  61. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/creator/creator.py +0 -0
  62. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/outputter/__init__.py +0 -0
  63. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/outputter/convert.py +0 -0
  64. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/outputter/outputter.py +0 -0
  65. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/processor/__init__.py +0 -0
  66. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/processor/convert.py +0 -0
  67. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/processor/processor.py +0 -0
  68. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/transformer/__init__.py +0 -0
  69. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/transformer/constants.py +0 -0
  70. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/transformer/convert.py +0 -0
  71. {fugue-0.9.4 → fugue-0.9.5}/fugue/extensions/transformer/transformer.py +0 -0
  72. {fugue-0.9.4 → fugue-0.9.5}/fugue/plugins.py +0 -0
  73. {fugue-0.9.4 → fugue-0.9.5}/fugue/py.typed +0 -0
  74. {fugue-0.9.4 → fugue-0.9.5}/fugue/registry.py +0 -0
  75. {fugue-0.9.4 → fugue-0.9.5}/fugue/rpc/__init__.py +0 -0
  76. {fugue-0.9.4 → fugue-0.9.5}/fugue/rpc/base.py +0 -0
  77. {fugue-0.9.4 → fugue-0.9.5}/fugue/rpc/flask.py +0 -0
  78. {fugue-0.9.4 → fugue-0.9.5}/fugue/sql/__init__.py +0 -0
  79. {fugue-0.9.4 → fugue-0.9.5}/fugue/sql/_utils.py +0 -0
  80. {fugue-0.9.4 → fugue-0.9.5}/fugue/sql/_visitors.py +0 -0
  81. {fugue-0.9.4 → fugue-0.9.5}/fugue/sql/api.py +0 -0
  82. {fugue-0.9.4 → fugue-0.9.5}/fugue/sql/workflow.py +0 -0
  83. {fugue-0.9.4 → fugue-0.9.5}/fugue/test/__init__.py +0 -0
  84. {fugue-0.9.4 → fugue-0.9.5}/fugue/test/pandas_tester.py +0 -0
  85. {fugue-0.9.4 → fugue-0.9.5}/fugue/test/plugins.py +0 -0
  86. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/__init__.py +0 -0
  87. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/_checkpoint.py +0 -0
  88. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/_tasks.py +0 -0
  89. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/_workflow_context.py +0 -0
  90. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/api.py +0 -0
  91. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/input.py +0 -0
  92. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/module.py +0 -0
  93. {fugue-0.9.4 → fugue-0.9.5}/fugue/workflow/workflow.py +0 -0
  94. {fugue-0.9.4 → fugue-0.9.5}/fugue.egg-info/SOURCES.txt +0 -0
  95. {fugue-0.9.4 → fugue-0.9.5}/fugue.egg-info/dependency_links.txt +0 -0
  96. {fugue-0.9.4 → fugue-0.9.5}/fugue.egg-info/entry_points.txt +0 -0
  97. {fugue-0.9.4 → fugue-0.9.5}/fugue.egg-info/top_level.txt +0 -0
  98. {fugue-0.9.4 → fugue-0.9.5}/fugue_contrib/__init__.py +0 -0
  99. {fugue-0.9.4 → fugue-0.9.5}/fugue_contrib/contrib.py +0 -0
  100. {fugue-0.9.4 → fugue-0.9.5}/fugue_contrib/seaborn/__init__.py +0 -0
  101. {fugue-0.9.4 → fugue-0.9.5}/fugue_contrib/viz/__init__.py +0 -0
  102. {fugue-0.9.4 → fugue-0.9.5}/fugue_contrib/viz/_ext.py +0 -0
  103. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/__init__.py +0 -0
  104. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/_constants.py +0 -0
  105. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/_dask_sql_wrapper.py +0 -0
  106. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/_io.py +0 -0
  107. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/_utils.py +0 -0
  108. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/dataframe.py +0 -0
  109. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/execution_engine.py +0 -0
  110. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/registry.py +0 -0
  111. {fugue-0.9.4 → fugue-0.9.5}/fugue_dask/tester.py +0 -0
  112. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/__init__.py +0 -0
  113. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/_io.py +0 -0
  114. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/_utils.py +0 -0
  115. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/dask.py +0 -0
  116. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/dataframe.py +0 -0
  117. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/execution_engine.py +0 -0
  118. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/registry.py +0 -0
  119. {fugue-0.9.4 → fugue-0.9.5}/fugue_duckdb/tester.py +0 -0
  120. {fugue-0.9.4 → fugue-0.9.5}/fugue_ibis/__init__.py +0 -0
  121. {fugue-0.9.4 → fugue-0.9.5}/fugue_ibis/_compat.py +0 -0
  122. {fugue-0.9.4 → fugue-0.9.5}/fugue_ibis/_utils.py +0 -0
  123. {fugue-0.9.4 → fugue-0.9.5}/fugue_ibis/dataframe.py +0 -0
  124. {fugue-0.9.4 → fugue-0.9.5}/fugue_ibis/execution_engine.py +0 -0
  125. {fugue-0.9.4 → fugue-0.9.5}/fugue_notebook/__init__.py +0 -0
  126. {fugue-0.9.4 → fugue-0.9.5}/fugue_notebook/env.py +0 -0
  127. {fugue-0.9.4 → fugue-0.9.5}/fugue_notebook/nbextension/README.md +0 -0
  128. {fugue-0.9.4 → fugue-0.9.5}/fugue_notebook/nbextension/__init__.py +0 -0
  129. {fugue-0.9.4 → fugue-0.9.5}/fugue_notebook/nbextension/description.yaml +0 -0
  130. {fugue-0.9.4 → fugue-0.9.5}/fugue_notebook/nbextension/main.js +0 -0
  131. {fugue-0.9.4 → fugue-0.9.5}/fugue_polars/__init__.py +0 -0
  132. {fugue-0.9.4 → fugue-0.9.5}/fugue_polars/_utils.py +0 -0
  133. {fugue-0.9.4 → fugue-0.9.5}/fugue_polars/polars_dataframe.py +0 -0
  134. {fugue-0.9.4 → fugue-0.9.5}/fugue_polars/registry.py +0 -0
  135. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/__init__.py +0 -0
  136. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/_constants.py +0 -0
  137. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/_utils/__init__.py +0 -0
  138. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/_utils/cluster.py +0 -0
  139. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/_utils/dataframe.py +0 -0
  140. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/_utils/io.py +0 -0
  141. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/dataframe.py +0 -0
  142. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/execution_engine.py +0 -0
  143. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/registry.py +0 -0
  144. {fugue-0.9.4 → fugue-0.9.5}/fugue_ray/tester.py +0 -0
  145. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/__init__.py +0 -0
  146. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/_constants.py +0 -0
  147. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/_utils/__init__.py +0 -0
  148. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/_utils/convert.py +0 -0
  149. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/_utils/io.py +0 -0
  150. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/_utils/partition.py +0 -0
  151. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/dataframe.py +0 -0
  152. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/execution_engine.py +0 -0
  153. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/registry.py +0 -0
  154. {fugue-0.9.4 → fugue-0.9.5}/fugue_spark/tester.py +0 -0
  155. {fugue-0.9.4 → fugue-0.9.5}/fugue_sql/__init__.py +0 -0
  156. {fugue-0.9.4 → fugue-0.9.5}/fugue_sql/exceptions.py +0 -0
  157. {fugue-0.9.4 → fugue-0.9.5}/fugue_test/__init__.py +0 -0
  158. {fugue-0.9.4 → fugue-0.9.5}/fugue_test/bag_suite.py +0 -0
  159. {fugue-0.9.4 → fugue-0.9.5}/fugue_test/builtin_suite.py +0 -0
  160. {fugue-0.9.4 → fugue-0.9.5}/fugue_test/dataframe_suite.py +0 -0
  161. {fugue-0.9.4 → fugue-0.9.5}/fugue_test/execution_suite.py +0 -0
  162. {fugue-0.9.4 → fugue-0.9.5}/fugue_test/fixtures.py +0 -0
  163. {fugue-0.9.4 → fugue-0.9.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fugue
3
- Version: 0.9.4
3
+ Version: 0.9.5
4
4
  Summary: An abstraction layer for distributed computation
5
5
  Home-page: http://github.com/fugue-project/fugue
6
6
  Author: The Fugue Development Team
@@ -23,6 +23,7 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: triad>=1.0.0
25
25
  Requires-Dist: adagio>=0.2.6
26
+ Requires-Dist: pandas<3
26
27
  Provides-Extra: sql
27
28
  Requires-Dist: qpd>=0.4.4; extra == "sql"
28
29
  Requires-Dist: fugue-sql-antlr>=0.2.0; extra == "sql"
@@ -32,6 +33,7 @@ Provides-Extra: cpp-sql-parser
32
33
  Requires-Dist: fugue-sql-antlr[cpp]>=0.2.0; extra == "cpp-sql-parser"
33
34
  Provides-Extra: spark
34
35
  Requires-Dist: pyspark>=3.1.1; extra == "spark"
36
+ Requires-Dist: zstandard>=0.25.0; extra == "spark"
35
37
  Provides-Extra: dask
36
38
  Requires-Dist: dask[dataframe,distributed]>=2024.4.0; extra == "dask"
37
39
  Requires-Dist: pyarrow>=7.0.0; extra == "dask"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fugue
3
- Version: 0.9.4
3
+ Version: 0.9.5
4
4
  Summary: An abstraction layer for distributed computation
5
5
  Home-page: http://github.com/fugue-project/fugue
6
6
  Author: The Fugue Development Team
@@ -23,6 +23,7 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: triad>=1.0.0
25
25
  Requires-Dist: adagio>=0.2.6
26
+ Requires-Dist: pandas<3
26
27
  Provides-Extra: sql
27
28
  Requires-Dist: qpd>=0.4.4; extra == "sql"
28
29
  Requires-Dist: fugue-sql-antlr>=0.2.0; extra == "sql"
@@ -32,6 +33,7 @@ Provides-Extra: cpp-sql-parser
32
33
  Requires-Dist: fugue-sql-antlr[cpp]>=0.2.0; extra == "cpp-sql-parser"
33
34
  Provides-Extra: spark
34
35
  Requires-Dist: pyspark>=3.1.1; extra == "spark"
36
+ Requires-Dist: zstandard>=0.25.0; extra == "spark"
35
37
  Provides-Extra: dask
36
38
  Requires-Dist: dask[dataframe,distributed]>=2024.4.0; extra == "dask"
37
39
  Requires-Dist: pyarrow>=7.0.0; extra == "dask"
@@ -1,5 +1,6 @@
1
1
  triad>=1.0.0
2
2
  adagio>=0.2.6
3
+ pandas<3
3
4
 
4
5
  [all]
5
6
  qpd>=0.4.4
@@ -58,6 +59,7 @@ pandas
58
59
 
59
60
  [spark]
60
61
  pyspark>=3.1.1
62
+ zstandard>=0.25.0
61
63
 
62
64
  [sql]
63
65
  qpd>=0.4.4
@@ -1,15 +1,24 @@
1
+ import pyspark.sql as ps
1
2
  from typing import Any
3
+ from importlib.metadata import version
4
+
5
+ SPARK_VERSION = version("pyspark").split(".")
2
6
 
3
7
  try:
4
- from pyspark.sql.connect.session import SparkSession as SparkConnectSession
5
- from pyspark.sql.connect.dataframe import DataFrame as SparkConnectDataFrame
8
+ if int(SPARK_VERSION[0]) >= 4:
9
+ from pyspark.sql import SparkSession as SparkConnectSession
10
+ from pyspark.sql import DataFrame as SparkConnectDataFrame
11
+ else: # pragma: no cover
12
+ from pyspark.sql.connect.session import SparkSession as SparkConnectSession
13
+ from pyspark.sql.connect.dataframe import DataFrame as SparkConnectDataFrame
6
14
  except Exception: # pragma: no cover
7
15
  SparkConnectSession = None
8
16
  SparkConnectDataFrame = None
9
- import pyspark.sql as ps
10
17
 
11
18
 
12
- def is_spark_connect(session: Any) -> bool:
19
+ def is_spark_connect(session: Any) -> bool: # pragma: no cover
20
+ if int(SPARK_VERSION[0]) >= 4:
21
+ return False
13
22
  return SparkConnectSession is not None and isinstance(
14
23
  session, (SparkConnectSession, SparkConnectDataFrame)
15
24
  )
@@ -0,0 +1 @@
1
+ __version__ = "0.9.5"
@@ -40,11 +40,12 @@ setup(
40
40
  install_requires=[
41
41
  "triad>=1.0.0",
42
42
  "adagio>=0.2.6",
43
+ "pandas<3", # TODO: remove upper bound on 0.9.7
43
44
  ],
44
45
  extras_require={
45
46
  "sql": SQL_DEPENDENCIES,
46
47
  "cpp_sql_parser": ["fugue-sql-antlr[cpp]>=0.2.0"],
47
- "spark": ["pyspark>=3.1.1"],
48
+ "spark": ["pyspark>=3.1.1", "zstandard>=0.25.0"],
48
49
  "dask": [
49
50
  "dask[distributed,dataframe]>=2024.4.0",
50
51
  "pyarrow>=7.0.0",
@@ -1 +0,0 @@
1
- __version__ = "0.9.4"
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
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
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
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