def reshape_decided_model

bendtorch-core@0.1.0.0 · src/tensor/transform_PROOF.bend:1076

import bendtorch-core@0.1.0.0/src/tensor/transform_PROOF.bend as TransformPROOF
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/transform_LAWS.bend as Laws
import bendtorch-core@0.1.0.0/src/tensor/core.bend as Core
import bendtorch-core@0.1.0.0/src/tensor/transforms.bend as Transforms

1076def reshape_decided_model(+input: Shape.Shape, +target: Shape.Shape, source: Core.Tensor<input>, -dimensions: List<&2, U32>,
1077  -preserved: {Shape.dimensions(target) == dimensions : List<&2, U32>},
1078  decision: Shape.BoolCase<Nat.is_eq(Shape.elements(input), Shape.elements(target))>) ->
1079  ReshapeDecidedModel<input, target, source, dimensions, decision>:
1080  match decision:
1081    case Shape.BFalse{equal}:
1082      ReshapeDecidedModel{Unit{}}
1083    case Shape.BTrue{equal}:
1084      ReshapeDecidedModel{Transforms.ReshapeOutput{target,
1085        Equal.trans(List<&2, U32>, Transforms.dynamic_dimensions(Transforms.reshape_equal(input, target, source,
1086            Transforms.elements_equal(input, target, equal))), Shape.dimensions(target), dimensions,
1087          Laws.reshape_target_dimensions(input, target, source, Transforms.elements_equal(input, target, equal)), preserved),
1088        preserved,
1089        Equal.trans(Nat, Shape.logical_numel(Shape.dimensions(input)), Shape.logical_numel(Shape.dimensions(target)),
1090          Shape.logical_numel(dimensions), Transforms.elements_equal(input, target, equal),
1091          Equal.cong(List<&2, U32>, Nat, Shape.logical_numel, Shape.dimensions(target), dimensions, preserved)),
1092        index => Laws.reshape_linear_order(input, target, source, index, Transforms.elements_equal(input, target, equal))}}

Uses (20)

Used by (1)