iupitermag 0.1.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,92 @@
1
+ name: Build (sdist + wheels)
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request:
6
+ push:
7
+ branches: [main]
8
+ tags:
9
+ - "v*"
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: build-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ jobs:
19
+ sdist:
20
+ name: Build sdist
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - name: Checkout
25
+ uses: actions/checkout@v4
26
+
27
+ - name: Set up uv
28
+ uses: astral-sh/setup-uv@v3
29
+ with:
30
+ cache: true
31
+
32
+ - name: Set up Python
33
+ run: uv python install 3.12
34
+
35
+ - name: Build sdist
36
+ run: uv run --with maturin maturin sdist --out dist
37
+
38
+ - name: Upload artifacts
39
+ uses: actions/upload-artifact@v4
40
+ with:
41
+ name: sdist
42
+ path: dist/*.tar.gz
43
+ if-no-files-found: error
44
+
45
+ wheels:
46
+ name: Build wheels (${{ matrix.os }} / ${{ matrix.arch }} / ${{ matrix.python }})
47
+ runs-on: ${{ matrix.os }}
48
+
49
+ strategy:
50
+ fail-fast: false
51
+ matrix:
52
+ # Only build wheels for Python >= 3.12
53
+ python: ["3.12", "3.13"]
54
+ os: [ubuntu-latest, macos-latest, windows-latest]
55
+ arch: [x86_64]
56
+ include:
57
+ - os: ubuntu-latest
58
+ arch: aarch64
59
+ python: "3.12"
60
+ - os: ubuntu-latest
61
+ arch: aarch64
62
+ python: "3.13"
63
+
64
+ steps:
65
+ - name: Checkout
66
+ uses: actions/checkout@v4
67
+
68
+ - name: Set up uv
69
+ uses: astral-sh/setup-uv@v3
70
+ with:
71
+ cache: true
72
+
73
+ - name: Set up Python
74
+ run: uv python install ${{ matrix.python }}
75
+
76
+ - name: Install Rust (stable)
77
+ uses: dtolnay/rust-toolchain@stable
78
+
79
+ - name: Build wheels (maturin)
80
+ uses: PyO3/maturin-action@v1
81
+ with:
82
+ command: build
83
+ args: --release --out dist -i python${{ matrix.python }}
84
+ target: ${{ matrix.arch }}
85
+ manylinux: auto
86
+
87
+ - name: Upload artifacts
88
+ uses: actions/upload-artifact@v4
89
+ with:
90
+ name: wheels-${{ matrix.os }}-${{ matrix.arch }}-py${{ matrix.python }}
91
+ path: dist/*.whl
92
+ if-no-files-found: error
@@ -0,0 +1,52 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: ci-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ lint-and-test:
18
+ name: Lint and Test (Python ${{ matrix.python-version }})
19
+ runs-on: ubuntu-latest
20
+
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ python-version: ["3.12"]
25
+
26
+ steps:
27
+ - name: Checkout
28
+ uses: actions/checkout@v4
29
+
30
+ - name: Set up uv
31
+ uses: astral-sh/setup-uv@v3
32
+ with:
33
+ # Keep caching on; uv will manage its cache directory.
34
+ cache: true
35
+
36
+ - name: Set up Python
37
+ run: uv python install ${{ matrix.python-version }}
38
+
39
+ - name: Sync dependencies (incl. dev)
40
+ run: uv sync --dev
41
+
42
+ - name: Lint (ruff)
43
+ run: uv run ruff check .
44
+
45
+ - name: Format check (ruff)
46
+ run: uv run ruff format --check .
47
+
48
+ - name: Type check (pyright)
49
+ run: uv run pyright
50
+
51
+ - name: Run tests (pytest)
52
+ run: uv run pytest -q
@@ -0,0 +1,96 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: publish-${{ github.ref }}
13
+ cancel-in-progress: false
14
+
15
+ jobs:
16
+ build:
17
+ name: Build sdist + wheels
18
+ runs-on: ${{ matrix.os }}
19
+
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ # Only build wheels for Python >= 3.12
24
+ python: ["3.12", "3.13"]
25
+ os: [ubuntu-latest, macos-latest, windows-latest]
26
+ arch: [x86_64]
27
+ include:
28
+ - os: ubuntu-latest
29
+ arch: aarch64
30
+ python: "3.12"
31
+ - os: ubuntu-latest
32
+ arch: aarch64
33
+ python: "3.13"
34
+
35
+ steps:
36
+ - name: Checkout
37
+ uses: actions/checkout@v4
38
+
39
+ - name: Set up uv
40
+ uses: astral-sh/setup-uv@v3
41
+ with:
42
+ cache: true
43
+
44
+ - name: Set up Python
45
+ run: uv python install ${{ matrix.python }}
46
+
47
+ - name: Install Rust (stable)
48
+ uses: dtolnay/rust-toolchain@stable
49
+
50
+ - name: Build wheels (maturin)
51
+ uses: PyO3/maturin-action@v1
52
+ with:
53
+ command: build
54
+ args: --release --out dist -i python${{ matrix.python }}
55
+ target: ${{ matrix.arch }}
56
+ manylinux: auto
57
+
58
+ - name: Build sdist (once; linux x86_64 only)
59
+ if: ${{ matrix.os == 'ubuntu-latest' && matrix.arch == 'x86_64' }}
60
+ run: uv run --with maturin maturin sdist --out dist
61
+
62
+ - name: Upload dist artifacts
63
+ uses: actions/upload-artifact@v4
64
+ with:
65
+ name: dist-${{ matrix.os }}-${{ matrix.arch }}-py${{ matrix.python }}
66
+ path: dist/*
67
+ if-no-files-found: error
68
+
69
+ publish:
70
+ name: Publish to PyPI
71
+ runs-on: ubuntu-latest
72
+ needs: [build]
73
+
74
+ environment:
75
+ name: pypi
76
+ url: https://pypi.org/project/iupitermag/
77
+
78
+ permissions:
79
+ id-token: write
80
+ contents: read
81
+
82
+ steps:
83
+ - name: Download dist artifacts
84
+ uses: actions/download-artifact@v4
85
+ with:
86
+ pattern: dist-*
87
+ path: dist
88
+ merge-multiple: true
89
+
90
+ - name: Set up uv
91
+ uses: astral-sh/setup-uv@v3
92
+ with:
93
+ cache: true
94
+
95
+ - name: Publish (PyPI Trusted Publishing)
96
+ run: uv publish --trusted-publishing automatic --check-url https://pypi.org/simple/ dist/*
@@ -0,0 +1,9 @@
1
+ # Rust
2
+ /target
3
+ Cargo.lock
4
+
5
+ # Python
6
+ *__pycache__*
7
+ *.so
8
+ .ipynb_checkpoints
9
+ *.ipynb
@@ -0,0 +1,329 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "autocfg"
7
+ version = "1.5.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
10
+
11
+ [[package]]
12
+ name = "crossbeam-deque"
13
+ version = "0.8.6"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
16
+ dependencies = [
17
+ "crossbeam-epoch",
18
+ "crossbeam-utils",
19
+ ]
20
+
21
+ [[package]]
22
+ name = "crossbeam-epoch"
23
+ version = "0.9.18"
24
+ source = "registry+https://github.com/rust-lang/crates.io-index"
25
+ checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
26
+ dependencies = [
27
+ "crossbeam-utils",
28
+ ]
29
+
30
+ [[package]]
31
+ name = "crossbeam-utils"
32
+ version = "0.8.21"
33
+ source = "registry+https://github.com/rust-lang/crates.io-index"
34
+ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
35
+
36
+ [[package]]
37
+ name = "either"
38
+ version = "1.15.0"
39
+ source = "registry+https://github.com/rust-lang/crates.io-index"
40
+ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
41
+
42
+ [[package]]
43
+ name = "heck"
44
+ version = "0.5.0"
45
+ source = "registry+https://github.com/rust-lang/crates.io-index"
46
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
47
+
48
+ [[package]]
49
+ name = "inventory"
50
+ version = "0.3.22"
51
+ source = "registry+https://github.com/rust-lang/crates.io-index"
52
+ checksum = "009ae045c87e7082cb72dab0ccd01ae075dd00141ddc108f43a0ea150a9e7227"
53
+ dependencies = [
54
+ "rustversion",
55
+ ]
56
+
57
+ [[package]]
58
+ name = "iupitermag"
59
+ version = "0.1.0"
60
+ dependencies = [
61
+ "lazyivy",
62
+ "ndarray",
63
+ "numpy",
64
+ "pyo3",
65
+ ]
66
+
67
+ [[package]]
68
+ name = "lazyivy"
69
+ version = "0.6.4"
70
+ source = "registry+https://github.com/rust-lang/crates.io-index"
71
+ checksum = "dad545e879db1b0ea6e277b703eb9161c0825987a9a6c35239b0c24eb25d4ccd"
72
+ dependencies = [
73
+ "ndarray",
74
+ "thiserror",
75
+ ]
76
+
77
+ [[package]]
78
+ name = "libc"
79
+ version = "0.2.182"
80
+ source = "registry+https://github.com/rust-lang/crates.io-index"
81
+ checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
82
+
83
+ [[package]]
84
+ name = "matrixmultiply"
85
+ version = "0.3.10"
86
+ source = "registry+https://github.com/rust-lang/crates.io-index"
87
+ checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
88
+ dependencies = [
89
+ "autocfg",
90
+ "rawpointer",
91
+ ]
92
+
93
+ [[package]]
94
+ name = "ndarray"
95
+ version = "0.17.2"
96
+ source = "registry+https://github.com/rust-lang/crates.io-index"
97
+ checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d"
98
+ dependencies = [
99
+ "matrixmultiply",
100
+ "num-complex",
101
+ "num-integer",
102
+ "num-traits",
103
+ "portable-atomic",
104
+ "portable-atomic-util",
105
+ "rawpointer",
106
+ "rayon",
107
+ ]
108
+
109
+ [[package]]
110
+ name = "num-complex"
111
+ version = "0.4.6"
112
+ source = "registry+https://github.com/rust-lang/crates.io-index"
113
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
114
+ dependencies = [
115
+ "num-traits",
116
+ ]
117
+
118
+ [[package]]
119
+ name = "num-integer"
120
+ version = "0.1.46"
121
+ source = "registry+https://github.com/rust-lang/crates.io-index"
122
+ checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
123
+ dependencies = [
124
+ "num-traits",
125
+ ]
126
+
127
+ [[package]]
128
+ name = "num-traits"
129
+ version = "0.2.19"
130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
131
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
132
+ dependencies = [
133
+ "autocfg",
134
+ ]
135
+
136
+ [[package]]
137
+ name = "numpy"
138
+ version = "0.28.0"
139
+ source = "registry+https://github.com/rust-lang/crates.io-index"
140
+ checksum = "778da78c64ddc928ebf5ad9df5edf0789410ff3bdbf3619aed51cd789a6af1e2"
141
+ dependencies = [
142
+ "libc",
143
+ "ndarray",
144
+ "num-complex",
145
+ "num-integer",
146
+ "num-traits",
147
+ "pyo3",
148
+ "pyo3-build-config",
149
+ "rustc-hash",
150
+ ]
151
+
152
+ [[package]]
153
+ name = "once_cell"
154
+ version = "1.21.3"
155
+ source = "registry+https://github.com/rust-lang/crates.io-index"
156
+ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
157
+
158
+ [[package]]
159
+ name = "portable-atomic"
160
+ version = "1.13.1"
161
+ source = "registry+https://github.com/rust-lang/crates.io-index"
162
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
163
+
164
+ [[package]]
165
+ name = "portable-atomic-util"
166
+ version = "0.2.5"
167
+ source = "registry+https://github.com/rust-lang/crates.io-index"
168
+ checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5"
169
+ dependencies = [
170
+ "portable-atomic",
171
+ ]
172
+
173
+ [[package]]
174
+ name = "proc-macro2"
175
+ version = "1.0.106"
176
+ source = "registry+https://github.com/rust-lang/crates.io-index"
177
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
178
+ dependencies = [
179
+ "unicode-ident",
180
+ ]
181
+
182
+ [[package]]
183
+ name = "pyo3"
184
+ version = "0.28.2"
185
+ source = "registry+https://github.com/rust-lang/crates.io-index"
186
+ checksum = "cf85e27e86080aafd5a22eae58a162e133a589551542b3e5cee4beb27e54f8e1"
187
+ dependencies = [
188
+ "inventory",
189
+ "libc",
190
+ "once_cell",
191
+ "portable-atomic",
192
+ "pyo3-build-config",
193
+ "pyo3-ffi",
194
+ "pyo3-macros",
195
+ ]
196
+
197
+ [[package]]
198
+ name = "pyo3-build-config"
199
+ version = "0.28.2"
200
+ source = "registry+https://github.com/rust-lang/crates.io-index"
201
+ checksum = "8bf94ee265674bf76c09fa430b0e99c26e319c945d96ca0d5a8215f31bf81cf7"
202
+ dependencies = [
203
+ "target-lexicon",
204
+ ]
205
+
206
+ [[package]]
207
+ name = "pyo3-ffi"
208
+ version = "0.28.2"
209
+ source = "registry+https://github.com/rust-lang/crates.io-index"
210
+ checksum = "491aa5fc66d8059dd44a75f4580a2962c1862a1c2945359db36f6c2818b748dc"
211
+ dependencies = [
212
+ "libc",
213
+ "pyo3-build-config",
214
+ ]
215
+
216
+ [[package]]
217
+ name = "pyo3-macros"
218
+ version = "0.28.2"
219
+ source = "registry+https://github.com/rust-lang/crates.io-index"
220
+ checksum = "f5d671734e9d7a43449f8480f8b38115df67bef8d21f76837fa75ee7aaa5e52e"
221
+ dependencies = [
222
+ "proc-macro2",
223
+ "pyo3-macros-backend",
224
+ "quote",
225
+ "syn",
226
+ ]
227
+
228
+ [[package]]
229
+ name = "pyo3-macros-backend"
230
+ version = "0.28.2"
231
+ source = "registry+https://github.com/rust-lang/crates.io-index"
232
+ checksum = "22faaa1ce6c430a1f71658760497291065e6450d7b5dc2bcf254d49f66ee700a"
233
+ dependencies = [
234
+ "heck",
235
+ "proc-macro2",
236
+ "pyo3-build-config",
237
+ "quote",
238
+ "syn",
239
+ ]
240
+
241
+ [[package]]
242
+ name = "quote"
243
+ version = "1.0.44"
244
+ source = "registry+https://github.com/rust-lang/crates.io-index"
245
+ checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
246
+ dependencies = [
247
+ "proc-macro2",
248
+ ]
249
+
250
+ [[package]]
251
+ name = "rawpointer"
252
+ version = "0.2.1"
253
+ source = "registry+https://github.com/rust-lang/crates.io-index"
254
+ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
255
+
256
+ [[package]]
257
+ name = "rayon"
258
+ version = "1.11.0"
259
+ source = "registry+https://github.com/rust-lang/crates.io-index"
260
+ checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
261
+ dependencies = [
262
+ "either",
263
+ "rayon-core",
264
+ ]
265
+
266
+ [[package]]
267
+ name = "rayon-core"
268
+ version = "1.13.0"
269
+ source = "registry+https://github.com/rust-lang/crates.io-index"
270
+ checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
271
+ dependencies = [
272
+ "crossbeam-deque",
273
+ "crossbeam-utils",
274
+ ]
275
+
276
+ [[package]]
277
+ name = "rustc-hash"
278
+ version = "2.1.1"
279
+ source = "registry+https://github.com/rust-lang/crates.io-index"
280
+ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
281
+
282
+ [[package]]
283
+ name = "rustversion"
284
+ version = "1.0.22"
285
+ source = "registry+https://github.com/rust-lang/crates.io-index"
286
+ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
287
+
288
+ [[package]]
289
+ name = "syn"
290
+ version = "2.0.117"
291
+ source = "registry+https://github.com/rust-lang/crates.io-index"
292
+ checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
293
+ dependencies = [
294
+ "proc-macro2",
295
+ "quote",
296
+ "unicode-ident",
297
+ ]
298
+
299
+ [[package]]
300
+ name = "target-lexicon"
301
+ version = "0.13.5"
302
+ source = "registry+https://github.com/rust-lang/crates.io-index"
303
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
304
+
305
+ [[package]]
306
+ name = "thiserror"
307
+ version = "1.0.69"
308
+ source = "registry+https://github.com/rust-lang/crates.io-index"
309
+ checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
310
+ dependencies = [
311
+ "thiserror-impl",
312
+ ]
313
+
314
+ [[package]]
315
+ name = "thiserror-impl"
316
+ version = "1.0.69"
317
+ source = "registry+https://github.com/rust-lang/crates.io-index"
318
+ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
319
+ dependencies = [
320
+ "proc-macro2",
321
+ "quote",
322
+ "syn",
323
+ ]
324
+
325
+ [[package]]
326
+ name = "unicode-ident"
327
+ version = "1.0.24"
328
+ source = "registry+https://github.com/rust-lang/crates.io-index"
329
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
@@ -0,0 +1,16 @@
1
+ [package]
2
+ name = "iupitermag"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ readme = "README.md"
6
+
7
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
+ [lib]
9
+ name = "iupitermag"
10
+ crate-type = ["cdylib"]
11
+
12
+ [dependencies]
13
+ lazyivy = "0.6.4"
14
+ ndarray = { version = "0.17.2", features = ["rayon"] }
15
+ numpy = { version = "0.28.0" }
16
+ pyo3 = { version = "0.28.2", features = ["extension-module", "abi3-py312", "multiple-pymethods"] }
@@ -0,0 +1,16 @@
1
+ Copyright (c) 2026 Yash Sarkango
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
4
+ associated documentation files (the “Software”), to deal in the Software without restriction,
5
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
6
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
7
+ furnished to do so, subject to the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be included in all copies or
10
+ substantial portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
13
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
14
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
15
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
16
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.