# 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"
}