Lemaitre
The LemaitreModels package family: certified, differentiable, parametric
models of binary-black-hole spacetimes, one scientific domain per repository,
all installing under the shared lemaitre namespace.
import lemaitre as lm
lm.initial_data.conformally_flat_puncture.solver.solver_3d # the CF production 3-D xCFC solver
lm.initial_data.conformally_flat_puncture.parametric # the certified/differentiable ROM
lm.initial_data.curved_puncture # the curved-puncture successor
This repository is the core: it owns the lemaitre namespace root and ships
nothing else. It has no runtime dependencies, so every sibling can depend on
it without inheriting a solver stack.
The family
The namespace is two levels deep, and exactly one distribution owns each level.
| namespace | distribution | repository |
|---|---|---|
lemaitre |
lemaitre |
Lemaitre (this repo) |
lemaitre.initial_data |
LM-initial-data |
LM-initial-data — the umbrella |
lemaitre.initial_data.conformally_flat_puncture |
LMID-conformally-flat-puncture |
LMID-conformally-flat-puncture |
lemaitre.initial_data.curved_puncture |
LMID-curved-puncture |
LMID-curved-puncture |
lemaitre.inspiral |
LM-inspiral |
LM-inspiral — the umbrella |
lemaitre.inspiral.radiative_puncture |
(not packaged yet) | LMI-radiative-puncture |
lemaitre.ringdown |
LM-ringdown |
LM-ringdown — not packaged yet |
Each domain is a git submodule of this repository; each installs, tests and
releases independently. pkgutil.extend_path merges the lemaitre/ directories
found on sys.path into one package, and a PEP 562 __getattr__ imports
subpackages lazily, so import lemaitre alone is enough to reach any installed
member.
Install
git clone --recurse-submodules git@github.com:LemaitreModels/Lemaitre.git
cd Lemaitre
E="--config-settings editable_mode=compat"
pip install -e . $E # the core
pip install -e LM-initial-data $E # the initial-data umbrella
pip install -e LM-initial-data/LMID-conformally-flat-puncture $E
pip install -e LM-initial-data/LMID-curved-puncture $E
pip install -e LM-inspiral $E # the inspiral umbrella
python -c "import lemaitre as lm; lm.initial_data.conformally_flat_puncture" # smoke check
Installing a leaf pulls its own dependencies (jax, numpy, scipy,
matplotlib for the puncture models) plus the core and umbrella it declares.
Install only the members you need — they are independent distributions.
editable_mode=compat is not optional. setuptools' modern editable mode
installs each distribution behind a meta-path finder, and PathFinder runs
before those, so the leaves' bare lemaitre/initial_data/ directories win as
PEP 420 namespace portions and the umbrella's real __init__.py is never
loaded. Direct imports still work; lm.initial_data.<model> does not. Normal
(non-editable) installs are unaffected.
Working across the submodules
The family is one superproject and one submodule per domain, nested two deep
(Lemaitre → LM-initial-data → LMID-*). The ordering rule is asymmetric,
and it is the whole discipline.
Committing and pushing: innermost → outermost. Push a leaf before committing the pointer that names it — a superproject commit recording a SHA nobody can fetch breaks the clone for everyone but its author.
git -C LM-initial-data/LMID-curved-puncture commit -m "..." # 1. the leaf
git -C LM-initial-data/LMID-curved-puncture push origin main
git -C LM-initial-data add LMID-curved-puncture # 2. the umbrella
git -C LM-initial-data commit -m "Advance the curved-puncture submodule to ..."
git -C LM-initial-data push origin main
git add LM-initial-data # 3. the superproject
git commit -m "Advance the initial-data umbrella to ..." && git push origin main
Pulling: outermost → innermost. The superproject tells the submodules where
to go, never the reverse: git pull && git submodule update --init --recursive.
A submodule commit is not a change until its parent records it. The pointer
must be staged in every parent up the chain, or the work is invisible to a fresh
clone. git submodule status --recursive from the root flags a stale pointer
with a leading +.
Set this up once, and git enforces the first rule for you instead of leaving it to discipline:
git config push.recurseSubmodules on-demand # or 'check' to refuse rather than auto-push
git config submodule.recurse true # pull/checkout/switch recurse
git config status.submoduleSummary true # `git status` says which submodule moved
git config diff.submodule log # pointer diffs render as commit subjects
Pointer-bump commit messages should say what moved and why (old → new plus a
line of content): that message is the only thing a reader of the superproject
history sees. A leaf's main can also advance without any parent noticing —
git submodule foreach --recursive 'git fetch -q && git status -sb | head -1'
spots leaves that have drifted ahead of the recorded pointer.
License
GPL-3.0 (see LICENSE).
Metadata
Release files for lemaitre 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lemaitre-0.1.0.tar.gz | 43.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lemaitre-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 72.3 kB
Release files / lemaitre-0.1.0.tar.gz
| Download URL | lemaitre-0.1.0.tar.gz |
|---|---|
| Size | 43.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6cf2bfa1ec2c3f8bd0cd8abe5309df8b613c70cdb97759ac6fd4f8366a65860e
|
|
BLAKE2b-256 checksum How to use checksums |
fc54f5eb5792e7d537f672c36c9e12d50f6425c40cb4a522a1a32355d80ae5b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / lemaitre-0.1.0-py3-none-any.whl
| Download URL | lemaitre-0.1.0-py3-none-any.whl |
|---|---|
| Size | 29.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8684cfe1060ddf29b687df6d69f32e8c2980edca6000bb98e0929d18d154ec3f
|
|
BLAKE2b-256 checksum How to use checksums |
9966ce815e4af8ab6718b60092e1255603554f484e402dc873128e4b0a6cca90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|