# CHANGELOG

## [1.0.0] - 2026-02-13
### Added
- Initial public release of diffstep
- Expression validation and normalization
- Tokenization engine
- AST parser
- Symbolic differentiation
- AST to string printer
- Expression simplification

## [1.1.0] - 2026-03-02
### Added
- New lowercase `diffstep()` public API function

### Deprecated
- `DiffStep()` function is now deprecated and will be removed in a future major version
- Users should migrate to `diffstep()`

### Internal
- Improved API consistency (PEP8 naming conventions)

## [1.1.1] - 2026-03-03
### Bugfix
- Fixed bug where you could not import diffstep from terminal

## [1.1.2] - 2026-03-13

### Added
- Layered API design to support both beginner and advanced users
- Simple entry-point function `diffstep()` for quick differentiation
- Additional public functions for more granular control of the differentiation pipeline
- Support for accessing lower-level functions through `import diffstep` (e.g. `diffstep.differentiate()`)

### Changed
- Improved package structure to expose both high-level and low-level APIs
- Updated `__init__.py` to limit wildcard imports (`from diffstep import *`) to the beginner-friendly `diffstep()` function

### Developer
- Refactored internal pipeline to support multiple public entry points

## [1.1.3] - 2026-03-17

### Added
- New `gradient(expression, x_value)` function to evaluate the derivative at a specific x-value
- New `normalise_expression(expression)` helper for expression normalization
- New `tokenise_expression(expression)` helper for expression tokenization
- New `parse_expression(expression)` helper for parsing expressions into AST form
- New `derived_ast(expression)` helper to return the derivative AST before simplification

### Changed
- Expanded pipeline-level API to support step-by-step differentiation workflows

## [1.2.0] - 2026-03-17

### Documentation
- Rewrote `README.md` into a user-focused package guide
- Added clearer usage examples for both `from diffstep import diffstep` and `import diffstep`
- Removed development-only setup details to keep installation and usage instructions focused on end users

### Changed
- Clarified project expectations in documentation by presenting `diffstep()` as the basic entry point and module-level usage as the advanced path

## [1.3.0] - 2026-04-10

### Bugfix
- Fixed `pretty_ast` label overlap for long function names (e.g. `arcsin`, `arccos`) by increasing horizontal spacing and shifting layout to avoid left-edge clipping.

## [1.4.0] - 2026-04-26

### Added
- Added general power rule support for forms like `x^x` and `x^(2x)`.
- Added full pytest coverage across pipeline, normalisation, tokenisation, parsing, differentiation, simplification, trace, and regressions.

### Changed
- Updated `trace(expression)` to a simple expression-only API.
- `trace()` now prints once by default and returns `None`.
- `parse_expression()` and `pretty_parse_expression()` now use `emit` to control print vs return behavior.
- Improved README wording and aligned docs with current API behavior.