# View Source Nx.Defn.Composite (Nx v0.5.2)

Functions to deal with composite data types according to `Nx.Container`

.

The functions in this module can be used both inside and outside `defn`

.
Note the functions in this module traverses tensors, but it does not
automatically convert values to tensors. For example, the tuple `{1, 2, 3}`

once traversed will emit the numbers `1`

, `2`

, and `3`

. If desired,
you can invoke `Nx.to_tensor/1`

to normalize them.

Note that, when a value is given to `defn`

, it is first converted to
tensors and containers via `Nx.LazyContainer`

. Inside `defn`

, there are
no lazy containers, only containers.

# Link to this section Summary

## Functions

Traverses two composite types to see if they are compatible.

Counts the number of non-composite types in the composite type.

Flattens recursively the given list of composite types.

Reduces recursively the given composite types with `acc`

and `fun`

.

Traverses recursively the given composite types with `fun`

.

Traverses recursively the given composite types with `acc`

and `fun`

.

# Link to this section Functions

Traverses two composite types to see if they are compatible.

For non-composite types, the given `fun`

will be called to
compare numbers/tensors pairwise.

Counts the number of non-composite types in the composite type.

##
examples

Examples

```
iex> Nx.Defn.Composite.count(123)
1
iex> Nx.Defn.Composite.count({1, {2, 3}})
3
iex> Nx.Defn.Composite.count({Complex.new(1), {Nx.tensor(2), 3}})
3
```

Flattens recursively the given list of composite types.

Elements that are not tensors (i.e. numbers and `Complex`

numbers) are kept as is
unless a custom function is given.

##
examples

Examples

```
iex> Nx.Defn.Composite.flatten_list([1, {2, 3}])
[1, 2, 3]
iex> Nx.Defn.Composite.flatten_list([1, {2, 3}], [Nx.tensor(4)])
[1, 2, 3, Nx.tensor(4)]
```

Reduces recursively the given composite types with `acc`

and `fun`

.

If composite tensor expressions are given, such as a tuple, the composite type is recursively traversed and returned.

If a non-composite tensor expression is given, the function is invoked for it but not for its arguments.

Traverses recursively the given composite types with `fun`

.

If a composite tensor is given, such as a tuple, the composite type is recursively traversed and returned.

Otherwise the function is invoked with the tensor (be it a number, complex, or actual tensor).

Traverses recursively the given composite types with `acc`

and `fun`

.

If a composite tensor is given, such as a tuple, the composite type is recursively traversed and returned.

Otherwise the function is invoked with the tensor (be it a number, complex, or actual tensor).