Skip to main content

Optimized PyTree Utilities.

Project description

OpTree

Python 3.9+ PyPI GitHub Workflow Status GitHub Workflow Status Codecov Documentation Status Downloads GitHub Repo Stars

Optimized PyTree Utilities.


Table of Contents


Installation

Install from PyPI (PyPI / Status):

pip3 install --upgrade optree

Install from conda-forge (conda-forge):

conda install conda-forge::optree

Install the latest version from GitHub:

pip3 install git+https://github.com/metaopt/optree.git

Or, clone this repo and install manually:

git clone --depth=1 https://github.com/metaopt/optree.git && cd optree

pip3 install .

The following options are available while building the Python C extension from source:

export CMAKE_COMMAND="/path/to/custom/cmake"
export CMAKE_BUILD_TYPE="Debug"
export CMAKE_CXX_STANDARD="20"  # C++17 is tested on Linux/macOS (C++20 is required on Windows)
export OPTREE_CXX_WERROR="OFF"
export _GLIBCXX_USE_CXX11_ABI="1"  # set to 0 to use the old libstdc++ ABI
export _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR="1"  # set to "" to disable the workaround for MSVC mutex layout change in VS 2022 v17.10+
export pybind11_DIR="/path/to/custom/pybind11"

pip3 install .

Compiling from source requires Python 3.9+, a C++ compiler (g++ / clang++ / icpx / cl.exe) that supports C++20, and a cmake installation.


PyTrees

A PyTree is a recursive structure that can be an arbitrarily nested Python container (e.g., tuple, list, dict, OrderedDict, namedtuple, etc.) and/or an opaque Python object. The key concepts of tree operations are tree flattening and its inverse (unflattening). Additional tree operations can be built from these two primitives (e.g., tree_map = tree_unflatten ∘ map ∘ tree_flatten).

Tree flattening traverses the entire tree in a left-to-right depth-first manner and returns the leaves in a deterministic order.

>>> tree = {'b': (2, [3, 4]), 'a': 1, 'c': 5, 'd': 6}
>>> optree.tree_flatten(tree)
([1, 2, 3, 4, 5, 6], PyTreeSpec({'a': *, 'b': (*, [*, *]), 'c': *, 'd': *}))
>>> optree.tree_flatten(1)
([1], PyTreeSpec(*))
>>> optree.tree_flatten(None)
([], PyTreeSpec(None))
>>> optree.tree_map(lambda x: x**2, tree)
{'b': (4, [9, 16]), 'a': 1, 'c': 25, 'd': 36}

This usually implies that equal pytrees produce equal lists of leaves and the same tree structure. See also section Key Ordering for Dictionaries.

>>> {'a': [1, 2], 'b': [3]} == {'b': [3], 'a': [1, 2]}
True
>>> optree.tree_leaves({'a': [1, 2], 'b': [3]}) == optree.tree_leaves({'b': [3], 'a': [1, 2]})
True
>>> optree.tree_structure({'a': [1, 2], 'b': [3]}) == optree.tree_structure({'b': [3], 'a': [1, 2]})
True
>>> optree.tree_map(lambda x: x**2, {'a': [1, 2], 'b': [3]})
{'a': [1, 4], 'b': [9]}
>>> optree.tree_map(lambda x: x**2, {'b': [3], 'a': [1, 2]})
{'b': [9], 'a': [1, 4]}

[!TIP]

Since OpTree v0.14.1, a new namespace optree.pytree is introduced as aliases for optree.tree_* functions. The following examples are equivalent to the above:

>>> import optree.pytree as pt
>>> tree = {'b': (2, [3, 4]), 'a': 1, 'c': 5, 'd': 6}
>>> pt.flatten(tree)
([1, 2, 3, 4, 5, 6], PyTreeSpec({'a': *, 'b': (*, [*, *]), 'c': *, 'd': *}))
>>> pt.flatten(1)
([1], PyTreeSpec(*))
>>> pt.flatten(None)
([], PyTreeSpec(None))
>>> pt.map(lambda x: x**2, tree)
{'b': (4, [9, 16]), 'a': 1, 'c': 25, 'd': 36}
>>> pt.map(lambda x: x**2, {'a': [1, 2], 'b': [3]})
{'a': [1, 4], 'b': [9]}
>>> pt.map(lambda x: x**2, {'b': [3], 'a': [1, 2]})
{'b': [9], 'a': [1, 4]}

Since OpTree v0.16.0, a re-export API optree.pytree.reexport(...) is available to create a new module that exports all the optree.pytree APIs with a given namespace. This is useful for downstream libraries to create their own pytree utilities without passing the namespace argument explicitly.

# foo/__init__.py
import optree
pytree = optree.pytree.reexport(namespace='foo')
del optree

# foo/bar.py
from foo import pytree

@pytree.dataclasses.dataclass
class Bar:
    a: int
    b: float

# User code
>>> import foo

>>> foo.pytree.flatten({'a': 1, 'b': 2, 'c': foo.bar.Bar(3, 4.0)})
(
    [1, 2, 3, 4.0],
    PyTreeSpec({'a': *, 'b': *, 'c': CustomTreeNode(Bar[()], [*, *])}, namespace='foo')
)

>>> foo.pytree.functools.reduce(lambda x, y: x * y, {'a': 1, 'b': 2, 'c': foo.bar.Bar(3, 4.0)})
24.0

Tree Nodes and Leaves

A tree is a collection of non-leaf nodes and leaf nodes, where the leaf nodes are opaque objects having no children to flatten. optree.tree_flatten(...) will flatten the tree and return a list of leaf nodes while the non-leaf nodes will be stored in the tree structure specification.

Built-in PyTree Node Types

OpTree out-of-the-box supports the following Python container types in the global registry:

These types are considered non-leaf nodes in the tree. Python objects whose type is not registered are treated as leaf nodes. The registry lookup uses the is operator to determine whether the type matches, so subclasses need to be registered explicitly; otherwise, their instances will be treated as leaves. The NoneType is a special case discussed in section None is Non-leaf Node vs. None is Leaf.

Registering a Container-like Custom Type as Non-leaf Nodes

A container-like Python type can be registered in the type registry with a pair of functions that specify:

  • flatten_func(container) -> (children, metadata, entries): convert an instance of the container type to a (children, metadata, entries) triple, where children is an iterable of subtrees and entries is an iterable of path entries of the container (e.g., indices or keys).
  • unflatten_func(metadata, children) -> container: convert such a pair back to an instance of the container type.

The metadata is some necessary data apart from the children to reconstruct the container, e.g., the keys of the dictionary (the children are values).

The entries can be omitted (only return a pair) or are optional to implement (return None). If so, use range(len(children)) (i.e., flat indices) as path entries of the current node. The signature for the flatten function can be one of the following:

  • flatten_func(container) -> (children, metadata, entries)
  • flatten_func(container) -> (children, metadata, None)
  • flatten_func(container) -> (children, metadata)

The following examples show how to register custom types and use them with tree_flatten and tree_map. Please refer to section Notes about the PyTree Type Registry for more information.

# Register a custom type with lambda functions
optree.register_pytree_node(
    set,
    lambda s: (sorted(s), None),        # flatten: (set) -> (children, metadata)
    lambda _, children: set(children),  # unflatten: (metadata, children) -> set
    namespace='set',
)

# Register a custom type into a namespace with accessor support
import types

# This can be whatever your container type is.
class MyContainer(types.SimpleNamespace):
    """A simple container type based on SimpleNamespace."""

# (Optional) Define a custom path entry type for your container for accessor support.
# Here we showcase how to define one. In practice, you can use the built-in `optree.GetAttrEntry`.
class MyContainerEntry(optree.PyTreeEntry):
    def __call__(self, obj):
        return getattr(obj, self.entry)

    def codify(self, node=''):
        return f'{node}.{self.entry}'

optree.register_pytree_node(
    MyContainer,
    flatten_func=lambda ct: (                 # flatten: (MyContainer) -> (children, metadata, entries)
        list(vars(ct).values()),
        list(vars(ct).keys()),
        list(vars(ct).keys()),
    ),
    unflatten_func=lambda keys, values: (     # unflatten: (metadata, children) -> MyContainer
        MyContainer(**dict(zip(keys, values)))
    ),
    path_entry_type=MyContainerEntry,
    namespace='mycontainer',
)
>>> tree = {'config': MyContainer(lr=0.01, momentum=0.9), 'steps': 1000}

# Flatten without specifying the namespace
>>> optree.tree_flatten(tree)  # `MyContainer`s are leaf nodes
([MyContainer(lr=0.01, momentum=0.9), 1000], PyTreeSpec({'config': *, 'steps': *}))

# Flatten with the namespace
>>> leaves, treespec = optree.tree_flatten(tree, namespace='mycontainer')
>>> leaves, treespec
(
    [0.01, 0.9, 1000],
    PyTreeSpec(
        {
            'config': CustomTreeNode(MyContainer[['lr', 'momentum']], [*, *]),
            'steps': *
        },
        namespace='mycontainer'
    )
)

# Custom `entries` are defined as attribute names
>>> optree.tree_paths(tree, namespace='mycontainer')
[('config', 'lr'), ('config', 'momentum'), ('steps',)]

# Custom path entry type defines the pytree access behavior
>>> optree.tree_accessors(tree, namespace='mycontainer')
[
    PyTreeAccessor(*['config'].lr, (MappingEntry(key='config', type=<class 'dict'>), MyContainerEntry(entry='lr', type=<class 'MyContainer'>))),
    PyTreeAccessor(*['config'].momentum, (MappingEntry(key='config', type=<class 'dict'>), MyContainerEntry(entry='momentum', type=<class 'MyContainer'>))),
    PyTreeAccessor(*['steps'], (MappingEntry(key='steps', type=<class 'dict'>),))
]

# Unflatten back to a copy of the original object
>>> optree.tree_unflatten(treespec, leaves)
{'config': MyContainer(lr=0.01, momentum=0.9), 'steps': 1000}

Users can also extend the pytree registry by decorating the custom class and defining an instance method __tree_flatten__ and a class method __tree_unflatten__.

from collections import UserDict

@optree.register_pytree_node_class(namespace='mydict')
class MyDict(UserDict):
    TREE_PATH_ENTRY_TYPE = optree.MappingEntry  # used by accessor APIs

    def __tree_flatten__(self):  # -> (children, metadata, entries)
        reversed_keys = sorted(self.keys(), reverse=True)
        return (
            [self[key] for key in reversed_keys],  # children
            reversed_keys,  # metadata
            reversed_keys,  # entries
        )

    @classmethod
    def __tree_unflatten__(cls, metadata, children):
        return cls(zip(metadata, children))
>>> tree = MyDict(b=4, a=(2, 3), c=MyDict({'d': 5, 'f': 6}))

# Flatten without specifying the namespace
>>> optree.tree_flatten_with_path(tree)  # `MyDict`s are leaf nodes
(
    [()],
    [MyDict(b=4, a=(2, 3), c=MyDict({'d': 5, 'f': 6}))],
    PyTreeSpec(*)
)

# Flatten with the namespace
>>> optree.tree_flatten_with_path(tree, namespace='mydict')
(
    [('c', 'f'), ('c', 'd'), ('b',), ('a', 0), ('a', 1)],
    [6, 5, 4, 2, 3],
    PyTreeSpec(
        CustomTreeNode(MyDict[['c', 'b', 'a']], [CustomTreeNode(MyDict[['f', 'd']], [*, *]), *, (*, *)]),
        namespace='mydict'
    )
)
>>> optree.tree_flatten_with_accessor(tree, namespace='mydict')
(
    [
        PyTreeAccessor(*['c']['f'], (MappingEntry(key='c', type=<class 'MyDict'>), MappingEntry(key='f', type=<class 'MyDict'>))),
        PyTreeAccessor(*['c']['d'], (MappingEntry(key='c', type=<class 'MyDict'>), MappingEntry(key='d', type=<class 'MyDict'>))),
        PyTreeAccessor(*['b'], (MappingEntry(key='b', type=<class 'MyDict'>),)),
        PyTreeAccessor(*['a'][0], (MappingEntry(key='a', type=<class 'MyDict'>), SequenceEntry(index=0, type=<class 'tuple'>))),
        PyTreeAccessor(*['a'][1], (MappingEntry(key='a', type=<class 'MyDict'>), SequenceEntry(index=1, type=<class 'tuple'>)))
    ],
    [6, 5, 4, 2, 3],
    PyTreeSpec(
        CustomTreeNode(MyDict[['c', 'b', 'a']], [CustomTreeNode(MyDict[['f', 'd']], [*, *]), *, (*, *)]),
        namespace='mydict'
    )
)

Notes about the PyTree Type Registry

There are several key attributes of the pytree type registry:

  1. The type registry is per-interpreter. Registering a custom type affects all modules that use OpTree in the same interpreter. Each interpreter (including subinterpreters) maintains its own registry, while child processes forked via multiprocessing inherit a copy.

[!WARNING] For safety reasons, a namespace must be specified while registering a custom type. It is used to isolate the behavior of flattening and unflattening a pytree node type. This is to prevent accidental collisions between different libraries that may register the same type.

  1. Duplicate registration is not allowed. Registering the same type in the same namespace a second time raises an error. To update the behavior, first call unregister_pytree_node(cls, namespace=...) and then re-register. Alternatively, register the type under a different namespace.

    [!WARNING] Any PyTreeSpec objects created before the unregistration still hold a reference to the old registration. Unflattening such a PyTreeSpec will use the old unflatten_func, not the newly registered one.

  2. Built-in types cannot be re-registered. The behavior of the types listed in Built-in PyTree Node Types (e.g., key-sorted traversal for dict and collections.defaultdict) is fixed.

  3. Inherited subclasses are not implicitly registered. The registry lookup uses type(obj) is registered_type rather than isinstance(obj, registered_type). Users need to register the subclasses explicitly. To register all subclasses, it is easy to implement with metaclass or __init_subclass__, for example:

    from collections import UserDict
    
    @optree.register_pytree_node_class(namespace='mydict')
    class MyDict(UserDict):
        TREE_PATH_ENTRY_TYPE = optree.MappingEntry  # used by accessor APIs
    
        def __init_subclass__(cls):  # define this in the base class
            super().__init_subclass__()
            # Register a subclass to namespace 'mydict'
            optree.register_pytree_node_class(cls, namespace='mydict')
    
        def __tree_flatten__(self):  # -> (children, metadata, entries)
            reversed_keys = sorted(self.keys(), reverse=True)
            return (
                [self[key] for key in reversed_keys],  # children
                reversed_keys,  # metadata
                reversed_keys,  # entries
            )
    
        @classmethod
        def __tree_unflatten__(cls, metadata, children):
            return cls(zip(metadata, children))
    
    # Subclasses will be automatically registered in namespace 'mydict'
    class MyAnotherDict(MyDict):
        pass
    
    >>> tree = MyDict(b=4, a=(2, 3), c=MyAnotherDict({'d': 5, 'f': 6}))
    >>> optree.tree_flatten_with_path(tree, namespace='mydict')
    (
        [('c', 'f'), ('c', 'd'), ('b',), ('a', 0), ('a', 1)],
        [6, 5, 4, 2, 3],
        PyTreeSpec(
            CustomTreeNode(MyDict[['c', 'b', 'a']], [CustomTreeNode(MyAnotherDict[['f', 'd']], [*, *]), *, (*, *)]),
            namespace='mydict'
        )
    )
    >>> optree.tree_accessors(tree, namespace='mydict')
    [
        PyTreeAccessor(*['c']['f'], (MappingEntry(key='c', type=<class 'MyDict'>), MappingEntry(key='f', type=<class 'MyAnotherDict'>))),
        PyTreeAccessor(*['c']['d'], (MappingEntry(key='c', type=<class 'MyDict'>), MappingEntry(key='d', type=<class 'MyAnotherDict'>))),
        PyTreeAccessor(*['b'], (MappingEntry(key='b', type=<class 'MyDict'>),)),
        PyTreeAccessor(*['a'][0], (MappingEntry(key='a', type=<class 'MyDict'>), SequenceEntry(index=0, type=<class 'tuple'>))),
        PyTreeAccessor(*['a'][1], (MappingEntry(key='a', type=<class 'MyDict'>), SequenceEntry(index=1, type=<class 'tuple'>)))
    ]
    
  4. Beware of infinite recursion in custom flatten functions. The returned children are recursively flattened and may have the same type as the current node. Ensure your flatten function has a proper termination condition.

    import numpy as np
    import torch
    
    optree.register_pytree_node(
        np.ndarray,
        # Children are nested lists of Python objects
        lambda array: (np.atleast_1d(array).tolist(), array.ndim == 0),
        lambda scalar, rows: np.asarray(rows) if not scalar else np.asarray(rows[0]),
        namespace='numpy1',
    )
    
    optree.register_pytree_node(
        np.ndarray,
        # Returns a list of `np.ndarray`s without termination condition -> RecursionError!
        lambda array: ([array.ravel()], array.shape),
        lambda shape, children: children[0].reshape(shape),
        namespace='numpy2',
    )
    

None is Non-leaf Node vs. None is Leaf

The None object is Python's singleton for "no value" — analogous to null in other languages but also commonly used as a sentinel or implicit return value.

By default, the None object is considered a non-leaf node in the tree with arity 0, i.e., a non-leaf node that has no children. This is like the behavior of an empty tuple. While flattening a tree, it will remain in the tree structure definitions rather than in the leaves list.

>>> tree = {'b': (2, [3, 4]), 'a': 1, 'c': None, 'd': 5}
>>> optree.tree_flatten(tree)
([1, 2, 3, 4, 5], PyTreeSpec({'a': *, 'b': (*, [*, *]), 'c': None, 'd': *}))
>>> optree.tree_flatten(tree, none_is_leaf=True)
([1, 2, 3, 4, None, 5], PyTreeSpec({'a': *, 'b': (*, [*, *]), 'c': *, 'd': *}, NoneIsLeaf))
>>> optree.tree_flatten(1)
([1], PyTreeSpec(*))
>>> optree.tree_flatten(None)
([], PyTreeSpec(None))
>>> optree.tree_flatten(None, none_is_leaf=True)
([None], PyTreeSpec(*, NoneIsLeaf))

OpTree provides a keyword argument none_is_leaf to determine whether to consider the None object as a leaf, like other opaque objects. If none_is_leaf=True, the None object will be placed in the leaves list. Otherwise, the None object will remain in the tree structure specification.

>>> import torch

>>> linear = torch.nn.Linear(in_features=3, out_features=2, bias=False)
>>> linear._parameters  # a container has None
OrderedDict({
    'weight': Parameter containing:
              tensor([[-0.6677,  0.5209,  0.3295],
                      [-0.4876, -0.3142,  0.1785]], requires_grad=True),
    'bias': None
})

>>> optree.tree_map(torch.zeros_like, linear._parameters)
OrderedDict({
    'weight': tensor([[0., 0., 0.],
                      [0., 0., 0.]]),
    'bias': None
})

>>> optree.tree_map(torch.zeros_like, linear._parameters, none_is_leaf=True)
Traceback (most recent call last):
    ...
TypeError: zeros_like(): argument 'input' (position 1) must be Tensor, not NoneType

>>> optree.tree_map(lambda t: torch.zeros_like(t) if t is not None else 0, linear._parameters, none_is_leaf=True)
OrderedDict({
    'weight': tensor([[0., 0., 0.],
                      [0., 0., 0.]]),
    'bias': 0
})

Key Ordering for Dictionaries

The built-in Python dictionary (builtins.dict) is a mapping whose leaves are its values. Since Python 3.7, dict is guaranteed to be insertion ordered, but the equality operator (==) ignores key order. To ensure referential transparency — "equal dict" implies "equal ordering of leaves" — the leaves (values) are returned in key-sorted order. The same applies to collections.defaultdict.

>>> optree.tree_flatten({'a': [1, 2], 'b': [3]})
([1, 2, 3], PyTreeSpec({'a': [*, *], 'b': [*]}))
>>> optree.tree_flatten({'b': [3], 'a': [1, 2]})
([1, 2, 3], PyTreeSpec({'a': [*, *], 'b': [*]}))

Sorting ensures that equal dictionaries always flatten to the same leaf sequence, regardless of insertion order. This is critical for operations that rely on positional correspondence between leaves. Consider two parameter dicts that are equal but constructed in different orders:

>>> import numpy as np
>>> params1 = {'weight': np.array([[1.0, 2.0], [3.0, 4.0]]), 'bias': np.array([5.0, 6.0])}
>>> params2 = {'bias': np.array([5.0, 6.0]), 'weight': np.array([[1.0, 2.0], [3.0, 4.0]])}
>>> optree.tree_all(optree.tree_map(np.allclose, params1, params2))
True

Because tree_map zips leaves positionally, sorted keys guarantee correct element-wise operations:

>>> optree.tree_map(lambda x, y: x - y, params1, params2)
{
    'weight': array([[0., 0.],
                     [0., 0.]]),
    'bias': array([0., 0.])
}

The same applies to tree_ravel, which concatenates all leaves into a single 1D array:

>>> from optree.integrations.numpy import tree_ravel
>>> tree_ravel(params1)[0]
array([5., 6., 1., 2., 3., 4.])  # 'bias' before 'weight' (sorted)
>>> tree_ravel(params2)[0]
array([5., 6., 1., 2., 3., 4.])  # same order, despite different insertion order

Without sorting, insertion order would silently corrupt the results. Here is a counterexample using dict_insertion_ordered:

>>> with optree.dict_insertion_ordered(True, namespace='demo'):
...     flat1, _ = tree_ravel(params1, namespace='demo')
...     flat2, _ = tree_ravel(params2, namespace='demo')
>>> flat1
array([1., 2., 3., 4., 5., 6.])  # weight, bias (insertion order of params1)
>>> flat2
array([5., 6., 1., 2., 3., 4.])  # bias, weight (insertion order of params2)
>>> flat1 - flat2                # WRONG! Should be all zeros for equal params
array([-4., -4.,  2.,  2.,  2.,  2.])

To preserve insertion order during pytree traversal, use collections.OrderedDict, which considers key order in equality checks:

>>> OrderedDict([('a', [1, 2]), ('b', [3])]) == OrderedDict([('b', [3]), ('a', [1, 2])])
False
>>> optree.tree_flatten(OrderedDict([('a', [1, 2]), ('b', [3])]))
([1, 2, 3], PyTreeSpec(OrderedDict({'a': [*, *], 'b': [*]})))
>>> optree.tree_flatten(OrderedDict([('b', [3]), ('a', [1, 2])]))
([3, 1, 2], PyTreeSpec(OrderedDict({'b': [*], 'a': [*, *]})))

To flatten builtins.dict and collections.defaultdict objects with the insertion order preserved, use the dict_insertion_ordered context manager:

>>> tree = {'b': (2, [3, 4]), 'a': 1, 'c': None, 'd': 5}
>>> optree.tree_flatten(tree)
(
    [1, 2, 3, 4, 5],
    PyTreeSpec({'a': *, 'b': (*, [*, *]), 'c': None, 'd': *})
)
>>> with optree.dict_insertion_ordered(True, namespace='some-namespace'):
...     optree.tree_flatten(tree, namespace='some-namespace')
(
    [2, 3, 4, 1, 5],
    PyTreeSpec({'b': (*, [*, *]), 'a': *, 'c': None, 'd': *}, namespace='some-namespace')
)

Since OpTree v0.9.0, the key order of the reconstructed output dictionaries from tree_unflatten is guaranteed to be consistent with the key order of the input dictionaries in tree_flatten.

>>> leaves, treespec = optree.tree_flatten({'b': [3], 'a': [1, 2]})
>>> leaves, treespec
([1, 2, 3], PyTreeSpec({'a': [*, *], 'b': [*]}))
>>> optree.tree_unflatten(treespec, leaves)
{'b': [3], 'a': [1, 2]}
>>> optree.tree_map(lambda x: x, {'b': [3], 'a': [1, 2]})
{'b': [3], 'a': [1, 2]}
>>> optree.tree_map(lambda x: x + 1, {'b': [3], 'a': [1, 2]})
{'b': [4], 'a': [2, 3]}

This property is also preserved during serialization/deserialization.

>>> leaves, treespec = optree.tree_flatten({'b': [3], 'a': [1, 2]})
>>> leaves, treespec
([1, 2, 3], PyTreeSpec({'a': [*, *], 'b': [*]}))
>>> restored_treespec = pickle.loads(pickle.dumps(treespec))
>>> optree.tree_unflatten(treespec, leaves)
{'b': [3], 'a': [1, 2]}
>>> optree.tree_unflatten(restored_treespec, leaves)
{'b': [3], 'a': [1, 2]}

[!NOTE] The dict keys are not required to be comparable (sortable) or of a single type. Keys are sorted by key=lambda k: k first if possible, otherwise falling back to key=lambda k: (f'{k.__class__.__module__}.{k.__class__.__qualname__}', k). This handles most cases.

>>> sorted({1: 2, 1.5: 1}.keys())
[1, 1.5]
>>> sorted({'a': 3, 1: 2, 1.5: 1}.keys())
Traceback (most recent call last):
    ...
TypeError: '<' not supported between instances of 'int' and 'str'
>>> sorted({'a': 3, 1: 2, 1.5: 1}.keys(), key=lambda k: (f'{k.__class__.__module__}.{k.__class__.__qualname__}', k))
[1.5, 1, 'a']

Changelog

See CHANGELOG.md.


License

OpTree is released under the Apache License 2.0.

OpTree is based on JAX's implementation of the PyTree utility, with significant refactoring and several improvements. The original licenses can be found at JAX's Apache License 2.0 and Tensorflow's Apache License 2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

optree-0.19.1.tar.gz (177.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

optree-0.19.1-pp311-pypy311_pp73-win_amd64.whl (341.6 kB view details)

Uploaded PyPyWindows x86-64

optree-0.19.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (449.5 kB view details)

Uploaded PyPymanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (409.0 kB view details)

Uploaded PyPymanylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl (390.2 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

optree-0.19.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl (417.5 kB view details)

Uploaded PyPymacOS 10.15+ x86-64

optree-0.19.1-cp314-cp314t-win_arm64.whl (396.1 kB view details)

Uploaded CPython 3.14tWindows ARM64

optree-0.19.1-cp314-cp314t-win_amd64.whl (397.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

optree-0.19.1-cp314-cp314t-win32.whl (357.5 kB view details)

Uploaded CPython 3.14tWindows x86

optree-0.19.1-cp314-cp314t-manylinux_2_39_riscv64.whl (440.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.39+ riscv64

optree-0.19.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (475.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (490.9 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (491.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl (494.6 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (432.0 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp314-cp314t-macosx_11_0_arm64.whl (437.3 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

optree-0.19.1-cp314-cp314t-macosx_10_15_x86_64.whl (469.1 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

optree-0.19.1-cp314-cp314-win_arm64.whl (361.6 kB view details)

Uploaded CPython 3.14Windows ARM64

optree-0.19.1-cp314-cp314-win_amd64.whl (351.7 kB view details)

Uploaded CPython 3.14Windows x86-64

optree-0.19.1-cp314-cp314-win32.whl (325.2 kB view details)

Uploaded CPython 3.14Windows x86

optree-0.19.1-cp314-cp314-manylinux_2_39_riscv64.whl (423.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ riscv64

optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (463.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (481.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (479.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl (482.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (419.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl (398.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

optree-0.19.1-cp314-cp314-macosx_10_15_x86_64.whl (427.4 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

optree-0.19.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl (397.8 kB view details)

Uploaded CPython 3.14iOS 13.0+ ARM64 Simulator

optree-0.19.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl (391.0 kB view details)

Uploaded CPython 3.14iOS 13.0+ ARM64 Device

optree-0.19.1-cp314-cp314-android_24_arm64_v8a.whl (927.8 kB view details)

Uploaded Android API level 24+ ARM64 v8aCPython 3.14

optree-0.19.1-cp313-cp313t-win_arm64.whl (388.0 kB view details)

Uploaded CPython 3.13tWindows ARM64

optree-0.19.1-cp313-cp313t-win_amd64.whl (382.4 kB view details)

Uploaded CPython 3.13tWindows x86-64

optree-0.19.1-cp313-cp313t-win32.whl (348.6 kB view details)

Uploaded CPython 3.13tWindows x86

optree-0.19.1-cp313-cp313t-manylinux_2_39_riscv64.whl (442.4 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.39+ riscv64

optree-0.19.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (475.6 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (495.4 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (492.8 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp313-cp313t-manylinux_2_26_i686.manylinux_2_28_i686.whl (496.3 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (433.5 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp313-cp313t-macosx_11_0_arm64.whl (437.1 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

optree-0.19.1-cp313-cp313t-macosx_10_13_x86_64.whl (469.7 kB view details)

Uploaded CPython 3.13tmacOS 10.13+ x86-64

optree-0.19.1-cp313-cp313-win_arm64.whl (353.1 kB view details)

Uploaded CPython 3.13Windows ARM64

optree-0.19.1-cp313-cp313-win_amd64.whl (343.9 kB view details)

Uploaded CPython 3.13Windows x86-64

optree-0.19.1-cp313-cp313-win32.whl (317.4 kB view details)

Uploaded CPython 3.13Windows x86

optree-0.19.1-cp313-cp313-manylinux_2_39_riscv64.whl (423.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ riscv64

optree-0.19.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (462.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (478.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (477.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl (482.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (417.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp313-cp313-macosx_11_0_arm64.whl (398.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

optree-0.19.1-cp313-cp313-macosx_10_13_x86_64.whl (429.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

optree-0.19.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl (398.2 kB view details)

Uploaded CPython 3.13iOS 13.0+ ARM64 Simulator

optree-0.19.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl (391.5 kB view details)

Uploaded CPython 3.13iOS 13.0+ ARM64 Device

optree-0.19.1-cp313-cp313-android_24_arm64_v8a.whl (929.1 kB view details)

Uploaded Android API level 24+ ARM64 v8aCPython 3.13

optree-0.19.1-cp312-cp312-win_arm64.whl (351.8 kB view details)

Uploaded CPython 3.12Windows ARM64

optree-0.19.1-cp312-cp312-win_amd64.whl (341.4 kB view details)

Uploaded CPython 3.12Windows x86-64

optree-0.19.1-cp312-cp312-win32.whl (317.3 kB view details)

Uploaded CPython 3.12Windows x86

optree-0.19.1-cp312-cp312-manylinux_2_39_riscv64.whl (417.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ riscv64

optree-0.19.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (457.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (474.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (475.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl (476.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (413.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp312-cp312-macosx_11_0_arm64.whl (394.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

optree-0.19.1-cp312-cp312-macosx_10_13_x86_64.whl (424.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

optree-0.19.1-cp311-cp311-win_arm64.whl (349.3 kB view details)

Uploaded CPython 3.11Windows ARM64

optree-0.19.1-cp311-cp311-win_amd64.whl (337.6 kB view details)

Uploaded CPython 3.11Windows x86-64

optree-0.19.1-cp311-cp311-win32.whl (311.8 kB view details)

Uploaded CPython 3.11Windows x86

optree-0.19.1-cp311-cp311-manylinux_2_39_riscv64.whl (410.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ riscv64

optree-0.19.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (447.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (465.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (466.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl (466.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (406.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp311-cp311-macosx_11_0_arm64.whl (385.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

optree-0.19.1-cp311-cp311-macosx_10_9_x86_64.whl (414.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

optree-0.19.1-cp310-cp310-win_amd64.whl (327.9 kB view details)

Uploaded CPython 3.10Windows x86-64

optree-0.19.1-cp310-cp310-win32.whl (303.1 kB view details)

Uploaded CPython 3.10Windows x86

optree-0.19.1-cp310-cp310-manylinux_2_39_riscv64.whl (390.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ riscv64

optree-0.19.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (425.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp310-cp310-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (442.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp310-cp310-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (446.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl (445.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (390.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp310-cp310-macosx_11_0_arm64.whl (370.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

optree-0.19.1-cp310-cp310-macosx_10_9_x86_64.whl (398.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

optree-0.19.1-cp39-cp39-win_amd64.whl (334.3 kB view details)

Uploaded CPython 3.9Windows x86-64

optree-0.19.1-cp39-cp39-win32.whl (303.2 kB view details)

Uploaded CPython 3.9Windows x86

optree-0.19.1-cp39-cp39-manylinux_2_39_riscv64.whl (391.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.39+ riscv64

optree-0.19.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (425.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

optree-0.19.1-cp39-cp39-manylinux_2_26_s390x.manylinux_2_28_s390x.whl (442.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.26+ s390xmanylinux: glibc 2.28+ s390x

optree-0.19.1-cp39-cp39-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl (447.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.26+ ppc64lemanylinux: glibc 2.28+ ppc64le

optree-0.19.1-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl (446.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.26+ i686manylinux: glibc 2.28+ i686

optree-0.19.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (390.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

optree-0.19.1-cp39-cp39-macosx_11_0_arm64.whl (370.1 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

optree-0.19.1-cp39-cp39-macosx_10_9_x86_64.whl (398.6 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file optree-0.19.1.tar.gz.

File metadata

  • Download URL: optree-0.19.1.tar.gz
  • Upload date:
  • Size: 177.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1.tar.gz
Algorithm Hash digest
SHA256 4497d1c9197b8c6842e511368163d318ce536521ebdcff8bebb7551dcdfac532
MD5 e7456960d6f888147f56ec30c61c5fc3
BLAKE2b-256 446392328a17ab7836562fe0129e605f685a88db35ce98427c34ff48ee4ec157

See more details on using hashes here.

File details

Details for the file optree-0.19.1-pp311-pypy311_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-pp311-pypy311_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 e12ee3776a16f6feaa8263b92469ad546b870af71d50602745855d8449219221
MD5 bf5b0283ca5ea779cce0b44a01877bcf
BLAKE2b-256 c78ed251c9338771ef0f9db8e538bd77810100c495734b57494464c7e223f0d0

See more details on using hashes here.

File details

Details for the file optree-0.19.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 732c4581fb666869b8b391ec4ca13d2729795f9abe72b5aec2e582bcbea1975d
MD5 a39268b2263d290b0b478f493adca2a7
BLAKE2b-256 3ea5647b93eb16244cc7f6dfccc025ac495245e306ff4cb8f9ad15718219141a

See more details on using hashes here.

File details

Details for the file optree-0.19.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3507ae5db5827eef3da42d04c5a41df649cedc2e42d5d39dc0f869d36915a00b
MD5 8ae1f4d7b9435735d5beb1c0e3e6ce3a
BLAKE2b-256 fc67f31784a7a2dcc0c1f84b691afc552ea5b26db5f56657692a12954a828db4

See more details on using hashes here.

File details

Details for the file optree-0.19.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 77d93eafbd0046c7350bc592ab8e3814abbd39a6d716b5b1e5d652cc486f445c
MD5 dc1469f7b0786b49ff243512787e30ce
BLAKE2b-256 520b80fb1b289940e34858cb89f05bc7ce23d6d1272886c2f78bc7e3ab1a306b

See more details on using hashes here.

File details

Details for the file optree-0.19.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 3f4f1c276fa06227cdaf58349d22a3231b3dd3d47de1f90a86222ebf831fc397
MD5 f69cb978f7952d4128768466342e4c39
BLAKE2b-256 2bd4ffeedc86f8b91e5c17994f38bd1f7aa2e20f9b70a6d3ae906af16414626c

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: optree-0.19.1-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 396.1 kB
  • Tags: CPython 3.14t, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 4e103e212d1e8fe0399ed076eff80a905fb14929729bbd994d3660110a27a252
MD5 548b96d82ef622c5284eccb8d714ffc3
BLAKE2b-256 07426d6f93416c66820cb8753e65b5ff43c47480af9c4911bd2b8406ff0f7f27

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 397.8 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 60e9345405d7b06cafdf1b1dd2e2261ceddddce10f35729240f90e2bab845a0b
MD5 aa78cc71f5edffc299c3f9a71a84fd1d
BLAKE2b-256 e0347f48b7034ff75d2eb3e94e2196709ddbf762798fb621f9508899fa66b44e

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 357.5 kB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 312048e69dc88de26915674f961bf38980a765a6b48ead2f1672858a39402c41
MD5 36106d89c48333b1c9b6583e62148ce5
BLAKE2b-256 3feb489d22ef3cadb2f5f3bbd6e6099d17b5a521ff533e086f78f005c3358017

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 de8acbed5965beae6f6b0456fcb8d1afaea1fe300810739e88645e22138849bc
MD5 bbd15f0d36aacb80b2a6c18e7108bfdd
BLAKE2b-256 6391e363f4adda292f891ca0cf5748010fea955737bdf494cc11d4c3bcda6935

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a5f8383952f18d5a4ec6b248d8ae6fe27012434ad9750aa33a821ad4846da5af
MD5 cb15c89c5585d9c118bf4416e76cd750
BLAKE2b-256 b38d42a8ca6277ef93d47ab0986e30a25134206afe0c6e6c3425c8736b2677ba

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 f55841132ba8a34dbbd85e0c2cf990602384eea0e4638df986cd3266482f4a17
MD5 bc924fb1ce8005deb3b4c6fe021578d6
BLAKE2b-256 4d73266b9de8eb5b16bfe7010c90c55840517d5d61ee6e0ca64901440296d97a

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 1a74e0656ccef45b1fec07b9d964ce97f3def8bab73711f56175076c4259884f
MD5 e1bafa8a719f27c2fe65312a327cd16a
BLAKE2b-256 b89a9e183c610c414cba581f9afda7610589d89cae229d627b14f8480425d975

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 470742544ff2d4b63843023f38dcfb83e82c3a9877c783dee0e69cbb974de6d1
MD5 0173e2530e947e48fae519985ae60bf9
BLAKE2b-256 68dc6d0ef14bc82bd54046c1a066d25fa6854123a6b29fd691f1f95dec3ab45f

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dfae64c4c371640a4b3e2a9e3e6aa3a3e8cdf2da5247a88fef5b632614b948a6
MD5 6693774d5a8b6ec8fcf3fcb9e312179b
BLAKE2b-256 9b3fa5f8fb3ec3840f885de52d7a793ba57ace17990e3a9b3797218425ffe842

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a609c90e4f64e4f3e2b5b3cc022210314834737e0e61a745485e33b33eae773b
MD5 82d3f33bae03c74f3125371e16042490
BLAKE2b-256 9260f7539012aa8a7488c1e34f66b76eadc384c3152dd9800973f1b5fe045dfd

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 068edb89fadd94f6f57fdb51f4ad2c764b5a0bfd00903c55ffe433c2863a8037
MD5 cd18e153fa2b980ebcede2f51075a4dd
BLAKE2b-256 ae2d4f7facd482d56079b7adb8ce3fede19f41629bc0463e8ee25907f1dba36c

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: optree-0.19.1-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 361.6 kB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 c682ab6711b7a623503711fa661a2bba7886e1c21dc06c3b7febba101b458051
MD5 5f0a06776bdeda44509550ea0bc217ac
BLAKE2b-256 1cab55d7508e87055c730fe7207cfd0c45183a07ddf1f91d9e73d017a7f8c1f4

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 351.7 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 50d77b91a8cd01adf422472b7edf39fc445b0268816176a868a385d28f8367c2
MD5 ead8f66ce652805d3b511a672306c4c2
BLAKE2b-256 96c34f2f318b98465376bbb7a06a33da553c688b3ed39dafbb8307f824eef74a

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp314-cp314-win32.whl
  • Upload date:
  • Size: 325.2 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 b0c920579bddc3b18a0e051850f017618e24efcc19ba83dcd415cf74db5fd904
MD5 e562e005bdda19b6d79945c6abc83ba3
BLAKE2b-256 208a83c64ecadc686e08310fc9c20bc0bbe6453e89b69257e08887818dac7886

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 f61a01ed9991193ed6f3db8e956ede05218190a32ca2ddfb71cfc40c8daba1d5
MD5 9cb8c5d597c3050c28f90e0fa96edbd3
BLAKE2b-256 f488598fb91c06fee3d8b08568779b011225dc2b66140927bd0b2b2d9b40a566

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d0e1493429ae1d1a5e34855774ee604c974a8f76656bd0e562cdbf9466c9b1f
MD5 c671ddf9a4b3799b119086ea2b5eca38
BLAKE2b-256 9c1a4834b1f2fb1847412353d7342eb7a1d001a4f3bd9d24155e057135a4aa44

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 17a986fd91ccdc18bb7b587ca1f508c1761580a93517e6db33a13b22e46acb9b
MD5 2350e5d3382c10d0435296419deb01e0
BLAKE2b-256 7ccabd9553f94bec0bc7860f10ae177c14ca265ab19ddb463122be22fa335ee8

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 dae6c247cc8751bd2f167951468769f5c98f8cfdae31c0db0f2eb4145a6ec560
MD5 425b06887ecf120c928b1552a2bc6b9f
BLAKE2b-256 22472c76c7ce937323988770c41126e0e380bcb73a816f68a767f23b5c33aced

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 d3bba2af7a5fce0c25e99024688e68dfe9be41e3d6e92720febbefdc879fba38
MD5 638bd3be5fe6df082a28c4133f29dd09
BLAKE2b-256 ec4125144e61f76278b9e0a5d4189c7083fe853164c5f7328a1f5aac43d964c2

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 987bba55366917d9829f45b5ee86499ecc87a30e9103072db9ab8d67f9958179
MD5 63045fb44d87cbacb6a563785bc7a741
BLAKE2b-256 17b5ac51aa118dd918761519fbc031865b1d6f850453e9a7ac0c3da21109c4f0

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b17a7b70ff8bd406c2142914c5ab0a57f8bcfb9f52181f7012e32406bbdbfdda
MD5 7443db1dec54ca905b8e9e99094e22ec
BLAKE2b-256 49cc14dd93887295859457e507fc46a847b68ae8f20c42b2fde4d8a749c94bbc

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b2757c5d922aab76cfc9b870c373fb35209c2094e3c912733b326c043e85a0c6
MD5 51a5f96c05e7e595cf743b075b8e1343
BLAKE2b-256 24f6a7bf5d75a6481038bbb61846d87d43124d63741385796ef7b37d326f46bd

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl
Algorithm Hash digest
SHA256 930268ebfdebca43a8808f6293910d6ade2fe7c84fa784692017d7120d285226
MD5 95ba06a10a9e3bc45b348e0796064bc7
BLAKE2b-256 8225fc648710102960f87d18cd8fc8a24afe14a5ec7827c64dfb1340230c0794

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl
Algorithm Hash digest
SHA256 ae9d42718ebf985cdad3182364b5cf829193b8fd2c6d993fbb4111d38e2bdf96
MD5 d07444b91495a4864e4d372edf781b5e
BLAKE2b-256 6b87ff1c6bb6b79a5d0b70b83f7ae8b78811a406a749b3ae4478a2122a7afb66

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp314-cp314-android_24_arm64_v8a.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp314-cp314-android_24_arm64_v8a.whl
Algorithm Hash digest
SHA256 e1951ddc870f67430310fd17393971c30510ee9fd290525b44c12afe25f3c307
MD5 6c784e184f59109a407e2aaf4eefeacc
BLAKE2b-256 e3da4e16e26375c56c9e40760697af4e2b72f196c2099e96cc783b63dcc862a8

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-win_arm64.whl.

File metadata

  • Download URL: optree-0.19.1-cp313-cp313t-win_arm64.whl
  • Upload date:
  • Size: 388.0 kB
  • Tags: CPython 3.13t, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 b9120510d3f951e268e417a3f64f335bc1c539e1e80bff2129ddc6fb60ac7b56
MD5 1caa0fc726656fe8998a58d13943e300
BLAKE2b-256 fcfa8c0882cdd42e28a23c1998297c8ad1202194510cbba8b050251429c641c0

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp313-cp313t-win_amd64.whl
  • Upload date:
  • Size: 382.4 kB
  • Tags: CPython 3.13t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 afd4abeb2783b2367093287bc6268ac9af244b20c8d9b01696ccfe817483b66c
MD5 806b2d7af25ac8751a29faceee4ef1b9
BLAKE2b-256 d92b0be3f8b9765f366e3e12d0590e9c6514de110d0c5b3b9002f49e56bf15b1

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp313-cp313t-win32.whl
  • Upload date:
  • Size: 348.6 kB
  • Tags: CPython 3.13t, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 ab8ad9803376d553a2958471b6bb6842b7e15888e19cc6aeb76da96c6afd948d
MD5 70f6592a523a6be0c7b12b73294bb959
BLAKE2b-256 a55834820bab11f28ba6b03fe9e151880ad591b43f26648f058c94451fbdfc3a

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 a9b9c7e9148ec470124dc4c1d1cd1485dbeb35973357b5911b181a79090426d2
MD5 f1854262da0056aa19e79d291a09abd4
BLAKE2b-256 0a661603680fa924e68e5697c1229510c0645db0a9c633a12d1a9bfdbfc9cb74

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 03faa8e23fdaf3a18f9a1568c2c0eb0641a6aa05baf3a20639bd11fb34664700
MD5 052ad3366e136cacd2e26789d55f0b58
BLAKE2b-256 d96140c3463e52914d552c66c760ae15e673137c4cc1d1d9f8da0d745656193a

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 76b3e9e5d37e6b05ec82fff91758c8c0e27e159b35faea4b33d5eb975d720257
MD5 58bfc211f2fb1c091546d7554f55a7cb
BLAKE2b-256 f5282210de9a68722007fe007da3cae1a5971b92fc8113b5eecef66a04637959

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 dc2db0b449baff53aa7e583306101de0ade5e5ae9e6fce78400eb2319bbd23dc
MD5 da4b8d9c63eaa2d5d6c961be17f41af4
BLAKE2b-256 7f46506aa1a64abce69e2f4cec9cdac3da0cae207cf04c5e70e7f143bf8b29d8

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 d16cef4d0555d49ce221d80249f1285a2d3faf932e451c3ce6cb8ccb6a846767
MD5 207d1961cb9135bb1577923737999153
BLAKE2b-256 d6996a4cc29389667efa089a0c476b7c36b7d0a66e10dd2d8c2d19c776977566

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 672588408906051d3e9a99aca6c0af93c6e0b638137a701418088eaa0bb6c719
MD5 7e261a58a2e377a049a55977116e6615
BLAKE2b-256 795504260128a726e3550b49467a65bff859452897144b68bae54b2f2e5c27f1

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 08ccec0ee5a565eb5aa4fe30383016a358627ea23d968ec8ab28b1f2ce4ce3d8
MD5 d43da6df96335539189b8e53c6fe927f
BLAKE2b-256 6433ce9b54646ed4ab5773a9dc59767dadfe3de8bb2e97a3ed19205b995a7a31

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b964bcdb5cfe367cdf56447e80ba5a49123098d8c4e8e68b41c20890eec6e58e
MD5 e83d2c0bb28f6527351468abe156a89e
BLAKE2b-256 9c774c8108cbce2c8ae2aa4b6adc7874082882e32cf131cb64b3a4411f50dec4

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: optree-0.19.1-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 353.1 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 6f0b1efc177bed6495f78d39d5aa495ccb31cc20bcf64bb1b806ca4c919f4049
MD5 97abdbaab1ca010f7e1e6391c6e9a3f8
BLAKE2b-256 c6a91ae0a9685f5301f454f01d2490065b98df6956f90b1b2fd1cea9daa6d820

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 343.9 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 aa0845b725bcd0029e179cf9b4bc2cc016c7358e56fc7c0d2c43bf4d514c96cf
MD5 686d5bbed19d0e4eb047db20ff85d522
BLAKE2b-256 505249b8a8d9e94c57c6fa5008953f84a1c36a4119a3b90dcb7df745f1f05a00

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp313-cp313-win32.whl
  • Upload date:
  • Size: 317.4 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 9870d33ec50cca0c46c2b431cea24c6247457da15fd4ad66ccb8ab78145c1490
MD5 448a8eedbd237fa63b6ad2addca1d875
BLAKE2b-256 5f34637b151d071ca94aea0087322f470ce84c5828ef6b9c0de7dc7b4420a1cf

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 f1d7838e8b1b62258abd73a5911afad1153ed76822070558c3ba7e0bb5b44192
MD5 f6e4d014dad299dc1e58deb4fa6d36d1
BLAKE2b-256 ee0ca073eeaea4d4f68e02d5883ed8268746a296e6749e3c46e0124ca45f306c

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9dde5b756946c1f1458aeab248a7a9b0c01bb06b5787de9f06d52ad38b745557
MD5 3398053b354c56226989b8870666b5a6
BLAKE2b-256 68b58a2427bbe4ee59e2ce26a14125728e3b48c7030c80984ba07d0e5d804d37

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 544b70958dbd7e732bc6874e0180c609c9052115937d0ec28123bb49c1a574aa
MD5 6848e844d77d0594f2c61433c7d956db
BLAKE2b-256 b16e6c6fa6f1159ac68f4ee7666610127fb4c14d47a2fa7a0a48de3aecc24d4b

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 9690c132822d9dee479cf7dff8cc52a67c8af42a4f7529d21f0f4f1d99e4c84e
MD5 ad7036399227551ea93c1a2814350a7b
BLAKE2b-256 7dd47499d28be8b11eb40668262d27802119fe7e6ec4cd8816b76a1acd7b08f5

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 e757079d44a00319447f43df5c51e55bf9b62d9f05eea0e2db5ff7c7ca5ec71d
MD5 1008ea3de36f606bc0023da15bc2b7ab
BLAKE2b-256 d7b0f22ff5632083b5032caa80208dd202f8e963ed4aac11afa0a0f6a307fd68

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f658fa46305b2bdccdc5bb2cb07818aeaef88a1085499deda5be48a0a58d2971
MD5 c0c72e4077bc067a672ca150b2798a39
BLAKE2b-256 d350cd2d178099618093f5a9fd1c9de80af2b428879922eae1e9f27f1002c8be

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c5d21176b670407f4555aae40711668832599c4fb0627000c5ce3ed0d6e2dae
MD5 045043eda9245281ba290ccd70cc432c
BLAKE2b-256 794c1da9e8375e7b7fd9671dc5987682b042f6412c4d6fd9da03296403818d9f

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e70faa00ab69331f49f8337d45021bed09ae2265d1db72eea9d7817af2b73c64
MD5 83e1b9043e76ea94bd5b9d67ee7d2840
BLAKE2b-256 7e399d7d22cdaeb9a40ace2485f91c5b7c5f3a7f688575e2621e436561211cc1

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl
Algorithm Hash digest
SHA256 d2cb43c36638f469f5d8f4cf638e914de90c62242d8bed29f1b4487e0346ab94
MD5 3ae3d1a94f1f366216fed04c5923a218
BLAKE2b-256 f49646c15e80b0c97e2ba6aba11339008a37cabc5ccf55c31c6c60aecdb79638

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl
Algorithm Hash digest
SHA256 39a006735d2a0a68751a3bc33d670184fddcd86db63b0293e1e819739e8105e4
MD5 999bd0897f10714abff097b87015098d
BLAKE2b-256 15e2670d260dfd0532d64272dd6f7edd540a09d7040c0342b6cc6cf773568ea4

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp313-cp313-android_24_arm64_v8a.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp313-cp313-android_24_arm64_v8a.whl
Algorithm Hash digest
SHA256 f144cfd65fb17c6aa2c51818614eb009e6052d3d6ace91f7e570b1318cdcac4c
MD5 c7c411af1a5b3eb46777353554c82649
BLAKE2b-256 c27b0f2f3c9d55dda5127624daf68ff802ab624b739dd4b32aef505dac0c8e02

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: optree-0.19.1-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 351.8 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 a33bd23fc5c67ecb9ff491b75fde10cd9b53f47f8a876de842090e8c7a2437e1
MD5 275402e58e530f8e8de5138c082dee5a
BLAKE2b-256 3397813afb84a81fd8ae65444730907c05f0775fd6c79d3359c9e84bd3370445

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 341.4 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 06f5c8a4cf356a1a276ce5cec1be44719ed260690f79c036d04b4d427e801258
MD5 9584e4f186d94150c77e07abfa3456b6
BLAKE2b-256 3197d7e3ec79dcdde81f785a0446acf75fea77723f5ca4b98556350d7877986f

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp312-cp312-win32.whl
  • Upload date:
  • Size: 317.3 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 f10d58c1a17e1b32f9d9b5e1b9d1ad964d99c1113d9df0b9f62f2fe7dde19909
MD5 20ad9e06f856fd3230504cfd97363007
BLAKE2b-256 9f8f6ae994bb47f9394b33912a14593f9247737dd6c3303811550e5a3e918107

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 e0f02600832ab8d0f6c934dcb5c339e17a36938d477641a45798e02625ebe107
MD5 a49594fe833fcbbfd557f8806d98a347
BLAKE2b-256 a712bba07c0b769586c6bd54e81f1f734cad103dbe30abbadee940fe7d3e330e

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f0ce49f64f804f7f35f2f9c2a21e3ba94c090199fccdcfd40e3ded4426c5c175
MD5 f457b67e6bb07d7dc46171603705b506
BLAKE2b-256 e26a54e4c47e61a51504a5224c933722e0c8a69925aacec4c08175e9675aeb81

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 ddeefb7ca799c09647e332ebc1a5f6c09888a5a0e51f2dff4ca55e65b42a8c14
MD5 7be8c458be1aebf2571b8f9eef809af6
BLAKE2b-256 305e5323c5fa3024fdd900bdd8f14621139ed844c2247bf1a26e7cf5c1116188

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 7d934f240b109c6891dd06b2e30400b123b8a4b6ed31dcd0db2ae2378d30a6e8
MD5 9d08e963bf9433e6f6f3a31aa3b48c48
BLAKE2b-256 10c1f62167bd9d6f6c948b191a0943923404678d47100f777f4a8fb37816e6f8

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 d41ccc4c20bfeae01d1d221c057a6d026e84e32229664952eddcdbe4b9b71417
MD5 a1ce2fabc8acd7bacdea27ed74f212b4
BLAKE2b-256 f4411a4c58f2af5742b9d9e21ea9e45c6c3c49463b5e2a0537e84ead1e9597ca

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a1202371d9fe3aa75f3e886b1f871aac4991a655aadb65e54f58a3ae9388ab2
MD5 9a7ea2cc03cbf4bf3cee4a716e19a807
BLAKE2b-256 c21e676470909aa64d7aba7c5edf83b171dc83b7af901d9ebb8e6d7512fe913a

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d9d198343e1e6ced18bef0cbff84091c1877964fc4a121df33f18840e073a01
MD5 5feaff26a9c0ba95fc57e7b3500793e8
BLAKE2b-256 b9a13651fb32fa8617108204aa4056d283af742020e0987d106f41402005d800

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 96e5c7c3b9144f08ae40c3d9848cfbcfa36b6bead0f8215ad071d5922ee6c4a5
MD5 6b35d8ab4d1008e9e55dddd24c44c403
BLAKE2b-256 baa7cb5567029a608a296b0ca224025d03bba0365b41df19085b9b580191f6f2

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: optree-0.19.1-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 349.3 kB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 7853b58aa084e882ea078f390936bd92e46972eb8f9b5e654360b6480ca7283b
MD5 2d2a175e3fcce0c1e18287c8d018c6db
BLAKE2b-256 6c1485f4b05765287658529f09ede10461224161dcf0e29e6fce1ae488451cfe

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 337.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cd28a527bb363a1d7d28e8b2fb62816ace6743418bb86e9c5f27ea6877dcdf6c
MD5 2f49fea87b94d05713e079e1961e1385
BLAKE2b-256 22643cc7b08cb1c0f1949895f9490217ca8db6ced7f3bf75c65a5bf31c07bf1e

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 311.8 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 d32b1261be71211f77837e839e43a3e3e8fc57707091d2454d0a88590fb6abe8
MD5 d04ea7dee6d5ea2f8112b3b0fbf3d927
BLAKE2b-256 fb0404b71a34cf5e663a1df029acceb5efc8a96c8dc4b0b6af6e98486638e913

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 5dc35cb31540ab6ed9850b0f8865ccd400994ebd51fcf0c156cc772073f43c04
MD5 7e4cabc74fac2b74bfbc625630263d4b
BLAKE2b-256 a408a7b8862e4465bf250c3ccc78db4d10b9a2cf90ce4db3681cbdf7eb076fb7

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 38f2e503fad50aff58cade85db448002d4adc72f4b3b50dcc7f3ef4bcd3b0173
MD5 c2db6dc218571b3ec3aedbb6581f8b7b
BLAKE2b-256 09b9f668bc51129c0fec7728ae8b43180417fe1c1fe99f71d302739f6cc50944

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 27c8dc0f89ade9233aa7ed25ce15991da188e6950eb17cc0c313fc1f327c5b0b
MD5 171b0fc00c0aad8659f9c9e627cf588f
BLAKE2b-256 e6d25758c76bdd7034b721d84c7f0fd911f3b39dcb489eeb27f674aaae8a5f5c

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 f3a900df0ffb9b8259961b337289754531a7e0a5de2f681e9c80866b6a7cb74e
MD5 83f2d8ba2aec46d5437051cff3d6cedd
BLAKE2b-256 cb154645e1816e815a1306bbb7e3e2e6ba124f6dc325f8088a2db69301219a0c

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 96fad6c7b3a6fde3a0c8655fd003359cd247f8400749217502591a5ffc328699
MD5 76116237aaa7c5bf41cd27ab67281518
BLAKE2b-256 df29cdb40de6307809fa8e9452e4f9a65881a3140d01d9d589a07e9d054d8e1c

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 42e367a9d81e57c31a23247094727987a2f64b708901233a42a24d44d24e93f6
MD5 735d096121b4b371d38e60f7e0edb0a6
BLAKE2b-256 af2e9d1bd2527481681c4399beeeabba11dca36b16ec814579f2e8cc6bc2af96

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c1667e502e0eda9477925fb17c2ad879b199a2283ac98f18e6453692819b7811
MD5 653a15a0ddd6cdd68b8bef9c0803ccb2
BLAKE2b-256 d6937decea24656f416d61fa57b7113b1fbdbc042b7ab421399a84e1755676a1

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a496b864fe1fe0b5ea23d1ee3d1ef958d910704661808db2b2d2e16a0cfac96c
MD5 691ba00b2e11cb6b7305e7f280da451f
BLAKE2b-256 c3f24671a78193f96e86c1343fe04324091e163973d0058b292c10bc3387bb70

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 327.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 01c88294235b118b7478b5e80d360e5f110977cdf79f84d61dae21c2eb1d4cdd
MD5 f6cb838d7a2daa1e2912fa9f57e1d843
BLAKE2b-256 91b54e23965aacae04eb4cf42cd8108405a6628e645ee3ab759277e03063af0e

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 303.1 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 ef2409d4efda1c5a6eb69f83ffff89fb04d5607fd056704552ec359fb865cd6c
MD5 d614d91ac47fb9c676198c34a4015fda
BLAKE2b-256 0784ee12e234ddcf4fd4b7893ce03ec37f3c3edabdac911fd5384aa3f5c04c05

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 d4bac18638fa56efd2377cf8c43e17cd083aa566e69a31ce10f7fdaefd9676a3
MD5 0bc8096a5dde00b12dfa6dbee6fc9b5a
BLAKE2b-256 7df4d8685b55323c1f42695c1ed647d6541ee9c289eb821abc6e0cb84b0e4f72

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fff5fd89a9b333d91a05a7ca2e66c8e6632d0bdbc94c1725a341b77001f09511
MD5 5a318eaa7dd1dee37996b262ec7c1d51
BLAKE2b-256 90091f0bc2b584a51702407592bbccfe2b404187f6f5ee5b4b0c112a73e1a7ec

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 75fe038a1bed44f487a084af7a978874c51bba55f850bc12bf8068f3242463d6
MD5 f470e7302ea69b066c7e5f44ab17e14a
BLAKE2b-256 2142489fb272de36e0233149d46887879deb9497edc4a0214674bd2a80b8d4ec

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 9fb767746231ff279d273e8ff71af2a8f89c0c3870ca367c45fd4526d331ae4b
MD5 d212518cc83adb93af3e896c4ad412d0
BLAKE2b-256 155c2fe8ac73b7e979f3ed477ad99b7e034a11207d728b84ed2f52da259e7cda

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 d7edead66cace8b3b905488e391b38487614f75ae4fa7f3b612c7fe0e54b8a90
MD5 8643d693bc9f3a65500231a645fa1900
BLAKE2b-256 d5ecee009b5a31227b089d72fec2af3bb6bc0efd95bbe87ffe46f11061b9d371

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1687c962bb1691525178a6e90dde5840197cd7a7ad914b407eb7b635f15d47cb
MD5 2bd797500e7c17889d007b3fbf9f9569
BLAKE2b-256 cbe181b660daea2a75f574549e62c198d0b4e8e148b5de6f5f72e90a5cc1c334

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 14f959bc6bea6e0532f9239c67ea6952f3b8d0755ea9b4dd498284b649275aba
MD5 e8f7bc0064f37af439adc67bcc582354
BLAKE2b-256 3d4f350c82cd77a510f0f495e38a6f333b4b45a413dbc224142bc59975bc09d6

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1b28b0d89def1b4554051f3de2a1ed81e20216b6454a59a0d16c9f55c08cff77
MD5 0f22f0f0af10e8b1db5da8f3a03c85ae
BLAKE2b-256 1f4853367634a0ab6c2f0e502d83f8d6e27b70b6848ff1e1ff9cf042d1e1f1a0

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: optree-0.19.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 334.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 65e5da77c77352b4f555c7edf69435a3dda503fe82d74e511aa2db4e6b2dedb5
MD5 93c579afbca8a9682d7a125ce61a5a9b
BLAKE2b-256 328fad2c207cf254bffccea4c81407d984483b5d27796e973bfb1e6eeda15512

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-win32.whl.

File metadata

  • Download URL: optree-0.19.1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 303.2 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optree-0.19.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 486252b73ef0c6b94635a8d8fb91b20fc17d8bfcfe0df826c038e57ad8ffe610
MD5 93766b60dd6bbc0c22f6f8be71a8b064
BLAKE2b-256 b274410e2753ff61274f142bf1a284d5b555abf69e17ae1984b7471147a9d788

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-manylinux_2_39_riscv64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-manylinux_2_39_riscv64.whl
Algorithm Hash digest
SHA256 b81d637c94fb573e91050996b154a9adf9d12d4daf67eae27b6c0836e18ba8fa
MD5 5a68e47d9b0702f9891da7061aa3d6ec
BLAKE2b-256 2d48b6d3fca6e87ee20c0518b64c2432a8b28d480504680116c34546919c766e

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c380140a9cb1ac7c10d7363df9ebcf4948da4198ca584d50eb88bbf3e561b5f4
MD5 7fd4badd27191df78cfea3a5a047d547
BLAKE2b-256 ddc69f838f15d029ead3e3cba26921ab7c29043433fd4e1d9abc4142c4205ad1

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-manylinux_2_26_s390x.manylinux_2_28_s390x.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-manylinux_2_26_s390x.manylinux_2_28_s390x.whl
Algorithm Hash digest
SHA256 6b139d22664ac3b78690c0839446e51e79dd739026bc05c383d6d3b0e3e6f1b9
MD5 4174c199acec1d446e949384e6fd71b3
BLAKE2b-256 5109c4a9f4cab5d3b57f1b457a18effb49a4a8ad9c28a62730ce57c169ed7aa3

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl
Algorithm Hash digest
SHA256 eb6a6566b3656d28ba845ba1d00adabc53418020f6c469a2f1c30b46c8ce6020
MD5 420f4b6f8d7033e1d12adf1064627328
BLAKE2b-256 95a0c11b1d5f26ca202f582328bc4014d8c4aedb6307296a61222da94c9ac2c7

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 333a9eb982232184dfe65edff1b60f3423f89b3810b3bd4a02c82fa6c1eb319d
MD5 a3cbc1d2dd560d5429505f535694fa5c
BLAKE2b-256 ba8ea986cd1c343afd12f711738c1fdcfbd11a7abd5ebf75396d241714dfd54d

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5b8f9e0196c532b3be1504fb2c1f3ca39723026f2e9ffc65efd4dbf5da18cfc4
MD5 e6903c5c30129c34349792f797a2c336
BLAKE2b-256 d13b57efe92f0287b40694600c2d8ca250e7c4c9208a9cf4c5efbe3a81f54ba9

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5d8ccf4f38327efef9e17b399a7d911482cb73f022815cf7f649aea5cef5e8f
MD5 746042ac46462c927d5f01741086fff8
BLAKE2b-256 8709215bba51fc76136c34fa34ceaf4e55bb31f597a29893abf2ecc2de4dcf12

See more details on using hashes here.

File details

Details for the file optree-0.19.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for optree-0.19.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3aeadcbcd0904c463001e6e36c75743a25ec2b6e6f2d4c1389dfb8c7bdbec689
MD5 2f44f9b0766473f92e02bb54c8d21b66
BLAKE2b-256 fe93e85112b5cde5198e1dce0a048b8ae6afab126854a8bc6e2e9ae28847c8e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page