A unified mathematical framework for geometric computation
Project description
Morphis
A unified mathematical framework for geometric computation, providing elegant tools for working with geometric algebra, manifolds, and their applications across mathematics and physics. The name derives from Greek morphe (form) — embodying the transformation and adaptation of geometric structures across different contexts while preserving their essential nature.
A 4D orthonormal frame rotating through bivector planes, projected to 3D. The view switches between e₁e₂e₃ and e₂e₃e₄ projections mid-animation.
Features
- Geometric Algebra Core: Blades, multivectors, and operations (wedge, geometric product, duality)
- Metric-Aware: Objects carry their metric context (Euclidean, projective, etc.)
- Visualization: 3D rendering of blades with PyVista, timeline-based animation, 4D projection
- Motor Transforms: Rotors and translations via sandwich product
Installation
Requires Python 3.12+.
pip install morphis
From Source
git clone https://github.com/ctl-alt-leist/morphis.git
cd morphis
make install
Project Structure
morphis/
├── src/morphis/
│ ├── elements/ # Core GA objects: Blade, MultiVector, Frame, Metric
│ │ └── tests/
│ ├── operations/ # GA operations: wedge, geometric product, duality, norms
│ │ └── tests/
│ ├── transforms/ # Rotors, translators, PGA, motor constructors
│ │ └── tests/
│ ├── visuals/ # PyVista rendering, animation, themes
│ │ └── drawing/ # Blade mesh generation
│ ├── examples/ # Runnable demos
│ └── utils/ # Easing functions, observers, pretty printing
├── docs/ # Design documents
├── pyproject.toml # Project configuration
├── Makefile # Development commands
└── ruff.toml # Linting configuration
Development
This project uses uv for Python project management.
Setup
make install # Create venv, install dependencies, setup pre-commit hooks
Or step by step:
make setup # Create venv and sync dependencies
uv run pre-commit install # Install git hooks
Common Commands
| Command | Description |
|---|---|
make lint |
Format and lint code with ruff |
make test |
Run tests with pytest |
make build |
Build distribution packages |
make clean |
Remove generated files and caches |
make reset |
Clean and reinstall from scratch |
Testing
Tests are co-located with source in tests/ subdirectories:
make test # Run all tests
uv run pytest src/morphis/elements -v # Run specific module tests
Code Style
- Python 3.12+ with type hints
- Ruff for formatting and linting
- Pre-commit hooks run automatically on commit
Release Workflow
Releases are triggered by git tags. When a tag matching v* is pushed, GitHub Actions
automatically builds and publishes to PyPI.
To Release a New Version
- Update version in
pyproject.toml - Commit the change
- Run
make publish
# Example: releasing version 0.2.0
# Edit pyproject.toml: version = "0.2.0"
git add pyproject.toml
git commit -m "Bump version to 0.2.0"
make publish
The make publish command will:
- Read the version from
pyproject.toml - Create a git tag
v{version} - Push the tag to trigger the release workflow
License
MIT License - see LICENSE file for details.
Claude Code was used in the development of this project.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file morphis-0.2.0.tar.gz.
File metadata
- Download URL: morphis-0.2.0.tar.gz
- Upload date:
- Size: 98.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99bbfd67223b32d6cb93a3e75b726de284e8afd0d8a4bce48dbd11b32af355af
|
|
| MD5 |
fb424f66c0f5c131ffee417ee90d5f22
|
|
| BLAKE2b-256 |
50204b6ab5fa2ecd866fe9484512ccf2d7a293f7a313b2cb884ecd139f3b3df5
|
File details
Details for the file morphis-0.2.0-py3-none-any.whl.
File metadata
- Download URL: morphis-0.2.0-py3-none-any.whl
- Upload date:
- Size: 127.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b7a4de7998ad7392bbdcf0ca920cd32c5c5c054f5a5116a9da3040f025d4b9a
|
|
| MD5 |
c0d23f8b66092a0a38e09e120697b9bd
|
|
| BLAKE2b-256 |
abc00289d37e04cdc50447d7cd2a11201d2ce6e46e3bd767d9c2f2362d3d2e88
|