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.3.2.tar.gz (88.3 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.3.2-py3-none-any.whl (60.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for matchpy-0.3.2.tar.gz
Algorithm Hash digest
SHA256 5fd1657986262440bf965b7a0c39151097c114afce4acb52a593083404e418ce
MD5 75c2186490fd43634e0b06985cf4964f
BLAKE2b-256 1b2dfd8ce442eeff0ccb9903b82fb39c3bfee785c95ca99bba891ed62ca3c7bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for matchpy-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 870f60b421675224d7e237f1c8dd53161bc6b3b3ccc0899244925584785d4853
MD5 b5ca2c563a35c694e378d2cd00793f26
BLAKE2b-256 ac0526cf5940e0a346217095ad134423408ccc0e9209f5bea8edfc82bc18e983

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