# etree

[[[Source]]](https://github.com/google/etils/tree/main/etils/etree/__init__.py)

```{code-block}
from etils import etree
```

```{eval-rst}
.. automodule:: etils.etree
  :no-members:
```

## All symbols


### Module

|  |  |
--- | ---
[etree](index) | Tree utils.
[etree.backend](backend/index) | Tree API backends.
[etree.tree_utils](tree_utils/index) | Tree API.

### Class

|  |  |
--- | ---
[etree.backend.Backend](backend/Backend) | Tree API backend.
[etree.backend.DmTree](backend/DmTree) | `tree` backend.
[etree.backend.Jax](backend/Jax) | `jax.tree_util` backend.
[etree.backend.Nest](backend/Nest) | `tf.nest` backend.
[etree.backend.Optree](backend/Optree) | `optree` backend.
[etree.backend.Python](backend/Python) | Pure `Python` backend.
[etree.tree_utils.TreeAPI](tree_utils/TreeAPI) | Tree API, using either `jax.tree_utils`, `tf.nest` or `tree` backend.

### Function

|  |  |
--- | ---
[etree.copy](copy) | Copy a tree structure but not its leaves.
[etree.map](map) | Same as `tree.map_structure`.
[etree.parallel_map](parallel_map) | Same as `tree.map_structure` but apply `map_fn` in parallel.
[etree.spec_like](spec_like) | Inspect a tree of array, works with any array type.
[etree.stack](stack) | Stack a tree of `Iterable[Array]`.
[etree.unzip](unzip) | Unpack a tree of iterable.

### Attribute

|  |  |
--- | ---
[etree.jax](jax) | Expose 4 variants of the API depending on which backend is used.
[etree.nest](nest) | 
[etree.optree](optree) | 
[etree.py](py) | 
[etree.tree](tree) | 

### Typing

|  |  |
--- | ---
[etree.Tree](Tree) | TODO(b/202712189): Add `Any` to the `Union` Tree can be arbitrary `chex.dataclas...


```{toctree}
:hidden:

Tree
backend/index
copy
jax
map
nest
optree
parallel_map
py
spec_like
stack
tree
tree_utils/index
unzip
```