riftroute 0.0.1__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.
@@ -0,0 +1,2 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
@@ -0,0 +1,218 @@
1
+ # This file is autogenerated by maturin v1.16.0
2
+ # To update, run
3
+ #
4
+ # maturin generate-ci github -o .github/workflows/CI.yml
5
+ #
6
+ name: CI
7
+
8
+ on:
9
+ push:
10
+ branches:
11
+ - main
12
+ - master
13
+ tags:
14
+ - '*'
15
+ pull_request:
16
+ workflow_dispatch:
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ jobs:
22
+ linux:
23
+ runs-on: ${{ matrix.platform.runner }}
24
+ strategy:
25
+ matrix:
26
+ platform:
27
+ - runner: ubuntu-22.04
28
+ target: x86_64
29
+ - runner: ubuntu-22.04
30
+ target: x86
31
+ - runner: ubuntu-22.04
32
+ target: aarch64
33
+ - runner: ubuntu-22.04
34
+ target: armv7
35
+ - runner: ubuntu-22.04
36
+ target: s390x
37
+ - runner: ubuntu-22.04
38
+ target: ppc64le
39
+ steps:
40
+ - uses: actions/checkout@v6
41
+ - uses: actions/setup-python@v6
42
+ with:
43
+ python-version: "3.11"
44
+ - name: Build wheels
45
+ uses: PyO3/maturin-action@v1
46
+ with:
47
+ target: ${{ matrix.platform.target }}
48
+ args: --release --out dist
49
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
50
+ manylinux: auto
51
+ - name: Build free-threaded wheels
52
+ uses: PyO3/maturin-action@v1
53
+ with:
54
+ target: ${{ matrix.platform.target }}
55
+ args: --release --out dist -i python3.14t
56
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
57
+ manylinux: auto
58
+ - name: Upload wheels
59
+ uses: actions/upload-artifact@v6
60
+ with:
61
+ name: wheels-linux-${{ matrix.platform.target }}
62
+ path: dist
63
+
64
+ musllinux:
65
+ runs-on: ${{ matrix.platform.runner }}
66
+ strategy:
67
+ matrix:
68
+ platform:
69
+ - runner: ubuntu-22.04
70
+ target: x86_64
71
+ - runner: ubuntu-22.04
72
+ target: x86
73
+ - runner: ubuntu-22.04
74
+ target: aarch64
75
+ - runner: ubuntu-22.04
76
+ target: armv7
77
+ steps:
78
+ - uses: actions/checkout@v6
79
+ - uses: actions/setup-python@v6
80
+ with:
81
+ python-version: "3.11"
82
+ - name: Build wheels
83
+ uses: PyO3/maturin-action@v1
84
+ with:
85
+ target: ${{ matrix.platform.target }}
86
+ args: --release --out dist
87
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
88
+ manylinux: musllinux_1_2
89
+ - name: Build free-threaded wheels
90
+ uses: PyO3/maturin-action@v1
91
+ with:
92
+ target: ${{ matrix.platform.target }}
93
+ args: --release --out dist -i python3.14t
94
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
95
+ manylinux: musllinux_1_2
96
+ - name: Upload wheels
97
+ uses: actions/upload-artifact@v6
98
+ with:
99
+ name: wheels-musllinux-${{ matrix.platform.target }}
100
+ path: dist
101
+
102
+ windows:
103
+ runs-on: ${{ matrix.platform.runner }}
104
+ strategy:
105
+ matrix:
106
+ platform:
107
+ - runner: windows-latest
108
+ target: x64
109
+ python_arch: x64
110
+ - runner: windows-latest
111
+ target: x86
112
+ python_arch: x86
113
+ - runner: windows-11-arm
114
+ target: aarch64
115
+ python_arch: arm64
116
+ steps:
117
+ - uses: actions/checkout@v6
118
+ - uses: actions/setup-python@v6
119
+ with:
120
+ python-version: "3.13"
121
+ architecture: ${{ matrix.platform.python_arch }}
122
+ - name: Build wheels
123
+ uses: PyO3/maturin-action@v1
124
+ with:
125
+ target: ${{ matrix.platform.target }}
126
+ args: --release --out dist
127
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
128
+ - uses: actions/setup-python@v6
129
+ with:
130
+ python-version: "3.14t"
131
+ architecture: ${{ matrix.platform.python_arch }}
132
+ - name: Build free-threaded wheels
133
+ uses: PyO3/maturin-action@v1
134
+ with:
135
+ target: ${{ matrix.platform.target }}
136
+ args: --release --out dist -i python3.14t
137
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
138
+ - name: Upload wheels
139
+ uses: actions/upload-artifact@v6
140
+ with:
141
+ name: wheels-windows-${{ matrix.platform.target }}
142
+ path: dist
143
+
144
+ macos:
145
+ runs-on: ${{ matrix.platform.runner }}
146
+ strategy:
147
+ matrix:
148
+ platform:
149
+ - runner: macos-15-intel
150
+ target: x86_64
151
+ - runner: macos-latest
152
+ target: aarch64
153
+ steps:
154
+ - uses: actions/checkout@v6
155
+ - uses: actions/setup-python@v6
156
+ with:
157
+ python-version: "3.11"
158
+ - name: Build wheels
159
+ uses: PyO3/maturin-action@v1
160
+ with:
161
+ target: ${{ matrix.platform.target }}
162
+ args: --release --out dist
163
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
164
+ - uses: actions/setup-python@v6
165
+ with:
166
+ python-version: "3.14t"
167
+ - name: Build free-threaded wheels
168
+ uses: PyO3/maturin-action@v1
169
+ with:
170
+ target: ${{ matrix.platform.target }}
171
+ args: --release --out dist -i python3.14t
172
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
173
+ - name: Upload wheels
174
+ uses: actions/upload-artifact@v6
175
+ with:
176
+ name: wheels-macos-${{ matrix.platform.target }}
177
+ path: dist
178
+
179
+ sdist:
180
+ runs-on: ubuntu-latest
181
+ steps:
182
+ - uses: actions/checkout@v6
183
+ - name: Build sdist
184
+ uses: PyO3/maturin-action@v1
185
+ with:
186
+ command: sdist
187
+ args: --out dist
188
+ - name: Upload sdist
189
+ uses: actions/upload-artifact@v6
190
+ with:
191
+ name: wheels-sdist
192
+ path: dist
193
+
194
+ release:
195
+ name: Release
196
+ runs-on: ubuntu-latest
197
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
198
+ needs: [linux, musllinux, windows, macos, sdist]
199
+ environment: pypi
200
+ permissions:
201
+ # Use to sign the release artifacts
202
+ id-token: write
203
+ # Used to upload release artifacts
204
+ contents: write
205
+ # Used to generate artifact attestation
206
+ attestations: write
207
+ steps:
208
+ - uses: actions/download-artifact@v7
209
+ - name: Generate artifact attestation
210
+ uses: actions/attest@v4
211
+ with:
212
+ subject-path: 'wheels-*/*'
213
+ - name: Install uv
214
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
215
+ uses: astral-sh/setup-uv@v7
216
+ - name: Publish to PyPI
217
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
218
+ run: uv publish --trusted-publishing always 'wheels-*/*'
@@ -0,0 +1,120 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+ MANIFEST
27
+
28
+ # PyInstaller
29
+ # Usually these files are written by a python script from a template
30
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit test / coverage reports
39
+ htmlcov/
40
+ .tox/
41
+ .nox/
42
+ .coverage
43
+ .coverage.*
44
+ .cache
45
+ nosetests.xml
46
+ coverage.xml
47
+ *.cover
48
+ .hypothesis/
49
+ .pytest_cache/
50
+
51
+ # Translations
52
+ *.mo
53
+ *.pot
54
+
55
+ # Django stuff:
56
+ *.log
57
+ local_settings.py
58
+ db.sqlite3
59
+
60
+ # Flask stuff:
61
+ instance/
62
+ .webassets-cache
63
+
64
+ # Scrapy stuff:
65
+ .scrapy
66
+
67
+ # Sphinx documentation
68
+ docs/_build/
69
+
70
+ # PyBuilder
71
+ target/
72
+
73
+ # Jupyter Notebook
74
+ .ipynb_checkpoints
75
+
76
+ # IPython
77
+ profile_default/
78
+ ipython_config.py
79
+
80
+ # pyenv
81
+ .python-version
82
+
83
+ # celery beat schedule file
84
+ celerybeat-schedule
85
+
86
+ # SageMath parsed files
87
+ *.sage.py
88
+
89
+ # Environments
90
+ .env
91
+ .venv
92
+ env/
93
+ venv/
94
+ ENV/
95
+ env.bak/
96
+ venv.bak/
97
+
98
+ # Spyder project settings
99
+ .spyderproject
100
+ .spyproject
101
+
102
+ # Rope project settings
103
+ .ropeproject
104
+
105
+ # mkdocs documentation
106
+ /site
107
+
108
+ # mypy
109
+ .mypy_cache/
110
+ .dmypy.json
111
+ dmypy.json
112
+
113
+ # Pyre type checker
114
+ .pyre/
115
+ target/
116
+ __pycache__/
117
+ *.pyc
118
+ .venv/
119
+ .pytest_cache/
120
+ .ruff_cache/
@@ -0,0 +1,17 @@
1
+ # riftroute
2
+
3
+ Open-source simulator for green leaf tea collection routing at Kenyan tea factories.
4
+ Litein is the first example catchment.
5
+
6
+ ## Stack
7
+ - Python (uv), Rust core via PyO3 + maturin (src/lib.rs -> riftroute._core)
8
+ - OSMnx + NetworkX for roads, NumPy/SciPy for numbers
9
+
10
+ ## Commands
11
+ - Tests: `uv run pytest`
12
+ - Lint: `uv run ruff check .`
13
+
14
+ ## Rules
15
+ - No formula in code that is not derived in docs/maths.md first.
16
+ - Every guessed number goes in docs/assumptions.md, never hard-coded silently.
17
+ - Coordinates are stored as (lat, lon); convert to (lon, lat) only in code.
@@ -0,0 +1,133 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "heck"
7
+ version = "0.5.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
10
+
11
+ [[package]]
12
+ name = "libc"
13
+ version = "0.2.191"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
16
+
17
+ [[package]]
18
+ name = "once_cell"
19
+ version = "1.21.4"
20
+ source = "registry+https://github.com/rust-lang/crates.io-index"
21
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
22
+
23
+ [[package]]
24
+ name = "portable-atomic"
25
+ version = "1.15.0"
26
+ source = "registry+https://github.com/rust-lang/crates.io-index"
27
+ checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
28
+
29
+ [[package]]
30
+ name = "proc-macro2"
31
+ version = "1.0.107"
32
+ source = "registry+https://github.com/rust-lang/crates.io-index"
33
+ checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
34
+ dependencies = [
35
+ "unicode-ident",
36
+ ]
37
+
38
+ [[package]]
39
+ name = "pyo3"
40
+ version = "0.28.3"
41
+ source = "registry+https://github.com/rust-lang/crates.io-index"
42
+ checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12"
43
+ dependencies = [
44
+ "libc",
45
+ "once_cell",
46
+ "portable-atomic",
47
+ "pyo3-build-config",
48
+ "pyo3-ffi",
49
+ "pyo3-macros",
50
+ ]
51
+
52
+ [[package]]
53
+ name = "pyo3-build-config"
54
+ version = "0.28.3"
55
+ source = "registry+https://github.com/rust-lang/crates.io-index"
56
+ checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e"
57
+ dependencies = [
58
+ "target-lexicon",
59
+ ]
60
+
61
+ [[package]]
62
+ name = "pyo3-ffi"
63
+ version = "0.28.3"
64
+ source = "registry+https://github.com/rust-lang/crates.io-index"
65
+ checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e"
66
+ dependencies = [
67
+ "libc",
68
+ "pyo3-build-config",
69
+ ]
70
+
71
+ [[package]]
72
+ name = "pyo3-macros"
73
+ version = "0.28.3"
74
+ source = "registry+https://github.com/rust-lang/crates.io-index"
75
+ checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813"
76
+ dependencies = [
77
+ "proc-macro2",
78
+ "pyo3-macros-backend",
79
+ "quote",
80
+ "syn",
81
+ ]
82
+
83
+ [[package]]
84
+ name = "pyo3-macros-backend"
85
+ version = "0.28.3"
86
+ source = "registry+https://github.com/rust-lang/crates.io-index"
87
+ checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb"
88
+ dependencies = [
89
+ "heck",
90
+ "proc-macro2",
91
+ "pyo3-build-config",
92
+ "quote",
93
+ "syn",
94
+ ]
95
+
96
+ [[package]]
97
+ name = "quote"
98
+ version = "1.0.47"
99
+ source = "registry+https://github.com/rust-lang/crates.io-index"
100
+ checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
101
+ dependencies = [
102
+ "proc-macro2",
103
+ ]
104
+
105
+ [[package]]
106
+ name = "riftroute"
107
+ version = "0.0.1"
108
+ dependencies = [
109
+ "pyo3",
110
+ ]
111
+
112
+ [[package]]
113
+ name = "syn"
114
+ version = "2.0.119"
115
+ source = "registry+https://github.com/rust-lang/crates.io-index"
116
+ checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
117
+ dependencies = [
118
+ "proc-macro2",
119
+ "quote",
120
+ "unicode-ident",
121
+ ]
122
+
123
+ [[package]]
124
+ name = "target-lexicon"
125
+ version = "0.13.5"
126
+ source = "registry+https://github.com/rust-lang/crates.io-index"
127
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
128
+
129
+ [[package]]
130
+ name = "unicode-ident"
131
+ version = "1.0.27"
132
+ source = "registry+https://github.com/rust-lang/crates.io-index"
133
+ checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
@@ -0,0 +1,15 @@
1
+ [package]
2
+ name = "riftroute"
3
+ version = "0.0.1"
4
+ edition = "2024"
5
+ readme = "README.md"
6
+
7
+ [lib]
8
+ name = "_core"
9
+ # "cdylib" is necessary to produce a shared library for Python to import from.
10
+ crate-type = ["cdylib"]
11
+
12
+ [dependencies]
13
+ # "extension-module" tells pyo3 we want to build an extension module (skips linking against libpython.so)
14
+ # "abi3-py39" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.9
15
+ pyo3 = { version = "0.28.2", features = ["extension-module", "abi3-py39"] }