Skip to main content

Functional-style recursive pattern matching in Python. Crazy stuff.

Install

pip install patmat

Usage

Pattern matching with patmat:

>>> from patmat import *
>>> Mimic({(1, Val('k')): (3, Val('v'))}).match({(1, 2): (3, 4)})
{'k': 2, 'v': 4}

Multiple dispatch generic functions:

>>> from patmat import *
>>>
>>> @case
>>> def func(match, l=[Val('head'), ..., 3, Val('tail')]):
...     print('a list with a head {} and a tail {}'.format(match.head, match.tail))
>>>
>>> @case
>>> def func(match, l=Val('item')):
...     print('an item {}'.format(match.item))
>>>
>>> func([1, 2, 3, 4])
a list with a head 1 and a tail 4
>>> func(5)
an item: 5

More dispatch examples:

>>> @case
>>> def func(_, x=int):
...     print('Do something with an integer.')
>>>
>>> @case
>>> def func(_, x=float):
...     print('Do something with a float.')
>>>
>>> func(1)
Do something with an integer
>>> func(1.0)
Do something with a float

Matches list, tuple, dict, types, classes with attributes. Brace yourself for the power of recursive pattern matching:

>>> from patmat import *
>>> m = Mimic([
...     1, Type(int, Val(2)),
...     Mimic(a=3, b=[4, Val(5), 6], c=Val(7)),
...     Val(8), {Val(9): 10, Val(11): 12},
... ])
>>> class A:
...     __init__ = lambda self, **kwargs: self.__dict__.update(kwargs)
>>> m.match([1, 2, A(a=3, b=[4, 5, 6], c=7), 8, {9: 10, 11: 12}])
{2: 2, 5: 5, 7: 7, 8: 8, 9: 9, 11: 11}

Release files for patmat 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for patmat 1.0.1
File Size Uploaded
patmat-1.0.1.tar.gz 5.7 kB Details

Release files / patmat-1.0.1.tar.gz

Download URL patmat-1.0.1.tar.gz
Size 5.7 kB
Tags Source
SHA-256 checksum
How to use checksums
bcc55351e329b7ce89d9df4fe7e6bee4a7d8f57ba185f8af0aaad0751bf28502
BLAKE2b-256 checksum
How to use checksums
0434d988505c225efdd87ae8853b8cd01babf25d690002ac7f4af96e208f0681
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.0.1 This release

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page