Skip to main content


Ops working with complex types.

We don't have a formal complex type yet, so we represent complex numbers as having a final dimension of size 2, representing the real and complex parts respectively.


as_complex(owned real: Symbol, owned imag: Symbol) -> Symbol

Creates a complex-valued tensor from two real-valued tensors.


  • real (Symbol): A symbolic tensor representing the real part of the complex value.
  • imag (Symbol): A symbolic tensor representing the imaginary part of the complex value. Must have the same shape and dtype as real.


A new symbolic tensor representing the complex valued tensor comprised from real and imag. Each element is paired elementwise.


as_interleaved_complex(owned interleaved: Symbol) -> Symbol

Reshapes the input symbolic tensor as complex from alternating (real, imag).


  • interleaved (Symbol): A symbolic tensor representing complex numbers as alternating pairs of (real, imag) real-valued numbers. Its last dimension must have an even size.


A symbolic tensor representing the complex-valued tensor, but with the values pulled out as complex numbers. The result will have the same dimensions for all dimensions except the last, which will be halved, and then a final dimension of size 2 representing the complex value.


as_real(owned complex: Symbol) -> SymbolTuple

Splits out the real and imaginary components of a symbolic tensor.


  • complex (Symbol): The input complex-valued symbolic tensor.


A pair of real-valued symbolic tensors, each with the same shape and rank as the input tensor, except the last dim of size 2 is removed. The first represents the real part of the input tensor, and the the second represents the imaginary part.


mul_complex(owned lhs: Symbol, owned rhs: Symbol) -> Symbol

Multiplies two complex-valued symbolic tensors elementwise.


  • lhs (Symbol): A complex-valued symbolic tensor.
  • rhs (Symbol): A complex-valued symbolic tensor.


A new complex-valued symbolic tensor. Each element represents the elementwize complex multiplication of the element at that location in the two input tensors. Type promotion and broadcasting rules are applied as described in elementwise.