Module Assign NameStore Str If CompareEq NameLoad Str body ImportFrom alias ImportFrom alias Expr Call AttributeLoad AttributeLoad NameLoad attr attr Call NameLoad ImportFrom alias ImportFrom alias ImportFrom alias ImportFrom alias ImportFrom alias identifier Assign NameStore IfExp CompareEq NameLoad Str NameLoad NameLoad ClassDef bases body Pass decorator_list ClassDef bases NameLoad body Pass decorator_list ClassDef bases NameLoad body Expr Str FunctionDef arguments args NameParam defaults body Assign AttributeStore NameLoad attr Dict Assign AttributeStore NameLoad attr NameLoad decorator_list FunctionDef arguments args NameParam defaults body Print Call AttributeLoad Str attr AttributeLoad NameLoad attr Print Call AttributeLoad Str attr AttributeLoad NameLoad attr Return Str decorator_list FunctionDef arguments args NameParam NameParam defaults body Expr Str Raise NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body If CompareNotIn NameLoad ListLoad Str Str body Raise NameLoad Expr Call AttributeLoad Call NameLoad NameLoad NameLoad attr NameLoad NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults body If BoolOpAnd CompareIsNot AttributeLoad NameLoad attr NameLoad CompareNotEq NameLoad AttributeLoad NameLoad attr CompareIn NameLoad AttributeLoad NameLoad attr body Raise NameLoad Expr Call AttributeLoad AttributeLoad NameLoad attr attr Dict NameLoad NameLoad Assign AttributeStore NameLoad attr NameLoad decorator_list FunctionDef arguments args NameParam defaults body Print AttributeLoad NameLoad attr decorator_list FunctionDef arguments args NameParam defaults body Return AttributeLoad NameLoad attr decorator_list FunctionDef arguments args NameParam defaults body Return AttributeLoad NameLoad attr decorator_list decorator_list ClassDef bases NameLoad body Expr Str FunctionDef arguments args NameParam NameParam NameParam defaults body Assign SubscriptStore AttributeLoad NameLoad attr Index NameLoad Dict Str NameLoad Assign AttributeStore NameLoad attr NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Return SubscriptLoad AttributeLoad NameLoad attr Index NameLoad decorator_list FunctionDef arguments args NameParam defaults body Return SubscriptLoad AttributeLoad NameLoad attr Index AttributeLoad NameLoad attr decorator_list decorator_list ClassDef bases NameLoad body Expr Str FunctionDef arguments args NameParam NameParam NameParam defaults ListLoad body Print Call AttributeLoad Str attr NameLoad keyword NameLoad Assign NameStore Dict For NameStore NameLoad body Assign NameStore SubscriptLoad Call AttributeLoad NameLoad attr NameLoad Index Str Expr Call AttributeLoad NameLoad attr NameLoad Expr Call AttributeLoad NameLoad attr NameLoad NameLoad decorator_list decorator_list ClassDef bases NameLoad body Expr Str FunctionDef arguments args NameParam NameParam NameParam defaults body Assign NameStore IfExp CompareNotIn NameLoad AttributeLoad NameLoad attr Num Call AttributeLoad NameLoad attr Assign NameStore Dict Str Str NameLoad NameLoad If CompareNotIn NameLoad AttributeLoad NameLoad attr body Assign SubscriptStore AttributeLoad NameLoad attr Index NameLoad Dict Str ListLoad NameLoad orelse Expr Call AttributeLoad SubscriptLoad SubscriptLoad AttributeLoad NameLoad attr Index NameLoad Index Str attr NameLoad Assign AttributeStore NameLoad attr NameLoad decorator_list FunctionDef arguments args NameParam NameParam defaults body Return SubscriptLoad AttributeLoad NameLoad attr Index NameLoad decorator_list decorator_list ClassDef bases NameLoad body Expr Str decorator_list ClassDef bases NameLoad NameLoad body Expr Str decorator_list If NameLoad body With Call NameLoad Str body Expr Call NameLoad Str Assign NameStore Call NameLoad Print NameLoad Assign SubscriptStore NameLoad Index Str Dict Str Str Str Str Print NameLoad Expr Call AttributeLoad NameLoad attr Assign SubscriptStore NameLoad Index Str ListLoad Num Num Num Num Assign SubscriptStore NameLoad Index Str ListLoad Num Num Num TryExcept body Delete SubscriptDel NameLoad Index Str handlers ExceptHandler type NameLoad body Pass TryExcept body Assign SubscriptStore NameLoad Index Str Dict Str Str handlers ExceptHandler type NameLoad body Print Str Expr Call NameLoad Str Assign NameStore Call NameLoad Print NameLoad Assign SubscriptStore NameLoad Index Str Dict Str Str Print NameLoad Assign SubscriptStore NameLoad Index Str Dict Str Str Print NameLoad Expr Call NameLoad Str Call AttributeLoad NameLoad attr For NameStore Call NameLoad Num body Assign SubscriptStore NameLoad Index Call NameLoad Dict Call NameLoad Call NameLoad Expr Call NameLoad Str AttributeLoad NameLoad attr Expr Call NameLoad Str Assign NameStore Call NameLoad Assign SubscriptStore NameLoad Index Str Dict Call NameLoad Call NameLoad Assign SubscriptStore NameLoad Index Str Dict Call NameLoad Call NameLoad Assign SubscriptStore NameLoad Index Str Dict Call NameLoad Call NameLoad Assign SubscriptStore NameLoad Index Str Dict Call NameLoad Call NameLoad Expr Call NameLoad Str AttributeLoad NameLoad attr Expr Call AttributeLoad NameLoad attr Str keyword ListLoad Str Str Str Str Expr Call NameLoad Str AttributeLoad NameLoad attr Expr Call NameLoad Str Assign NameStore Call NameLoad Assign SubscriptStore NameLoad Index Str Dict Str Num Assign SubscriptStore NameLoad Index Str Dict Str Num Assign SubscriptStore NameLoad Index Str Dict Str Num Assign SubscriptStore NameLoad Index Str Dict Str Num Expr Call NameLoad Str AttributeLoad NameLoad attr Assign NameStore SubscriptLoad SubscriptLoad AttributeLoad NameLoad attr Index Str Index Str Assert CompareEq SubscriptLoad SubscriptLoad SubscriptLoad NameLoad Index Num Index Str Index Str Num Assert CompareEq SubscriptLoad SubscriptLoad SubscriptLoad NameLoad Index Num Index Str Index Str Num Assert CompareEq SubscriptLoad SubscriptLoad SubscriptLoad NameLoad Index Num Index Str Index Str Num
N/A N/A __author__ Chris Tabor (dxdstudio@gmail.com) N/A N/A __name__ __main__ N/A os getcwd os sys N/A N/A N/A N/A sys path append N/A getcwd MOAL.helpers.display Section MOAL.helpers.display print_h2 MOAL.helpers.display print_simple MOAL.helpers.text gibberish2 datetime datetime dt N/A DEBUG N/A N/A __name__ __main__ True False MutableAccessException N/A N/A N/A N/A PersistentDataStructure N/A object N/A N/A N/A PartiallyPersistentNode N/A PersistentDataStructure N/A N/A From Wikipedia:

    "In computing, a persistent data structure is a data structure that always
    preserves the previous version of itself when it is modified.
    Such data structures are effectively immutable, as their operations do not
    (visibly) update the structure in-place,
    but instead always yield a new updated structure.

    A data structure is partially persistent if all versions can be accessed
    but only the newest version can be modified."  __init__ N/A N/A self N/A N/A N/A N/A self versions N/A N/A N/A self data None N/A __str__ N/A N/A self N/A N/A N/A N/A N/A All data: {} format N/A self versions N/A N/A N/A Current data: {} format N/A self data N/A N/A __delitem__ N/A N/A self key N/A N/A N/A Deleting an item is not allowed, as the data structure
        should be immutable. N/A MutableAccessException N/A __setattr__ N/A N/A self name value N/A N/A N/A N/A name N/A versions data N/A N/A MutableAccessException N/A N/A N/A N/A super PartiallyPersistentNode self __setattr__ name value N/A __setitem__ N/A N/A self key data N/A N/A N/A N/A N/A N/A self data None N/A key N/A self data N/A key N/A self versions N/A N/A MutableAccessException N/A N/A N/A N/A self versions update N/A key data N/A N/A self data key N/A view_all N/A N/A self N/A N/A N/A N/A self versions N/A get_current N/A N/A self N/A N/A N/A N/A self data N/A get_all N/A N/A self N/A N/A N/A N/A self versions N/A N/A FullyPersistentNode N/A PartiallyPersistentNode N/A N/A From Wikipedia:
    "The data structure is fully persistent if every version can be both
    accessed and modified."  __setitem__ N/A N/A self key data N/A N/A N/A N/A N/A self versions N/A key N/A data data N/A N/A self data key N/A __getitem__ N/A N/A self key N/A N/A N/A N/A N/A self versions N/A key N/A get_current N/A N/A self N/A N/A N/A N/A N/A self versions N/A N/A self data N/A N/A ConfluentlyPersistentNode N/A FullyPersistentNode N/A N/A From Wikipedia:
    "If there is also a meld or merge operation that
    can create a new version from two previous versions,
    the data structure is called confluently persistent."   meld N/A N/A self key versions N/A N/A N/A N/A N/A N/A Melding versions {versions} under key "{}" format key versions versions N/A new N/A N/A version versions N/A N/A temp N/A N/A N/A self __getitem__ version N/A data N/A N/A N/A new update temp N/A N/A N/A self __setitem__ key new N/A N/A ConfluentlyPersistentFatNode N/A ConfluentlyPersistentNode N/A N/A From Wikipedia:

    "Fat node method is to record all changes made to node fields in the nodes
    themselves, without erasing old values of the fields. This requires
    that we allow nodes to become arbitrarily 'fat'.

    Each extra field value has an associated field name and a version stamp
    which indicates the version in which the named field was changed to
    have the specified value.

    Besides, each fat node has its own version stamp, indicating the version
    in which the node was created. In order to navigate through the structure,
    each original field value in a node has a version stamp of zero."  __setitem__ N/A N/A self key data N/A N/A N/A date N/A N/A key N/A self versions 0 N/A N/A dt now N/A _data N/A date_modified data date data N/A N/A key N/A self versions N/A N/A N/A N/A self versions N/A key N/A versions N/A _data N/A N/A N/A N/A N/A N/A N/A self versions N/A key N/A versions append _data N/A N/A self data key N/A __getitem__ N/A N/A self key N/A N/A N/A N/A N/A self versions N/A key N/A N/A ConfluentlyPersistentPathCopyingNode N/A ConfluentlyPersistentNode N/A N/A TODO N/A ConfluentlyPersistentPathCopyingFatNode N/A ConfluentlyPersistentFatNode ConfluentlyPersistentPathCopyingNode N/A N/A TODO N/A N/A DEBUG N/A N/A N/A Section Persistent data structures N/A N/A N/A print_h2 Persistent partial node N/A pnode N/A PartiallyPersistentNode N/A pnode N/A N/A pnode N/A foo N/A foo bim bar baz N/A pnode N/A N/A N/A pnode view_all N/A N/A pnode N/A foo N/A 2 3 4 5 N/A N/A pnode N/A bar N/A 1 2 3 N/A N/A N/A N/A pnode N/A bar N/A N/A N/A MutableAccessException N/A N/A N/A N/A N/A N/A pnode N/A foo N/A foo bar N/A N/A N/A MutableAccessException N/A N/A Successfully blocked write of existing version. N/A N/A print_h2 Persistent full node N/A pfatnode N/A FullyPersistentNode N/A pfatnode N/A N/A pfatnode N/A foo N/A bar baz N/A pfatnode N/A N/A pfatnode N/A bar N/A baz bar N/A pfatnode N/A N/A print_simple Current fat node data N/A N/A pfatnode get_current N/A _ N/A range 2 N/A N/A N/A pfatnode N/A N/A gibberish2 N/A N/A gibberish2 N/A gibberish2 N/A N/A print_simple Fat node data N/A pfatnode versions N/A N/A print_h2 Persistent confluent N/A confluent N/A ConfluentlyPersistentNode N/A N/A confluent N/A foo N/A N/A gibberish2 N/A gibberish2 N/A N/A confluent N/A bar N/A N/A gibberish2 N/A gibberish2 N/A N/A confluent N/A bim N/A N/A gibberish2 N/A gibberish2 N/A N/A confluent N/A baz N/A N/A gibberish2 N/A gibberish2 N/A N/A print_simple Confluent node data N/A confluent versions N/A N/A N/A confluent meld melded_example versions N/A foo bar baz bim N/A N/A print_simple Confluent node data N/A confluent versions N/A N/A print_h2 Persistent partial Fat Node N/A confluentfat N/A ConfluentlyPersistentFatNode N/A N/A confluentfat N/A foo N/A _version 1 N/A N/A confluentfat N/A bar N/A _version 1 N/A N/A confluentfat N/A foo N/A _version 2 N/A N/A confluentfat N/A foo N/A _version 3 N/A N/A print_simple Confluent fat node data N/A confluentfat versions N/A ref N/A N/A N/A confluentfat versions N/A foo N/A versions N/A N/A N/A N/A N/A ref N/A 0 N/A data N/A _version 1 N/A N/A N/A N/A N/A ref N/A 1 N/A data N/A _version 2 N/A N/A N/A N/A N/A ref N/A 2 N/A data N/A _version 3