.. _changelog:
Changelog
=========
All notable changes to ToFUL are documented here.
Versions follow `Semantic Versioning `_.
----
v2.0.0 — 2025
--------------
Major rewrite of the computational backend and complete frontend redesign.
**Backend (core.py)**
* Replaced naive Python loops with NumPy vectorised evaluation — 10–50× faster PMF/PDF evaluation over array-valued support.
* Implemented expression compile cache via ``functools.lru_cache`` — the expression AST is parsed once per unique string and the code object reused for all evaluations.
* Added Wynn ε-algorithm convergence accelerator for discrete series — effective for algebraically converging series, used internally by Mathematica and other CAS systems.
* Added Aitken Δ² three-point extrapolation as a lightweight convergence cross-check.
* Added Cohen-Villegas-Zagier algorithm for alternating series — achieves near-machine-precision in exactly N evaluations.
* Added geometric ratio-bound tail correction for slowly converging series.
* Added Gauss-Laguerre quadrature (64 nodes) for semi-infinite integrals on :math:`[0, \infty)`.
* Added Gauss-Hermite quadrature (64 nodes) for doubly-infinite integrals on :math:`(-\infty, \infty)`.
* Added SymPy symbolic integration path — exact closed-form moments for unconditional PDFs.
* Added mpmath tanh-sinh arbitrary-precision quadrature — activates automatically above 12 decimal places of Calc precision.
* Added parallel moment computation via ``concurrent.futures.ThreadPoolExecutor`` — all orders computed concurrently for ``max_order > 2``.
* Added Richardson error estimation for Gauss-Laguerre and Gauss-Hermite results.
* Added ``compute_moments_parallel()`` as the unified public entry point for all moment computation.
* Added ``compute_statistical_summary()`` for derived variance, std dev, skewness, kurtosis from central moments.
* Added ``validate_drv_probabilities()`` and ``validate_crv_pdf()`` returning structured ``ValidationResult`` dataclasses.
* Added ``detect_series_pattern()`` and ``generate_extended_series()`` as standalone functions.
* Retained full backward-compatible shim classes (``EnhancedMomentCalculator``, ``EnhancedProbabilityValidator``, ``InfiniteSeriesHandler``, ``rth_moment``) for existing call sites.
**Parser (toful_parser.py)**
* New module — two-pass input normalisation pipeline.
* Pass 1 (``normalise_for_eval``): caret exponents, implicit multiplication, ``e^x → exp(x)``, Unicode operators, absolute value bars, function aliases (``ln``, ``arcsin``, ``√``), Greek letters, subscript/superscript digits.
* Pass 2 (``normalise_for_display``): ``**n → ⁿ``, ``x1 → x₁``, ``<= → ≤``, ``* → ·``, spelled Greek names.
* ``prepare_expression()`` convenience function: normalises, produces display form, validates syntax with a smoke-test ``eval``.
* ``normalise_range_input()`` for cleaning bound and range strings.
* ``build_safe_dict()`` as canonical source of the eval namespace.
**Frontend (app.py)**
* Complete redesign. New aesthetic: dark scientific instrument theme with amber accent, DM Serif Display headings, JetBrains Mono data.
* Two-page structure: landing page with mathematical introduction and examples; calculator as a separate page.
* Five result tabs: Moments, Statistics, Distribution, Table, Convergence.
* Auto-correction collapsible notice showing every parser change applied.
* Plotly distribution plot (filled PDF / stem PMF) annotated with mean and reference point.
* Plotly moment magnitude bar chart.
* Method-distribution pie chart in Convergence tab.
* Per-moment convergence diagnostic rows.
* CSV download button in Table tab.
* Interpretation labels (right-skewed / leptokurtic / etc.) with pill badges in Statistics tab.
* Interpreted expression preview before computing.
* Full CSS design system with CSS variables for consistent theming.
**Documentation**
* Complete rewrite of all RST pages. All "Coming soon!" stubs replaced with full content.
* New pages: ``getting-started/installation``, ``getting-started/input-syntax``.
* New API reference pages: ``api-reference/core``, ``api-reference/toful-parser``.
* Theory section fully written: statistical moments, raw vs central, skewness-kurtosis, convergence methods.
* Troubleshooting section fully written: common errors, debugging functions, convergence issues.
* All examples verified against known analytical values.
* Fixed ``conf.py``: added ``autosectionlabel``, ``sys.path`` for autodoc, MathJax config.
* Fixed ``index.rst`` toctree to match actual files.
----
v1.0.0 — 2024
--------------
Initial release.
* Streamlit web application.
* Discrete and continuous random variable support.
* PMF/PDF validation with probability sum/integral check.
* Moment computation via Python loops and SciPy ``quad``.
* Basic convergence detection (last-10-terms magnitude test and ratio test).
* Geometric and arithmetic infinite series pattern detection.
* Adjustable calculation and display precision.
* Sidebar-based configuration.
* Deployed to `toful1.streamlit.app `_.