#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2017 lafrite # # Distributed under terms of the MIT license. """ Tools to extract random leaves, random variables, generate random values and fill new trees Flow ---- Tree with RdLeaf | | Extract rdLeaf | List of leaves to generate | | extract_rv | List random variables to generate | | Generate | Dictionnary of generated random variables | | Compute leaves | Dictionnary of computed leaves | | Replace | Tree with RdLeaf replaced by generated values :example: >>> from .random_tree import RandomTree >>> from .leaf import RdLeaf >>> from .generate import random_generator >>> from .grammar import extract_letters, eval_words >>> rd_t = RandomTree("/", RdLeaf("a"), RdLeaf("a*k")) >>> print(rd_t) / > {a} > {a*k} >>> leaves = rd_t.random_leaves >>> leaves = ['a', 'a*k'] >>> rd_varia = extract_letters(leaves) >>> sorted(list(rd_varia)) ['a', 'k'] >>> generated = random_generator(rd_varia, conditions=['a%2+1'], global_config={"min_max": (-10, 10), "rejected":[0, 1]}) >>> generated # doctest: +SKIP {'a': 7, 'k': 4} >>> computed = eval_words(leaves, generated) >>> computed # doctest: +SKIP {'a': 7, 'a*k': 28} >>> replaced = rd_t.eval_random_leaves(computed) >>> print(replaced) # doctest: +SKIP / > 7 > 28 """