Skip to content

Commit c838192

Browse files
committed
Version changed
1 parent 9ebcfcf commit c838192

7 files changed

Lines changed: 39 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,39 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [0.2.3] - Unreleased
8+
## [0.3.0] - Unreleased
9+
10+
### Added
11+
12+
- **Unified f-notation**: New `solver/notation.py` module with `FNotation` dataclass and `rewrite_f_expression()` translator. Users now write equations using `f[0]` (function), `f[1]` (first derivative), `f[i,k]` (component i, derivative k for vector ODEs) instead of the old `y[0]`/`y[1]` syntax. The notation layer translates to internal `y[j]` arrays for SciPy compatibility.
13+
- **Interactive result tabs**: The result dialog now generates plots on-the-fly instead of receiving pre-built figures. Users can interactively select which derivatives to plot, choose phase-space axes, and switch between visualization modes — all without re-solving.
14+
- **ODE scalar**: "Solution f(x)" tab with multi-select listbox for derivatives; "Phase Space" tab with two axis comboboxes (default: f vs f′).
15+
- **ODE vector**: "Solution f(x)" tab with component/derivative listbox; "Phase Space" tab (default: f₀ vs f′₀); "Phase 3D" tab with three axis comboboxes (default: f₀, f₁, f₂); "Animation" and "3D Surface" tabs with derivative order selector.
16+
- **PDE**: "Solution 2D" tab with variable and slice selectors; "Solution 3D" tab with axis selectors; "Phase Space" tab.
17+
- **Difference**: "Solution f(n)" tab with derivative listbox; "Phase Space" tab.
18+
- **3D phase-space trajectory**: New `create_phase_3d_plot()` in `plotting/plot_utils.py` for 3D parametric trajectories with start/end markers. Available for vector ODEs with 3+ components.
19+
- **Per-component order spinboxes**: Vector ODE custom input now allows each component to have its own differential order (1–10). The label dynamically updates with prime notation (e.g., f″₀ =) as the order changes. Heterogeneous orders are propagated through the pipeline via `component_orders`.
20+
- **Highest derivative display**: The pipeline now augments the solution array with the computed highest derivative (e.g., for a 2nd-order ODE, the result includes f, f′, and f″), enabling visualization of all derivative orders.
21+
- **General PDE solver**: Extended PDE support beyond Poisson/Laplace with operator-based input. Users select which derivative terms appear in the equation (f_xx, f_yy, f_xy, etc.) via a derivative combination UI, and the solver builds appropriate finite-difference stencils.
22+
- **Formatted plot legends**: Plot legends and axis labels use Unicode-formatted notation (f, f′, f″, f₀, f′₀) instead of raw bracket syntax (f[0], f[1], f[0,1]).
23+
- **Unicode tick labels**: Vector animation bar charts display component labels as f₀, f₁, f₂ (Unicode subscripts) instead of f_0, f_1.
24+
25+
### Changed
26+
27+
- **Data-only pipeline**: `SolverResult` no longer contains pre-built matplotlib figures. Instead it carries raw solution data (`x`, `y`, `statistics`, `metadata`, `notation`) and the result dialog creates plots interactively. Removed `fig`, `phase_fig`, `animation_fig`, `animation_3d_fig` fields.
28+
- **Derivative selection moved to results**: The "Derivatives to Plot" listbox was removed from `ParametersDialog`. Users now select which derivatives to visualize in the result window via multi-select listboxes, with changes reflected immediately.
29+
- **Multi-select listbox**: Replaced checkboxes with `tk.Listbox(selectmode=EXTENDED)` for derivative selection in solution plot tabs. Supports Ctrl+click and Shift+click for multi-selection.
30+
- **Predefined equations migrated to f-notation**: All ~30 predefined equations in `equations.yaml` updated from `y[0]`/`y[1]` to `f[0]`/`f[1]` syntax. Vector ODE expressions use `f[i,k]` notation (e.g., `f[0,0]` for component 0 position, `f[0,1]` for component 0 velocity).
31+
- **Vector ODE reclassification**: Lorenz system, Lotka-Volterra, time-dependent Schrödinger, Euler rigid body, Bloch equations, and Duffing oscillator reclassified from "ODE" to "Vector ODE" type to match their multi-component nature.
32+
- **Phase space defaults**: Vector ODE 2D phase space now defaults to f₀ vs f′₀ (position vs velocity of first component) instead of x vs f₀. Scalar ODE defaults to f vs f′.
33+
- **Animation slider default**: Vector animation slider now starts at x_min (beginning) instead of the midpoint.
34+
- **CSV export headers**: Export now uses f-notation labels (f, f′, f₀, f′₀) instead of y0, y1, etc.
35+
- **Help dialog**: All help text updated with f-notation syntax and examples.
36+
- **Statistics descriptions**: Updated to reference f(x) instead of y(x).
37+
- **Tab naming**: Renamed "3D" tab to "3D Surface" for vector ODEs to distinguish from the new "Phase 3D" tab.
38+
- **UI hints**: Custom equation input now shows f-notation hints (e.g., "Use f[0] for the function, f[1] for f′, f[2] for f″").
39+
40+
## [0.2.3] - 2026-03-01
941

1042
### Fixed
1143

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
[![Python](https://img.shields.io/badge/Python-3.12+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/)
1010
[![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](license.md)
11-
[![Version](https://img.shields.io/badge/version-0.2.3-blue.svg?style=for-the-badge)](https://github.com/DOKOS-TAYOS/DifferentialLab)
11+
[![Version](https://img.shields.io/badge/version-0.3.0-blue.svg?style=for-the-badge)](https://github.com/DOKOS-TAYOS/DifferentialLab)
1212
[![SciPy](https://img.shields.io/badge/SciPy-8CAAE6?style=for-the-badge&logo=scipy&logoColor=white)](https://scipy.org/)
1313
[![NumPy](https://img.shields.io/badge/NumPy-013243?style=for-the-badge&logo=numpy&logoColor=white)](https://numpy.org/)
1414
[![Matplotlib](https://img.shields.io/badge/Matplotlib-11557c?style=for-the-badge&logo=matplotlib&logoColor=white)](https://matplotlib.org/)

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
project = "DifferentialLab"
1212
author = "Alejandro Mata Ali"
1313
copyright = "2026, Alejandro Mata Ali" # noqa: A001
14-
release = "0.2.3"
14+
release = "0.3.0"
1515
version = "0.2"
1616

1717
# -- General configuration ---------------------------------------------------

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
[![Python](https://img.shields.io/badge/Python-3.12+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/)
88
[![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](https://github.com/DOKOS-TAYOS/DifferentialLab/blob/main/license.md)
9-
[![Version](https://img.shields.io/badge/version-0.2.3-blue.svg?style=for-the-badge)](https://github.com/DOKOS-TAYOS/DifferentialLab)
9+
[![Version](https://img.shields.io/badge/version-0.3.0-blue.svg?style=for-the-badge)](https://github.com/DOKOS-TAYOS/DifferentialLab)
1010
[![SciPy](https://img.shields.io/badge/SciPy-8CAAE6?style=for-the-badge&logo=scipy&logoColor=white)](https://scipy.org/)
1111
[![NumPy](https://img.shields.io/badge/NumPy-013243?style=for-the-badge&logo=numpy&logoColor=white)](https://numpy.org/)
1212

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "differential-lab"
7-
version = "0.2.3"
7+
version = "0.3.0"
88
description = "DifferentialLab — Numerical ODE solver with Tkinter GUI, predefined equations, and professional visualizations"
99
readme = "README.md"
1010
requires-python = ">=3.12"

src/config/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import Final
44

55
APP_NAME: Final[str] = "DifferentialLab"
6-
APP_VERSION: Final[str] = "0.2.3"
6+
APP_VERSION: Final[str] = "0.3.0"
77

88
SOLVER_METHODS: Final[tuple[str, ...]] = (
99
"RK45",

src/utils/update_checker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def _fetch_latest_version(version_url: str | None = None) -> str | None:
9191
or default.
9292
9393
Returns:
94-
Version string (e.g. '0.2.3') or None if fetch failed.
94+
Version string (e.g. '0.3.0') or None if fetch failed.
9595
"""
9696
url = version_url or get_env("UPDATE_CHECK_URL", _DEFAULT_VERSION_URL, str)
9797

0 commit comments

Comments
 (0)