rule-evaluator


Namerule-evaluator JSON
Version 2024.8.14.post1 PyPI version JSON
download
home_pagehttps://github.com/jolespin/rule_evaluator
SummaryLightweight Python-based nested rule evaluator
upload_time2024-08-14 19:08:20
maintainerNone
docs_urlNone
authorJosh L. Espinoza
requires_python>=3.7
licenseGPLv3
keywords
VCS
bugtrack_url
requirements parsimonious
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Rule Evaluator
Lightweight Python-based nested rule evaluator. 

## Installation:

```
pip install rule_evaluator
```

## Usage: 

```python
import rule_evaluator as rl
```

### Rule evaluation:

```python
import rule_evaluator as rl
from collections import OrderedDict

# Define the rules
rules = [
    'R00351', # False
    'R01325+R01900,R01324', # True
    'R01899+R00268,R00267,R00709', # True
    'R00621+R03316,R01700', # True
    'R02570', # True
    'R07618', # True
    'R01197', # True
    'R00405,R00432,R00727,R10343', # False
    'R02164', # True
    'R01082', # True
    'R00342,R00361'# True
]

# List of elements to query
elements = {
    # "R00351", 
    # "R01325",
    # 'R01900',
    "R01324",
    'R00267',
    'R00342',
    'R00361',
    'R00621',
    'R03316',
    'R00709',
    # 'R00405',
    # "R01700",
    # 'R00727',
    # 'R00432',
    # 'R10343'
    'R01082',
    'R01197',
    'R01899',
    'R00268',
    'R02164',
    'R02570',
    'R07618',
}

rule_to_bool = OrderedDict()
for rule in rules:
    rule_to_bool[rule] = rl.Rule(rule).evaluate(elements)
rule_to_bool
# OrderedDict([('R00351', False),
#              ('R01325+R01900,R01324', True),
#              ('R01899+R00268,R00267,R00709', True),
#              ('R00621+R03316,R01700', True),
#              ('R02570', True),
#              ('R07618', True),
#              ('R01197', True),
#              ('R00405,R00432,R00727,R10343', False),
#              ('R02164', True),
#              ('R01082', True),
#              ('R00342,R00361', True)])

```

### Definition evaluation:

```python
import rule_evaluator as rl

# Define the nested rules
name="M00357"
definition = '((K00925 K00625),K01895) (K00193+K00197+K00194) (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584) (K00399+K00401+K00402) (K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))'

# List of elements to check against
elements = {
    'K00925',
    # 'K00625',
    # 'K01895',
    'K00193',
    'K00197',
    'K00194',
    'K00577',
    'K00578',
    'K00579',
    'K00580',
    'K00581',
    'K00582',
    'K00584',
    'K00399',
    'K00401',
    'K00402',
    # 'K22480',
    # 'K22481',
    # 'K22482',
    # 'K03388',
    # 'K03389',
    # 'K03390',
    # 'K08264',
    # 'K08265',
    # 'K14127',
    # 'K14126',
    # 'K14128',
    # 'K22516',
    # 'K00125'
}

# Define
d = rl.Definition(definition, name=name, element_type="ko")

# View Defintion
d
# ========================================
# Definition(name:M00357, element_type:ko)
# ========================================
# Properties:
#     - number_of_elements: 30
#     - number_of_rules: 5
# Rules:
#     - 0: ((K00925 K00625),K01895)
#     - 1: (K00193+K00197+K00194)
#     - 2: (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)
#     - 3: (K00399+K00401+K00402)
#     - 4: (K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))

# View Rule
d.rules[2]
# =========================================================
# Rule(name:2, element_type:ko)
# =========================================================
# (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)
# _________________________________________________________
# Properties:
#     - number_of_elements: 8


# Evaluate
d.evaluate(elements)
# OrderedDict([('((K00925 K00625),K01895)', False),
#              ('(K00193+K00197+K00194)', True),
#              ('(K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)',
#               True),
#              ('(K00399+K00401+K00402)', True),
#              ('(K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))',
#               False)])

# Score
d.evaluate(elements, score=True)
# 0.6 
```

# Acknowledgements:
This package would not be possible without the grammar parsing help of [@flakes](https://stackoverflow.com/users/3280538/flakes).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/jolespin/rule_evaluator",
    "name": "rule-evaluator",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": null,
    "author": "Josh L. Espinoza",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/e2/4e/5c2541f136250c51c1e2697470fed27feefbfea20bfa40eb5968bc97c550/rule_evaluator-2024.8.14.post1.tar.gz",
    "platform": null,
    "description": "# Rule Evaluator\nLightweight Python-based nested rule evaluator. \n\n## Installation:\n\n```\npip install rule_evaluator\n```\n\n## Usage: \n\n```python\nimport rule_evaluator as rl\n```\n\n### Rule evaluation:\n\n```python\nimport rule_evaluator as rl\nfrom collections import OrderedDict\n\n# Define the rules\nrules = [\n    'R00351', # False\n    'R01325+R01900,R01324', # True\n    'R01899+R00268,R00267,R00709', # True\n    'R00621+R03316,R01700', # True\n    'R02570', # True\n    'R07618', # True\n    'R01197', # True\n    'R00405,R00432,R00727,R10343', # False\n    'R02164', # True\n    'R01082', # True\n    'R00342,R00361'# True\n]\n\n# List of elements to query\nelements = {\n    # \"R00351\", \n    # \"R01325\",\n    # 'R01900',\n    \"R01324\",\n    'R00267',\n    'R00342',\n    'R00361',\n    'R00621',\n    'R03316',\n    'R00709',\n    # 'R00405',\n    # \"R01700\",\n    # 'R00727',\n    # 'R00432',\n    # 'R10343'\n    'R01082',\n    'R01197',\n    'R01899',\n    'R00268',\n    'R02164',\n    'R02570',\n    'R07618',\n}\n\nrule_to_bool = OrderedDict()\nfor rule in rules:\n    rule_to_bool[rule] = rl.Rule(rule).evaluate(elements)\nrule_to_bool\n# OrderedDict([('R00351', False),\n#              ('R01325+R01900,R01324', True),\n#              ('R01899+R00268,R00267,R00709', True),\n#              ('R00621+R03316,R01700', True),\n#              ('R02570', True),\n#              ('R07618', True),\n#              ('R01197', True),\n#              ('R00405,R00432,R00727,R10343', False),\n#              ('R02164', True),\n#              ('R01082', True),\n#              ('R00342,R00361', True)])\n\n```\n\n### Definition evaluation:\n\n```python\nimport rule_evaluator as rl\n\n# Define the nested rules\nname=\"M00357\"\ndefinition = '((K00925 K00625),K01895) (K00193+K00197+K00194) (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584) (K00399+K00401+K00402) (K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))'\n\n# List of elements to check against\nelements = {\n    'K00925',\n    # 'K00625',\n    # 'K01895',\n    'K00193',\n    'K00197',\n    'K00194',\n    'K00577',\n    'K00578',\n    'K00579',\n    'K00580',\n    'K00581',\n    'K00582',\n    'K00584',\n    'K00399',\n    'K00401',\n    'K00402',\n    # 'K22480',\n    # 'K22481',\n    # 'K22482',\n    # 'K03388',\n    # 'K03389',\n    # 'K03390',\n    # 'K08264',\n    # 'K08265',\n    # 'K14127',\n    # 'K14126',\n    # 'K14128',\n    # 'K22516',\n    # 'K00125'\n}\n\n# Define\nd = rl.Definition(definition, name=name, element_type=\"ko\")\n\n# View Defintion\nd\n# ========================================\n# Definition(name:M00357, element_type:ko)\n# ========================================\n# Properties:\n#     - number_of_elements: 30\n#     - number_of_rules: 5\n# Rules:\n#     - 0: ((K00925 K00625),K01895)\n#     - 1: (K00193+K00197+K00194)\n#     - 2: (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)\n#     - 3: (K00399+K00401+K00402)\n#     - 4: (K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))\n\n# View Rule\nd.rules[2]\n# =========================================================\n# Rule(name:2, element_type:ko)\n# =========================================================\n# (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)\n# _________________________________________________________\n# Properties:\n#     - number_of_elements: 8\n\n\n# Evaluate\nd.evaluate(elements)\n# OrderedDict([('((K00925 K00625),K01895)', False),\n#              ('(K00193+K00197+K00194)', True),\n#              ('(K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)',\n#               True),\n#              ('(K00399+K00401+K00402)', True),\n#              ('(K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))',\n#               False)])\n\n# Score\nd.evaluate(elements, score=True)\n# 0.6 \n```\n\n# Acknowledgements:\nThis package would not be possible without the grammar parsing help of [@flakes](https://stackoverflow.com/users/3280538/flakes).\n",
    "bugtrack_url": null,
    "license": "GPLv3",
    "summary": "Lightweight Python-based nested rule evaluator",
    "version": "2024.8.14.post1",
    "project_urls": {
        "Homepage": "https://github.com/jolespin/rule_evaluator"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e24e5c2541f136250c51c1e2697470fed27feefbfea20bfa40eb5968bc97c550",
                "md5": "f07148610d9f7e719f2fda3a0ff9dd18",
                "sha256": "7e70854323cc41574461dac7ef45ec2a728045d74e6a2ee7776a32e26b2adfa8"
            },
            "downloads": -1,
            "filename": "rule_evaluator-2024.8.14.post1.tar.gz",
            "has_sig": false,
            "md5_digest": "f07148610d9f7e719f2fda3a0ff9dd18",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 19177,
            "upload_time": "2024-08-14T19:08:20",
            "upload_time_iso_8601": "2024-08-14T19:08:20.580652Z",
            "url": "https://files.pythonhosted.org/packages/e2/4e/5c2541f136250c51c1e2697470fed27feefbfea20bfa40eb5968bc97c550/rule_evaluator-2024.8.14.post1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-14 19:08:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jolespin",
    "github_project": "rule_evaluator",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "parsimonious",
            "specs": []
        }
    ],
    "lcname": "rule-evaluator"
}
        
Elapsed time: 1.62702s