This repository was archived by the owner on Mar 20, 2021. It is now read-only.
  
  
  - 
                Notifications
    You must be signed in to change notification settings 
- Fork 0
Home
        ep12 edited this page Mar 29, 2020 
        ·
        1 revision
      
    Welcome to the PyOPM wiki!
This is the place where you can find what you want to know about PyOPM.
To get started with PyOPM, you can install it via pip:
$ pip3 install -U pyopmIf necessary, consider using the --user flag if your user account does not have write access to the site-packages folder of your Python 3 installation.
Here is a simple example of how to use PyOPM:
from pyopm import ObjectPattern
p = ObjectPattern({
    'obj': {'eval': [lambda o: isinstance(o, dict)]},
    'obj.keys': {'eval': [lambda k: all(isinstance(x, (int, str)) for x in k())],
                 'bind': {'keys': lambda o: o()}},
    'obj.values': {'bind': {'values': lambda o: o()}},
    'obj.items': {'eval': [lambda i: all(isinstance(y, float if isinstance(x, int) else int)
                                         for x, y in i())],
                  'bind': {'items': lambda i: list(i())}},
})
m = p.match({0, 1, 2})  # not a dict -> m is None
print(type(m))
m = p.match({0: 0, 'one': 1})  # 0: 0 does not match the rules -> m is None
print(type(m))
m = p.match({0: 0.2, 'one': 1})  # match!
print(type(m))
with m:  # magic: use the objects bound to the names specified above
    print(keys)
    print(values)
    print(list(zip(keys, values)))  # should be the same as...
    print(items)  # ...this!This snippet should print
<class 'NoneType'>
<class 'NoneType'>
<class 'pyopm.core.ObjectPatternMatch'>
dict_keys([0, 'one'])
dict_values([0.2, 1])
[(0, 0.2), ('one', 1)]
[(0, 0.2), ('one', 1)]