Metadata-Version: 2.4
Name: py-topolys
Version: 0.1.0
Summary: Native Python port of the Topolys non-manifold topology library
Author: Natural Resources Canada
License-Expression: MIT
Project-URL: Homepage, https://github.com/canmet-energy/py-topolys
Project-URL: Source, https://github.com/canmet-energy/py-topolys
Project-URL: Issues, https://github.com/canmet-energy/py-topolys/issues
Project-URL: Ruby upstream, https://github.com/canmet-energy/topolys
Project-URL: Ruby baseline, https://github.com/canmet-energy/topolys/commit/33b68dffa86beacf30dae889200083c785ac0b22
Project-URL: Changes since baseline, https://github.com/canmet-energy/topolys/compare/33b68dffa86beacf30dae889200083c785ac0b22...master
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.md
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: jsonschema>=4.0; extra == "dev"
Requires-Dist: mypy>=1.11; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Requires-Dist: setuptools>=68; extra == "dev"
Requires-Dist: tomli>=2.0; extra == "dev"
Requires-Dist: twine>=5.1; extra == "dev"
Dynamic: license-file

# py-topolys

Native Python port of the Topolys non-manifold topology library.

> **Status:** Alpha. Geometry, transformations, topology entities, model factories,
> cascading edge splits, serialization, graph export, and the full Ruby scenario suite are
> implemented.

## Installation

Install the tagged release directly from GitHub:

```bash
python -m pip install "py-topolys @ git+https://github.com/canmet-energy/py-topolys.git@v0.1.0"
```

For `requirements.txt`:

```text
py-topolys @ git+https://github.com/canmet-energy/py-topolys.git@v0.1.0
```

For `pyproject.toml`:

```toml
dependencies = [
    "py-topolys @ git+https://github.com/canmet-energy/py-topolys.git@v0.1.0",
]
```

## Usage

```python
import py_topolys

model = py_topolys.Model()
points = [
    py_topolys.Point3D(0, 0, 0),
    py_topolys.Point3D(1, 0, 0),
    py_topolys.Point3D(1, 1, 0),
    py_topolys.Point3D(0, 1, 0),
]
wire = model.get_wire(model.get_vertices(points))
face = model.get_face(wire, [])
```

## Port Baseline

This port targets Ruby Topolys `0.6.2` at
[`canmet-energy/topolys@33b68df`](https://github.com/canmet-energy/topolys/commit/33b68dffa86beacf30dae889200083c785ac0b22).
See [UPSTREAM.md](UPSTREAM.md) for provenance and update policy, or review
[changes since the baseline](https://github.com/canmet-energy/topolys/compare/33b68dffa86beacf30dae889200083c785ac0b22...master).

The pinned Ruby suite passes all 41 examples. CI regenerates Ruby observations and compares them
with the Python parity fixtures on every change.

See [CHANGELOG.md](CHANGELOG.md) for release history and [RELEASE.md](RELEASE.md) for the
verification and publishing process.
