66 lines
1.3 KiB
Python
66 lines
1.3 KiB
Python
#! /usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# vim:fenc=utf-8
|
|
#
|
|
# Copyright © 2017 lafrite <lafrite@Poivre>
|
|
#
|
|
# 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
|
|
"""
|