pycequeau 0.0.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.
- pycequeau-0.0.2/DEVELOPMENT.rst +318 -0
- pycequeau-0.0.2/LICENSE +674 -0
- pycequeau-0.0.2/PKG-INFO +62 -0
- pycequeau-0.0.2/README.rst +26 -0
- pycequeau-0.0.2/docs/Makefile +20 -0
- pycequeau-0.0.2/docs/conf.py +51 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/01-Extent.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/02-Download.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/03-Mosaic.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/04-Extent-shp.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/05-Export.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/06-OpenGRASS.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/07-NewMapset.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/08-DEM-GRASS.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/09-Subbasins.png +0 -0
- pycequeau-0.0.2/docs/figures/GRASS-tutorial/09-outlet_point.png +0 -0
- pycequeau-0.0.2/docs/grass.rst +199 -0
- pycequeau-0.0.2/docs/index.rst +38 -0
- pycequeau-0.0.2/docs/make.bat +35 -0
- pycequeau-0.0.2/docs/modules.rst +7 -0
- pycequeau-0.0.2/docs/notebooks/get_meteo.ipynb +853 -0
- pycequeau-0.0.2/docs/notebooks/get_params.ipynb +196 -0
- pycequeau-0.0.2/docs/notebooks/get_physio.ipynb +608 -0
- pycequeau-0.0.2/docs/readme.rst +1 -0
- pycequeau-0.0.2/docs/src.core.rst +53 -0
- pycequeau-0.0.2/docs/src.meteo.rst +37 -0
- pycequeau-0.0.2/docs/src.physiographic.rst +45 -0
- pycequeau-0.0.2/docs/src.rst +21 -0
- pycequeau-0.0.2/docs/src.simulations.rst +29 -0
- pycequeau-0.0.2/docs.yml +25 -0
- pycequeau-0.0.2/environment.yml +18 -0
- pycequeau-0.0.2/matlab/README.md +6 -0
- pycequeau-0.0.2/matlab/functions/create_grid.m +9 -0
- pycequeau-0.0.2/matlab/functions/export_results_CE.m +21 -0
- pycequeau-0.0.2/matlab/functions/export_results_CP.m +23 -0
- pycequeau-0.0.2/matlab/functions/fix_struct.m +27 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/.gitignore +35 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/AUTHORS.txt +79 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/ChangeLog.txt +220 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/Contents.m +1432 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/DESCRIPTION +13 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/INDEX +43 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/LICENSE_BSD.txt +33 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/README.rst +622 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/README.txt +557 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/base64decode.m +49 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/base64encode.m +57 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/decodevarname.m +72 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/encodevarname.m +63 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/demo_jsonlab_basic.m +413 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/demo_msgpack_basic.m +353 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/demo_ubjson_basic.m +367 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/example1.json +23 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/example2.json +22 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/example3.json +11 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/example4.json +35 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/jsonlab_basictest.matlab +1454 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/jsonlab_selftest.m +27 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/jsonlab_selftest.matlab +157 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/jsonlab_speedtest.m +21 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/examples/jsonlab_ubjson_basictest.matlab +937 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/fast_match_bracket.m +65 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/gendocs.sh +61 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/genlog.sh +3 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/gzipdecode.m +69 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/gzipencode.m +63 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/images/jsonlab-banner.png +0 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/images/jsonlab-logo.png +0 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/isoctavemesh.m +19 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/jdatadecode.m +464 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/jdataencode.m +398 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/jload.m +108 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/jsave.m +128 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/jsonlab.prj +154 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/jsonopt.m +36 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/loadbj.m +419 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/loadjson.m +552 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/loadmsgpack.m +261 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/loadubjson.m +39 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lz4decode.m +43 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lz4encode.m +39 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lz4hcdecode.m +43 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lz4hcencode.m +39 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lzipdecode.m +43 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lzipencode.m +39 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lzmadecode.m +43 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/lzmaencode.m +39 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/match_bracket.m +48 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/mergestruct.m +33 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/nestbracket2dim.m +53 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/package.json +21 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/savebj.m +1030 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/savejson.m +813 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/savemsgpack.m +31 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/saveubjson.m +71 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/test/run_jsonlab_test.m +274 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/test/test_jsonlab.m +32 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/varargin2struct.m +40 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/zlibdecode.m +70 -0
- pycequeau-0.0.2/matlab/functions/jsonlab-2.0/zlibencode.m +58 -0
- pycequeau-0.0.2/matlab/functions/upload_meteo.m +20 -0
- pycequeau-0.0.2/matlab/main.m +29 -0
- pycequeau-0.0.2/pyproject.toml +57 -0
- pycequeau-0.0.2/src/pycequeau/__init__.py +10 -0
- pycequeau-0.0.2/src/pycequeau/core/__init__.py +28 -0
- pycequeau-0.0.2/src/pycequeau/core/manage_files.py +112 -0
- pycequeau-0.0.2/src/pycequeau/core/netcdf.py +101 -0
- pycequeau-0.0.2/src/pycequeau/core/projections.py +73 -0
- pycequeau-0.0.2/src/pycequeau/core/units.py +138 -0
- pycequeau-0.0.2/src/pycequeau/core/utils.py +820 -0
- pycequeau-0.0.2/src/pycequeau/meteo/__init__.py +6 -0
- pycequeau-0.0.2/src/pycequeau/meteo/_stations.py +242 -0
- pycequeau-0.0.2/src/pycequeau/meteo/base.py +124 -0
- pycequeau-0.0.2/src/pycequeau/meteo/meteo_netcdf.py +177 -0
- pycequeau-0.0.2/src/pycequeau/meteo/meteo_surface_gauges.py +0 -0
- pycequeau-0.0.2/src/pycequeau/physiographic/CPfishnet.py +1075 -0
- pycequeau-0.0.2/src/pycequeau/physiographic/__init__.py +5 -0
- pycequeau-0.0.2/src/pycequeau/physiographic/base.py +977 -0
- pycequeau-0.0.2/src/pycequeau/physiographic/carreauxEntiers.py +66 -0
- pycequeau-0.0.2/src/pycequeau/physiographic/carreauxPartiels.py +243 -0
- pycequeau-0.0.2/src/pycequeau/simulations/__init__.py +6 -0
- pycequeau-0.0.2/src/pycequeau/simulations/_param_examples.py +132 -0
- pycequeau-0.0.2/src/pycequeau/simulations/parameters.py +598 -0
- pycequeau-0.0.2/src/pycequeau/simulations/simulations.py +13 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
Development Guide
|
|
2
|
+
=================
|
|
3
|
+
|
|
4
|
+
This guide provides instructions for developers working on the pycequeau package, including setup, testing, and publishing to PyPI.
|
|
5
|
+
|
|
6
|
+
Development Setup
|
|
7
|
+
-----------------
|
|
8
|
+
|
|
9
|
+
1. Clone the repository:
|
|
10
|
+
|
|
11
|
+
.. code-block:: bash
|
|
12
|
+
|
|
13
|
+
git clone https://github.com/erinconv/pycequeau.git
|
|
14
|
+
cd pycequeau
|
|
15
|
+
|
|
16
|
+
2. Create a conda environment (recommended for geospatial dependencies):
|
|
17
|
+
|
|
18
|
+
.. code-block:: bash
|
|
19
|
+
|
|
20
|
+
conda env create -f environment.yml
|
|
21
|
+
conda activate pycequeau
|
|
22
|
+
|
|
23
|
+
3. Install the package in development mode:
|
|
24
|
+
|
|
25
|
+
.. code-block:: bash
|
|
26
|
+
|
|
27
|
+
pip install -e .
|
|
28
|
+
|
|
29
|
+
4. Install development dependencies:
|
|
30
|
+
|
|
31
|
+
.. code-block:: bash
|
|
32
|
+
|
|
33
|
+
pip install -e .[dev]
|
|
34
|
+
|
|
35
|
+
Building the Package
|
|
36
|
+
--------------------
|
|
37
|
+
|
|
38
|
+
1. Install build tools:
|
|
39
|
+
|
|
40
|
+
.. code-block:: bash
|
|
41
|
+
|
|
42
|
+
pip install build twine
|
|
43
|
+
|
|
44
|
+
2. Clean previous builds:
|
|
45
|
+
|
|
46
|
+
.. code-block:: bash
|
|
47
|
+
|
|
48
|
+
# Windows PowerShell
|
|
49
|
+
Remove-Item -Recurse -Force dist/, build/, *.egg-info/ -ErrorAction SilentlyContinue
|
|
50
|
+
|
|
51
|
+
# Linux/Mac
|
|
52
|
+
rm -rf dist/ build/ *.egg-info/
|
|
53
|
+
|
|
54
|
+
3. Build the package:
|
|
55
|
+
|
|
56
|
+
.. code-block:: bash
|
|
57
|
+
|
|
58
|
+
python -m build
|
|
59
|
+
|
|
60
|
+
This creates:
|
|
61
|
+
- ``dist/pycequeau-X.X.X.tar.gz`` (source distribution)
|
|
62
|
+
- ``dist/pycequeau-X.X.X-py3-none-any.whl`` (wheel distribution)
|
|
63
|
+
|
|
64
|
+
Testing the Package
|
|
65
|
+
-------------------
|
|
66
|
+
|
|
67
|
+
1. Test local installation:
|
|
68
|
+
|
|
69
|
+
.. code-block:: bash
|
|
70
|
+
|
|
71
|
+
pip install dist/pycequeau-*.whl --force-reinstall
|
|
72
|
+
|
|
73
|
+
2. Test package import:
|
|
74
|
+
|
|
75
|
+
.. code-block:: python
|
|
76
|
+
|
|
77
|
+
import pycequeau
|
|
78
|
+
print(f"Version: {pycequeau.__version__}")
|
|
79
|
+
print(f"Available modules: {pycequeau.__all__}")
|
|
80
|
+
|
|
81
|
+
3. Test all modules:
|
|
82
|
+
|
|
83
|
+
.. code-block:: python
|
|
84
|
+
|
|
85
|
+
import pycequeau.core
|
|
86
|
+
import pycequeau.meteo
|
|
87
|
+
import pycequeau.physiographic
|
|
88
|
+
import pycequeau.simulations
|
|
89
|
+
print("All modules imported successfully!")
|
|
90
|
+
|
|
91
|
+
Publishing to PyPI
|
|
92
|
+
------------------
|
|
93
|
+
|
|
94
|
+
### Prerequisites
|
|
95
|
+
|
|
96
|
+
1. Create PyPI accounts:
|
|
97
|
+
- Production: `https://pypi.org/`
|
|
98
|
+
- Test: `https://test.pypi.org/`
|
|
99
|
+
|
|
100
|
+
2. Create API tokens:
|
|
101
|
+
- Go to account settings → API tokens
|
|
102
|
+
- Create tokens for both production and test PyPI
|
|
103
|
+
- Save the tokens securely
|
|
104
|
+
|
|
105
|
+
3. Configure credentials in ``~/.pypirc``:
|
|
106
|
+
|
|
107
|
+
.. code-block:: ini
|
|
108
|
+
|
|
109
|
+
[distutils]
|
|
110
|
+
index-servers = pypi testpypi
|
|
111
|
+
|
|
112
|
+
[pypi]
|
|
113
|
+
username = __token__
|
|
114
|
+
password = pypi-YOUR_ACTUAL_TOKEN_HERE
|
|
115
|
+
|
|
116
|
+
[testpypi]
|
|
117
|
+
repository = https://test.pypi.org/legacy/
|
|
118
|
+
username = __token__
|
|
119
|
+
password = pypi-YOUR_TEST_TOKEN_HERE
|
|
120
|
+
|
|
121
|
+
### Publishing Steps
|
|
122
|
+
|
|
123
|
+
1. **Test Upload (Recommended)**:
|
|
124
|
+
|
|
125
|
+
.. code-block:: bash
|
|
126
|
+
|
|
127
|
+
# Upload to test PyPI first
|
|
128
|
+
twine upload --repository testpypi dist/*
|
|
129
|
+
|
|
130
|
+
# Test installation from test PyPI
|
|
131
|
+
pip install --index-url https://test.pypi.org/simple/ pycequeau
|
|
132
|
+
|
|
133
|
+
2. **Production Upload**:
|
|
134
|
+
|
|
135
|
+
.. code-block:: bash
|
|
136
|
+
|
|
137
|
+
# Upload to production PyPI
|
|
138
|
+
twine upload dist/*
|
|
139
|
+
|
|
140
|
+
3. **Verify Installation**:
|
|
141
|
+
|
|
142
|
+
.. code-block:: bash
|
|
143
|
+
|
|
144
|
+
# Test installation from PyPI
|
|
145
|
+
pip install pycequeau
|
|
146
|
+
|
|
147
|
+
# Test with optional dependencies
|
|
148
|
+
pip install pycequeau[geo]
|
|
149
|
+
pip install pycequeau[all]
|
|
150
|
+
|
|
151
|
+
### Version Management
|
|
152
|
+
|
|
153
|
+
1. Update version in ``pyproject.toml``:
|
|
154
|
+
|
|
155
|
+
.. code-block:: toml
|
|
156
|
+
|
|
157
|
+
version = "0.0.2" # or 0.1.0, 1.0.0, etc.
|
|
158
|
+
|
|
159
|
+
2. Follow semantic versioning:
|
|
160
|
+
- ``MAJOR.MINOR.PATCH``
|
|
161
|
+
- Examples: ``0.0.1``, ``0.1.0``, ``1.0.0``
|
|
162
|
+
- PyPI doesn't allow re-uploading the same version
|
|
163
|
+
|
|
164
|
+
3. Rebuild and upload:
|
|
165
|
+
|
|
166
|
+
.. code-block:: bash
|
|
167
|
+
|
|
168
|
+
python -m build
|
|
169
|
+
twine upload dist/*
|
|
170
|
+
|
|
171
|
+
Package Structure
|
|
172
|
+
-----------------
|
|
173
|
+
|
|
174
|
+
The package follows this structure:
|
|
175
|
+
|
|
176
|
+
.. code-block:: text
|
|
177
|
+
|
|
178
|
+
pycequeau/
|
|
179
|
+
├── src/
|
|
180
|
+
│ └── pycequeau/
|
|
181
|
+
│ ├── __init__.py
|
|
182
|
+
│ ├── core/
|
|
183
|
+
│ ├── meteo/
|
|
184
|
+
│ ├── physiographic/
|
|
185
|
+
│ └── simulations/
|
|
186
|
+
├── docs/
|
|
187
|
+
├── matlab/
|
|
188
|
+
├── pyproject.toml
|
|
189
|
+
├── requirements.txt
|
|
190
|
+
├── environment.yml
|
|
191
|
+
├── MANIFEST.in
|
|
192
|
+
└── README.rst
|
|
193
|
+
|
|
194
|
+
Dependencies
|
|
195
|
+
------------
|
|
196
|
+
|
|
197
|
+
### Required Dependencies
|
|
198
|
+
- ``pyproj``: Coordinate transformations
|
|
199
|
+
- ``xarray``: N-dimensional arrays
|
|
200
|
+
- ``scipy``: Scientific computing
|
|
201
|
+
- ``matplotlib``: Plotting
|
|
202
|
+
- ``shapely``: Geometric objects
|
|
203
|
+
|
|
204
|
+
### Optional Dependencies
|
|
205
|
+
|
|
206
|
+
**Geospatial (``[geo]``)**:
|
|
207
|
+
- ``gdal``: Geospatial data processing
|
|
208
|
+
- ``geopandas``: Geospatial data analysis
|
|
209
|
+
- ``rasterstats``: Raster statistics
|
|
210
|
+
- ``netcdf4``: NetCDF file handling
|
|
211
|
+
|
|
212
|
+
**Development (``[dev]``)**:
|
|
213
|
+
- ``pytest``: Testing framework
|
|
214
|
+
- ``autopep8``: Code formatting
|
|
215
|
+
- ``ipykernel``: Jupyter notebook support
|
|
216
|
+
|
|
217
|
+
**All (``[all]``)**:
|
|
218
|
+
- Includes all geospatial and development dependencies
|
|
219
|
+
|
|
220
|
+
Installation Commands
|
|
221
|
+
--------------------
|
|
222
|
+
|
|
223
|
+
.. code-block:: bash
|
|
224
|
+
|
|
225
|
+
# Basic installation
|
|
226
|
+
pip install pycequeau
|
|
227
|
+
|
|
228
|
+
# With geospatial functionality
|
|
229
|
+
pip install pycequeau[geo]
|
|
230
|
+
|
|
231
|
+
# With development tools
|
|
232
|
+
pip install pycequeau[dev]
|
|
233
|
+
|
|
234
|
+
# Everything
|
|
235
|
+
pip install pycequeau[all]
|
|
236
|
+
|
|
237
|
+
# From source
|
|
238
|
+
git clone https://github.com/erinconv/pycequeau.git
|
|
239
|
+
cd pycequeau
|
|
240
|
+
pip install .
|
|
241
|
+
|
|
242
|
+
Troubleshooting
|
|
243
|
+
---------------
|
|
244
|
+
|
|
245
|
+
### Common Issues
|
|
246
|
+
|
|
247
|
+
1. **HDF5 headers not found**:
|
|
248
|
+
- This occurs when installing geospatial dependencies
|
|
249
|
+
- Use conda environment: ``conda env create -f environment.yml``
|
|
250
|
+
- Or install pre-built packages: ``conda install gdal geopandas netcdf4``
|
|
251
|
+
|
|
252
|
+
2. **GDAL installation issues**:
|
|
253
|
+
- GDAL requires system libraries
|
|
254
|
+
- Use conda for easier installation
|
|
255
|
+
- Or install GDAL system package first
|
|
256
|
+
|
|
257
|
+
3. **Build failures**:
|
|
258
|
+
- Ensure all dependencies are installed
|
|
259
|
+
- Check Python version compatibility (3.8+)
|
|
260
|
+
- Clean build artifacts before rebuilding
|
|
261
|
+
|
|
262
|
+
### Testing Installation
|
|
263
|
+
|
|
264
|
+
.. code-block:: bash
|
|
265
|
+
|
|
266
|
+
# Test basic functionality
|
|
267
|
+
python -c "import pycequeau; print('Success!')"
|
|
268
|
+
|
|
269
|
+
# Test geospatial functionality
|
|
270
|
+
python -c "import pycequeau; import geopandas; print('Geo features work!')"
|
|
271
|
+
|
|
272
|
+
# Test all modules
|
|
273
|
+
python -c "from pycequeau import core, meteo, physiographic, simulations; print('All modules work!')"
|
|
274
|
+
|
|
275
|
+
Contributing
|
|
276
|
+
------------
|
|
277
|
+
|
|
278
|
+
1. Fork the repository
|
|
279
|
+
2. Create a feature branch
|
|
280
|
+
3. Make your changes
|
|
281
|
+
4. Test your changes:
|
|
282
|
+
|
|
283
|
+
.. code-block:: bash
|
|
284
|
+
|
|
285
|
+
python -m build
|
|
286
|
+
pip install dist/pycequeau-*.whl --force-reinstall
|
|
287
|
+
|
|
288
|
+
5. Submit a pull request
|
|
289
|
+
|
|
290
|
+
### Code Style
|
|
291
|
+
|
|
292
|
+
- Follow PEP 8 guidelines
|
|
293
|
+
- Use ``autopep8`` for formatting
|
|
294
|
+
- Add docstrings to functions and classes
|
|
295
|
+
- Include type hints where appropriate
|
|
296
|
+
|
|
297
|
+
### Testing
|
|
298
|
+
|
|
299
|
+
- Add tests for new functionality
|
|
300
|
+
- Ensure all tests pass before submitting
|
|
301
|
+
- Test installation in clean environment
|
|
302
|
+
|
|
303
|
+
After Publishing
|
|
304
|
+
----------------
|
|
305
|
+
|
|
306
|
+
Once published, your package will be available at:
|
|
307
|
+
- PyPI: `https://pypi.org/project/pycequeau/`
|
|
308
|
+
- Installation: ``pip install pycequeau``
|
|
309
|
+
|
|
310
|
+
Consider setting up:
|
|
311
|
+
- Documentation on Read the Docs
|
|
312
|
+
- Continuous integration with GitHub Actions
|
|
313
|
+
- Automated testing and publishing workflows
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
# Upload to production PyPI
|
|
318
|
+
twine upload dist/*
|