Skip to main content

A pattern matching library.

Project description

A pattern matching libary for python.

Work in progress

Latest version released on PyPi Test coverage Build status of the master branch Documentation Status

Overview

This package implements pattern matching in python. It is similar to the implementation in Mathematica. A detailed example of how you can use matchpy can be found in the documentation.

In addition to the basic matching algorithm, there are data structures that can be used for more efficient many-to-one matching like the ManyToOneMatcher and the DiscriminationNet.

Expressions

Expressions and patterns both have a tree structure. Expressions consist of symbols (leafs) and operations (internal nodes):

>>> from matchpy import Operation, Symbol, Arity
>>> f = Operation.new('f', Arity.binary)
>>> a = Symbol('a')
>>> print(f(a, a))
f(a, a)

Patterns are expressions which can additionally contain wildcards and subexpressions can have a variable name assigned to them. During matching, a subject matching a pattern with a variable will be captured so it can be accessed later. Wildcards are placeholders that stand for any expression. Usually, the wildcards are used in combination with a variable name:

>>> from matchpy import Wildcard
>>> x = Wildcard.dot('x')
>>> print(Pattern(f(a, x)))
f(a, x_)

Here x is the name of the variable. However, unnamed wildcards can also be used:

>>> w = Wildcard.dot()
>>> print(Pattern(f(w, w)))
f(_, _)

Or a more complex expression can be named with a variable:

>>> print(Pattern(f(w, a, variable_name='y')))
y: f(_, a)

In addition, sequence wildcards that can match for multiple expressions are supported:

>>> z = Wildcard.plus('z')
>>> print(Pattern(f(z)))
f(z__)

Substitutions

Matches are given in the form of substitutions, which are a mapping from variable names to expressions:

>>> from matchpy import match
>>> y = Wildcard.dot('y')
>>> b = Symbol('b')
>>> expression = f(a, b)
>>> pattern = Pattern(f(x, y))
>>> substitution = next(match(expression, pattern))
>>> substitution
{'x': Symbol('a'), 'y': Symbol('b')}

Replacing the variables in the pattern according to the substitution will yield the original subject expression:

>>> from matchpy import substitute
>>> print(substitute(pattern, substitution))
f(a, b)

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

matchpy-0.4.tar.gz (89.4 kB view details)

Uploaded Source

Built Distribution

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

matchpy-0.4-py3-none-any.whl (60.8 kB view details)

Uploaded Python 3

File details

Details for the file matchpy-0.4.tar.gz.

File metadata

  • Download URL: matchpy-0.4.tar.gz
  • Upload date:
  • Size: 89.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for matchpy-0.4.tar.gz
Algorithm Hash digest
SHA256 7a6a2ba82e1ce2dc2217a13d8aced949381c525f370c42749c6d96c0277a5732
MD5 2492d5578ff7cacb735fbe46504355a4
BLAKE2b-256 733e8086d71cf20848d80c7d534e36e128a0b5beadc7b89c822cee2fa6d6d4e2

See more details on using hashes here.

File details

Details for the file matchpy-0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for matchpy-0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 de01b5060941ac4ca4086dc2513d20c5918abfe4f1d092a0c44fc5fb3febaa26
MD5 9ca65aa94c1aaccb802fec6b16c3d89f
BLAKE2b-256 463226efe0db8e9f6622cb8d17bf2b21dd8568f36e0665070d49d3b617a32c7f

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