Skip to main content

matlog — Boolean Algebra Parser+Solver

Project description

matlog

This module is well-documented with docstrings and type hints. Use help(matlog.tokens) or your editor hints to get familiar with it.

Basic usage:

from matlog import parse

expr = parse("A & B")
print(expr.solve(A=1, B=0)) # False
print(expr.solve(B=0)) # False
print(expr.table()) # prints the truth table of expression

Installation

Simply use pip install matlog or clone repo and launch setup.py

Contents

Expression string

An expression string is a bunch of tokens (atoms, expressions, operators and literals) in a specific order. There's a big example of expression string:
a | (b -> c) == (~a ^ 1) <- ~z

Let's review in detail:

Atoms

Any letter is considered as an atom. Atoms can be only one letter long and must be divided by operators.

Literals

A literal is 1 or 0 (True and False respectively). Literals are treated like atoms.

Expressions

Any expression can contain nested expression strings in brackets. Nested expressions are treated like atoms.

Operators

matlog expression syntax supports 6 binary operators and one unary (listed in order of priority, from high to low):

  • ~ (not / negation) unary: turns True to False and vice versa.
  • & (and / conjunction): True if (and only if) both operands are True
  • | (or / disjunction): True if (and only if) any operand is True.
  • -> (implication): False if (and only if) the left operand is True but the right is False
  • == (equality / biconditional): True if (and only if) operands are equal to each other
  • ^ (xor / exclusive disjunction): False if (and only if) operands are equal to each other
  • <- (converse implication): -> with reversed operands order

Expression

Expression class is the main class of the module. There are three ways to create an Expression object:

  • from an expression string: matlog.parse(expr_str)
  • copying an existing Expression: expr.copy() (same as matlog.Expression(expr.tokens))
  • deep-copying an existing Expression object: expr.deep_copy()
  • constructing an Expression from tokens (module won't check if it is valid in this case): matlog.Expression([token1, token2...])

Truth tables

You can use expr.table(keep=None) method to build a truth table for an Expression object. keep parameter can be either 1 or 0 (to filter rows with corresponding values) or None if you need a full table

Evaluating expression

If you need a value for a specific set of values, you can use .solve() method like this:

from matlog import parse

expr = parse("A & B | C")
print(expr.solve(A=1, B=0, C=1)) # prints 1
print(expr.solve({"A": 1, "B": 0, "C": 1})) # you can pass a dictionary too

if you need a result value (release version would provide more convenient ways, of course):

expr.value(A=1, B=0, C=1) # 1 (raises an exception if there's not enough data to solve expression)

Partial evaluation

If you know some (but not all) values, you can also use .solve(), providing some values:

from matlog import parse

expr = parse("A & B | C")
print(expr.solve(B=0)) # prints C
print(expr.solve({"B": 0})) # prints C too

Simplify

Smart (smarter than watermelon!) algorithm, simplifies expressions better than bare .solve().
This method recursively simplifies complex expressions, so expect it to work slower than (again) bare .solve().

from matlog import parse

expr = parse("(A | B | C) & ~(A | ~B | C)")
print(expr.simplify()) # prints ~(A | ~B | C)

Equality check

If you're wondering if expressions are equal (producing the same results with any set of values), you can use Expression.equals(self, other) method:

from matlog import parse

expr1 = parse("A & B")
expr2 = parse("B & A")
print(expr1.equals(expr2)) # True

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

matlog-2.3.1.tar.gz (23.7 kB view details)

Uploaded Source

Built Distribution

matlog-2.3.1-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file matlog-2.3.1.tar.gz.

File metadata

  • Download URL: matlog-2.3.1.tar.gz
  • Upload date:
  • Size: 23.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.5

File hashes

Hashes for matlog-2.3.1.tar.gz
Algorithm Hash digest
SHA256 ea186a8c61bce96798ff08a6d2a069a6fc3492e04f7f1e1383614fbf816db3d4
MD5 e6feddedf62180b42000d5af59c58d2b
BLAKE2b-256 f58ce16899ff6c04b1bdb22d5c19dc79c6a422e9d2e68cc3144a3c10900241f9

See more details on using hashes here.

File details

Details for the file matlog-2.3.1-py3-none-any.whl.

File metadata

  • Download URL: matlog-2.3.1-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.5

File hashes

Hashes for matlog-2.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 eb5e2aa5e3dc51179d5ec18c57e8f2e6eea2c4278fedbe63d3cc72a5d7de22bf
MD5 42eba9a15e9cb7a1f9cb88d325240ecc
BLAKE2b-256 3e2cab8538ae04be9298005a0ada8903e4f1907136fb1ab6c532f620e74c2910

See more details on using hashes here.

Supported by

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