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 \([0, \infty)\).

  • Added Gauss-Hermite quadrature (64 nodes) for doubly-infinite integrals on \((-\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.