Changelog¶
0.6.0 (2026-06-24)¶
Added¶
pantr.mpi.configure_threads: explicitly set the per-rank Numba thread count for hybrid MPI + threads runs (optionally also limiting BLAS/LAPACK thread pools viathreadpoolctl). Calling it disables the default MPI thread policy.
Changed¶
MPI-engaging entry points (
pantr.mpi.DistributedSpace,pantr.mpi.from_dolfinx) now apply a process-level default on first use: the Numba thread pool is limited to one thread per rank (flat MPI), preventingn_ranks x n_coresthread oversubscription when running undermpiexec. Explicit configuration always wins (NUMBA_NUM_THREADS,pantr.set_num_threads,pantr.num_threads, orpantr.mpi.configure_threads), and the policy is applied at most once per process, so raising the count afterwards sticks.
Removed¶
Dropped the
THIRD_PARTY_NOTICESfile and itspyproject.tomllicense-filesentry. The routines that previously followed algoim — Bézier/B-spline degree reduction, Bernstein interpolation, the Bernstein L2 norm and degree minimization, and the tanh–sinh rule with its Lambert W step — were reimplemented clean-room from public references (The NURBS Book; Farouki & Rajan, CAGD 1988; Golub & Van Loan; Takahasi & Mori 1974; SciPy), with no change in public API or numerical results, so the third-party attribution is no longer required.
0.5.1 (2026-06-03)¶
Added¶
pantr.grid.overlay: build the coarsestTensorProductGridthat refines two input tensor-product grids — its per-axis breakpoints are the union of both inputs’ breakpoints restricted to their domain overlap, so every overlay cell lies inside one cell of each input. Defined for anyndim >= 1. The background-grid bridge for immersed / unfitted quadrature.
0.5.0 (2026-06-03)¶
Added¶
pantr.grid: new structured-grid layer.Gridis an abstract base class defining the grid contract (cell bounds, point location, facet neighbours) with axis-aligned box defaults for facets, reference maps, neighbour lists, batch point location, and AABB queries.TensorProductGridis a concrete, low-footprint tensor-product grid of axis-aligned boxes with per-axis breakpoints and row-major (C-order) cell ids matchingSpanwiseElementExtraction. Factoriesuniform_gridandtensor_product_gridbuild a uniform grid and a B-spline knot-span grid respectively.BVHis a bounding-volume hierarchy over cell AABBs (lazily built, backingGrid.query_aabb), andCellTags/FacetTagsare sparse, dolfinx-style named tag registries for cells and facets.pantr.grid.HierarchicalGrid: hierarchical refinement grid with a fixed per-direction subdivision factor (octree = the dyadic case). Active cells are stored as rectangular blocks per level (no per-cell storage); supportsrefine(level, lo, hi)with union semantics, automatic single-level balance,refine_cells, andhanging_neighborsfor hanging-node facets. Built with thehierarchical_grid(root, factor)factory.pantr.viz.grid_to_pyvista: export a 1-D/2-D/3-DGridto a pyvistaUnstructuredGrid(lines / quads / hexahedra).pantr.quad.QuadratureRule: immutable d-dimensional quadrature rule on the unit cube[0, 1]^ndim, withtensor_product_quadrature(tensor product of per-axis 1-D rules) andgauss_legendre_quadrature(isotropic or anisotropic Gauss-Legendre) factories.pantr.grid.cell_quadrature: map a referenceQuadratureRulefrom the unit cube onto a grid’s cells (or a subset), returning per-cell points(num_cells, num_points, ndim)and weights(num_cells, num_points)via the per-cell affine map with volume-scaled weights. The uncut/background-cell quadrature bridge for immersed / unfitted discretizations.
0.4.0 (2026-06-02)¶
Added¶
pantr.geometry: new module exposingAABB, an immutable, general-d axis-aligned bounding box (#153). Shared domain primitive for spline-space parametric domains and grid-cell bounds; decoupled from any concrete affine transform via a structural_AffineMapprotocol.
Changed¶
pantr.transform.AffineTransform: stricter input validation (reject zero / non-finite scaling factors; validate rotation-axis and mirror-normal finiteness and thecentershape), a cachedinverse, and C-contiguous stored arrays (#154). Enables lepard to adopt pantr’sAffineTransformand drop its local copy.
0.3.0 (2026-05-06)¶
Added¶
SpanwiseElementExtractionclass providing a unified interface for element-wise extraction operators across B-spline spaces (#143).Batch apply methods on
SpanwiseElementExtractionfor vectorized evaluation (#145).Numba-callable Kronecker kernels backing tensor-product extraction (#140).
Structural identity predicate for Bezier and Lagrange extraction operators (#147).
Numba-callable struct-view of
SpanwiseElementExtractionfor downstream JIT code (#149).Python 3.13 and 3.14 are now officially supported (#151).
User guide for
SpanwiseElementExtraction(#146).
Changed¶
nDBezier extraction is now routed throughSpanwiseElementExtraction, unifying the 1D and multi-dimensional code paths (#144).
Performance¶
Compact storage for identity-heavy extraction spaces (#148).
CI pipeline and test suite sped up (#150).
0.2.0 (2026-04-19)¶
Added¶
pantr.bezier: mask / boolean-array operations (#112), Sylvester and Bezout matrix construction (#113), determinant and rank via Givens-rotation QR (#115),Bezier.interpolate/Bezier.fitclassmethods (#118, #120), resultant / discriminant /minimize_degree(#121), pure-Numba implicit quadrature module (#128, #130, #131), implicit domain reparameterization with Lagrange cells (#132).pantr.bspline: interpolation, fitting, and L2 projection (#122, #124).pantr.quad: modified Chebyshev nodes for Bernstein interpolation (#114), tanh–sinh quadrature rule (#116).pantr.root_finding: Bernstein polynomial root-finding module, with a unified single / batch API (#111, #123). First contribution by @DavorDobrota.
Changed¶
Public function renames in
bspline,bezier, andcadfor clarity (#125, #126).Conversion classmethods extracted as standalone module functions in
bsplineandbezier(#127).change_basis: addedcompute_monomial_to_bernstein_1d, reused acrossbezierandbezier.implicit(#135).bezier:_gauss_legendre_01now delegates topantr.quad(#133).Layer 2 validation helpers consolidated and shared across
bezier/bspline(#138, #139).bezier.implicit: legacy algoim engine moved out intolepard.algoim, and dead algoim-era modules dropped (#136, #137).
Documentation¶
Added algoim attribution and third-party notice for the implicit quadrature module (#134).
0.1.0 (2026-03-24)¶
Initial release: project scaffolding, tooling configuration, and documentation skeleton, plus the core
basis,bspline,bezier,quad,change_basis,cad, andvizmodules.