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.2.tar.gz (84.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.2-py3-none-any.whl (55.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for matchpy-0.2.tar.gz
Algorithm Hash digest
SHA256 c5c1a1291e9ef52edfe69cf492111f50d673ccf62a06dbf5d745ea1ab4483a88
MD5 2853cc18f545ede53c996413801b5d14
BLAKE2b-256 a687552d9cd463ea00b2e771cafc25691b1bc1516ca38dc76882a4f397554587

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for matchpy-0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b2cb65ffeadcf7e133d41402de262a0980c06ba3e4c95f700c8496dbfb7a25e5
MD5 64a2e02f80d5a5dfd8d1803f027ed3d9
BLAKE2b-256 93906faf12e8af2c962671384554bee30b09d5f41ecd1431870fc9b3d7d4f5c2

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