Feat: move extract_letters and eval_words in grammar
This commit is contained in:
parent
204c7dffd7
commit
b2b204c17b
@ -39,7 +39,8 @@ Tree with RdLeaf replaced by generated values
|
|||||||
|
|
||||||
>>> from .random_tree import RandomTree
|
>>> from .random_tree import RandomTree
|
||||||
>>> from .leaf import RdLeaf
|
>>> from .leaf import RdLeaf
|
||||||
>>> from .generate import extract_letters, random_generator, eval_words
|
>>> from .generate import random_generator
|
||||||
|
>>> from .grammar import extract_letters, eval_words
|
||||||
>>> rd_t = RandomTree("/", RdLeaf("a"), RdLeaf("a*k"))
|
>>> rd_t = RandomTree("/", RdLeaf("a"), RdLeaf("a*k"))
|
||||||
>>> print(rd_t)
|
>>> print(rd_t)
|
||||||
/
|
/
|
||||||
|
@ -10,41 +10,6 @@
|
|||||||
from random import choice
|
from random import choice
|
||||||
|
|
||||||
|
|
||||||
def extract_letters(words:list[str])->set[str]:
|
|
||||||
""" Extracts unique letters from a list of words
|
|
||||||
|
|
||||||
:param words: list of leafs
|
|
||||||
:return: set of letters
|
|
||||||
|
|
||||||
:example:
|
|
||||||
>>> leafs = ["a", "a*k"]
|
|
||||||
>>> extract_letters(leafs) == {'a', 'k'}
|
|
||||||
True
|
|
||||||
"""
|
|
||||||
letters = set()
|
|
||||||
for word in words:
|
|
||||||
for c in word:
|
|
||||||
if c.isalpha():
|
|
||||||
letters.add(c)
|
|
||||||
return letters
|
|
||||||
|
|
||||||
|
|
||||||
def eval_words(words:list[str], values:dict[str,int]) -> dict[str, int]:
|
|
||||||
""" Evaluate words replacing letters with values
|
|
||||||
|
|
||||||
:param words: list of words
|
|
||||||
:param values: Dictionary of letters:value
|
|
||||||
:return: Dictionary of evaluated words from generated values
|
|
||||||
|
|
||||||
:example:
|
|
||||||
>>> leafs = ["a", "a*k"]
|
|
||||||
>>> generated_values = {"a":2, "k":3}
|
|
||||||
>>> eval_words(leafs, generated_values)
|
|
||||||
{'a': 2, 'a*k': 6}
|
|
||||||
"""
|
|
||||||
return {word: eval(word, values) for word in words}
|
|
||||||
|
|
||||||
|
|
||||||
def build_variable_scope(rd_variables, rejected, min_max, variables_scope):
|
def build_variable_scope(rd_variables, rejected, min_max, variables_scope):
|
||||||
""" Build variables scope from incomplete one
|
""" Build variables scope from incomplete one
|
||||||
|
|
||||||
|
35
mapytex/calculus/random/core/grammar.py
Normal file
35
mapytex/calculus/random/core/grammar.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
def extract_letters(words:list[str])->set[str]:
|
||||||
|
""" Extracts unique letters from a list of words
|
||||||
|
|
||||||
|
:param words: list of leafs
|
||||||
|
:return: set of letters
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> leafs = ["a", "a*k"]
|
||||||
|
>>> extract_letters(leafs) == {'a', 'k'}
|
||||||
|
True
|
||||||
|
"""
|
||||||
|
letters = set()
|
||||||
|
for word in words:
|
||||||
|
for c in word:
|
||||||
|
if c.isalpha():
|
||||||
|
letters.add(c)
|
||||||
|
return letters
|
||||||
|
|
||||||
|
|
||||||
|
def eval_words(words:list[str], values:dict[str,int]) -> dict[str, int]:
|
||||||
|
""" Evaluate words replacing letters with values
|
||||||
|
|
||||||
|
:param words: list of words
|
||||||
|
:param values: Dictionary of letters:value
|
||||||
|
:return: Dictionary of evaluated words from generated values
|
||||||
|
|
||||||
|
:example:
|
||||||
|
>>> leafs = ["a", "a*k"]
|
||||||
|
>>> generated_values = {"a":2, "k":3}
|
||||||
|
>>> eval_words(leafs, generated_values)
|
||||||
|
{'a': 2, 'a*k': 6}
|
||||||
|
"""
|
||||||
|
return {word: eval(word, values) for word in words}
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
from ...core.tree import MutableTree, Tree
|
from ...core.tree import MutableTree, Tree
|
||||||
from .generate import extract_letters, random_generator
|
from .grammar import extract_letters
|
||||||
from .str2 import rdstr2
|
from .str2 import rdstr2
|
||||||
|
|
||||||
class RandomTree(MutableTree):
|
class RandomTree(MutableTree):
|
||||||
|
@ -9,7 +9,8 @@ This function ignores tree structure and works with lists
|
|||||||
{'a': -8, 'a*b': -40, 'b': 5, 'c': 4}
|
{'a': -8, 'a*b': -40, 'b': 5, 'c': 4}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from .core.generate import extract_letters, random_generator, eval_words
|
from .core.generate import random_generator
|
||||||
|
from .core.grammar import extract_letters, eval_words
|
||||||
|
|
||||||
def list_generator(var_list, conditions=[], rejected=[0], min_max=(-10, 10), variables_scope={}, dictionnary=False):
|
def list_generator(var_list, conditions=[], rejected=[0], min_max=(-10, 10), variables_scope={}, dictionnary=False):
|
||||||
""" Generate random computed values from the list
|
""" Generate random computed values from the list
|
||||||
|
Loading…
Reference in New Issue
Block a user