Changelog
[v0.5.0] - 2024 Jul 08
Examples
- remove import management boilerplate from examples
- change example naming convention
- partition examples into tutorials and examples
- tutorials belong to the user guide in
doc/tutorials/: describe basic functionality - examples belong to the
examples/directory: examples used (or will be used) in papers, advanced functionality, applications
- tutorials belong to the user guide in
- update examples to use new initialization method for
LocalFunctionobjects - update spacefilling curve example
Documentation
- change: installation instructions for developers to build the package locally with
pip install -e . - add: tutorials
- change: update docstrings to use NumPy documentation format
-
locfun -
mesh(except foredgelib) -
plot -
solver -
util
-
- change: MkDocs theme to
material - add: site logo
- update
doc/logo/pacman.svg - tutorials
- Guide to tutorials
- 1: Meshes
- 1.1: Vertices and edges (taken from Example 0.1)
- 1.2: Mesh cells and planar meshes (taken from Example 0.1)
- 2: Local function spaces
- 2.1: Polynomials (template)
- 2.2: Traces (taken from Example 0.2)
- 2.3: Local Poisson functions (template)
- 2.4: Local Poisson spaces (template)
- 3: Finite elements
- 3.1 Global function spaces (simpler version of Example 2.1)
- 3.2 Global boundary conditions (template)
- 4: Advanced topics
- 4.1 Nystrom solvers (template)
- 4.2 Heavy sampling of edges (taken from Example 1.5)
- run tutorial notebooks when building documentation
- link to notebook source on tutorial pages
- link to tutorial pages from README
Maintenance
-
DirichletTraceimprovements:- add: weighted normal derivative
- add: weighted tangential derivative
-
LocalFunctionimprovements:- BREAKING CHANGE: replace the handling of traces with
DirichletTrace - DEPRECATED: use
LocalPoissonFunctioninstead
- BREAKING CHANGE: replace the handling of traces with
- add:
LocalPoissonFunctionclass, built fromLocalHarmonicandLocalPolynomialobjects- add: arithmetic operations (addition, subtraction, scalar multiplication, scalar division) for
LocalHarmonic,LocalPolynomial, andLocalPoissonFunctionobjects
- add: arithmetic operations (addition, subtraction, scalar multiplication, scalar division) for
-
NystromSolverimprovements:- handle logarithmic functions as instances of
DirichletTraceclass -
antilap_strategyoption to precompute "normal indicator functions" biharmonic function computation speedup - compute diagonal of Nystrom matrix directly for preconditioning
- handle logarithmic functions as instances of
-
locfunmodule improvements:- use
DirichletTraceobjects for traces inantilapmodule - move contents of
antilapandd2nsubpackages tolocfunroot - remove
log_termsandlog_antilapmodules - deprecate
PiecewisePolynomialclass
- use
-
Polynomialimprovements:- deprecate
eval()method, use__call__()method instead
- deprecate
-
LocalFunctionPlotimprovements:- change: don't store points and values outside of the cell
- interior value interpolation for points close to the boundary
- consolidate the multiple draw methods into one, optional argument to specify what to draw (values, gradient, etc.)
- move generation of interior point triangulation to
MeshCell
-
GlobalFunctionPlotimprovements:- stich together
LocalFunctionPlotobjects to plot a global function
- stich together
- use computation of H1 error in
Solvertests
Project Management
- change dev dependency:
blacktoblack[jupyter] - add dev dependency:
nbconvert``main
Bug Fixes
- fix: missing logo and favicon in MkDocs build
- fix: broken links in tutorials
- fix: blank images saved by
LocalFunctionPlotclass - fix: edges on boundary of
MeshCellbeing deleted from interior point triangulation
[v0.4.5] - 2024 Apr 24
Maintenance
- change dependency: Python 3.9 (was 3.11)
- change dependency:
scipy1.12 (was 1.11) - change: use
rtolkeyword argument inscipy.sparse.linalg.gmrestotol - fix: missing type annotations for tests
- fix: use
Unionfor type hints rather than|operator (to support Python 3.9)
[v0.4.4] - 2024 Apr 07
Documentation
- change:
README.md - add: installation instructions with
pip - add: usage instructions via
readthedocslink - change: consolidate
TODO.mdandWISHLIST.mdintoROADMAP.md - add: documentation with MkDocs
- add:
.readthedocs.ymlfor ReadTheDocs configuration - add:
mkdocs.ymlfor MkDocs configuration - add:
doc/requirements.txtfor MkDocs dependencies - add:
doc/index.mdfor home page - add: quickstart guide
- add: installation instructions
- add: user guide
- mesh:
-
Edgeclass -
ClosedContourclass -
MeshCellclass -
PlanarMeshclass -
Quadclass -
QuadDictclass -
Vertclass -
get_quad_dict()function -
meshlibmodule -
mesh_builderfunction -
split_edgefunction - local function spaces:
-
Polynomialclass -
DirichletTraceclass -
NystromSolverclass -
LocalFunctionclass -
LocalFunctionSpaceclass - FEM solver:
-
BilinearFormclass -
GlobalFunctionSpaceclass -
Solverclass - plotting:
-
GlobalFunctionPlotclass -
LocalFunctionPlotclass -
MeshPlotclass -
TracePlotclass
- add: developer guide
- roadmap
- contributing guide
- changelog
Package Management
- add:
poetryconfiguration for package management - change:
pyproject.tomlto usepoetry - add:
poetry.lock
[v0.4.3] - 2024 Mar 19
Examples
- modify:
ex1ato useDirichletTrace - modify:
ex1eto useDirichletTrace - rename:
ex0toex0a - add:
ex0bto demonstrate how to construct aLocalFunctionwith aDirichletTrace
Features
- add:
DirichletTraceclass for handling the traces ofLocalFunctions - construct an arbitrary trace, or a polynomial trace in the style of
LocalFunctionSpace - will someday replace the default handling of traces in
LocalFunctionclass - modify:
Polynomialobjects are now callable - add: splitting an edge into multiple edges without recursive subdivision
- add: optional argument to
TracePlotinitializer to specify the maximum number of ticks on the horizontal axis
Maintenance
- add: debug option to
NystromSolverto show condition number - preconditioning for
NystromSolver - use
numbato speed upNystromSolvermatrix assembly with just-in-time compilation - pass
DirichletTraceobject to theTracePlotconstructor
Bug fixes
- fix: too many tick marks on
TracePlot
[v0.4.2] - 2024 Feb 29
Documentation
- add a contributing guide
Features
- make minimum distance to boundary for interior points of a
MeshCelladjustable withset_interior_point_tolerance()method - make computation of interior gradients optional
- add methods to
MeshCellto get unit tangent and unit normal vectors, and the derivative norm
Maintenance
- vectorize interior value computation
Tests
- add ghost cell to mesh cell testing library
- add test for interior points
Bug Fixes
- Plots of global solution corrupted: fix by not recording edge flips to transformation diary
[v0.4.1] - 2024 Feb 25
Examples
- add cubic spline interpolation example to
ex0
Maintenance
- remove trigonometric interpolation
- remove trigonometric interpolation tests
- format
edgelib/spline
[v0.4.0] - 2024 Feb 25
Documentation
- update README, extend description, add references
Features
- add ability to define an edge parameterization using a cubic spline to interpolate points (thanks, Zack!)
- add edge splitting
- add transformation diary to
Edgeclass - add global stiffness and mass matrices to
solverclass - add option to turn off axes in plots
- add colormap option to contour plot methods
- add trigonometric interpolation for cell boundary traces
Examples
- add space-filling curve example (thanks, Zack!)
- add
ex1eto demonstrate heavy sampling of edges via edge splitting
Maintenance
- make colorbar optional for
GlobalFunctionPlotdraw method - make coefficients optional in
GlobalFunctionPlotinit method - add warning for
Quadclass whenn > 128 * interp - use kwargs for plotting options
- add
PiecewisePolynomialclass to init file - create
QuadDictobject to standardize quadrature collections
Tests
- add test for trigonometric interpolation
Bug Fixes
- close figure in
drawmethods for plotting classes - fix
show_plot=Falseoption not working indrawmethods for plotting classes - make directory to save plots if it doesn't exist
- fix
LocalFunctionPlotsaving blank files - fix Martensen quadrature for large values of n
- raise exception when Nystrom solver encounters non-numeric values
[v0.3.8] - 2023 Oct 27
Features
- add
TracePlotclass - add
MeshPlotclass - add
GlobalFunctionPlotclass - add
LocalFunctionPlotclass - add
get_quad_dict()function - make
edgespacesan optional parameter inLocalFunctionSpaceinit method
Examples
-
examples/ex1d-hat-tile.ipynb: add example of hat tile local basis functions
Tests
- deprecate
unittestin favor ofpytest - add
test_edge_space - add
test_solver
Maintenance
- use enumerate to replace
range(len(...))loops - rectify nested min/max statements
-
locfun.locfunsp: make interior value calculation optional - use
functools.partialto pass logarithmic terms to integrators -
locfun.poly.poly: use list of tuples for polynomial initialization - clean up integration methods
- add safety check to
add_edge()method inPlanarMesh -
mesh.edgelib.teardrop: passalphaas keyword argument -
solver.solver: - move color printing to separate module
- move plotting functions to separate module
- add init file for
utilsubpackage - rename classes to use CapWords convention
- fix invalid names introduced by class renaming
- fix type hints in tests
Bug fixes
- fix colorbar position in contour plots
[v0.3.7-alpha] - 2023 Oct 02
- change exceptions to specific error types
- document TODO comments in
doc/TODO.md - modify
CHANGELOG.md,TODO.md,WISHLIST.mdto reflect semantic versioning - future versions will use
gitbranches to isolate development - git tags and GitHub releases will be used to track versions
- small commits get a descriptive message
- branch merges get a release number
[v0.3.6] - 2023 Sep 30
- rename
idvariables to eitheridxorkeyto avoid shadowing built-ins
[v0.3.5] - 2023 Sep 30
- write docstrings
- modules
- classes
- methods
- functions
- add
__init__.pytosolversubpackage
[v0.3.4] - 2023 Sep 20
- use generators where appropriate
- fix imports
- use f-strings
- fix spelling errors
- use
enumeratein loops where appropriate - fix superfluous
returnstatements - fix unnecessary
elsestatements - change underscore methods in
edgelibto capitalized - update
edgeclass to reflect change - update
ex0example to reflect change - add type hints
- functions
- methods
- classes
- fix other
pylintandmypyerrors - update
pyproject.toml
[v0.3.3] - 2023 Sep 20
- rename
setup.cgfto.flake8(untilflake8supportspyproject.toml) - update
devtools/convert_examples.shto support being executed from any directory
[v0.3.2] - 2023 Sep 19
- added support for
pytest - added
pytestand dependencies torequirements-dev.txt - added
pytestparameters topyproject.toml
[v0.3.1] - 2023 Sep 19
- Reformatted with
blackandisort - Linted with
flake8andpylint(ongoing) - Type-checked with
mypy(ongoing) - Added
requirements.txtandrequirements-dev.txt - Added
CHECKLIST.md - Added
setup.cnf,pyproject.toml
[v0.3.0] - 2023 Aug 07
Major changes
- Added local function spaces (
locfunspace) tolocfun/ - Class containing a basis of the local Poisson space \(V_p(K)\)
- Added edge spaces (
edgespace) tolocfun/ - Added support for high order (including \(p > 3\), unstable for some edges)
- Added barycentric coordinates and Legendre polynomials to
poly/ - High order edge spaces obtained by traces of integrated Legendre polynomials
- Overhaul of
locfuntraces - Local function traces are by default considered a list of
polynomials, one for each edge - This list of
polynomials is stored intrace_polysattribute - Trace values are computed only as needed
- Trace values can be set manually as before
- The flag
has_poly_tracecan be set toFalseif working functions with functions that do not have a trace that is the trace of a polynomial on each edge locfunobjects are now initialized with the Laplacian polynomial, the list of polynomial traces, and an option- Overhaul of Nystrom solver
- Replaced
nystrommodule withnystrom_solverclass - Overhead of constructing the Nystrom matrix is now consolidated into the constructor
- Harmonic conjugate computations are now handled as method of
nystrom_solver - Added
vertclass - Vertices of a mesh
- Overhaul of
edgeclass - Added topological properties needed for mesh construction
- Parameterization values computed and stored only as needed
- Removed dependence on
copypackage - Added
integrate_over_edgemethod - Added
global_orientationattribute - Overhaul of
cellclass - Added topological properties needed for mesh construction
- Edge list replaced with
closed_contourlist - Added
PlanarMeshclass - Initialized as a collection of
edgeandvertobjects cellobjects are constructed in situ using topological information fromedgeobjects- Added
solverclass - Handles all aspects of solving a PDE on a mesh
- Initialized with a
PlanarMeshobject and abilinear_formobject solvemethod solves the PDE on the meshplotmethod plots the solution- Added
bilinear_formclass - Stores info about the PDE to be solved
- Also stores the right-hand side of the PDE as a polynomial
- Added
global_function_spaceclass to manage global function space - Added
global_keyclass to manage continuity across cells
Minor changes:
- Moved
quadmodule tomesh/frommesh/quad/ - Added
polynomialfunctionality - Added division of a polynomial by a scalar
- Added powers of polynomials
- Added polynomial composition
- Changed directory management in Jupyter notebook examples
- Added
devtools/directory - Added
doc/directory - Added
.pyversions of examples - Thanks to
nbconvertfor making this easy! - Added
ex2-pacman-femexample - Updated tests and examples
[v0.2.5] - 2023 May 01
- Moved examples to a dedicated
examplesdirectory - Added "Examples used in publications" to
README - Introduced API for more convenient user experience
- Users call
pf.thingrather thanpf.foo.bar.baz.thing - Updated all examples to reflect API change
- Restructured
puncturedfemdirectory - Polynomial overhaul
- Changed initialization method to something sensible
set()method behaves as a re-initializer- Added support for polynomial-scalar addition for
+,+=,-,-=operators - Added support for
*=operator - Moved
integrate_over_cell()method tolocfun.int_poly - Unit tests
- Relocated
testto parent directory - Polynomials:
test_poly.py - Local functions:
test_locfun.py
[v0.2.4] - 2023 Apr 17
- Added
intvalmodule tolocfunfor computing interior values - Added
get_conjugable_part()method tolocfunthat returns the trace of \(\psi\) - Renamed
is_in_interior()method forcontourtois_in_interior_contour() - Added
is_in_interior_cell()method tocell - Added interior value demo to Punctured Square, Pac-Man, and Ghost examples
[v0.2.3] - 2023 Mar 06
- Added ex1b-pacman.ipynb
- Added ex1c-ghost.ipynb
- Updated ex1a-square-hole.ipynb with more accurate reference values
[v0.2.2] - 2023 Mar 01
- Added
compute_h1()andcompute_l2()methods tolocfun - Added
integrate_over_cell()method topolynomial - Added methods to
contourandcellto integrate over the boundary without multiplying by the norm of the derivative (i.e. 'preweighted' integrands) - Monomials now default to zero monomial
- Fixed evaluation of zero
monomialand zeropolynomialto return same size as input - Removed
ext_ptfield fromcell - Added
idfield tocontour - Added
get_integrator()method tocontour(cellinherits) - Added
neumannmodule tonystromfor solving Neumann problem - Modified
harmconjmodule accordingly - Completely overhauled anti-Laplacian calculation for punctured cells
- ex1: "Square with circular hole" updated
[v0.2.1] - 2023 Feb 25
- Added /poly subpackage
monomialandpolynomialobjects- Added locfun/ subpackage
locfunobject holds all data for local function \(v\in V_p(K)\)- Added
ext_ptfield tocellobject, which is an exterior point such that centering the origin atext_ptplacing the cell strictly in the first quadrant
[v0.2.0] - 2023 Feb 16
- MATLAB code rewritten in Python to increase accessibility
- Examples presented with Jupyter Notebook
- ex0-mesh-building: defining edges, cells, and meshes
- ex1-inner-prod: compute \(H^1\) and \(L^2\) (semi-)inner products on punctured cell
- New subpackages/modules
- quad: trapezoid, Kress, and Martensen quadrature objects
- mesh: mesh construction tools
- edge: parameterization of an edge
- contour: collection of edges forming a simple closed contour
- cell: mesh cell (subclass of contour)
- plot: functions for
- plot edges, contours, cell boundaries
- trace of a function along a collection of edges
- nystrom: Nystr\(\text{\"o}\)m method for solving integral equations
- includes single and double layer operators
- block system support
- d2n: Dirichlet-to-Neumann map for harmonic functions
- computation of harmonic conjugate
- FFT (anti-)derivatives
- antilap: tools to compute anti-Laplacians of harmonic functions
- Added unit tests to puncturedfem/test/
- test_harmconj for harmonic conjugates
- test_fft_deriv for FFT differentiation
[v0.1.0] - 2022 Aug 02
Only a simple diffusion operator (the Laplacian) is currently supported. Dirichlet and mixed Dirichlet-Neumann boundary conditions are available, but are assumed to be homogeneous. Used to run a simple "pegboard" example.