geometrykit 0.5.0__tar.gz → 0.5.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.
- geometrykit-0.5.1/PKG-INFO +107 -0
- geometrykit-0.5.1/README.md +78 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/pyproject.toml +1 -1
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/__init__.py +1 -1
- geometrykit-0.5.1/python/geometrykit.egg-info/PKG-INFO +107 -0
- geometrykit-0.5.0/PKG-INFO +0 -94
- geometrykit-0.5.0/README.md +0 -65
- geometrykit-0.5.0/python/geometrykit.egg-info/PKG-INFO +0 -94
- {geometrykit-0.5.0 → geometrykit-0.5.1}/COPYING +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/COPYING.LESSER +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/cage.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/contract.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/engine.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/export.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/__init__.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/_bridge.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/biarc.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/curve.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/field.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/frames.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/intersection.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/path.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/patterns.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/primitives.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/spiral.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/subdivision.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/surface.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/geometry/transform.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/__init__.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/__init__.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/curve_np.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/fit_np.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/linalg_np.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/patch_g1.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/patch_np.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/section_np.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/_npu/surface_np.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit/runtimes/dispatch.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit.egg-info/SOURCES.txt +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit.egg-info/dependency_links.txt +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit.egg-info/requires.txt +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/python/geometrykit.egg-info/top_level.txt +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/setup.cfg +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/tests/test_cage.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/tests/test_contract.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/tests/test_engine_parity.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/tests/test_engine_probe.py +0 -0
- {geometrykit-0.5.0 → geometrykit-0.5.1}/tests/test_repo_boundary.py +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: geometrykit
|
|
3
|
+
Version: 0.5.1
|
|
4
|
+
Summary: Geometry primitives and NURBS data model — the geometry substrate for the ifckit family
|
|
5
|
+
Author: Sander Boer
|
|
6
|
+
License-Expression: LGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/maucworks/geometrykit
|
|
8
|
+
Project-URL: Changelog, https://github.com/maucworks/geometrykit/blob/master/CHANGELOG.md
|
|
9
|
+
Keywords: geometry,nurbs,vector,curve,surface,splines
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
19
|
+
Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: COPYING.LESSER
|
|
23
|
+
License-File: COPYING
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: pytest<10,>=7; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
|
|
27
|
+
Requires-Dist: hypothesis<8,>=6; extra == "dev"
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
# geometrykit
|
|
31
|
+
|
|
32
|
+
OCC-free NURBS geometry for the ifckit family: value types (`Vec`,
|
|
33
|
+
`Plane`, `Line`, `Arc`, `Polyline`, `Path`, `Curve`, `Surface`), NURBS
|
|
34
|
+
evaluation / tangents / normals / projection, energy-minimising patch
|
|
35
|
+
fills with G1/G2 continuity options, plane × surface sections with
|
|
36
|
+
pcurve tracks, and STEP/OBJ/STL writers. No OCCT, no compiled
|
|
37
|
+
toolchain required to install.
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install geometrykit # Python >= 3.9, incl. Rhino 8's CPython 3.9
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Binary wheels (`cp39-abi3`) carry the compiled Rust core
|
|
46
|
+
(`geometrykit._rust`) where a platform build exists, and the public
|
|
47
|
+
API routes to it automatically. Platforms without a matching wheel get
|
|
48
|
+
the pure-Python/numpy mirror instead: same API, same results, slower.
|
|
49
|
+
`GEOMETRYKIT_ENGINE=npu` forces the mirror; the default prefers the
|
|
50
|
+
accelerator when importable.
|
|
51
|
+
|
|
52
|
+
## Quickstart
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from geometrykit import engine
|
|
56
|
+
from geometrykit.geometry import Curve, Surface
|
|
57
|
+
from geometrykit.geometry.primitives import Vec
|
|
58
|
+
|
|
59
|
+
curves = [
|
|
60
|
+
Curve.from_tangents(start=Vec(0, 0, 2.4), tan_start=Vec(1, 0, 0),
|
|
61
|
+
end=Vec(8, 0, 2.8), tan_end=Vec(1, 0, 0), scale=3.0),
|
|
62
|
+
Curve.from_tangents(start=Vec(8, 0, 2.8), tan_start=Vec(0, 1, 0),
|
|
63
|
+
end=Vec(8, 6, 2.9), tan_end=Vec(0, 1, 0), scale=3.0),
|
|
64
|
+
Curve.from_tangents(start=Vec(0, 6, 3.2), tan_start=Vec(1, 0, 0),
|
|
65
|
+
end=Vec(8, 6, 2.9), tan_end=Vec(1, 0, 0), scale=3.0),
|
|
66
|
+
Curve.from_tangents(start=Vec(0, 6, 3.2), tan_start=Vec(0, -1, 0),
|
|
67
|
+
end=Vec(0, 0, 2.4), tan_end=Vec(0, -1, 0), scale=3.0),
|
|
68
|
+
]
|
|
69
|
+
surface = Surface.patch(curves, fill="energy", nu=16, nv=16, tangency=0.75)
|
|
70
|
+
proj, (u, v) = surface.project(Vec(-1.0, -1.0, 3.0))
|
|
71
|
+
print(engine.engine(), proj, (u, v))
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## What is in here
|
|
75
|
+
|
|
76
|
+
- NURBS evaluation, analytic tangents and normals, closest-point
|
|
77
|
+
projection (kernel Newton, no OCC).
|
|
78
|
+
- Energy-minimising patch fill over a boundary ring
|
|
79
|
+
(`Surface.patch(..., fill="energy")`), with tangency strength and
|
|
80
|
+
optional G2 and adaptive re-fit.
|
|
81
|
+
- Plane × surface sections with parameter tracks, batch level sets,
|
|
82
|
+
and node-exact diagrid weaving.
|
|
83
|
+
- Writers: STEP (AP214 B-rep), OBJ, STL.
|
|
84
|
+
- `geometrykit-core` on crates.io: the same kernels as a pure-Rust
|
|
85
|
+
dependency (no bindings, no unsafe code).
|
|
86
|
+
|
|
87
|
+
Out of scope by design: B-rep booleans and tolerant topology (volumes
|
|
88
|
+
are OCCT's domain); IFC serialisation lives in ifckit.
|
|
89
|
+
|
|
90
|
+
## Development
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
94
|
+
.venv/bin/python -m pytest tests/ -q
|
|
95
|
+
GEOMETRYKIT_ENGINE=npu .venv/bin/python -m pytest tests/ -q
|
|
96
|
+
GEOMETRYKIT_ENGINE=rust .venv/bin/python -m pytest tests/ -q
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The oracle tier checks the kernel against OCCT and stays local
|
|
100
|
+
(`pythonocc-core` is conda-only; see AGENTS.md). Every suite train
|
|
101
|
+
runs in both engine configurations before a commit lands.
|
|
102
|
+
|
|
103
|
+
## Licensing
|
|
104
|
+
|
|
105
|
+
LGPL-3.0-or-later (`COPYING.LESSER`, `COPYING`). Kernel code promoted
|
|
106
|
+
from ifckit's geometry package carries a provenance header recording
|
|
107
|
+
its origin.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# geometrykit
|
|
2
|
+
|
|
3
|
+
OCC-free NURBS geometry for the ifckit family: value types (`Vec`,
|
|
4
|
+
`Plane`, `Line`, `Arc`, `Polyline`, `Path`, `Curve`, `Surface`), NURBS
|
|
5
|
+
evaluation / tangents / normals / projection, energy-minimising patch
|
|
6
|
+
fills with G1/G2 continuity options, plane × surface sections with
|
|
7
|
+
pcurve tracks, and STEP/OBJ/STL writers. No OCCT, no compiled
|
|
8
|
+
toolchain required to install.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pip install geometrykit # Python >= 3.9, incl. Rhino 8's CPython 3.9
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Binary wheels (`cp39-abi3`) carry the compiled Rust core
|
|
17
|
+
(`geometrykit._rust`) where a platform build exists, and the public
|
|
18
|
+
API routes to it automatically. Platforms without a matching wheel get
|
|
19
|
+
the pure-Python/numpy mirror instead: same API, same results, slower.
|
|
20
|
+
`GEOMETRYKIT_ENGINE=npu` forces the mirror; the default prefers the
|
|
21
|
+
accelerator when importable.
|
|
22
|
+
|
|
23
|
+
## Quickstart
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
from geometrykit import engine
|
|
27
|
+
from geometrykit.geometry import Curve, Surface
|
|
28
|
+
from geometrykit.geometry.primitives import Vec
|
|
29
|
+
|
|
30
|
+
curves = [
|
|
31
|
+
Curve.from_tangents(start=Vec(0, 0, 2.4), tan_start=Vec(1, 0, 0),
|
|
32
|
+
end=Vec(8, 0, 2.8), tan_end=Vec(1, 0, 0), scale=3.0),
|
|
33
|
+
Curve.from_tangents(start=Vec(8, 0, 2.8), tan_start=Vec(0, 1, 0),
|
|
34
|
+
end=Vec(8, 6, 2.9), tan_end=Vec(0, 1, 0), scale=3.0),
|
|
35
|
+
Curve.from_tangents(start=Vec(0, 6, 3.2), tan_start=Vec(1, 0, 0),
|
|
36
|
+
end=Vec(8, 6, 2.9), tan_end=Vec(1, 0, 0), scale=3.0),
|
|
37
|
+
Curve.from_tangents(start=Vec(0, 6, 3.2), tan_start=Vec(0, -1, 0),
|
|
38
|
+
end=Vec(0, 0, 2.4), tan_end=Vec(0, -1, 0), scale=3.0),
|
|
39
|
+
]
|
|
40
|
+
surface = Surface.patch(curves, fill="energy", nu=16, nv=16, tangency=0.75)
|
|
41
|
+
proj, (u, v) = surface.project(Vec(-1.0, -1.0, 3.0))
|
|
42
|
+
print(engine.engine(), proj, (u, v))
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## What is in here
|
|
46
|
+
|
|
47
|
+
- NURBS evaluation, analytic tangents and normals, closest-point
|
|
48
|
+
projection (kernel Newton, no OCC).
|
|
49
|
+
- Energy-minimising patch fill over a boundary ring
|
|
50
|
+
(`Surface.patch(..., fill="energy")`), with tangency strength and
|
|
51
|
+
optional G2 and adaptive re-fit.
|
|
52
|
+
- Plane × surface sections with parameter tracks, batch level sets,
|
|
53
|
+
and node-exact diagrid weaving.
|
|
54
|
+
- Writers: STEP (AP214 B-rep), OBJ, STL.
|
|
55
|
+
- `geometrykit-core` on crates.io: the same kernels as a pure-Rust
|
|
56
|
+
dependency (no bindings, no unsafe code).
|
|
57
|
+
|
|
58
|
+
Out of scope by design: B-rep booleans and tolerant topology (volumes
|
|
59
|
+
are OCCT's domain); IFC serialisation lives in ifckit.
|
|
60
|
+
|
|
61
|
+
## Development
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
65
|
+
.venv/bin/python -m pytest tests/ -q
|
|
66
|
+
GEOMETRYKIT_ENGINE=npu .venv/bin/python -m pytest tests/ -q
|
|
67
|
+
GEOMETRYKIT_ENGINE=rust .venv/bin/python -m pytest tests/ -q
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The oracle tier checks the kernel against OCCT and stays local
|
|
71
|
+
(`pythonocc-core` is conda-only; see AGENTS.md). Every suite train
|
|
72
|
+
runs in both engine configurations before a commit lands.
|
|
73
|
+
|
|
74
|
+
## Licensing
|
|
75
|
+
|
|
76
|
+
LGPL-3.0-or-later (`COPYING.LESSER`, `COPYING`). Kernel code promoted
|
|
77
|
+
from ifckit's geometry package carries a provenance header recording
|
|
78
|
+
its origin.
|
|
@@ -12,7 +12,7 @@ build-backend = "setuptools.build_meta"
|
|
|
12
12
|
|
|
13
13
|
[project]
|
|
14
14
|
name = "geometrykit"
|
|
15
|
-
version = "0.5.
|
|
15
|
+
version = "0.5.1"
|
|
16
16
|
description = "Geometry primitives and NURBS data model — the geometry substrate for the ifckit family"
|
|
17
17
|
readme = "README.md"
|
|
18
18
|
requires-python = ">=3.9"
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: geometrykit
|
|
3
|
+
Version: 0.5.1
|
|
4
|
+
Summary: Geometry primitives and NURBS data model — the geometry substrate for the ifckit family
|
|
5
|
+
Author: Sander Boer
|
|
6
|
+
License-Expression: LGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/maucworks/geometrykit
|
|
8
|
+
Project-URL: Changelog, https://github.com/maucworks/geometrykit/blob/master/CHANGELOG.md
|
|
9
|
+
Keywords: geometry,nurbs,vector,curve,surface,splines
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
19
|
+
Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: COPYING.LESSER
|
|
23
|
+
License-File: COPYING
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: pytest<10,>=7; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
|
|
27
|
+
Requires-Dist: hypothesis<8,>=6; extra == "dev"
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
# geometrykit
|
|
31
|
+
|
|
32
|
+
OCC-free NURBS geometry for the ifckit family: value types (`Vec`,
|
|
33
|
+
`Plane`, `Line`, `Arc`, `Polyline`, `Path`, `Curve`, `Surface`), NURBS
|
|
34
|
+
evaluation / tangents / normals / projection, energy-minimising patch
|
|
35
|
+
fills with G1/G2 continuity options, plane × surface sections with
|
|
36
|
+
pcurve tracks, and STEP/OBJ/STL writers. No OCCT, no compiled
|
|
37
|
+
toolchain required to install.
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install geometrykit # Python >= 3.9, incl. Rhino 8's CPython 3.9
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Binary wheels (`cp39-abi3`) carry the compiled Rust core
|
|
46
|
+
(`geometrykit._rust`) where a platform build exists, and the public
|
|
47
|
+
API routes to it automatically. Platforms without a matching wheel get
|
|
48
|
+
the pure-Python/numpy mirror instead: same API, same results, slower.
|
|
49
|
+
`GEOMETRYKIT_ENGINE=npu` forces the mirror; the default prefers the
|
|
50
|
+
accelerator when importable.
|
|
51
|
+
|
|
52
|
+
## Quickstart
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from geometrykit import engine
|
|
56
|
+
from geometrykit.geometry import Curve, Surface
|
|
57
|
+
from geometrykit.geometry.primitives import Vec
|
|
58
|
+
|
|
59
|
+
curves = [
|
|
60
|
+
Curve.from_tangents(start=Vec(0, 0, 2.4), tan_start=Vec(1, 0, 0),
|
|
61
|
+
end=Vec(8, 0, 2.8), tan_end=Vec(1, 0, 0), scale=3.0),
|
|
62
|
+
Curve.from_tangents(start=Vec(8, 0, 2.8), tan_start=Vec(0, 1, 0),
|
|
63
|
+
end=Vec(8, 6, 2.9), tan_end=Vec(0, 1, 0), scale=3.0),
|
|
64
|
+
Curve.from_tangents(start=Vec(0, 6, 3.2), tan_start=Vec(1, 0, 0),
|
|
65
|
+
end=Vec(8, 6, 2.9), tan_end=Vec(1, 0, 0), scale=3.0),
|
|
66
|
+
Curve.from_tangents(start=Vec(0, 6, 3.2), tan_start=Vec(0, -1, 0),
|
|
67
|
+
end=Vec(0, 0, 2.4), tan_end=Vec(0, -1, 0), scale=3.0),
|
|
68
|
+
]
|
|
69
|
+
surface = Surface.patch(curves, fill="energy", nu=16, nv=16, tangency=0.75)
|
|
70
|
+
proj, (u, v) = surface.project(Vec(-1.0, -1.0, 3.0))
|
|
71
|
+
print(engine.engine(), proj, (u, v))
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## What is in here
|
|
75
|
+
|
|
76
|
+
- NURBS evaluation, analytic tangents and normals, closest-point
|
|
77
|
+
projection (kernel Newton, no OCC).
|
|
78
|
+
- Energy-minimising patch fill over a boundary ring
|
|
79
|
+
(`Surface.patch(..., fill="energy")`), with tangency strength and
|
|
80
|
+
optional G2 and adaptive re-fit.
|
|
81
|
+
- Plane × surface sections with parameter tracks, batch level sets,
|
|
82
|
+
and node-exact diagrid weaving.
|
|
83
|
+
- Writers: STEP (AP214 B-rep), OBJ, STL.
|
|
84
|
+
- `geometrykit-core` on crates.io: the same kernels as a pure-Rust
|
|
85
|
+
dependency (no bindings, no unsafe code).
|
|
86
|
+
|
|
87
|
+
Out of scope by design: B-rep booleans and tolerant topology (volumes
|
|
88
|
+
are OCCT's domain); IFC serialisation lives in ifckit.
|
|
89
|
+
|
|
90
|
+
## Development
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
94
|
+
.venv/bin/python -m pytest tests/ -q
|
|
95
|
+
GEOMETRYKIT_ENGINE=npu .venv/bin/python -m pytest tests/ -q
|
|
96
|
+
GEOMETRYKIT_ENGINE=rust .venv/bin/python -m pytest tests/ -q
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The oracle tier checks the kernel against OCCT and stays local
|
|
100
|
+
(`pythonocc-core` is conda-only; see AGENTS.md). Every suite train
|
|
101
|
+
runs in both engine configurations before a commit lands.
|
|
102
|
+
|
|
103
|
+
## Licensing
|
|
104
|
+
|
|
105
|
+
LGPL-3.0-or-later (`COPYING.LESSER`, `COPYING`). Kernel code promoted
|
|
106
|
+
from ifckit's geometry package carries a provenance header recording
|
|
107
|
+
its origin.
|
geometrykit-0.5.0/PKG-INFO
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: geometrykit
|
|
3
|
-
Version: 0.5.0
|
|
4
|
-
Summary: Geometry primitives and NURBS data model — the geometry substrate for the ifckit family
|
|
5
|
-
Author: Sander Boer
|
|
6
|
-
License-Expression: LGPL-3.0-or-later
|
|
7
|
-
Project-URL: Homepage, https://github.com/maucworks/geometrykit
|
|
8
|
-
Project-URL: Changelog, https://github.com/maucworks/geometrykit/blob/master/CHANGELOG.md
|
|
9
|
-
Keywords: geometry,nurbs,vector,curve,surface,splines
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
19
|
-
Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
|
|
20
|
-
Requires-Python: >=3.9
|
|
21
|
-
Description-Content-Type: text/markdown
|
|
22
|
-
License-File: COPYING.LESSER
|
|
23
|
-
License-File: COPYING
|
|
24
|
-
Provides-Extra: dev
|
|
25
|
-
Requires-Dist: pytest<10,>=7; extra == "dev"
|
|
26
|
-
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
|
|
27
|
-
Requires-Dist: hypothesis<8,>=6; extra == "dev"
|
|
28
|
-
Dynamic: license-file
|
|
29
|
-
|
|
30
|
-
# geometrykit
|
|
31
|
-
|
|
32
|
-
Geometry primitives and NURBS data model: `Vec`, `Plane`, `Curve`, `Surface`,
|
|
33
|
-
`Path`, and (planned) G1 constrained patches, curve/surface clipping, trim
|
|
34
|
-
pcurves, and a tessellator — the geometry substrate for the ifckit family.
|
|
35
|
-
|
|
36
|
-
## Status
|
|
37
|
-
|
|
38
|
-
Source of truth: `github.com/maucworks/geometrykit` — check it out anywhere;
|
|
39
|
-
wheels are built from a checkout root (`python -m build`, `packages.find`
|
|
40
|
-
over this layout). The package itself is unaware of check-out locations.
|
|
41
|
-
|
|
42
|
-
Releases so far (0.0.1/0.0.2) are a **name claim + placeholder**: the API is not yet
|
|
43
|
-
published, and the package intentionally exports nothing beyond
|
|
44
|
-
`geometrykit.__version__`. Version bumps arrive with the first real
|
|
45
|
-
API (planned v0.1: primitives promoted from `ifckit.geometry`, extracted
|
|
46
|
-
from the A320 configurator corpus with its existing test coverage as oracle
|
|
47
|
-
spec).
|
|
48
|
-
|
|
49
|
-
## Development
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
53
|
-
.venv/bin/pytest tests/ -q # full suite (plain env)
|
|
54
|
-
|
|
55
|
-
# oracle tier: the tests that check the kernel against OCCT
|
|
56
|
-
conda env create -f environment.yml # once
|
|
57
|
-
conda run -n geometrykit-oracle python -m pytest tests/ -q
|
|
58
|
-
# with coverage + the staged ladder:
|
|
59
|
-
conda run -n geometrykit-oracle python -m pytest tests/ --cov -q
|
|
60
|
-
conda run -n geometrykit-oracle python -m coverage json -o /tmp/geometrykit-cov.json
|
|
61
|
-
python scripts/coverage_ladder.py /tmp/geometrykit-cov.json
|
|
62
|
-
# corpus refresh (A320 demos → tests/fixtures/corpus/):
|
|
63
|
-
# where ifckit is importable (its own environment, not the oracle one):
|
|
64
|
-
python scripts/capture_corpus.py
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Layers: `tests/geometry/` (ported ifckit geometry suite), `tests/test_contract.py`
|
|
68
|
-
(contract v0), `tests/test_engine_probe.py` + `tests/test_engine_parity.py`
|
|
69
|
-
(runtime split), `tests/oracle/` (OCCT goldens, skipif), `tests/panel/`
|
|
70
|
-
(panelization acceptance, M2 tripwire).
|
|
71
|
-
|
|
72
|
-
## Roadmap (contract-first, per the kernel plan)
|
|
73
|
-
|
|
74
|
-
- v0.1 — value-type primitives (`Vec`, `Plane`, `Arc`, `Line`, `Path`,
|
|
75
|
-
`Curve`, `Surface`); `ifckit.geometry` becomes a re-export facade.
|
|
76
|
-
Data contract: id + plain arrays (`{kind, degrees, knots, cps}(m,4)`,
|
|
77
|
-
homogeneous `[w-mu, w-nu, w-rho, w]`).
|
|
78
|
-
- v0.2+ — G1 constrained filling (Gregory corners) over polygonal charts;
|
|
79
|
-
Bezier-column clipping (plane-surface, closest-point); trims (pcurves);
|
|
80
|
-
tessellator (curvature-driven).
|
|
81
|
-
- Out of scope by design: B-rep booleans, tolerant topology (the kernel is
|
|
82
|
-
B-rep-free on purpose; volumes are ifcopenshell/OCCT's domain).
|
|
83
|
-
|
|
84
|
-
## Licensing
|
|
85
|
-
|
|
86
|
-
geometrykit is LGPL-3.0-or-later, aligned with ifckit. The kernel carries code
|
|
87
|
-
promoted from ifckit's geometry package; the provenance of every carried
|
|
88
|
-
module is documented in its file header.
|
|
89
|
-
|
|
90
|
-
## Sibling projects
|
|
91
|
-
|
|
92
|
-
- `ifckit` — elements/builders/model that bind `geometrykit` to IFC.
|
|
93
|
-
- The associativity engine (name TBD: `modelkit`/`stageskit`) — identity,
|
|
94
|
-
stage signatures, dirty propagation; geometry-agnostic, stdlib-only.
|
geometrykit-0.5.0/README.md
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# geometrykit
|
|
2
|
-
|
|
3
|
-
Geometry primitives and NURBS data model: `Vec`, `Plane`, `Curve`, `Surface`,
|
|
4
|
-
`Path`, and (planned) G1 constrained patches, curve/surface clipping, trim
|
|
5
|
-
pcurves, and a tessellator — the geometry substrate for the ifckit family.
|
|
6
|
-
|
|
7
|
-
## Status
|
|
8
|
-
|
|
9
|
-
Source of truth: `github.com/maucworks/geometrykit` — check it out anywhere;
|
|
10
|
-
wheels are built from a checkout root (`python -m build`, `packages.find`
|
|
11
|
-
over this layout). The package itself is unaware of check-out locations.
|
|
12
|
-
|
|
13
|
-
Releases so far (0.0.1/0.0.2) are a **name claim + placeholder**: the API is not yet
|
|
14
|
-
published, and the package intentionally exports nothing beyond
|
|
15
|
-
`geometrykit.__version__`. Version bumps arrive with the first real
|
|
16
|
-
API (planned v0.1: primitives promoted from `ifckit.geometry`, extracted
|
|
17
|
-
from the A320 configurator corpus with its existing test coverage as oracle
|
|
18
|
-
spec).
|
|
19
|
-
|
|
20
|
-
## Development
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
24
|
-
.venv/bin/pytest tests/ -q # full suite (plain env)
|
|
25
|
-
|
|
26
|
-
# oracle tier: the tests that check the kernel against OCCT
|
|
27
|
-
conda env create -f environment.yml # once
|
|
28
|
-
conda run -n geometrykit-oracle python -m pytest tests/ -q
|
|
29
|
-
# with coverage + the staged ladder:
|
|
30
|
-
conda run -n geometrykit-oracle python -m pytest tests/ --cov -q
|
|
31
|
-
conda run -n geometrykit-oracle python -m coverage json -o /tmp/geometrykit-cov.json
|
|
32
|
-
python scripts/coverage_ladder.py /tmp/geometrykit-cov.json
|
|
33
|
-
# corpus refresh (A320 demos → tests/fixtures/corpus/):
|
|
34
|
-
# where ifckit is importable (its own environment, not the oracle one):
|
|
35
|
-
python scripts/capture_corpus.py
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Layers: `tests/geometry/` (ported ifckit geometry suite), `tests/test_contract.py`
|
|
39
|
-
(contract v0), `tests/test_engine_probe.py` + `tests/test_engine_parity.py`
|
|
40
|
-
(runtime split), `tests/oracle/` (OCCT goldens, skipif), `tests/panel/`
|
|
41
|
-
(panelization acceptance, M2 tripwire).
|
|
42
|
-
|
|
43
|
-
## Roadmap (contract-first, per the kernel plan)
|
|
44
|
-
|
|
45
|
-
- v0.1 — value-type primitives (`Vec`, `Plane`, `Arc`, `Line`, `Path`,
|
|
46
|
-
`Curve`, `Surface`); `ifckit.geometry` becomes a re-export facade.
|
|
47
|
-
Data contract: id + plain arrays (`{kind, degrees, knots, cps}(m,4)`,
|
|
48
|
-
homogeneous `[w-mu, w-nu, w-rho, w]`).
|
|
49
|
-
- v0.2+ — G1 constrained filling (Gregory corners) over polygonal charts;
|
|
50
|
-
Bezier-column clipping (plane-surface, closest-point); trims (pcurves);
|
|
51
|
-
tessellator (curvature-driven).
|
|
52
|
-
- Out of scope by design: B-rep booleans, tolerant topology (the kernel is
|
|
53
|
-
B-rep-free on purpose; volumes are ifcopenshell/OCCT's domain).
|
|
54
|
-
|
|
55
|
-
## Licensing
|
|
56
|
-
|
|
57
|
-
geometrykit is LGPL-3.0-or-later, aligned with ifckit. The kernel carries code
|
|
58
|
-
promoted from ifckit's geometry package; the provenance of every carried
|
|
59
|
-
module is documented in its file header.
|
|
60
|
-
|
|
61
|
-
## Sibling projects
|
|
62
|
-
|
|
63
|
-
- `ifckit` — elements/builders/model that bind `geometrykit` to IFC.
|
|
64
|
-
- The associativity engine (name TBD: `modelkit`/`stageskit`) — identity,
|
|
65
|
-
stage signatures, dirty propagation; geometry-agnostic, stdlib-only.
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: geometrykit
|
|
3
|
-
Version: 0.5.0
|
|
4
|
-
Summary: Geometry primitives and NURBS data model — the geometry substrate for the ifckit family
|
|
5
|
-
Author: Sander Boer
|
|
6
|
-
License-Expression: LGPL-3.0-or-later
|
|
7
|
-
Project-URL: Homepage, https://github.com/maucworks/geometrykit
|
|
8
|
-
Project-URL: Changelog, https://github.com/maucworks/geometrykit/blob/master/CHANGELOG.md
|
|
9
|
-
Keywords: geometry,nurbs,vector,curve,surface,splines
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Programming Language :: Python :: 3
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
19
|
-
Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
|
|
20
|
-
Requires-Python: >=3.9
|
|
21
|
-
Description-Content-Type: text/markdown
|
|
22
|
-
License-File: COPYING.LESSER
|
|
23
|
-
License-File: COPYING
|
|
24
|
-
Provides-Extra: dev
|
|
25
|
-
Requires-Dist: pytest<10,>=7; extra == "dev"
|
|
26
|
-
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
|
|
27
|
-
Requires-Dist: hypothesis<8,>=6; extra == "dev"
|
|
28
|
-
Dynamic: license-file
|
|
29
|
-
|
|
30
|
-
# geometrykit
|
|
31
|
-
|
|
32
|
-
Geometry primitives and NURBS data model: `Vec`, `Plane`, `Curve`, `Surface`,
|
|
33
|
-
`Path`, and (planned) G1 constrained patches, curve/surface clipping, trim
|
|
34
|
-
pcurves, and a tessellator — the geometry substrate for the ifckit family.
|
|
35
|
-
|
|
36
|
-
## Status
|
|
37
|
-
|
|
38
|
-
Source of truth: `github.com/maucworks/geometrykit` — check it out anywhere;
|
|
39
|
-
wheels are built from a checkout root (`python -m build`, `packages.find`
|
|
40
|
-
over this layout). The package itself is unaware of check-out locations.
|
|
41
|
-
|
|
42
|
-
Releases so far (0.0.1/0.0.2) are a **name claim + placeholder**: the API is not yet
|
|
43
|
-
published, and the package intentionally exports nothing beyond
|
|
44
|
-
`geometrykit.__version__`. Version bumps arrive with the first real
|
|
45
|
-
API (planned v0.1: primitives promoted from `ifckit.geometry`, extracted
|
|
46
|
-
from the A320 configurator corpus with its existing test coverage as oracle
|
|
47
|
-
spec).
|
|
48
|
-
|
|
49
|
-
## Development
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
53
|
-
.venv/bin/pytest tests/ -q # full suite (plain env)
|
|
54
|
-
|
|
55
|
-
# oracle tier: the tests that check the kernel against OCCT
|
|
56
|
-
conda env create -f environment.yml # once
|
|
57
|
-
conda run -n geometrykit-oracle python -m pytest tests/ -q
|
|
58
|
-
# with coverage + the staged ladder:
|
|
59
|
-
conda run -n geometrykit-oracle python -m pytest tests/ --cov -q
|
|
60
|
-
conda run -n geometrykit-oracle python -m coverage json -o /tmp/geometrykit-cov.json
|
|
61
|
-
python scripts/coverage_ladder.py /tmp/geometrykit-cov.json
|
|
62
|
-
# corpus refresh (A320 demos → tests/fixtures/corpus/):
|
|
63
|
-
# where ifckit is importable (its own environment, not the oracle one):
|
|
64
|
-
python scripts/capture_corpus.py
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Layers: `tests/geometry/` (ported ifckit geometry suite), `tests/test_contract.py`
|
|
68
|
-
(contract v0), `tests/test_engine_probe.py` + `tests/test_engine_parity.py`
|
|
69
|
-
(runtime split), `tests/oracle/` (OCCT goldens, skipif), `tests/panel/`
|
|
70
|
-
(panelization acceptance, M2 tripwire).
|
|
71
|
-
|
|
72
|
-
## Roadmap (contract-first, per the kernel plan)
|
|
73
|
-
|
|
74
|
-
- v0.1 — value-type primitives (`Vec`, `Plane`, `Arc`, `Line`, `Path`,
|
|
75
|
-
`Curve`, `Surface`); `ifckit.geometry` becomes a re-export facade.
|
|
76
|
-
Data contract: id + plain arrays (`{kind, degrees, knots, cps}(m,4)`,
|
|
77
|
-
homogeneous `[w-mu, w-nu, w-rho, w]`).
|
|
78
|
-
- v0.2+ — G1 constrained filling (Gregory corners) over polygonal charts;
|
|
79
|
-
Bezier-column clipping (plane-surface, closest-point); trims (pcurves);
|
|
80
|
-
tessellator (curvature-driven).
|
|
81
|
-
- Out of scope by design: B-rep booleans, tolerant topology (the kernel is
|
|
82
|
-
B-rep-free on purpose; volumes are ifcopenshell/OCCT's domain).
|
|
83
|
-
|
|
84
|
-
## Licensing
|
|
85
|
-
|
|
86
|
-
geometrykit is LGPL-3.0-or-later, aligned with ifckit. The kernel carries code
|
|
87
|
-
promoted from ifckit's geometry package; the provenance of every carried
|
|
88
|
-
module is documented in its file header.
|
|
89
|
-
|
|
90
|
-
## Sibling projects
|
|
91
|
-
|
|
92
|
-
- `ifckit` — elements/builders/model that bind `geometrykit` to IFC.
|
|
93
|
-
- The associativity engine (name TBD: `modelkit`/`stageskit`) — identity,
|
|
94
|
-
stage signatures, dirty propagation; geometry-agnostic, stdlib-only.
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|