Skip to main content

Representation theory for automata, made practical.

Project description

morphata

morphata does representation theory for automata, and makes it practical.

An automaton -- its states, transitions, and acceptance condition -- is a structural object. Operators turn that structure into a quantitative interpretation: a matrix-valued morphism over a semiring, a multilinear polynomial over a bounded distributive lattice, or a BDD-canonicalised symbolic representation. morphata packages both halves -- the structures and the morphisms that interpret them -- in one library.

It builds on algebraic for backend-agnostic semiring algebra (NumPy, JAX, PyTorch).

Quick Start

Installation

pip install morphata

Basic Usage

import algebraic
import jax.numpy as jnp
from morphata.builder import AutomatonBuilder
from morphata.alphabet import weighted_alphabet
from morphata.operators.matrix import MatrixOperator
import logic_asts as logic

builder: AutomatonBuilder[int, str] = AutomatonBuilder()
builder.add_state(0, initial=True)
builder.add_state(1, accepting=True)
builder.add_transition(0, guard=logic.Variable("a"), succ=1)
aut = builder.build()

def xi(x, guard):
    return float(x[0])

alphabet = weighted_alphabet(xi=xi)
maxplus = algebraic.semirings.tropical_semiring(minplus=False)
op = MatrixOperator.from_nfa(aut, semiring=maxplus, alphabet=alphabet)

x = jnp.array([2.0])
transitions = op.cost_transitions(x)

For more, see the documentation.

Citation

If you use the matrix operator or this package, please cite one of:

  • For differentiable weighted automata in general:
@inproceedings{balakrishnan2024differentiable,
  title = {Differentiable {{Weighted Automata}}},
  booktitle = {{{ICML}} 2024 {{Workshop}} on {{Differentiable Almost Everything}}: {{Differentiable Relaxations}}, {{Algorithms}}, {{Operators}}, and {{Simulators}}},
  author = {Balakrishnan, Anand and Deshmukh, Jyotirmoy V.},
  year = 2024,
  month = jun,
  url = {https://openreview.net/forum?id=k2hIQYqHTh},
  copyright = {All rights reserved},
  langid = {english}
}
  • For weighted automata in motion planning:
@inproceedings{balakrishnan2024motion,
  title = {Motion {{Planning}} for {{Automata-based Objectives}} Using {{Efficient Gradient-based Methods}}},
  booktitle = {2024 {{IEEE}}/{{RSJ International Conference}} on {{Intelligent Robots}} and {{Systems}} ({{IROS}})},
  author = {Balakrishnan, Anand and Atasever, Merve and Deshmukh, Jyotirmoy V.},
  year = 2024,
  month = oct,
  pages = {13734--13740},
  issn = {2153-0866},
  doi = {10.1109/IROS58592.2024.10802177}
}
  • For alternating weighted automata in multi-agent systems:
@inproceedings{balakrishnan2025monitoring,
  title = {Monitoring {{Spatially Distributed Cyber-Physical Systems}} with {{Alternating Finite Automata}}},
  booktitle = {Proceedings of the 28th {{ACM International Conference}} on {{Hybrid Systems}}: {{Computation}} and {{Control}}},
  author = {Balakrishnan, Anand and Paul, Sheryl and Silvetti, Simone and Nenzi, Laura and Deshmukh, Jyotirmoy V.},
  year = 2025,
  month = may,
  pages = {1--11},
  publisher = {ACM},
  address = {Irvine CA USA},
  doi = {10.1145/3716863.3718033},
  isbn = {979-8-4007-1504-4},
  langid = {english}
}

License

See LICENSE file for details.

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

morphata-2.0.3.tar.gz (335.0 kB view details)

Uploaded Source

Built Distribution

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

morphata-2.0.3-py3-none-any.whl (83.8 kB view details)

Uploaded Python 3

File details

Details for the file morphata-2.0.3.tar.gz.

File metadata

  • Download URL: morphata-2.0.3.tar.gz
  • Upload date:
  • Size: 335.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"42","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for morphata-2.0.3.tar.gz
Algorithm Hash digest
SHA256 8b77ee9bef342c0ef4162837b152aa5273d7e6498ae071f85abef0e85104d563
MD5 4dbb5aa66b5758137725bc77c435e50f
BLAKE2b-256 67960fad199c8de90c6d4f365c0f945eb760756adba9524d3423689caa5fc688

See more details on using hashes here.

File details

Details for the file morphata-2.0.3-py3-none-any.whl.

File metadata

  • Download URL: morphata-2.0.3-py3-none-any.whl
  • Upload date:
  • Size: 83.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"42","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for morphata-2.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a060ee328d644df82fe802c4df08428fd2501d771d262863359d5f863d5566d8
MD5 83c09211577dea1e9851101f66bdd59f
BLAKE2b-256 b6f544c70fee4b37d7407c1678545593763d41af3b8532ff03db89e3858fc16e

See more details on using hashes here.

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