object.py 1.9 KB
Newer Older
HansBug's avatar
HansBug 已提交
1 2 3 4
import builtins

from treevalue import method_treelize

5
from .trees import BaseTreeStruct, clsmeta
HansBug's avatar
HansBug 已提交
6
from .wrappers import ireduce
7 8 9 10 11 12 13 14 15 16 17

__all__ = [
    "Object",
]


def _object(obj):
    return obj


class Object(BaseTreeStruct, metaclass=clsmeta(_object, allow_dict=True)):
18 19 20 21 22
    """
    Overview:
        Generic object tree class, used in :py:mod:`treetensor.numpy` and :py:mod:`treetensor.torch`.
    """

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
    def __init__(self, data):
        """
        In :class:`treetensor.common.Object`, object or object tree can be initialized.

        Examples::

            >>> from treetensor.common import Object
            >>> Object(1)
            1

            >>> Object({'a': 1, 'b': 2, 'x': {'c': 233}})
            <Object 0x7fe00b1153a0>
            ├── a --> 1
            ├── b --> 2
            └── x --> <Object 0x7fe00b115ee0>
                └── c --> 233
        """
40
        BaseTreeStruct.__init__(self, data)
HansBug's avatar
HansBug 已提交
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

    @ireduce(builtins.all, piter=list)
    @method_treelize()
    def all(self):
        """
        The values in this tree is all true or not.

        Examples::

            >>> from treetensor.common import Object
            >>> Object({'a': False, 'b': {'x': False}}).all()
            False
            >>> Object({'a': True, 'b': {'x': False}}).all()
            False
            >>> Object({'a': True, 'b': {'x': True}}).all()
            True

        """
        return not not self

    @ireduce(builtins.any, piter=list)
    @method_treelize()
    def any(self):
        """
        The values in this tree is not all False or yes.

        Examples::

            >>> from treetensor.common import Object
            >>> Object({'a': False, 'b': {'x': False}}).any()
            False
            >>> Object({'a': True, 'b': {'x': False}}).any()
            True
            >>> Object({'a': True, 'b': {'x': True}}).any()
            True

        """
        return not not self