.xbuilder.shape_type_compute

experimental_experiment.xbuilder.shape_type_compute.broadcast_shape(sh1: Tuple[int | torch.SymInt | torch.SymFloat | float | str, ...], sh2: Tuple[int | torch.SymInt | torch.SymFloat | float | str, ...], graph_builder: GraphBuilder | None = None) Tuple[int | torch.SymInt | torch.SymFloat | float | str, ...][source]

Computes the shape for many broadcasting operators. This function should be used while converting the graph into ONNX because it assumes the broadcast is possible and adds the necessary constraints on the dynamic in the GraphBuilder shapes to make it work.

Parameters:
  • sh1 – first shape

  • sh2 – second shape

  • graph_builder – if not None, the function register any constraint which might appear while applying the broadcast

Returns:

resulting shape

experimental_experiment.xbuilder.shape_type_compute.prepare_inputs_homogeneous_operator(g: GraphBuilder, *args: Sequence[str], f: Callable | None = None, outputs: List[str] | None = None, name: str | None = None, sts: Any | None = None, check_shape: bool = True, op_type: str | None = None, use_left: bool = False, force_type: int | None = None) Tuple[str, ...][source]

Casts any inputs to ensure all inputs share the same type.

op_type can be specified to bypass some cases with ambiguities such as a float multiplied with an integer.

Parameters:
  • g – GraphBuilder

  • args – operator arguments

  • f – function calling the operator

  • outputs – output names

  • sts – known shapes and types

  • check_shape – extra verification for shapes

  • op_type – operator type (onnx name)

  • use_left – if the operator is in one inplaced modification then the type of the left side

  • force_type – if not None, choose this type and cast the inputs

Returns:

new inputs

experimental_experiment.xbuilder.shape_type_compute.set_shape_type_custom(self: GraphBuilder, node: NodeProto)[source]

Sets the shape and type if it can.

experimental_experiment.xbuilder.shape_type_compute.set_shape_type_op_any(self: GraphBuilder, node: NodeProto)[source]

Sets the shape and type if it can.

experimental_experiment.xbuilder.shape_type_compute.set_type_shape_binary_op(g: GraphBuilder, name: str, *input_names: List[str], begin: int = 0, cmp_op: bool = False, itype: int | None = None) bool[source]

Sets the shape and type for a binary operator (add, mul, …).

experimental_experiment.xbuilder.shape_type_compute.set_type_shape_gemm(g: GraphBuilder, name: str, x: str, y: str, transA: int, transB: int)[source]

Sets the output shape for node type Gemm.

experimental_experiment.xbuilder.shape_type_compute.set_type_shape_matmul(g: GraphBuilder, name: str, x: str, y: str) bool[source]

Sets the output shape for node type MatMul.

experimental_experiment.xbuilder.shape_type_compute.set_type_shape_reduce_op(g: GraphBuilder, name: str, x: str, keepdim: int, axes: Tuple[int] | None = None)[source]

Sets the output shape for any Reduce type.

experimental_experiment.xbuilder.shape_type_compute.set_type_shape_reshape(g: GraphBuilder, name: str, input_name: str, new_shape: Sequence[int])[source]

Sets the output shape for node type Reshape

experimental_experiment.xbuilder.shape_type_compute.set_type_shape_unary_op(g: GraphBuilder, name: str, input_name: str, itype: int | None = None) bool[source]

Sets the shape and type for an unary operator (abs, exp, …).

experimental_experiment.xbuilder.shape_type_compute.set_type_shape_unary_op_abs(g: GraphBuilder, name: str, input_name: str, itype: int | None = None) bool[source]

Sets the shape and type for an unary operator (abs, exp, …).