In [1]:
import sys; sys.path.insert(0, '../notebooks/')
import tohu
from tohu.generators import BaseGenerator, HashDigest, Integer, SelectOne
from tohu.custom_generator import logger, CustomGenerator, CustomGeneratorMeta
from tohu.debugging import DummyGenerator
from utils import print_generated_sequence
tohu.logger.setLevel('DEBUG')
tohu.debugging.logger.setLevel('DEBUG')

In [2]:
#g = DummyGenerator(name='quux')
g = HashDigest(length=6)

In [3]:
h1 = g.clone()
h2 = g.clone()

In [4]:
print(g)
print(h1)
print(h2)


<tohu.generators.HashDigest object at 0x1100617f0>
<ClonedGenerator: id=4563043552, parent=<tohu.generators.HashDigest object at 0x1100617f0> >
<ClonedGenerator: id=4563046016, parent=<tohu.generators.HashDigest object at 0x1100617f0> >

In [5]:
g._clones


Out[5]:
[<ClonedGenerator: id=4563043552, parent=<tohu.generators.HashDigest object at 0x1100617f0> >,
 <ClonedGenerator: id=4563046016, parent=<tohu.generators.HashDigest object at 0x1100617f0> >]

In [6]:
g.reset(seed=12345)


2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4563043552, parent=<tohu.generators.HashDigest object at 0x1100617f0> > (seed=12345)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4563046016, parent=<tohu.generators.HashDigest object at 0x1100617f0> > (seed=12345)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4563043552, parent=<tohu.generators.HashDigest object at 0x1100617f0> > (seed=12345)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4563046016, parent=<tohu.generators.HashDigest object at 0x1100617f0> > (seed=12345)

In [7]:
print_generated_sequence(g, num=6)
print_generated_sequence(h1, num=6)
print_generated_sequence(h2, num=6)


Generated sequence: 924A90, 03AAD6, A3A0E2, 9AE4B9, 76E73D, 2F33A4
Generated sequence: 924A90, 03AAD6, A3A0E2, 9AE4B9, 76E73D, 2F33A4
Generated sequence: 924A90, 03AAD6, A3A0E2, 9AE4B9, 76E73D, 2F33A4


In [8]:
class QuuxGenerator(CustomGenerator):
#class QuuxGenerator(BaseGenerator, metaclass=CustomGeneratorMeta):
    aa = HashDigest(length=8)
    #aa = DummyGenerator('quux')
    bb = aa.clone()
    cc = aa.clone()
    dd = bb.clone()
    ee = aa
    ff = dd


DEBUG  [DDD]
DEBUG  CustomGeneratorMeta.__new__
DEBUG     - metacls=<class 'tohu.custom_generator.CustomGeneratorMeta'>
DEBUG     - cg_name=QuuxGenerator
DEBUG     - bases=(<class 'tohu.custom_generator.CustomGenerator'>,)
DEBUG     - clsdict={'__module__': '__main__', '__qualname__': 'QuuxGenerator', 'aa': <tohu.generators.HashDigest object at 0x11d66b390>, 'bb': <ClonedGenerator: id=4788237648, parent=<tohu.generators.HashDigest object at 0x11d66b390> >, 'cc': <ClonedGenerator: id=4788237984, parent=<tohu.generators.HashDigest object at 0x11d66b390> >, 'dd': <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >, 'ee': <tohu.generators.HashDigest object at 0x11d66b390>, 'ff': <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >}
DEBUG     - new_obj=<class '__main__.QuuxGenerator'>
DEBUG  Using item class name 'Quux' (derived from custom generator name)

In [9]:
g = QuuxGenerator()


DEBUG  [FFF]
DEBUG  cls_dict:
DEBUG     __module__: __main__
DEBUG     aa: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     bb: <ClonedGenerator: id=4788237648, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     cc: <ClonedGenerator: id=4788237984, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     dd: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     ee: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     ff: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     __doc__: None
DEBUG     __init__: <function attach_new_init_method.<locals>.new_init at 0x11d7122f0>
DEBUG     reset: <function attach_new_reset_method.<locals>.new_reset at 0x11d712598>
DEBUG     clone: <function attach_make_clone_method.<locals>.make_clone at 0x11d7120d0>
DEBUG     __tohu_items_name__: Quux
DEBUG     __next__: <function attach_new_next_method.<locals>.new_next at 0x11d7121e0>
DEBUG     _spawn: <function attach_new_spawn_method.<locals>.new_spawn at 0x11d712620>
DEBUG  obj_dict:
DEBUG     _clones: []
DEBUG  Found 6 field generator template(s):
DEBUG     aa: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     bb: <ClonedGenerator: id=4788237648, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     cc: <ClonedGenerator: id=4788237984, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     dd: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     ee: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     ff: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG  Spawning field generator templates...
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788237648, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d72fb38>
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788237984, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d72fb38>
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d72fb38>
DEBUG  Cloning generator ee=<tohu.generators.HashDigest object at 0x11d66b390> because it is an alias for an existing generator
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788291008, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d72fb38>
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d72fb38>
DEBUG  Field generators attached to custom generator:
DEBUG     aa: <tohu.generators.HashDigest object at 0x11d72fb38>
DEBUG     bb: <ClonedGenerator: id=4788236640, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >
DEBUG     cc: <ClonedGenerator: id=4788290392, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >
DEBUG     dd: <ClonedGenerator: id=4788290728, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >
DEBUG     ee: <ClonedGenerator: id=4788291512, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >
DEBUG     ff: <ClonedGenerator: id=4788291736, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >
DEBUG  [FFF]
DEBUG  cls_dict:
DEBUG     __module__: __main__
DEBUG     aa: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     bb: <ClonedGenerator: id=4788237648, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     cc: <ClonedGenerator: id=4788237984, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     dd: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     ee: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     ff: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     __doc__: None
DEBUG     __init__: <function attach_new_init_method.<locals>.new_init at 0x11d7122f0>
DEBUG     reset: <function attach_new_reset_method.<locals>.new_reset at 0x11d712598>
DEBUG     clone: <function attach_make_clone_method.<locals>.make_clone at 0x11d7120d0>
DEBUG     __tohu_items_name__: Quux
DEBUG     __next__: <function attach_new_next_method.<locals>.new_next at 0x11d7121e0>
DEBUG     _spawn: <function attach_new_spawn_method.<locals>.new_spawn at 0x11d712620>
DEBUG     item_cls: <class 'tohu.custom_generator.Quux'>
DEBUG  obj_dict:
DEBUG     _clones: []
DEBUG     field_gens: {'aa': <tohu.generators.HashDigest object at 0x11d72fb38>, 'bb': <ClonedGenerator: id=4788236640, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >, 'cc': <ClonedGenerator: id=4788290392, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >, 'dd': <ClonedGenerator: id=4788290728, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >, 'ee': <ClonedGenerator: id=4788291512, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >, 'ff': <ClonedGenerator: id=4788291736, parent=<tohu.generators.HashDigest object at 0x11d72fb38> >}
DEBUG     seed_generator: <tohu.generators.SeedGenerator object at 0x11d6789e8>
DEBUG  Found 6 field generator template(s):
DEBUG     aa: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     bb: <ClonedGenerator: id=4788237648, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     cc: <ClonedGenerator: id=4788237984, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     dd: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG     ee: <tohu.generators.HashDigest object at 0x11d66b390>
DEBUG     ff: <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> >
DEBUG  Spawning field generator templates...
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788237648, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d678f28>
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788237984, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d678f28>
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d678f28>
DEBUG  Cloning generator ee=<tohu.generators.HashDigest object at 0x11d66b390> because it is an alias for an existing generator
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4789000680, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d678f28>
DEBUG  Reattaching cloned generator <ClonedGenerator: id=4788238544, parent=<tohu.generators.HashDigest object at 0x11d66b390> > to new parent <tohu.generators.HashDigest object at 0x11d678f28>
DEBUG  Field generators attached to custom generator:
DEBUG     aa: <tohu.generators.HashDigest object at 0x11d678f28>
DEBUG     bb: <ClonedGenerator: id=4788999896, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG     cc: <ClonedGenerator: id=4789000176, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG     dd: <ClonedGenerator: id=4789000344, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG     ee: <ClonedGenerator: id=4789001016, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG     ff: <ClonedGenerator: id=4788290952, parent=<tohu.generators.HashDigest object at 0x11d678f28> >

In [10]:
g.reset(seed=12345)


DEBUG  [EEE] Inside automatically generated reset() method for <__main__.QuuxGenerator object at 0x11d72f7b8> (seed=12345)
DEBUG  Resetting field generator aa=<tohu.generators.HashDigest object at 0x11d678f28> with seed=831769172
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4788999896, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4789000176, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4789000344, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4789001016, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4788290952, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:20 DEBUG  Resetting cloned generator <ClonedGenerator: id=4788999896, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:21 DEBUG  Resetting cloned generator <ClonedGenerator: id=4789000176, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:21 DEBUG  Resetting cloned generator <ClonedGenerator: id=4789000344, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:21 DEBUG  Resetting cloned generator <ClonedGenerator: id=4789001016, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
2018-08-31 01:53:21 DEBUG  Resetting cloned generator <ClonedGenerator: id=4788290952, parent=<tohu.generators.HashDigest object at 0x11d678f28> > (seed=831769172)
DEBUG  Resetting field generator bb=<ClonedGenerator: id=4788999896, parent=<tohu.generators.HashDigest object at 0x11d678f28> > with seed=2430986565
2018-08-31 01:53:21 DEBUG  Ignoring reset() on cloned generator <ClonedGenerator: id=4788999896, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG  Resetting field generator cc=<ClonedGenerator: id=4789000176, parent=<tohu.generators.HashDigest object at 0x11d678f28> > with seed=694443915
2018-08-31 01:53:21 DEBUG  Ignoring reset() on cloned generator <ClonedGenerator: id=4789000176, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG  Resetting field generator dd=<ClonedGenerator: id=4789000344, parent=<tohu.generators.HashDigest object at 0x11d678f28> > with seed=1859447115
2018-08-31 01:53:21 DEBUG  Ignoring reset() on cloned generator <ClonedGenerator: id=4789000344, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG  Resetting field generator ee=<ClonedGenerator: id=4789001016, parent=<tohu.generators.HashDigest object at 0x11d678f28> > with seed=2376066489
2018-08-31 01:53:21 DEBUG  Ignoring reset() on cloned generator <ClonedGenerator: id=4789001016, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
DEBUG  Resetting field generator ff=<ClonedGenerator: id=4788290952, parent=<tohu.generators.HashDigest object at 0x11d678f28> > with seed=2164385946
2018-08-31 01:53:21 DEBUG  Ignoring reset() on cloned generator <ClonedGenerator: id=4788290952, parent=<tohu.generators.HashDigest object at 0x11d678f28> >
Out[10]:
<__main__.QuuxGenerator at 0x11d72f7b8>

In [11]:
print_generated_sequence(g, num=10, sep='\n')


Generated sequence:
Quux(aa='3F6E19FB', bb='3F6E19FB', cc='3F6E19FB', dd='3F6E19FB', ee='3F6E19FB', ff='3F6E19FB')
Quux(aa='AC3DB825', bb='AC3DB825', cc='AC3DB825', dd='AC3DB825', ee='AC3DB825', ff='AC3DB825')
Quux(aa='9B635FDD', bb='9B635FDD', cc='9B635FDD', dd='9B635FDD', ee='9B635FDD', ff='9B635FDD')
Quux(aa='8ED14AC9', bb='8ED14AC9', cc='8ED14AC9', dd='8ED14AC9', ee='8ED14AC9', ff='8ED14AC9')
Quux(aa='A8BC6AAA', bb='A8BC6AAA', cc='A8BC6AAA', dd='A8BC6AAA', ee='A8BC6AAA', ff='A8BC6AAA')
Quux(aa='C9B8E386', bb='C9B8E386', cc='C9B8E386', dd='C9B8E386', ee='C9B8E386', ff='C9B8E386')
Quux(aa='95F21BC6', bb='95F21BC6', cc='95F21BC6', dd='95F21BC6', ee='95F21BC6', ff='95F21BC6')
Quux(aa='9DDBC103', bb='9DDBC103', cc='9DDBC103', dd='9DDBC103', ee='9DDBC103', ff='9DDBC103')
Quux(aa='F4E03F3F', bb='F4E03F3F', cc='F4E03F3F', dd='F4E03F3F', ee='F4E03F3F', ff='F4E03F3F')
Quux(aa='66D7FB75', bb='66D7FB75', cc='66D7FB75', dd='66D7FB75', ee='66D7FB75', ff='66D7FB75')

In [ ]: