Changelog¶
All notable changes to this project are documented here. The format follows Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
0.2.0 - 2026-08-19¶
First release published to PyPI, and the first with a documentation site.
Added¶
- Documentation site built with MkDocs Material at
https://jeanjacquesstleroux.github.io/wanderwalk/, covering a getting
started page, six tutorials, two how-to guides, and an API reference
generated from the docstrings with mkdocstrings. Buildable locally with
the new
docsextra. import wanderwalk as wwis now the documented convention, used throughout the README, the docs, and the module docstrings.- Docstrings for the three
wanderwalk.heat_kernelfunctions, which previously carried only one-line comment headers. tests/test_heat_kernel.py, covering the analytic kernel, the area-element normalization of the empirical one, and the agreement between them. It skips when SciPy is absent, and SciPy has been added to thetestextra so it does not.- GitHub Actions workflows for the test suite, the documentation deploy to GitHub Pages, and publishing to PyPI through Trusted Publishing.
Torus.sample_tangent_noise_anisotropicandTorus.sample_tangent_noise_anisotropic_multiple, which restrict noise toe_u, the tangent direction around the torus's central axis.wanderwalk.heat_kernel, comparing the empirical heat kernel onS^2(kernel density estimate over many simulated paths, normalized by the spherical area element) against the Legendre spectral expansion. It needs SciPy, so it is not re-exported at the top level and must be imported asfrom wanderwalk.heat_kernel import ....notebooks/Notebook-04.ipynb, validating that empirical heat kernel against the theoretical one. The Poincaré disk notebook it displaces is nownotebooks/Notebook-05.ipynb.
Changed¶
torus_simulatoracceptsnoise_type, defaulting to"isotropic", and raisesValueErroron an unrecognized value. It is keyword-friendly and placed afterRandr, so existing positional calls keep working.- Docstring parameter descriptions that wrapped onto a second line now indent
the continuation. Twenty-one such lines were being silently discarded by the
docstring parser, truncating the description of
Torus.__init__'sR,sphere_kde's mesh arguments, anddisk_kde'sk, among others. - Docstrings use
"""throughout, where the manifold and visualization modules previously mixed in'''.
Fixed¶
estimate_theoretical_heat_kernelused the wrong generator convention. Its spectral expansion carriedexp(-l(l+1)t), which corresponds to generatorLaplacian, while the simulators generate Brownian motion with(1/2)Laplacianas ONBOARDING.md specifies. The analytic kernel therefore disagreed with the simulated one by a factor of two in time: the empirical density attmatched the formula evaluated att/2. The exponent is nowexp(-l(l+1)t/2), and the two agree to within the error of the kernel density estimate at every sampled time.
This changes the values returned by estimate_theoretical_heat_kernel.
Callers comparing against it, including notebooks/Notebook-04.ipynb,
should now pass the same t they simulated rather than half of it.
- Typos in rendered docstrings: "respents", "mainfold", "slighly",
"genereated", and "tangent spaceo".
0.1.0 - 2026-08-17¶
First packaged release. The simulation code existed beforehand as a set of
scripts under src/; this release turns it into an installable library.
Added¶
- Installable
wanderwalkpackage with a public API re-exported at the top level:Manifold,Sphere,Torus,PoincareDisk,sphere_simulator,torus_simulator,hyperbolic_simulator,sphere_kde,disk_kde, andboundary_angle_histogram. wanderwalk-appconsole script that launches the Streamlit app, installed with the optionalappextra.- Optional dependency extras:
app(Streamlit and Plotly),notebooks(JupyterLab, matplotlib, SciPy), andtest(pytest). - Test suite covering the geometric invariants of each manifold, simulator output shapes and constraints, the kernel density estimators, and the packaging contract.
Torus.angles_from_pointandTorus.angles_from_points, which recover the toroidal and poloidal angles from a Cartesian point.Torus.project_to_tangent_multiple, for interface parity withSphereandPoincareDisk.
Changed¶
- The sphere simulator is now named
sphere_simulatorrather thansimulator, so all three simulators name the surface they run on. Torus.project_to_tangentnow takes(x, v)with a Cartesian point, matchingManifold.project_to_tangentand the other two manifolds. The previous angle-based form is still available asTorus.project_to_tangent_at_angles(u, v, vector).sphere_simulatorraisesValueErroron an unrecognizednoise_typeinstead of failing later withUnboundLocalError.- Simulator starting points are coerced to float arrays, so integer input is accepted.
requirements.txtno longer pins a frozen environment; dependencies are declared inpyproject.toml.
Removed¶
- The
srctop-level import package. Imports are nowfrom wanderwalk import ...rather thanfrom src.manifolds.sphere import ..., and thesys.path.append("..")workaround is no longer needed.