Changelog¶
Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
0.3.1 — 2026-04-28¶
Changed¶
- Rename PyPI package from
agentfxtoshortfx— theagentfxname was already taken on PyPI - Rename import package directory
agentfx/→shortfx/ - Update all internal imports, docs, examples, MCP config, and entry points
0.3.0 — 2026-04-23¶
Breaking rename release: PyPI package renamed from formulite to agentfx to avoid name conflict with existing PyPI project.
Changed¶
- Rename PyPI package from
formulitetoagentfxto avoid name conflict with existing PyPI project - Add PEP 561
py.typedmarker file for typed package support - Add
twineto dev dependencies
0.2.2 — 2026-04-21¶
Documentation infrastructure release: add MkDocs Material site with auto-generated API reference and GitHub Pages deployment.
Added¶
- Add MkDocs Material documentation site with auto-generated API reference via mkdocstrings
- Add GitHub Pages deployment workflow (
.github/workflows/docs.yml) - Add
docsdependency group inpyproject.toml(mkdocs-material, mkdocstrings, gen-files, literate-nav, section-index)
Fixed¶
- Add
pymdownx.emojiextension for Material icons rendering in MkDocs
0.2.1 — 2026-04-16¶
Security hardening release: remove all subprocess usage, unsafe dispatch functions, and interactive I/O from library code. Add Python 3.10/3.11 compatibility fix and CI coverage enforcement.
Security¶
- Remove
execute_os_commandfunction frompy_operations.py— a function library must not execute OS commands - Remove
subprocess-based auto-installation fromstring_similarity.py—_lazy_importnow only attemptsimportlib.import_moduleand logs install instructions on failure - Add
_safe_factorialwith_MAX_FACTORIAL=170guard incalculator_functions.pyto prevent DoS via expensive factorial computations - Restrict
ast.Attributeaccess inapply_expression()(py_tools.py) to safe built-in types (str,int,float,bool,list,tuple,dict,set) and block private attribute access (_-prefixed) - Add
n > 170upper-bound guard tofactorial()andmultinomial_coefficient()inarithmetic_functions.py, and topoisson_probability(),erlang_pdf(),poisson_pmf(),multinomial_coefficient()instatistics_functions.py— aligns with existing_MAX_FACTORIAL=170incalculator_functions.py - Remove
CallByName()— exposed unrestrictedgetattr/setattron arbitrary objects via MCP - Remove
MsgBox()andInputBox()fromfxVBA/system_functions.py— interactive I/O (print/input) has no place in a pure function library
Fixed¶
- Add Python 3.10/3.11 compatibility shims for
itertools.batchedandmath.sumprodinpy_itertools.py(were Python 3.12+ only)
Removed¶
execute_os_command()fromfxPython.py_operations(security: no OS command execution in a function library)_is_uv_managed_environment(),_find_pyproject_dir(),_validate_package_name(),_install_library()and allsubprocessauto-install strategies fromfxString.string_similarityshortfx_AUTO_INSTALL/ALLOW_AUTO_INSTALLenvironment variables (no longer needed — library never installs packages)CallByName()fromfxVBA.misc_functions(unrestrictedgetattr/setattrdispatch not appropriate for a formula library)
Changed¶
.gitignore— add patterns for secrets, credentials, IDE, OS, database files- CI (
ci.yml) — addpytest-covwith--cov-fail-under=80,uv lock --check, andpip-auditsteps pyproject.toml— addpytest-cov>=6.0.0to dev dependencies
0.2.0 — 2026-04-13¶
Massive architecture overhaul: introduce auto_export dynamic re-export system, shared validators, AI agent integration layer (registry + MCP server + semantic search), and expand the library from ~580 to 3 000+ functions. All fx* packages now use _loader.auto_export(). The fxNumeric module is reorganised from 6 files into 30+ domain-specific submodules. New fxString submodules for encoding, hashing, compression, regex, and case conversion. All existing modules receive significant function additions and improved docstrings with Google-style format.
60 tracked files changed | +80 258 −10 625 lines | ~40 new untracked files
Added¶
Core Infrastructure¶
shortfx/_loader.py— Centralauto_export()dynamic re-export helper; allfx*/__init__.pyfiles now delegate to it (40 lines)shortfx/_validators.py— Shared input validation (ensure_type,ensure_numeric,ensure_positive,ensure_non_negative,ensure_in_range,ensure_not_empty) replacing ad-hocisinstancechecks (104 lines)shortfx/registry.py— Automatic function discovery, OpenAI-compatible JSON Schema generation (get_tool_schemas), invocation dispatcher (invoke_tool), and keyword/semantic search (search_tools) (360 lines)shortfx/semantic_search.py—SemanticToolSearchclass using fastembed embeddings for natural-language function discovery (157 lines)shortfx/__main__.py— CLI entry point forpython -m shortfx(3 lines)
MCP Server (AI Agent Integration)¶
shortfx/mcp/— New MCP (Model Context Protocol) server package:server.py— FastMCP server exposing 6 meta-tools:search_shortfx_tools,inspect_shortfx_tool,call_shortfx,list_shortfx_categories,get_shortfx_stats,get_shortfx_function_names(218 lines)mcp.json— MCP client configuration template (9 lines)README.md— MCP integration documentation (281 lines)__init__.py,__main__.py— Package init and entry pointshortfx/mcp_server.py— Convenience re-export entry point (7 lines)
fxNumeric — 24 New Submodules (~18 000 lines)¶
calculator_functions.py— AST-based safe expression evaluator (scientific_calculate) (283 lines)complex_functions.py— Complex number arithmetic, polar/rect conversion (603 lines)conformal_functions.py— Conformal mappings (Joukowski, Möbius, etc.) (288 lines)constants_functions.py— Mathematical/physical constants (π, e, φ, c, h, etc.) (191 lines)coordinate_systems_functions.py— Cartesian ↔ polar ↔ spherical ↔ cylindrical conversions (302 lines)curves_functions.py— Parametric curves, Bézier, splines, arc length, curvature (1 291 lines)distribution_functions.py— Probability distributions (normal, binomial, Poisson, exponential, etc.) (898 lines)finite_differences_functions.py— Forward/backward/central differences, numerical derivatives (382 lines)format_functions.py— Number formatting utilities (118 lines)geometry_functions.py— 2D/3D geometry: areas, volumes, distances, polygons (1 312 lines)inequalities_functions.py— Inequality solving and evaluation (312 lines)interpolation_functions.py— Linear, Lagrange, Newton, cubic spline interpolation (504 lines)mechanics_functions.py— Classical mechanics formulas (force, energy, momentum, etc.) (436 lines)number_theory_functions.py— Primes, GCD, LCM, factorisation, modular arithmetic, Euler's totient (3 309 lines)numerical_methods_functions.py— Root-finding (bisection, Newton, secant), numerical integration (742 lines)polynomial_functions.py— Polynomial evaluation, roots, addition, multiplication (337 lines)probability_extra_functions.py— Combinatorics, Bayes' theorem, expected value (575 lines)random_functions.py— Random number generation with various distributions (216 lines)rounding_functions.py— Rounding modes (banker's, floor, ceiling, significant figures) (454 lines)series_functions.py— Arithmetic/geometric/harmonic/Taylor/Fourier series (1 146 lines)special_functions.py— Gamma, beta, erf, Bessel, zeta, Legendre, Laguerre (3 028 lines)tensor_functions.py— Tensor operations (dot, cross, outer product, trace) (331 lines)transform_functions.py— DFT, DCT, Hadamard, Z-transform (601 lines)vector_analysis_functions.py— Gradient, divergence, curl, line/surface integrals (532 lines)
fxString — 5 New Submodules (~579 lines)¶
string_caseconv.py— Case conversion utilities (camelCase, snake_case, kebab-case, PascalCase, etc.) (159 lines)string_compression.py— Zlib-based string compression/decompression (50 lines)string_encoding.py— Base64, hex, URL, ROT13, morse code encoding/decoding (198 lines)string_hashing.py— MD5, SHA-256, SHA-512 string hashing (58 lines)string_regex.py— Regex utilities (match, find_all, replace, split, validate) (114 lines)
fxPython — 1 New Submodule¶
py_logic.py— Logic helper functions (IIf, Switch, Choose, coalesce, etc.) (70 lines)
Project Files¶
CONTRIBUTING.md— Contribution guidelines (294 lines)CHANGELOG.md— Full changelog reconstructed from commit historyquality_functions.md— Function quality checklist (24 lines)_audit.py— Function catalogue audit and quality metrics tool (2 334 lines)_scan_core.py— Core module scanner utility (30 lines)
Changed¶
Architecture — auto_export Migration¶
- All 6
fx*/__init__.pyfiles rewritten to useshortfx._loader.auto_export()instead of manual imports or dynamic__all__construction shortfx/__init__.py— Emptied; subpackages are now imported explicitly by consumers
fxNumeric — Rename & Expand (5 files renamed, 1 deleted)¶
numeric_arithmetic.py→arithmetic_functions.py— Expanded from 358 to 4 824 lines with new functionsnumeric_convertions.py→conversion_functions.py— Expanded from 1 080 to 9 203 linesnumeric_finance.py→finance_functions.py— Expanded from 680 to 9 334 linesnumeric_statistics.py→statistics_functions.py— Expanded from 584 to 11 999 linesnumeric_trigonometry.py→trigonometry_functions.py— Expanded from 1 156 to 5 446 linesfxNumeric/README.md— Comprehensive documentation rewrite (+5 292 lines)
fxString — Expand Existing Modules¶
string_operations.py— +3 083 lines: new string functionsstring_evaluations.py— +2 293 lines: new evaluation and validation functionsstring_convertions.py— +1 141 lines: new conversion functionsstring_format.py— +640 lines: new formatting functionsstring_similarity.py— +155 lines: additional similarity algorithms and fallbacksfxString/README.md— Comprehensive documentation rewrite (+2 268 lines)
fxDate — Expand Existing Modules¶
date_operations.py— +3 625 lines: new date arithmetic and manipulation functionsdate_evaluations.py— +2 566 lines: new date validation and evaluation functionsdate_convertions.py— +1 075 lines: new date conversion functionsdate_sys.py— +168 lines: new system date functionsfxDate/README.md— Comprehensive documentation rewrite (+1 481 lines)
fxExcel — Expand All Modules¶
statistic_formulas.py— +2 217 lines: expanded statistical functionsmath_formulas.py— +817 lines: expanded math functionslookup_formulas.py— +734 lines: expanded lookup/reference functionsfinancial_formulas.py— +656 lines: expanded financial functionsengineering_formulas.py— +447 lines: expanded engineering functionstext_formulas.py— +397 lines: expanded text functionsdate_formulas.py— +282 lines: expanded date formulaslogic_formulas.py— +150 lines: expanded logic functionsdatabase_formulas.py— +95 lines: expanded database functionsinformation_formulas.py— +81 lines: expanded information functionsfxExcel/README.md— Comprehensive documentation rewrite (+6 168 lines)
fxPython — Expand Existing Modules¶
py_operations.py— +2 008 lines: new iterable/dict operationspy_tools.py— +120 lines: expanded utility functionspy_convertions.py— +123 lines: expanded conversion functionspy_itertools.py— Refactored (−38 lines, streamlined)fxPython/README.md— Comprehensive documentation rewrite (+1 084 lines)
fxVBA — Expand Existing Modules¶
string_functions.py— +429 lines: expanded VBA string functionsfinancial_functions.py— +293 lines: expanded VBA financial functionsdate_functions.py— +176 lines: expanded VBA date functionsconversion_functions.py— +144 lines: expanded VBA conversion functionsmisc_functions.py— +97 lines: expanded miscellaneous VBA functionsformat_functions.py— +82 lines: expanded VBA format functionsmath_functions.py— +54 lines: expanded VBA math functionslogic_functions.py— +19 lines: expanded VBA logic functions
Documentation¶
README.md— Updated project description and module overview (+65 lines)llms.txt— Major expansion with function catalogue for AI discovery (+2 329 lines)uv.lock— Updated dependency lock file (+1 819 lines)examples/examples_fxPython.py— Updated examples (+79 lines)
Removed¶
shortfx/fxNumeric/numeric_operations.py— Deleted (−1 143 lines); functions redistributed to new domain-specific submodulesshortfx/fxVBA/README.md— Removed (−42 lines)shortfx/fxVBA/system_functions.py— Reduced (−24 lines)
0.1.0 — 2026-03-29¶
Initial development release of shortfx — a Python library for high-level functions similar to Excel formulas, organized into thematic modules (fxDate, fxString, fxNumeric, fxPython, fxExcel, fxVBA).
5be2a69 — string function updates (2026-03-29)¶
Add data masking, distinct split, improved lazy imports with auto-install, and CIF validation fix.
5 files changed | +314 −49
Added¶
shortfx/fxString/string_format.py— Addmask_data()for data anonymization/obfuscation with positional masking modes (all,start,end,index) (+77 lines)shortfx/fxString/string_operations.py— Adddistinct_split()to split delimited strings, remove duplicate tokens preserving order, and re-join (+66 lines)shortfx/fxString/README.md— Documentdistinct_splitfunction in index and reference sections (+37 lines)
Changed¶
shortfx/fxString/string_similarity.py— Rewrite_lazy_import()with multi-strategy auto-install (uv add → uv pip → pip → pip --break-system-packages); add graceful fallbacks formetaphone_score()andhamming_score()when dependencies are unavailable (+122 −37)
Fixed¶
shortfx/fxString/string_spanish.py— Fix CIF validation per AEAT (RD 1065/2007): correct odd/even digit sum algorithm and add letterKto letter-control-only group (+12 −12)
135974d — new ignore (2026-02-05)¶
Extend .gitignore with comprehensive API key and secret exclusion patterns.
1 file changed | +11 −0
Changed¶
.gitignore— Add glob patterns for*key*and*secret*files (.txt,.csv,.json,.cfg,.toml,.env) in any subdirectory
9e1defd — string evaluations update (2026-02-03)¶
Clean up docstrings across string evaluation functions.
1 file changed | +5 −87
Changed¶
shortfx/fxString/string_evaluations.py— Remove verbose**Cost:**annotations from 20+ function docstrings; simplify module-level docstring; standardize docstring format
88a8d19 — uv lock (2026-01-19)¶
Add uv lock file for reproducible dependency resolution.
1 file changed | +3 −0
Added¶
uv.lock— Generated lock file for uv package manager
7b55779 — empty init (2026-01-13)¶
Remove all re-exports from __init__.py files; prefer explicit module imports.
7 files changed | +0 −263
Changed¶
shortfx/__init__.py— Remove package docstring and star imports of subpackages (−20 lines)shortfx/fxDate/__init__.py— Removediff_timere-export and__all__(−12 lines)shortfx/fxExcel/__init__.py— Remove dynamic submodule re-exports (−60 lines)shortfx/fxNumeric/__init__.py— Remove docstring and__version__(−9 lines)shortfx/fxPython/__init__.py— Remove explicit function re-exports frompy_operations,py_convertions,py_tools,py_itertools(−60 lines)shortfx/fxString/__init__.py— Remove docstring and import guidance comment (−12 lines)shortfx/fxVBA/__init__.py— Remove dynamic re-exports and VBA aliases (Join,Array,Filter,Type_,Input_) (−90 lines)
ff63fd7 — fix documentation (2026-01-13)¶
Fix documentation issues across the project.
Files changed | Documentation corrections
Fixed¶
- Documentation fixes (diff unavailable — inferred from commit message)
34e2d32 — Merge branch 'main' (2026-01-08)¶
Merge commit incorporating documentation overhaul and syntax error fix.
58 files changed | +43329 −1426
Changed¶
- Merge of
261b3f6+e58ba2b— Consolidate documentation overhaul with syntax fix
261b3f6 — sintax error (2026-01-08)¶
Remove duplicate string_merge function definition.
1 file changed | +0 −138
Fixed¶
shortfx/fxString/string_operations.py— Remove duplicatedstring_merge()function code block that caused syntax error (−138 lines)
e58ba2b — Documentation and new functions (2026-01-07)¶
Major release: complete documentation rewrite, add fxExcel and fxVBA modules, add date evaluations, and comprehensive LLMs.txt.
58 files changed | +43329 −1564
Added¶
shortfx/fxExcel/— New Excel-compatible formulas module with 11 submodules:database_formulas.py— Database functions (DSUM, DCOUNT, DAVERAGE, etc.)date_formulas.py— Date/time functions (DATE, TIME, NOW, TODAY, etc.)engineering_formulas.py— Engineering functions (DEC2BIN, HEX2DEC, CONVERT, etc.)financial_formulas.py— Financial functions (PMT, FV, PV, NPV, IRR, etc.)information_formulas.py— Information functions (ISNUMBER, ISTEXT, TYPE, etc.)logic_formulas.py— Logic functions (IF, AND, OR, NOT, XOR, IFS, etc.)lookup_formulas.py— Lookup functions (VLOOKUP, HLOOKUP, INDEX, MATCH, etc.)math_formulas.py— Math functions (SUM, PRODUCT, MOD, POWER, etc.)statistic_formulas.py— Statistical functions (AVERAGE, MEDIAN, STDEV, etc.)text_formulas.py— Text functions (CONCATENATE, LEFT, RIGHT, MID, etc.)fxExcel.md— Module documentationshortfx/fxVBA/— New VBA/Access-compatible functions module:array_functions.py,conversion_functions.py,string_functions.pydate_functions.py,math_functions.py,financial_functions.pylogic_functions.py,system_functions.py,format_functions.pyinteraction_functions.py,error_functions.pyshortfx/fxDate/date_evaluations.py— New date evaluation and validation functionsshortfx/fxDate/fxDate.md— Module documentationshortfx/fxNumeric/fxNumeric.md— Module documentationLLMs.txt— Comprehensive LLM-friendly project description (+770 lines)Help.md— Help documentation
Changed¶
README.md— Complete rewrite with new structure: module overview, usage examples for fxExcel, fxDate, fxString, fxVBA; installation instructions (+120 −92)shortfx/__init__.py— Add package docstring with domain descriptions; add subpackage imports (+15 −4)shortfx/fxDate/__init__.py— Add docstring,diff_timere-export, and__all__(+11 −2)
0468292 — more funcitons (2025-12-22)¶
Add itertools module, string merge function, and fix ISO datetime conversion.
5 files changed | +1089 −24
Added¶
shortfx/fxPython/py_itertools.py— New itertools-based utilities module (+796 lines): batch processing, sliding windows, chain operations, grouping utilities, and moreshortfx/fxString/string_operations.py— Addstring_merge()for 3-way string merging with conflict detection and markers (+279 lines)
Changed¶
.gitignore— Replace specificsecrets.tomlwith generic**/secrets.*pattern (+1 −2)LLMs.txt— Whitespace normalization
Fixed¶
shortfx/fxDate/date_convertions.py— Fixfrom_iso_to_local_datetime()for Python 3.10 compatibility: handle'Z'suffix by replacing with'+00:00'; usedatetime.astimezone()without argument instead ofZoneInfo("localtime")for cross-platform support (+13 −22)
8c1d366 — reorganization (2025-12-22)¶
Project structure reorganization.
Files changed | Structural refactoring
Changed¶
- Reorganize project file structure (diff unavailable — inferred from commit message)
c84fdba — reorder functions and new flat_vowels (2025-08-05)¶
Reorder and rename dictionary functions, remove Pydantic dependency, improve flat_vowels.
4 files changed | +348 −288
Added¶
shortfx/fxPython/py_convertions.py— Adddictionary_to_string(),string_to_dictionary(), andconvert_string_to_list()functionsshortfx/fxPython/py_operations.py— Adddictionary_filter_by_keys()andcombine_dictionaries()(union/intersection) (+161 lines)
Changed¶
shortfx/fxPython/py_convertions.py— Renamedict_*functions todictionary_*for consistency:dictionary_keys_to_list,dictionary_items_to_list_of_tuples,dictionary_keys_to_set,dictionary_values_to_setshortfx/fxString/string_format.py— Rewriteflat_vowels()to preserve Spanish special characters (ñ, ç, ü) while removing only acute accents; addTypeErrorraise instead of returningFalsefor non-string input (+39 −7)
Removed¶
shortfx/fxPython/py_convertions.py— Removejson_schema_to_pydantic_model()and Pydantic dependency (from pydantic import BaseModel, Field, create_model)shortfx/fxString/string_convertions.py— Removestring_to_list()(moved topy_convertions.pyasconvert_string_to_list) (−73 lines)
c00a855 — Refactor estructura y añade conversión de JSON Schema a Pydantic (2025-07-28)¶
Refactor project structure and add JSON Schema to Pydantic model conversion.
Files changed | Structural refactoring + new features
Added¶
- JSON Schema to Pydantic model conversion functionality (diff unavailable — inferred from commit message)
Changed¶
- Project structure refactoring
7b8af4b — move files to folder (2025-07-24)¶
Move all source modules into shortfx/ package directory; add example files.
30 files changed | +325 −69
Added¶
examples.py— Usage examples for math, text, and lookup functions (+36 lines)shortfx/fxString/example_grammar.py— Grammar correction example usingSpellCorrector(+39 lines)shortfx/fxString/example_names_corrector.py— Name correction and validation example with SQLite integration (+238 lines)
Changed¶
- All modules renamed from root to
shortfx/package: fxDate/*.py→shortfx/fxDate/*.py(5 files)fxNumeric/*.py→shortfx/fxNumeric/*.py(6 files)fxPython/*.py→shortfx/fxPython/*.py(3 files)fxString/*.py→shortfx/fxString/*.py(8 files)__init__.py— Removepy_classesimport (module deleted).gitignore— Add exclusions for.github/,.vscode/,tests/,docs/,notebooks/,ToDo/
Removed¶
shortfx/fxPython/py_tools.py— Removegenerate_key()function and its prime number generator (−67 lines)
45bfa8e — move data structures to fastETL (2025-07-24)¶
Move data structure classes to the fastETL project.
1 file changed | +0 −321
Removed¶
fxPython/py_classes.py— Remove data structure classes (moved to external fastETL project) (−321 lines)
985f0b6 — codebase (2025-07-13)¶
Initial codebase upload with all core function modules.
Files changed | Large initial upload
Added¶
fxDate/— Date manipulation module:date_convertions.py,date_operations.py,date_sys.py,date_excel.pyfxNumeric/— Numeric operations module:numeric_arithmetic.py,numeric_convertions.py,numeric_finance.py,numeric_operations.py,numeric_statistics.py,numeric_trigonometry.pyfxPython/— Python utilities module:py_classes.py,py_convertions.py,py_operations.py,py_tools.pyfxString/— String manipulation module:string_convertions.py,string_evaluations.py,string_format.py,string_grammar.py,string_operations.py,string_similarity.py,string_spanish.py,string_validations.py__init__.py— Package initialization with star imports from all modules
79a264d — Initial commit (2025-06-08)¶
Repository initialization with license and README.
3 files changed | +216 −0
Added¶
.gitignore— Comprehensive Python gitignore template (+194 lines)LICENSE— MIT License, Copyright (c) 2025 DatamanEdge (+21 lines)README.md— Initial project title (+1 line)