Mathematical expressions¶
DALI allows you to use regular Python arithmetic operations and other mathematical functions in
the define_graph()
method on the values that are returned
from invoking other operators.
Same expressions can be used with Functional API.
The expressions that are used will be incorporated into the pipeline without needing to explicitly instantiate operators and will describe the elementwise operations on Tensors.
At least one of the inputs to the arithmetic expression must be returned by other DALI operator 
that is a value of nvidia.dali.pipeline.DataNode
representing a batch of tensors.
The other input can be nvidia.dali.types.Constant()
or regular Python value of type bool
,
int
, or float
. As the operations performed are elementwise, the shapes of all
operands must match.
Note
If one of the operands is a batch of Tensors that represent scalars, the scalar values are broadcast to the other operand.
For details and examples see expressions tutorials.
Type promotion rules¶
For operations that accept two (or more) arguments, type promotions apply. The resulting type is calculated in accordance to the table below.
Operand Type
Operand Type
Result Type
Additional Conditions
T
T
T
floatX
T
floatX
where T is not a float
floatX
floatY
floatZ
where Z = max(X, Y)
intX
intY
intZ
where Z = max(X, Y)
uintX
uintY
uintZ
where Z = max(X, Y)
intX
uintY
int2Y
if X <= Y
intX
uintY
intX
if X > Y
T
stands for any one of the supported numerical types:
bool
, int8
, int16
, int32
, int64
, uint8
, uint16
,
uint32
, uint64
, float32
, and float64
.
bool
type is considered the smallest unsigned integer type and is treated as uint1
with respect to the table above.
Note
Type promotion is commutative.
For more than two arguments, the resulting type is calculated as a reduction from left to right  first calculating the result of operating on first two arguments, next between that intermediate result and the third argument and so on, until we have only the result type left.
Supported arithmetic operations¶
Currently, DALI supports the following operations:

Unary arithmetic operators: +, 
Unary operators that implement
__pos__(self)
and__neg__(self)
. The result of a unary arithmetic operation always preserves the input type. Unary operators accept only TensorList inputs from other operators. Return type
TensorList of the same type

Binary arithmetic operations: +, , *, /, //
Binary operators that implement
__add__
,__sub__
,__mul__
,__truediv__
and__floordiv__
respectively.The result of an arithmetic operation between two operands is described above, with the exception of
/
, the__truediv__
operation, which always returnsfloat32
orfloat64
type.Note
The only allowed arithmetic operation between two
bool
values is multiplication(*)
. Return type
TensorList of the type that is calculated based on the type promotion rules.

Comparison operations: ==, !=, <, <=, >, >=
Comparison operations.
 Return type
TensorList of
bool
type.

Bitwise binary operations: &, , ^
The bitwise binary operations follow the same type promotion rules as arithmetic binary operations, but their inputs are restricted to integral types (including
bool
).Note
A bitwise operation can be applied to two boolean inputs. Those operations can be used to emulate elementwise logical operations on Tensors.
 Return type
TensorList of the type that is calculated based on the type promotion rules.
Mathematical funcions¶
Similarly to arithmetic expressions, one can use selected mathematical functions in the Pipeline
graph definition. They also accept nvidia.dali.pipeline.DataNode
,
nvidia.dali.types.Constant()
or regular Python value of type bool
, int
, or float
as arguments. At least one of the inputs must be the output of other DALI Operator.

nvidia.dali.math.
clamp
(value, lo, hi)¶ Produces a tensor of values from
value
clamped to the range[lo, hi]
. Return type
TensorList of the type that is calculated based on the type promotion rules.

nvidia.dali.math.
exp
(value)¶ Fills the output with exponential of value. :rtype: TensorList of exp(value). If value is an integer, the result will be float, otherwise the type is preserved.

nvidia.dali.math.
log
(value)¶ Fills the output with logarithm (base10) of value. :rtype: TensorList of log(value). If value is an integer, the result will be float, otherwise the type is preserved.

nvidia.dali.math.
max
(left, right)¶ Fills the output with maxima of corresponding values in
left
andright
. Return type
TensorList of the type that is calculated based on the type promotion rules.

nvidia.dali.math.
min
(left, right)¶ Fills the output with minima of corresponding values in
left
andright
. Return type
TensorList of the type that is calculated based on the type promotion rules.