Release Notes#
[2.1.0] - 2026-06-XX#
Added#
mesotimespackage: A specialized engine integrated into the codebase dedicated to historical chronological and astronomical calculations.Class
BabF(mesomath): Native implementation of sexagesimal fraction arithmetic, enabling precise representation and manipulation of base-60 fractional values.Dynamic Timekeeping Controllers (
BabylonianDay): Comprehensive support for localized Mesopotamian elastic time tracking, managing dynamic boundaries (Sunset-to-Sunset), night watch watched zones (maṣṣarātu), and reciprocal time conversions (ut_to_ush/ush_to_ut).Calendrical Dispatch Engine (
ChronDate): A multi-mode macro-chronological reporting matrix that dynamically routes inquiries to empirical cuneiform datasets (Parker, R. and Dubberstein, W. (1971). Babylonian Chronology: 626 B.C.–A.D. 75 2nd Edition), or a cyclical astronomical proleptic calendar baseline depending on chronological record availability. This engine leads to extensive astronomical information about the ephemeris of the day, month, and year of the date.
Changed#
Metapackage Architecture: MesoMath has shifted into a structural metapackage architecture, decouplig core scribal metrologies (
mesomath) from chronological timelines and ephemeris tracking subsystems (mesotimes).
[2.0.0] - 2026-04-20#
Added#
New Interactive Environments:
ibabcalc: Advanced IPython 9 based interactive shell for power users, featuring a clean “Scribal Console” with pre-configured metrological namespaces.Jupyter Support: New
nb_utilsmodule and special rendering methods (BabN.multable_nbandMesoM.metronotebook) for high-fidelity research in notebooks.
Cloud Experience: Official Binder integration with live, zero-install notebooks for Plimpton 322 and Surface of Squares.
Dimensional Arithmetic: Full support for geometric division between magnitudes (e.g.,
Bsur / Blen -> Blen).Interoperability: Added
.from_si()methods for all metrological classes, allowing instant conversion from metric units to Babylonian systems.Unified API:
.lookup(): New reverse metrological search engine (replacesmtlookup.py)..multable(): New scribal multiplication table generator (replacesbmultable.py).
Epigraphic Engine: Native support for Old Babylonian Transliteration and Unicode Cuneiform across all core classes.
New Systems:
Implementation of Proust Series presets for standard Nippur metrology.
BsyK: New class for the Sumerian King List counting system.Bbri: Enhanced support for Brick Metrology and logistics.
Export Options: Added
.metrohtml()and.metrolatex()for professional table generation.
Changed#
Architectural Refactor:
.metrolist()and.scheme()promoted to class methods for better performance and consistency.All console output and tables now default to Markdown format for better legibility.
Documentation: Major restructuring of the Tutorial and Reference sections to include
ibabcalcand Jupyter workflows.Dependencies: Minimum requirements updated to
ipython>=9.0.0,traitlets>=5.0.0, andwcwidth(for character alignment).
Fixed#
.metrolist(): Fixed a bug where substances were not rendered with cuneiform glyphs when
cuneiform=True.Visual Alignment: Improved Cuneiform character spacing in CLI environments via
wcwidth.Several minor bugfixes identified during the RC cycle (v2.0.0rc0 - v2.0.0rc2).
Removed#
Legacy Apps: The standalone scripts
metrotable.py,mtlookup.py, andbmultable.pyhave been removed. Their functionality is now integrated into the core class methods.
Historical Note (Release Candidates)#
v2.0.0rc2 (2026-04-12): Fixes to metrological glyph rendering.
v2.0.0rc1 (2026-04-10): Alignment fixes for terminal output.
v2.0.0rc0 (2026-04-08): Initial architectural refactor and new API.
[2.0.0rc2] - 2026-04-12#
Fixed#
.metrolist() bug: Now the substance is written with the appropriate glyphs if
cuneiform=True.Some Minor Fixes
[2.0.0rc1] - 2026-04-10#
Fixed#
Dependencies: Added missing
wcwidthdependency to ensure correct visual alignment of cuneiform characters in CLI environments.
[2.0.0rc0] - 2026-04-08#
Added#
Dimensional Arithmetic: Full support for geometric division between magnitudes (e.g.,
Bsur / Blen -> Blen).Interoperability: New
@classmethod .from_si()for all metrological classes, allowing instant conversion from modern metric units to Babylonian objects.Unified API:
.lookup(): New reverse metrological search engine (replacesmtlookup.py)..multable(): New scribal multiplication table generator (replacesbmultable.py).
Epigraphic Engine: Native support for Old Babylonian Transliteration and Unicode Cuneiform across all core classes.
Historical Series: Implementation of the Proust Series presets for standard Nippur metrology.
New Metrologies:
BsyK: New class for the Sumerian King List counting system (years).Bbri: Enhanced support for Brick Metrology and logistics.
Export Options: New
.metrohtml()and.metrolatex()methods for generating professional tables with full cuneiform support.
Changed#
Architectural Refactor:
.metrolist()and.scheme()are now class methods, optimized for better performance and consistency.Source code reorganized for a more logical developer experience.
Output Format: All console listings and tables now default to Markdown format for better readability and easier copy-pasting into research documents.
Deprecated#
Legacy Apps:
metrotable.py,mtlookup.pyandbmultable.pyare now considered obsolete. They are maintained in this Release Candidate for backward compatibility but will be removed in the final v2.0.0 stable release. Use the internal class methods instead.
[1.4.0] - 2026-03-08#
Added#
Formal Grammar Engine: Integrated
parsimonious(v0.11.0) to handle metrological string parsing via the newMesoInterpreterclass.New Test File:
test_parser.pychecks that the 75 different metrological expression types generated by MesoMath are readable as valid inputs.
Changed#
Robust Error Handling: Wrapped the
_MesoM.__init__logic to intercept technicalParseError,VisitationErrorandIncompleteParseErrorexceptions, replacing them with user-friendly error messages.Unit Normalization: The interpreter now uses the global
normalizefunction consistently across all input types to ensure unit names likešar2-galmap correctly tosargal.
Fixed#
Non-parseable expressions: An issue was resolved where some metrological expressions generated by MesoMath could not be interpreted back as inputs.
Dependencies#
Pinned
parsimonious==0.11.0to ensure grammar stability and prevent breaking changes from future library updates.
v1.3.0 (2026-02-28)#
This version marks a milestone in the evolution of MesoMath, transforming it from a fixed-system calculator into an extensible metrology environment designed for Assyriological research and administrative calculations.
🚀 Main New Features#
1. babcalc Improvements#
babcalc, the central engine of MesoMath, now has new features that make it more user-friendly and functional:
* History is now saved between sessions.
* Tab completion.
* Ability to run and debug scripts in pure Python.
2. Extensible and Polymorphic Metrology#
The core of npvs.py has been refactored to allow user classes to interact natively with the system:
**Use of
isinstance(): The system now recognizes custom subclasses (such as height measurements or regional variants) as valid types for complex operations (e.g., Area * Height = Volume).**Safe extraction of
.dec: Arithmetic has been shielded to prevent rounding errors when operating between different metrology systems.
3. Economic and Administrative Management#
Cost calculation methods have been integrated directly into the base class MesoM, available for all units of measure:
.labor_cost(work_man): Calculate the total number of workdays (man-days) required for a task based on standard Babylonian perforations(): Calculates grain rations from work volumes or capacity.silver_payments(): Manages silver (weight) payments with decimal precision, rounding to the smallest unit (s) only in the final step to ensure historical accuracy.
4. Dynamic Metrological Tables (metrolist)#
Any metrological class (including user-created ones) can now generate its own reference tables using the new metrolist() class method:
Allows for quick previewing of unit progression in the
babcalcREPL.Supports the use of
**kwargsfor future format expansions.
📖 Documentation Improvements#
Smart Copy-Paste: Code examples in the documentation now feature a “smart” copy button that automatically ignores prompts (
-->or$), allowing you to paste code directly into your terminal or script.Migration to Markdown: The main index and manuals now use MyST Markdown for more agile and readable writing.
Version Automation: A system has been implemented that automatically synchronizes the version across all documentation directly from the source code.
Standardization of the API docstrings: The python help is more useful now.
🛠 Internal Changes (Refactoring)#
Significant AI-assisted refactoring
Improved robustness of class constructors and magic methods
__add__,__sub__,__mul__, etc.
v1.2.4 (2025-11-24)#
Added
typing_extensionsto dependencies.
v1.2.3 (2025-11-20)#
Fixed a bug in the
mesomath.mtlookupmodule
v1.2.2 (2025-11-18)#
Fixed a bug in the
mesomath.babnmodule
v1.2.1 (2025-11-18)#
Fixed a major bug in the
mesomath.npvsmodule that caused errors in parsing string input for theBsurandBvolclasses.Added Jupyter notebooks.
Required Python version downgraded to 3.10.
v1.2.0 (2025-11-14)#
Important review of the code and package structure.
Comparing objects of the included classes with other objects that are not of their own class (or integers, in the case of
BabNclass) now raisesNotImplementedError.Classes are now hashable.
Method
__int__added to all clases. Methods__len__and__round__added toBabNclass.New simple utility to print sexagesimal multiplication tables.
The package and repository now have a more standard structure.
Some test files for
pytestadded.Obsolete
mesolib.pyand old test files removed.
v1.1.1 (2025-11-05).#
Some bug fixes and other minor improvements.
v1.1.0 (2025-09-23).#
Documentation prepared using Sphinx now resides in https://mesomath.readthedocs.io/index.html. It includes the tutorials.
Bug fix:
mtlookup.pynow admit integer values e.g.:$ mtlookup -t L 123Added method
.metval()to_MesoMclass.Added basic support for actual or academic unit names in methods
.__init__(),.scheme()and.prtf()so that strings of type:(1 dis) 1/3 kuš3 (4 dis) šu-sican be obtained in output and used in input.metrotableandmtlookuputilities adapted to use academic names.Updated tutorials moved to documentation.
Restructured and cleared repository.
v1.0.0 Initial release 2025-09-16.#
The intended functionality of the package is complete and testing (intensive but not exhaustive) is satisfactory.