raygeo 0.1.0__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 (79) hide show
  1. raygeo-0.1.0/.github/workflows/ci.yml +45 -0
  2. raygeo-0.1.0/.github/workflows/release.yml +90 -0
  3. raygeo-0.1.0/.gitignore +5 -0
  4. raygeo-0.1.0/Cargo.lock +300 -0
  5. raygeo-0.1.0/Cargo.toml +15 -0
  6. raygeo-0.1.0/PKG-INFO +295 -0
  7. raygeo-0.1.0/README.md +278 -0
  8. raygeo-0.1.0/crates/rayforge-geo/Cargo.toml +11 -0
  9. raygeo-0.1.0/crates/rayforge-geo/src/algo/clipping.rs +212 -0
  10. raygeo-0.1.0/crates/rayforge-geo/src/algo/fitting.rs +999 -0
  11. raygeo-0.1.0/crates/rayforge-geo/src/algo/minkowski.rs +274 -0
  12. raygeo-0.1.0/crates/rayforge-geo/src/algo/mod.rs +16 -0
  13. raygeo-0.1.0/crates/rayforge-geo/src/algo/simplify.rs +193 -0
  14. raygeo-0.1.0/crates/rayforge-geo/src/algo/smooth.rs +304 -0
  15. raygeo-0.1.0/crates/rayforge-geo/src/constants.rs +50 -0
  16. raygeo-0.1.0/crates/rayforge-geo/src/lib.rs +40 -0
  17. raygeo-0.1.0/crates/rayforge-geo/src/path/analysis.rs +770 -0
  18. raygeo-0.1.0/crates/rayforge-geo/src/path/cleanup.rs +269 -0
  19. raygeo-0.1.0/crates/rayforge-geo/src/path/geometry.rs +469 -0
  20. raygeo-0.1.0/crates/rayforge-geo/src/path/intersect.rs +269 -0
  21. raygeo-0.1.0/crates/rayforge-geo/src/path/mod.rs +20 -0
  22. raygeo-0.1.0/crates/rayforge-geo/src/path/query.rs +590 -0
  23. raygeo-0.1.0/crates/rayforge-geo/src/path/split.rs +629 -0
  24. raygeo-0.1.0/crates/rayforge-geo/src/path/transform.rs +573 -0
  25. raygeo-0.1.0/crates/rayforge-geo/src/shape/arc.rs +645 -0
  26. raygeo-0.1.0/crates/rayforge-geo/src/shape/bezier.rs +865 -0
  27. raygeo-0.1.0/crates/rayforge-geo/src/shape/circle.rs +195 -0
  28. raygeo-0.1.0/crates/rayforge-geo/src/shape/line.rs +381 -0
  29. raygeo-0.1.0/crates/rayforge-geo/src/shape/mod.rs +17 -0
  30. raygeo-0.1.0/crates/rayforge-geo/src/shape/point.rs +23 -0
  31. raygeo-0.1.0/crates/rayforge-geo/src/shape/polygon.rs +978 -0
  32. raygeo-0.1.0/crates/rayforge-geo/src/types.rs +193 -0
  33. raygeo-0.1.0/pyproject.toml +35 -0
  34. raygeo-0.1.0/raygeo-stubs/__init__.py +0 -0
  35. raygeo-0.1.0/raygeo-stubs/__init__.pyi +313 -0
  36. raygeo-0.1.0/raygeo-stubs/algo/__init__.py +0 -0
  37. raygeo-0.1.0/raygeo-stubs/algo/__init__.pyi +12 -0
  38. raygeo-0.1.0/raygeo-stubs/algo/clipping.pyi +75 -0
  39. raygeo-0.1.0/raygeo-stubs/algo/fitting.pyi +238 -0
  40. raygeo-0.1.0/raygeo-stubs/algo/minkowski.pyi +123 -0
  41. raygeo-0.1.0/raygeo-stubs/algo/simplify.pyi +48 -0
  42. raygeo-0.1.0/raygeo-stubs/algo/smooth.pyi +103 -0
  43. raygeo-0.1.0/raygeo-stubs/geometry.pyi +807 -0
  44. raygeo-0.1.0/raygeo-stubs/path.pyi +830 -0
  45. raygeo-0.1.0/raygeo-stubs/shape/__init__.py +0 -0
  46. raygeo-0.1.0/raygeo-stubs/shape/__init__.pyi +10 -0
  47. raygeo-0.1.0/raygeo-stubs/shape/arc.pyi +283 -0
  48. raygeo-0.1.0/raygeo-stubs/shape/bezier.pyi +366 -0
  49. raygeo-0.1.0/raygeo-stubs/shape/circle.pyi +102 -0
  50. raygeo-0.1.0/raygeo-stubs/shape/line.pyi +186 -0
  51. raygeo-0.1.0/raygeo-stubs/shape/point.pyi +26 -0
  52. raygeo-0.1.0/raygeo-stubs/shape/polygon.pyi +633 -0
  53. raygeo-0.1.0/raygeo-stubs/shape/rect.pyi +58 -0
  54. raygeo-0.1.0/src/algo.rs +353 -0
  55. raygeo-0.1.0/src/flex_point.rs +155 -0
  56. raygeo-0.1.0/src/geometry.rs +1053 -0
  57. raygeo-0.1.0/src/lib.rs +257 -0
  58. raygeo-0.1.0/src/path.rs +942 -0
  59. raygeo-0.1.0/src/shape.rs +1281 -0
  60. raygeo-0.1.0/tests/test_analysis.py +404 -0
  61. raygeo-0.1.0/tests/test_arc.py +696 -0
  62. raygeo-0.1.0/tests/test_bezier.py +521 -0
  63. raygeo-0.1.0/tests/test_circle.py +186 -0
  64. raygeo-0.1.0/tests/test_cleanup.py +622 -0
  65. raygeo-0.1.0/tests/test_clipping.py +311 -0
  66. raygeo-0.1.0/tests/test_contours.py +536 -0
  67. raygeo-0.1.0/tests/test_fitting.py +996 -0
  68. raygeo-0.1.0/tests/test_geometry.py +1421 -0
  69. raygeo-0.1.0/tests/test_intersect.py +187 -0
  70. raygeo-0.1.0/tests/test_linearize.py +71 -0
  71. raygeo-0.1.0/tests/test_minkowski.py +264 -0
  72. raygeo-0.1.0/tests/test_polygon.py +1181 -0
  73. raygeo-0.1.0/tests/test_primitives.py +242 -0
  74. raygeo-0.1.0/tests/test_query.py +171 -0
  75. raygeo-0.1.0/tests/test_query_numpy.py +83 -0
  76. raygeo-0.1.0/tests/test_simplify.py +184 -0
  77. raygeo-0.1.0/tests/test_smooth.py +190 -0
  78. raygeo-0.1.0/tests/test_split.py +106 -0
  79. raygeo-0.1.0/tests/test_transform.py +649 -0
@@ -0,0 +1,45 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ rust-tests:
11
+ name: Rust tests
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - uses: actions-rust-lang/setup-rust-toolchain@v1
17
+
18
+ - run: cargo test
19
+
20
+ python-tests:
21
+ name: Python tests (${{ matrix.os }})
22
+ runs-on: ${{ matrix.os }}
23
+ strategy:
24
+ fail-fast: false
25
+ matrix:
26
+ os: [ubuntu-latest, windows-latest, macos-15-intel, macos-15]
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+
30
+ - uses: actions/setup-python@v5
31
+ with:
32
+ python-version: "3.x"
33
+
34
+ - name: Build wheel
35
+ uses: PyO3/maturin-action@v1
36
+ with:
37
+ command: build
38
+ args: --release --out dist
39
+
40
+ - name: Install wheel and test dependencies
41
+ run: pip install dist/*.whl pytest pytest-mock
42
+ shell: bash
43
+
44
+ - name: Run pytest
45
+ run: pytest tests/ -v
@@ -0,0 +1,90 @@
1
+ name: Build and Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ build-wheels:
10
+ name: Build wheels on ${{ matrix.os }}
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ os: [ubuntu-latest, windows-latest, macos-15-intel, macos-15]
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: "3.13"
22
+
23
+ - uses: actions-rust-lang/setup-rust-toolchain@v1
24
+
25
+ - name: Install maturin
26
+ run: pip install maturin
27
+
28
+ - name: Build wheel
29
+ run: maturin build --release --out dist
30
+
31
+ - name: Repair wheel (Linux only)
32
+ if: runner.os == 'Linux'
33
+ run: |
34
+ pip install auditwheel
35
+ auditwheel repair dist/*.whl --wheel-dir dist
36
+
37
+ - name: Upload wheels as artifacts
38
+ uses: actions/upload-artifact@v4
39
+ with:
40
+ name: wheels-${{ matrix.os }}
41
+ path: dist/*.whl
42
+
43
+ build-sdist:
44
+ name: Build sdist
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+
49
+ - uses: actions/setup-python@v5
50
+ with:
51
+ python-version: "3.13"
52
+
53
+ - uses: actions-rust-lang/setup-rust-toolchain@v1
54
+
55
+ - name: Install maturin
56
+ run: pip install maturin
57
+
58
+ - name: Build sdist
59
+ run: maturin sdist --out dist
60
+
61
+ - name: Upload sdist as artifact
62
+ uses: actions/upload-artifact@v4
63
+ with:
64
+ name: sdist
65
+ path: dist/*.tar.gz
66
+
67
+ publish:
68
+ name: Publish to PyPI
69
+ needs: [build-wheels, build-sdist]
70
+ runs-on: ubuntu-latest
71
+ permissions:
72
+ id-token: write
73
+ contents: write
74
+ steps:
75
+ - name: Download all artifacts
76
+ uses: actions/download-artifact@v4
77
+ with:
78
+ path: dist
79
+ merge-multiple: true
80
+
81
+ - name: Publish to PyPI
82
+ uses: pypa/gh-action-pypi-publish@release/v1
83
+ with:
84
+ packages-dir: dist/
85
+
86
+ - name: Upload artifacts to GitHub Release
87
+ uses: softprops/action-gh-release@v2
88
+ if: startsWith(github.ref, 'refs/tags/')
89
+ with:
90
+ files: dist/*
@@ -0,0 +1,5 @@
1
+ /target
2
+ __pycache__/
3
+ *.pyc
4
+ *.so
5
+ *.pyd
@@ -0,0 +1,300 @@
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 = "cc"
13
+ version = "1.2.62"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98"
16
+ dependencies = [
17
+ "find-msvc-tools",
18
+ "shlex",
19
+ ]
20
+
21
+ [[package]]
22
+ name = "clipper2"
23
+ version = "0.6.0"
24
+ source = "registry+https://github.com/rust-lang/crates.io-index"
25
+ checksum = "88f87fde54c74a3f45d04e691a14deb3eaebc85c3c889d59eca9129aa3894c5a"
26
+ dependencies = [
27
+ "clipper2c-sys",
28
+ "libc",
29
+ "thiserror",
30
+ ]
31
+
32
+ [[package]]
33
+ name = "clipper2c-sys"
34
+ version = "0.2.0"
35
+ source = "registry+https://github.com/rust-lang/crates.io-index"
36
+ checksum = "0afb0f7cef3e89b98fb687395b7d12c70521871f3a876465641ed5aeb450b9a8"
37
+ dependencies = [
38
+ "cc",
39
+ "libc",
40
+ ]
41
+
42
+ [[package]]
43
+ name = "find-msvc-tools"
44
+ version = "0.1.9"
45
+ source = "registry+https://github.com/rust-lang/crates.io-index"
46
+ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
47
+
48
+ [[package]]
49
+ name = "heck"
50
+ version = "0.5.0"
51
+ source = "registry+https://github.com/rust-lang/crates.io-index"
52
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
53
+
54
+ [[package]]
55
+ name = "libc"
56
+ version = "0.2.186"
57
+ source = "registry+https://github.com/rust-lang/crates.io-index"
58
+ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
59
+
60
+ [[package]]
61
+ name = "matrixmultiply"
62
+ version = "0.3.10"
63
+ source = "registry+https://github.com/rust-lang/crates.io-index"
64
+ checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
65
+ dependencies = [
66
+ "autocfg",
67
+ "rawpointer",
68
+ ]
69
+
70
+ [[package]]
71
+ name = "ndarray"
72
+ version = "0.17.2"
73
+ source = "registry+https://github.com/rust-lang/crates.io-index"
74
+ checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d"
75
+ dependencies = [
76
+ "matrixmultiply",
77
+ "num-complex",
78
+ "num-integer",
79
+ "num-traits",
80
+ "portable-atomic",
81
+ "portable-atomic-util",
82
+ "rawpointer",
83
+ ]
84
+
85
+ [[package]]
86
+ name = "num-complex"
87
+ version = "0.4.6"
88
+ source = "registry+https://github.com/rust-lang/crates.io-index"
89
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
90
+ dependencies = [
91
+ "num-traits",
92
+ ]
93
+
94
+ [[package]]
95
+ name = "num-integer"
96
+ version = "0.1.46"
97
+ source = "registry+https://github.com/rust-lang/crates.io-index"
98
+ checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
99
+ dependencies = [
100
+ "num-traits",
101
+ ]
102
+
103
+ [[package]]
104
+ name = "num-traits"
105
+ version = "0.2.19"
106
+ source = "registry+https://github.com/rust-lang/crates.io-index"
107
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
108
+ dependencies = [
109
+ "autocfg",
110
+ ]
111
+
112
+ [[package]]
113
+ name = "numpy"
114
+ version = "0.28.0"
115
+ source = "registry+https://github.com/rust-lang/crates.io-index"
116
+ checksum = "778da78c64ddc928ebf5ad9df5edf0789410ff3bdbf3619aed51cd789a6af1e2"
117
+ dependencies = [
118
+ "libc",
119
+ "ndarray",
120
+ "num-complex",
121
+ "num-integer",
122
+ "num-traits",
123
+ "pyo3",
124
+ "pyo3-build-config",
125
+ "rustc-hash",
126
+ ]
127
+
128
+ [[package]]
129
+ name = "once_cell"
130
+ version = "1.21.4"
131
+ source = "registry+https://github.com/rust-lang/crates.io-index"
132
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
133
+
134
+ [[package]]
135
+ name = "portable-atomic"
136
+ version = "1.13.1"
137
+ source = "registry+https://github.com/rust-lang/crates.io-index"
138
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
139
+
140
+ [[package]]
141
+ name = "portable-atomic-util"
142
+ version = "0.2.7"
143
+ source = "registry+https://github.com/rust-lang/crates.io-index"
144
+ checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
145
+ dependencies = [
146
+ "portable-atomic",
147
+ ]
148
+
149
+ [[package]]
150
+ name = "proc-macro2"
151
+ version = "1.0.106"
152
+ source = "registry+https://github.com/rust-lang/crates.io-index"
153
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
154
+ dependencies = [
155
+ "unicode-ident",
156
+ ]
157
+
158
+ [[package]]
159
+ name = "pyo3"
160
+ version = "0.28.3"
161
+ source = "registry+https://github.com/rust-lang/crates.io-index"
162
+ checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12"
163
+ dependencies = [
164
+ "libc",
165
+ "once_cell",
166
+ "portable-atomic",
167
+ "pyo3-build-config",
168
+ "pyo3-ffi",
169
+ "pyo3-macros",
170
+ ]
171
+
172
+ [[package]]
173
+ name = "pyo3-build-config"
174
+ version = "0.28.3"
175
+ source = "registry+https://github.com/rust-lang/crates.io-index"
176
+ checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e"
177
+ dependencies = [
178
+ "target-lexicon",
179
+ ]
180
+
181
+ [[package]]
182
+ name = "pyo3-ffi"
183
+ version = "0.28.3"
184
+ source = "registry+https://github.com/rust-lang/crates.io-index"
185
+ checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e"
186
+ dependencies = [
187
+ "libc",
188
+ "pyo3-build-config",
189
+ ]
190
+
191
+ [[package]]
192
+ name = "pyo3-macros"
193
+ version = "0.28.3"
194
+ source = "registry+https://github.com/rust-lang/crates.io-index"
195
+ checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813"
196
+ dependencies = [
197
+ "proc-macro2",
198
+ "pyo3-macros-backend",
199
+ "quote",
200
+ "syn",
201
+ ]
202
+
203
+ [[package]]
204
+ name = "pyo3-macros-backend"
205
+ version = "0.28.3"
206
+ source = "registry+https://github.com/rust-lang/crates.io-index"
207
+ checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb"
208
+ dependencies = [
209
+ "heck",
210
+ "proc-macro2",
211
+ "pyo3-build-config",
212
+ "quote",
213
+ "syn",
214
+ ]
215
+
216
+ [[package]]
217
+ name = "quote"
218
+ version = "1.0.45"
219
+ source = "registry+https://github.com/rust-lang/crates.io-index"
220
+ checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
221
+ dependencies = [
222
+ "proc-macro2",
223
+ ]
224
+
225
+ [[package]]
226
+ name = "rawpointer"
227
+ version = "0.2.1"
228
+ source = "registry+https://github.com/rust-lang/crates.io-index"
229
+ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
230
+
231
+ [[package]]
232
+ name = "rayforge-geo"
233
+ version = "0.1.0"
234
+ dependencies = [
235
+ "clipper2",
236
+ ]
237
+
238
+ [[package]]
239
+ name = "rayforge-geo-py"
240
+ version = "0.1.0"
241
+ dependencies = [
242
+ "numpy",
243
+ "pyo3",
244
+ "rayforge-geo",
245
+ ]
246
+
247
+ [[package]]
248
+ name = "rustc-hash"
249
+ version = "2.1.2"
250
+ source = "registry+https://github.com/rust-lang/crates.io-index"
251
+ checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
252
+
253
+ [[package]]
254
+ name = "shlex"
255
+ version = "1.3.0"
256
+ source = "registry+https://github.com/rust-lang/crates.io-index"
257
+ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
258
+
259
+ [[package]]
260
+ name = "syn"
261
+ version = "2.0.117"
262
+ source = "registry+https://github.com/rust-lang/crates.io-index"
263
+ checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
264
+ dependencies = [
265
+ "proc-macro2",
266
+ "quote",
267
+ "unicode-ident",
268
+ ]
269
+
270
+ [[package]]
271
+ name = "target-lexicon"
272
+ version = "0.13.5"
273
+ source = "registry+https://github.com/rust-lang/crates.io-index"
274
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
275
+
276
+ [[package]]
277
+ name = "thiserror"
278
+ version = "2.0.18"
279
+ source = "registry+https://github.com/rust-lang/crates.io-index"
280
+ checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
281
+ dependencies = [
282
+ "thiserror-impl",
283
+ ]
284
+
285
+ [[package]]
286
+ name = "thiserror-impl"
287
+ version = "2.0.18"
288
+ source = "registry+https://github.com/rust-lang/crates.io-index"
289
+ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
290
+ dependencies = [
291
+ "proc-macro2",
292
+ "quote",
293
+ "syn",
294
+ ]
295
+
296
+ [[package]]
297
+ name = "unicode-ident"
298
+ version = "1.0.24"
299
+ source = "registry+https://github.com/rust-lang/crates.io-index"
300
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
@@ -0,0 +1,15 @@
1
+ [package]
2
+ name = "rayforge-geo-py"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ description = "PyO3 bindings for RayGeo geometry engine"
6
+ readme = "README.md"
7
+
8
+ [dependencies]
9
+ pyo3 = { version = "0.28", features = ["extension-module"] }
10
+ rayforge-geo = { path = "crates/rayforge-geo" }
11
+ numpy = "0.28"
12
+
13
+ [lib]
14
+ name = "raygeo"
15
+ crate-type = ["cdylib"]