Pyriod 0.3.0__tar.gz → 0.3.2__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 (31) hide show
  1. {pyriod-0.3.0 → pyriod-0.3.2}/PKG-INFO +14 -21
  2. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod/Pyriod.py +6 -3
  3. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod.egg-info/PKG-INFO +14 -21
  4. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod.egg-info/SOURCES.txt +0 -1
  5. pyriod-0.3.2/README.md +19 -0
  6. {pyriod-0.3.0 → pyriod-0.3.2}/examples/TESS_DBV_example.ipynb +75 -28
  7. {pyriod-0.3.0 → pyriod-0.3.2}/examples/TSC2_Demo.ipynb +6 -11
  8. {pyriod-0.3.0 → pyriod-0.3.2}/setup.py +1 -1
  9. pyriod-0.3.0/README.md +0 -36
  10. pyriod-0.3.0/postBuild +0 -4
  11. {pyriod-0.3.0 → pyriod-0.3.2}/LICENSE +0 -0
  12. {pyriod-0.3.0 → pyriod-0.3.2}/MANIFEST.in +0 -0
  13. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod/__init__.py +0 -0
  14. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod/docs/Periodogram.md +0 -0
  15. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod/docs/Signals.md +0 -0
  16. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod/docs/TimeSeries.md +0 -0
  17. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod/pyquist.py +0 -0
  18. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod.egg-info/dependency_links.txt +0 -0
  19. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod.egg-info/requires.txt +0 -0
  20. {pyriod-0.3.0 → pyriod-0.3.2}/Pyriod.egg-info/top_level.txt +0 -0
  21. {pyriod-0.3.0 → pyriod-0.3.2}/docs/examples.md +0 -0
  22. {pyriod-0.3.0 → pyriod-0.3.2}/docs/img/Log.png +0 -0
  23. {pyriod-0.3.0 → pyriod-0.3.2}/docs/img/Periodogram.png +0 -0
  24. {pyriod-0.3.0 → pyriod-0.3.2}/docs/img/Pyriod.png +0 -0
  25. {pyriod-0.3.0 → pyriod-0.3.2}/docs/img/Signals.png +0 -0
  26. {pyriod-0.3.0 → pyriod-0.3.2}/docs/img/TimeSeries.png +0 -0
  27. {pyriod-0.3.0 → pyriod-0.3.2}/docs/index.md +0 -0
  28. {pyriod-0.3.0 → pyriod-0.3.2}/docs/tutorial.md +0 -0
  29. {pyriod-0.3.0 → pyriod-0.3.2}/mkdocs.yml +0 -0
  30. {pyriod-0.3.0 → pyriod-0.3.2}/requirements.txt +0 -0
  31. {pyriod-0.3.0 → pyriod-0.3.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: Pyriod
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Basic period detection and fitting routines for astronomical time series.
5
5
  Home-page: https://github.com/keatonb/Pyriod
6
6
  Author: Keaton Bell
@@ -24,14 +24,22 @@ Requires-Dist: ipympl>=0.7
24
24
  Requires-Dist: ipywidgets>=8
25
25
  Requires-Dist: qgridnext>1.3.1
26
26
  Requires-Dist: ipyfilechooser>=0.3.5
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: license-file
34
+ Dynamic: requires-dist
35
+ Dynamic: requires-python
36
+ Dynamic: summary
27
37
 
28
38
  # Pyriod
29
39
 
30
- **IMPORTANT INSTALLATION NOTE:** you must manually install qgrid with conda from the eshard channel as described below.
31
-
32
40
  Python implementation of basic period detection and fitting routines for astronomical time series.
33
41
 
34
- <!---Give it a spin before you install [with Binder](https://mybinder.org/v2/gh/keatonb/Pyriod/HEAD?filepath=examples%2FTSC2_Demo.ipynb).--->
42
+ Give it a spin before you install with an example notebook [on Binder](https://mybinder.org/v2/gh/keatonb/Pyriod/HEAD?filepath=examples%2FTSC2_Demo.ipynb). (This can take a while to load!)
35
43
 
36
44
  To install, use
37
45
 
@@ -44,20 +52,5 @@ or download the latest (possibly unstable) version from GitHub and run
44
52
  Additional documentation is available at [pyriod.readthedocs.io](https://pyriod.readthedocs.io).
45
53
 
46
54
  This code uses [Qgrid](https://github.com/quantopian/qgrid) and other Jupyter widgets to interactively display the frequency solution.
47
- Unfortunately Qgrid is no longer supported. [A version that works with other modern packages](https://anaconda.org/eshard/qgrid) can be installed with
48
-
49
- ```conda install -c eshard qgrid```
50
-
51
- Furthermore, Qgrid has specific version requirements for Jupyter (classic only, < v7) and `ipywidgets` (< v8):
52
- ```
53
- conda install "notebook<7"
54
- conda install "ipywidgets<8"
55
- ```
56
-
57
- To display the Pyriod GUI, you will need to first enable the following Jupyter notebook extensions in the terminal:
58
- ```
59
- jupyter nbextension enable --py --sys-prefix qgrid
60
- jupyter nbextension enable --py --sys-prefix widgetsnbextension
61
- jupyter nbextension enable --py --sys-prefix ipympl
62
- ```
55
+ Unfortunately Qgrid is no longer supported. We are grateful to @zhihanyue for maintaining [qgridnext](https://github.com/zhihanyue/qgridnext).
63
56
 
@@ -245,8 +245,11 @@ class Pyriod(object):
245
245
  self.lc["model"] = initmodel
246
246
  # Also plot the model over the time series
247
247
  if self.gui:
248
- dt = np.min(np.diff(sorted(lc.time.value)))
249
- if dt == 0:
248
+ # Sample the model a bit more finely than the data and through gaps
249
+ # This can be a problematic amount of sampling through large gaps!
250
+ # Base the sampling on the highest frequency sampled in the periodogram.
251
+ dt = 0.5*self.freq_conversion/(np.max(self.freqs))
252
+ if (dt == 0) or ~np.isfinite(dt):
250
253
  dt = 1. / (24*3600) # 1s
251
254
  tspan = (np.max(lc.time.value) - np.min(lc.time.value))
252
255
  osample = 2
@@ -2136,4 +2139,4 @@ class Pyriod(object):
2136
2139
  ax.set_ylim(0, 1)
2137
2140
  ax.set_xlabel(f"frequency ({self.freq_label})")
2138
2141
  ax.set_ylabel('spectral window')
2139
- return(ax)
2142
+ return(ax)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: Pyriod
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Basic period detection and fitting routines for astronomical time series.
5
5
  Home-page: https://github.com/keatonb/Pyriod
6
6
  Author: Keaton Bell
@@ -24,14 +24,22 @@ Requires-Dist: ipympl>=0.7
24
24
  Requires-Dist: ipywidgets>=8
25
25
  Requires-Dist: qgridnext>1.3.1
26
26
  Requires-Dist: ipyfilechooser>=0.3.5
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: license-file
34
+ Dynamic: requires-dist
35
+ Dynamic: requires-python
36
+ Dynamic: summary
27
37
 
28
38
  # Pyriod
29
39
 
30
- **IMPORTANT INSTALLATION NOTE:** you must manually install qgrid with conda from the eshard channel as described below.
31
-
32
40
  Python implementation of basic period detection and fitting routines for astronomical time series.
33
41
 
34
- <!---Give it a spin before you install [with Binder](https://mybinder.org/v2/gh/keatonb/Pyriod/HEAD?filepath=examples%2FTSC2_Demo.ipynb).--->
42
+ Give it a spin before you install with an example notebook [on Binder](https://mybinder.org/v2/gh/keatonb/Pyriod/HEAD?filepath=examples%2FTSC2_Demo.ipynb). (This can take a while to load!)
35
43
 
36
44
  To install, use
37
45
 
@@ -44,20 +52,5 @@ or download the latest (possibly unstable) version from GitHub and run
44
52
  Additional documentation is available at [pyriod.readthedocs.io](https://pyriod.readthedocs.io).
45
53
 
46
54
  This code uses [Qgrid](https://github.com/quantopian/qgrid) and other Jupyter widgets to interactively display the frequency solution.
47
- Unfortunately Qgrid is no longer supported. [A version that works with other modern packages](https://anaconda.org/eshard/qgrid) can be installed with
48
-
49
- ```conda install -c eshard qgrid```
50
-
51
- Furthermore, Qgrid has specific version requirements for Jupyter (classic only, < v7) and `ipywidgets` (< v8):
52
- ```
53
- conda install "notebook<7"
54
- conda install "ipywidgets<8"
55
- ```
56
-
57
- To display the Pyriod GUI, you will need to first enable the following Jupyter notebook extensions in the terminal:
58
- ```
59
- jupyter nbextension enable --py --sys-prefix qgrid
60
- jupyter nbextension enable --py --sys-prefix widgetsnbextension
61
- jupyter nbextension enable --py --sys-prefix ipympl
62
- ```
55
+ Unfortunately Qgrid is no longer supported. We are grateful to @zhihanyue for maintaining [qgridnext](https://github.com/zhihanyue/qgridnext).
63
56
 
@@ -2,7 +2,6 @@ LICENSE
2
2
  MANIFEST.in
3
3
  README.md
4
4
  mkdocs.yml
5
- postBuild
6
5
  requirements.txt
7
6
  setup.py
8
7
  Pyriod/Pyriod.py
pyriod-0.3.2/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # Pyriod
2
+
3
+ Python implementation of basic period detection and fitting routines for astronomical time series.
4
+
5
+ Give it a spin before you install with an example notebook [on Binder](https://mybinder.org/v2/gh/keatonb/Pyriod/HEAD?filepath=examples%2FTSC2_Demo.ipynb). (This can take a while to load!)
6
+
7
+ To install, use
8
+
9
+ ```pip install Pyriod```
10
+
11
+ or download the latest (possibly unstable) version from GitHub and run
12
+
13
+ ```python setup.py install```
14
+
15
+ Additional documentation is available at [pyriod.readthedocs.io](https://pyriod.readthedocs.io).
16
+
17
+ This code uses [Qgrid](https://github.com/quantopian/qgrid) and other Jupyter widgets to interactively display the frequency solution.
18
+ Unfortunately Qgrid is no longer supported. We are grateful to @zhihanyue for maintaining [qgridnext](https://github.com/zhihanyue/qgridnext).
19
+
@@ -13,24 +13,7 @@
13
13
  "cell_type": "code",
14
14
  "execution_count": 1,
15
15
  "metadata": {},
16
- "outputs": [
17
- {
18
- "name": "stderr",
19
- "output_type": "stream",
20
- "text": [
21
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1040: SyntaxWarning: invalid escape sequence '\\+'\n",
22
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1095: SyntaxWarning: invalid escape sequence '\\+'\n",
23
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1099: SyntaxWarning: invalid escape sequence '\\+'\n",
24
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1213: SyntaxWarning: invalid escape sequence '\\+'\n",
25
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1216: SyntaxWarning: invalid escape sequence '\\+'\n",
26
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1040: SyntaxWarning: invalid escape sequence '\\+'\n",
27
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1095: SyntaxWarning: invalid escape sequence '\\+'\n",
28
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1099: SyntaxWarning: invalid escape sequence '\\+'\n",
29
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1213: SyntaxWarning: invalid escape sequence '\\+'\n",
30
- "/opt/anaconda3/lib/python3.12/site-packages/Pyriod-0.2.6-py3.12.egg/Pyriod/Pyriod.py:1216: SyntaxWarning: invalid escape sequence '\\+'\n"
31
- ]
32
- }
33
- ],
16
+ "outputs": [],
34
17
  "source": [
35
18
  "%matplotlib widget\n",
36
19
  "import lightkurve as lk\n",
@@ -74,7 +57,7 @@
74
57
  {
75
58
  "data": {
76
59
  "application/vnd.jupyter.widget-view+json": {
77
- "model_id": "22d00f8f0a7a42e5aa2c96bd2985fc1f",
60
+ "model_id": "948d59b47070490b91f4445a0fbeaaff",
78
61
  "version_major": 2,
79
62
  "version_minor": 0
80
63
  },
@@ -82,8 +65,9 @@
82
65
  "VBox(children=(HTML(value=''), Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home…"
83
66
  ]
84
67
  },
68
+ "execution_count": 4,
85
69
  "metadata": {},
86
- "output_type": "display_data"
70
+ "output_type": "execute_result"
87
71
  }
88
72
  ],
89
73
  "source": [
@@ -99,7 +83,7 @@
99
83
  {
100
84
  "data": {
101
85
  "application/vnd.jupyter.widget-view+json": {
102
- "model_id": "93eb38729e8745eea36d534c15b6d14c",
86
+ "model_id": "86105039460d44c987d8ffc10dc7c552",
103
87
  "version_major": 2,
104
88
  "version_minor": 0
105
89
  },
@@ -107,8 +91,9 @@
107
91
  "VBox(children=(HTML(value=''), HBox(children=(Text(value='1561.1643943500267', description='Frequency:', place…"
108
92
  ]
109
93
  },
94
+ "execution_count": 5,
110
95
  "metadata": {},
111
- "output_type": "display_data"
96
+ "output_type": "execute_result"
112
97
  }
113
98
  ],
114
99
  "source": [
@@ -118,9 +103,25 @@
118
103
  },
119
104
  {
120
105
  "cell_type": "code",
121
- "execution_count": null,
106
+ "execution_count": 6,
122
107
  "metadata": {},
123
- "outputs": [],
108
+ "outputs": [
109
+ {
110
+ "data": {
111
+ "application/vnd.jupyter.widget-view+json": {
112
+ "model_id": "e542fe0f1861473b93a843f199cd5a97",
113
+ "version_major": 2,
114
+ "version_minor": 0
115
+ },
116
+ "text/plain": [
117
+ "VBox(children=(HTML(value=''), HBox(children=(Button(description='Refine fit', icon='refresh', style=ButtonSty…"
118
+ ]
119
+ },
120
+ "execution_count": 6,
121
+ "metadata": {},
122
+ "output_type": "execute_result"
123
+ }
124
+ ],
124
125
  "source": [
125
126
  "#Interact with frequency solution\n",
126
127
  "pyriod.Signals()"
@@ -128,9 +129,25 @@
128
129
  },
129
130
  {
130
131
  "cell_type": "code",
131
- "execution_count": null,
132
+ "execution_count": 7,
132
133
  "metadata": {},
133
- "outputs": [],
134
+ "outputs": [
135
+ {
136
+ "data": {
137
+ "application/vnd.jupyter.widget-view+json": {
138
+ "model_id": "3072bdfec04e4d348a92299a9f99b172",
139
+ "version_major": 2,
140
+ "version_minor": 0
141
+ },
142
+ "text/plain": [
143
+ "VBox(children=(Box(children=(HTML(value=\"2024-12-27 15:42:14,053 - INFO - Initiating Pyriod instance 0.<br>\\n2…"
144
+ ]
145
+ },
146
+ "execution_count": 7,
147
+ "metadata": {},
148
+ "output_type": "execute_result"
149
+ }
150
+ ],
134
151
  "source": [
135
152
  "#Interact with log\n",
136
153
  "pyriod.Log()"
@@ -138,13 +155,43 @@
138
155
  },
139
156
  {
140
157
  "cell_type": "code",
141
- "execution_count": null,
158
+ "execution_count": 8,
142
159
  "metadata": {},
143
- "outputs": [],
160
+ "outputs": [
161
+ {
162
+ "data": {
163
+ "application/vnd.jupyter.widget-view+json": {
164
+ "model_id": "03ab17d9cd854d65ba632b2c10c8dca9",
165
+ "version_major": 2,
166
+ "version_minor": 0
167
+ },
168
+ "text/plain": [
169
+ "Tab(children=(VBox(children=(HTML(value=''), Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view',…"
170
+ ]
171
+ },
172
+ "execution_count": 8,
173
+ "metadata": {},
174
+ "output_type": "execute_result"
175
+ }
176
+ ],
144
177
  "source": [
145
178
  "#Show all panels in single cell\n",
146
179
  "pyriod.Pyriod()"
147
180
  ]
181
+ },
182
+ {
183
+ "cell_type": "code",
184
+ "execution_count": null,
185
+ "metadata": {},
186
+ "outputs": [],
187
+ "source": []
188
+ },
189
+ {
190
+ "cell_type": "code",
191
+ "execution_count": null,
192
+ "metadata": {},
193
+ "outputs": [],
194
+ "source": []
148
195
  }
149
196
  ],
150
197
  "metadata": {
@@ -7,18 +7,13 @@
7
7
  "source": [
8
8
  "## Pyriod Tutorial: Python Tools for Pre-Whitening Frequency Analysis\n",
9
9
  "\n",
10
- "This interactive demo shows how to use the new Python package Pyriod to analyze TESS light curves.\n",
10
+ "This interactive demo shows how to use the new Python package Pyriod to analyze TESS light curves. You can fit generic light curves by constructing a [lightkurve.LightCurve object](https://lightkurve.github.io/lightkurve/reference/lightcurve.html).\n",
11
11
  "\n",
12
12
  "Run the code in each sequential cell by holding `shift` and hitting `return`.\n",
13
13
  "\n",
14
- "Note that this notebook will shut down after 10 minutes of inactivity. [Click here](https://dirac.us/oil) to launch a fresh notebook.\n",
14
+ "Note that this notebook will shut down after 10 minutes of inactivity.\n",
15
15
  "\n",
16
- "You can install this package on your own machine with `pip install Pyriod`. Make sure to enable the following Jupyter extensions in the terminal on your own machine (before you start your Jupyter Notebook server!):\n",
17
- "```\n",
18
- "jupyter nbextension enable --py --sys-prefix qgrid\n",
19
- "jupyter nbextension enable --py --sys-prefix widgetsnbextension\n",
20
- "jupyter nbextension enable --py --sys-prefix ipympl\n",
21
- "```"
16
+ "You can install this package on your own machine with `pip install Pyriod`."
22
17
  ]
23
18
  },
24
19
  {
@@ -199,13 +194,13 @@
199
194
  "id": "99f168bc",
200
195
  "metadata": {},
201
196
  "source": [
202
- "If you experience any issues or have comments or questions, you can email me at keatonb@uw.edu, open an issue [on Github](https://github.com/keatonb/Pyriod/issues), Tweet to [@astrokeat](https://www.twitter.com/astrokeat), or connect with me at the conference!"
197
+ "If you experience any issues or have comments or questions, you can email me at keaton.bell@qc.cuny.edu, or open an issue [on Github](https://github.com/keatonb/Pyriod/issues)."
203
198
  ]
204
199
  }
205
200
  ],
206
201
  "metadata": {
207
202
  "kernelspec": {
208
- "display_name": "Python 3",
203
+ "display_name": "Python 3 (ipykernel)",
209
204
  "language": "python",
210
205
  "name": "python3"
211
206
  },
@@ -219,7 +214,7 @@
219
214
  "name": "python",
220
215
  "nbconvert_exporter": "python",
221
216
  "pygments_lexer": "ipython3",
222
- "version": "3.7.5"
217
+ "version": "3.12.2"
223
218
  }
224
219
  },
225
220
  "nbformat": 4,
@@ -8,7 +8,7 @@ with open("requirements.txt", "r") as fh:
8
8
 
9
9
  setuptools.setup(
10
10
  name="Pyriod",
11
- version="0.3.0",
11
+ version="0.3.2",
12
12
  author="Keaton Bell",
13
13
  author_email="keatonbell@utexas.edu",
14
14
  description="Basic period detection and fitting routines for astronomical time series.",
pyriod-0.3.0/README.md DELETED
@@ -1,36 +0,0 @@
1
- # Pyriod
2
-
3
- **IMPORTANT INSTALLATION NOTE:** you must manually install qgrid with conda from the eshard channel as described below.
4
-
5
- Python implementation of basic period detection and fitting routines for astronomical time series.
6
-
7
- <!---Give it a spin before you install [with Binder](https://mybinder.org/v2/gh/keatonb/Pyriod/HEAD?filepath=examples%2FTSC2_Demo.ipynb).--->
8
-
9
- To install, use
10
-
11
- ```pip install Pyriod```
12
-
13
- or download the latest (possibly unstable) version from GitHub and run
14
-
15
- ```python setup.py install```
16
-
17
- Additional documentation is available at [pyriod.readthedocs.io](https://pyriod.readthedocs.io).
18
-
19
- This code uses [Qgrid](https://github.com/quantopian/qgrid) and other Jupyter widgets to interactively display the frequency solution.
20
- Unfortunately Qgrid is no longer supported. [A version that works with other modern packages](https://anaconda.org/eshard/qgrid) can be installed with
21
-
22
- ```conda install -c eshard qgrid```
23
-
24
- Furthermore, Qgrid has specific version requirements for Jupyter (classic only, < v7) and `ipywidgets` (< v8):
25
- ```
26
- conda install "notebook<7"
27
- conda install "ipywidgets<8"
28
- ```
29
-
30
- To display the Pyriod GUI, you will need to first enable the following Jupyter notebook extensions in the terminal:
31
- ```
32
- jupyter nbextension enable --py --sys-prefix qgrid
33
- jupyter nbextension enable --py --sys-prefix widgetsnbextension
34
- jupyter nbextension enable --py --sys-prefix ipympl
35
- ```
36
-
pyriod-0.3.0/postBuild DELETED
@@ -1,4 +0,0 @@
1
- jupyter contrib nbextension install --user
2
- jupyter nbextension enable --py --sys-prefix qgrid
3
- jupyter nbextension enable --py --sys-prefix widgetsnbextension
4
- jupyter nbextension enable --py --sys-prefix ipympl
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