Skip to main content

A clean, extensible fuzzy-logic toolkit in pure Python + NumPy

Project description

PyPI CI Docs Python versions License: MIT DOI

fuzzytool

A clean, extensible fuzzy-logic toolkit in pure Python + NumPy. Its design priorities are a composable API, algorithm comparison, visualization and code clarity — a modern alternative to the verbose control API of scikit-fuzzy.

import fuzzytool as fz

# Credit-risk premium: a lender turns a credit score + debt-to-income ratio
# into the risk points it adds on top of its base interest rate.
score   = fz.Variable("score", (300, 850), terms=["poor", "fair", "good", "excellent"])
dti     = fz.Variable("dti", (0, 50), terms=["low", "moderate", "high"])
premium = fz.Variable("premium", (0, 12), terms=["low", "medium", "high"])

sys = fz.Mamdani(defuzz="centroid")
sys.rule(score["poor"] | dti["high"], premium["high"])        # |=OR  &=AND  ~=NOT
sys.rule(score["fair"] & dti["moderate"], premium["medium"])
sys.rule(score["good"] | score["excellent"], premium["low"])

print(sys(score=800, dti=10))    # the system is just callable -> a low premium

The design idea (extensibility)

The inference loop knows nothing about any concrete variant. Everything that changes lives behind small Python Protocols:

  • MembershipFunction (fuzzytool/membership.py) — a callable x -> degree. A new shape = a new callable.
  • Norm (fuzzytool/norms.py) — t-norms (AND) and s-norms (OR), resolved by name. A new connective = one registered function.
  • defuzzifiers (fuzzytool/defuzz.py) — centroid, bisector, MOM/SOM/LOM, resolved by name.

Rules read like logic thanks to operator overloading: & is the t-norm, | the s-norm, ~ the complement.

What it includes / roadmap

Phase Content Status
1 Core: membership functions, t-/s-norms, Variable, operator rules, Mamdani + defuzzification, tipper example, tests
2 Takagi-Sugeno (TSK) inference + viz (membership plots, control surface) ✅ (TSK + viz)
3 Type-2 / interval type-2 sets (footprint of uncertainty) + Karnik-Mendel type reduction
4 Fuzzy clustering: fuzzy c-means, Gustafson-Kessel, possibilistic
5 ANFIS (trainable TSK) + F-transform (direct/inverse)
6 Notebooks, JOSS paper.md, Zenodo DOI, PyPI release

v0.2.0

  • Fuzzy numbers & MCDM: triangular/trapezoidal fuzzy-number arithmetic, Fuzzy TOPSIS and Fuzzy AHP.
  • Rule learning: Wang-Mendel rule-base generation from data; Tsukamoto inference (monotonic consequents).
  • Engineering: vectorized batch inference (predict), JSON save/load, and a scikit-learn estimator interface for ANFIS.

See ROADMAP.md.

Install

pip install fuzzytool            # core (NumPy only)
pip install fuzzytool[viz]       # + matplotlib visualization

From source, for development:

python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,viz,docs]"
pytest -q
python examples/tipper.py

Documentation

A documentation portal (narrative guide + API reference from docstrings) is built with MkDocs Material and published to GitHub Pages: https://fuzzytool.github.io/.

pip install -e ".[docs]"
mkdocs serve        # live portal at http://127.0.0.1:8000

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fuzzytool-0.2.0.tar.gz (397.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fuzzytool-0.2.0-py3-none-any.whl (40.4 kB view details)

Uploaded Python 3

File details

Details for the file fuzzytool-0.2.0.tar.gz.

File metadata

  • Download URL: fuzzytool-0.2.0.tar.gz
  • Upload date:
  • Size: 397.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fuzzytool-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0263ba4c6b7e7b5f0773ee843d469499d4e7f94cfd8946f181195d8c49a76857
MD5 aa24f421ad012be926effa0b19aecedf
BLAKE2b-256 5fd0fc5b98bd3b6fd488c7e99dd2fb125de44eeb4290bf64203cd2ea4dd36648

See more details on using hashes here.

Provenance

The following attestation bundles were made for fuzzytool-0.2.0.tar.gz:

Publisher: release-pypi.yml on fuzzytool/fuzzytool.github.io

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fuzzytool-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: fuzzytool-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 40.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fuzzytool-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e14a1b0dd2b0524e1ce2adc9d5132c83af83a4ca1635e17869074a260743b04a
MD5 7bde72dc65394de052bb516eea74d288
BLAKE2b-256 9aa0cd0a4377c1d21ed89d6138c5d41c756efb489cd07875597a5472e61a745e

See more details on using hashes here.

Provenance

The following attestation bundles were made for fuzzytool-0.2.0-py3-none-any.whl:

Publisher: release-pypi.yml on fuzzytool/fuzzytool.github.io

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page