diff --git a/src/HordeAd/Core/TensorClass.hs b/src/HordeAd/Core/TensorClass.hs index ee6fcbd79..18aa4534b 100644 --- a/src/HordeAd/Core/TensorClass.hs +++ b/src/HordeAd/Core/TensorClass.hs @@ -1196,27 +1196,28 @@ class ( Num (IntOf target) -- | A strict left fold. rfold :: forall rn rm n m. - (GoodScalar rn, GoodScalar rm, KnownNat n, KnownNat m) - => (forall f. ADReady f => f (TKR n rn) -> f (TKR m rm) -> f (TKR n rn)) - -> target (TKR n rn) -- ^ initial value - -> target (TKR (1 + m) rm) -- ^ iteration is over the outermost dimension - -> target (TKR n rn) + (TensorKind rn, TensorKind rm, KnownNat n, KnownNat m) + => (forall f. ADReady f => f (TKR2 n rn) -> f (TKR2 m rm) -> f (TKR2 n rn)) + -> target (TKR2 n rn) -- ^ initial value + -> target (TKR2 (1 + m) rm) -- ^ iteration is over the outermost dimension + -> target (TKR2 n rn) rfold f acc0 es = let shm :: IShR m - (width, shm) = case rshape es of - width2 :$: shm2 -> (width2, shm2) - ZSR -> error "rfold: impossible pattern needlessly required" - sh = rshape acc0 + (width, shm, xm) = case tftk stensorKind es of + FTKR (width2 :$: shm2) x2 -> (width2, shm2, x2) + FTKR ZSR _ -> error "rfold: impossible pattern needlessly required" + (sh, x) = case tftk stensorKind acc0 of + FTKR sh2 x2 -> (sh2, x2) in withSNat width $ \snat -> tproject1 (dmapAccumL (Proxy @target) snat - (FTKR @_ sh (FTKScalar @rn)) + (FTKR @_ sh x) (FTKScalar @Z0) - (FTKR @_ shm (FTKScalar @rm)) + (FTKR @_ shm xm) (let g :: forall f. ADReady f - => f (TKR n rn) -> f (TKR m rm) - -> f (TKProduct (TKR n rn) TKUnit) + => f (TKR2 n rn) -> f (TKR2 m rm) + -> f (TKProduct (TKR2 n rn) TKUnit) g !acc !e = tpair (f acc e) tunit in g) acc0 @@ -1224,28 +1225,29 @@ class ( Num (IntOf target) -- | A strict left scan. rscan :: forall rn rm n m. - (GoodScalar rn, GoodScalar rm, KnownNat n, KnownNat m) - => (forall f. ADReady f => f (TKR n rn) -> f (TKR m rm) -> f (TKR n rn)) - -> target (TKR n rn) - -> target (TKR (1 + m) rm) - -> target (TKR (1 + n) rn) + (TensorKind rn, TensorKind rm, KnownNat n, KnownNat m) + => (forall f. ADReady f => f (TKR2 n rn) -> f (TKR2 m rm) -> f (TKR2 n rn)) + -> target (TKR2 n rn) + -> target (TKR2 (1 + m) rm) + -> target (TKR2 (1 + n) rn) rscan f acc0 es = let shm :: IShR m - (width, shm) = case rshape es of - width2 :$: shm2 -> (width2, shm2) - ZSR -> error "rscan: impossible pattern needlessly required" - sh = rshape acc0 + (width, shm, xm) = case tftk stensorKind es of + FTKR (width2 :$: shm2) x2 -> (width2, shm2, x2) + FTKR ZSR _ -> error "rfold: impossible pattern needlessly required" + (sh, x) = case tftk stensorKind acc0 of + FTKR sh2 x2 -> (sh2, x2) in withSNat width $ \snat -> let bs = tproject2 $ dmapAccumL (Proxy @target) snat - (FTKR @_ sh (FTKScalar @rn)) - (FTKR @_ sh (FTKScalar @rn)) - (FTKR @_ shm (FTKScalar @rm)) + (FTKR @_ sh x) + (FTKR @_ sh x) + (FTKR @_ shm xm) (let g :: forall f. ADReady f - => f (TKR n rn) -> f (TKR m rm) - -> f (TKProduct (TKR n rn) (TKR n rn)) + => f (TKR2 n rn) -> f (TKR2 m rm) + -> f (TKProduct (TKR2 n rn) (TKR2 n rn)) g !acc !e = tlet (f acc e) $ \ !res -> tpair res res in g) acc0 @@ -1254,43 +1256,51 @@ class ( Num (IntOf target) -- | A strict left fold. sfold :: forall rn rm sh shm k. - (GoodScalar rn, GoodScalar rm, KnownShS sh, KnownShS shm, KnownNat k) - => (forall f. ADReady f => f (TKS sh rn) -> f (TKS shm rm) -> f (TKS sh rn)) - -> target (TKS sh rn) - -> target (TKS (k ': shm) rm) - -> target (TKS sh rn) + (TensorKind rn, TensorKind rm, KnownShS sh, KnownShS shm, KnownNat k) + => (forall f. ADReady f => f (TKS2 sh rn) -> f (TKS2 shm rm) -> f (TKS2 sh rn)) + -> target (TKS2 sh rn) + -> target (TKS2 (k ': shm) rm) + -> target (TKS2 sh rn) sfold f acc0 es = - tproject1 + let xm = case tftk stensorKind es of + FTKS _ x2 -> x2 + x = case tftk stensorKind acc0 of + FTKS _ x2 -> x2 + in tproject1 (dmapAccumL (Proxy @target) (SNat @k) - (FTKS @sh knownShS (FTKScalar @rn)) + (FTKS @sh knownShS x) (FTKScalar @Z0) - (FTKS @shm knownShS (FTKScalar @rm)) + (FTKS @shm knownShS xm) (let g :: forall f. ADReady f - => f (TKS sh rn) -> f (TKS shm rm) - -> f (TKProduct (TKS sh rn) TKUnit) + => f (TKS2 sh rn) -> f (TKS2 shm rm) + -> f (TKProduct (TKS2 sh rn) TKUnit) g !acc !e = tpair (f acc e) tunit in g) acc0 es) sscan :: forall rn rm sh shm k. - (GoodScalar rn, GoodScalar rm, KnownShS sh, KnownShS shm, KnownNat k) - => (forall f. ADReady f => f (TKS sh rn) -> f (TKS shm rm) -> f (TKS sh rn)) - -> target (TKS sh rn) - -> target (TKS (k ': shm) rm) - -> target (TKS (1 + k ': sh) rn) + (TensorKind rn, TensorKind rm, KnownShS sh, KnownShS shm, KnownNat k) + => (forall f. ADReady f => f (TKS2 sh rn) -> f (TKS2 shm rm) -> f (TKS2 sh rn)) + -> target (TKS2 sh rn) + -> target (TKS2 (k ': shm) rm) + -> target (TKS2 (1 + k ': sh) rn) sscan f acc0 es = - let bs = + let xm = case tftk stensorKind es of + FTKS _ x2 -> x2 + x = case tftk stensorKind acc0 of + FTKS _ x2 -> x2 + bs = tproject2 $ dmapAccumL (Proxy @target) (SNat @k) - (FTKS @sh knownShS (FTKScalar @rn)) - (FTKS @sh knownShS (FTKScalar @rn)) - (FTKS @shm knownShS (FTKScalar @rm)) + (FTKS @sh knownShS x) + (FTKS @sh knownShS x) + (FTKS @shm knownShS xm) (let g :: forall f. ADReady f - => f (TKS sh rn) -> f (TKS shm rm) - -> f (TKProduct (TKS sh rn) (TKS sh rn)) + => f (TKS2 sh rn) -> f (TKS2 shm rm) + -> f (TKProduct (TKS2 sh rn) (TKS2 sh rn)) g !acc !e = tlet (f acc e) $ \ !res -> tpair res res in g) acc0 diff --git a/test/simplified/TestConvSimplified.hs b/test/simplified/TestConvSimplified.hs index 074f2b285..336dc9d35 100644 --- a/test/simplified/TestConvSimplified.hs +++ b/test/simplified/TestConvSimplified.hs @@ -615,7 +615,7 @@ testCNNOPP2 :: Assertion testCNNOPP2 = do resetVarCounter printAstPretty IM.empty maxPool2dUnpadded2 - @?= "rreplicate 1 (rreplicate 1 (let w38 = rtranspose [1,2,3,0] (rreplicate 1 (rgather [1,1,1,2,2] (rfromVector (fromList [let x26 = 0 + 1 in rtranspose [1,2,0] (rreplicate 1 (let x27 = 2 * 0 in rtranspose [0,2,1] (rreplicate 1 (rreplicate 2 (let x28 = 2 * 0 in rreplicate 1 (rreplicate 2 (rfromVector (fromList [tconcrete (FTKR [1,1,2,2] FTKScalar) (rfromListLinear [1,1,2,2] [1.0,1.0,1.0,1.0]) ! [i26, 0, i27, i28], rscalar 0.0]) ! [ifF (1 >. i26) 0 1]))))))), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i46, i40, i36] -> [ifF (1 >. 1 + i36) 0 1, i46, i40, i36]))) in rgather [1,1] w38 (\\[i45, i39] -> [i45, i39, 0, 0, 0, 0])))" + @?= "rreplicate 1 (rreplicate 1 (let w38 = rtranspose [1,2,3,0] (rreplicate 1 (rgather [1,1,1,2,2] (rfromVector (fromList [let x26 = 1 + stoScalar (sscalar 0) in rtranspose [1,2,0] (rreplicate 1 (let x27 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) in rtranspose [0,2,1] (rreplicate 1 (rreplicate 2 (let x28 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) in rreplicate 1 (rreplicate 2 (rfromVector (fromList [tconcrete (FTKR [1,1,2,2] FTKScalar) (rfromListLinear [1,1,2,2] [1.0,1.0,1.0,1.0]) ! [i26, 0, i27, i28], rscalar 0.0]) ! [ifF (1 >. i26) 0 1]))))))), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i46, i40, i36] -> [ifF (1 >. 1 + i36) 0 1, i46, i40, i36]))) in rgather [1,1] w38 (\\[i45, i39] -> [i45, i39, 0, 0, 0, 0])))" maxPool2dUnpadded2 :: (target ~ AstTensor AstMethodLet FullSpan, r ~ Double) @@ -717,7 +717,7 @@ testCNNOPP4 = do afcnn2T :: AstTensor AstMethodLet FullSpan (TKR 4 Double) afcnn2T = maxPool2dUnpadded4 $ conv2dUnpadded4 blackGlyph printAstPretty IM.empty afcnn2T - @?= "rreplicate 1 (rreplicate 1 (let w36 = rgather [1,1,1,1,2,2] (rfromVector (fromList [let x21 = 0 + 1 in rtranspose [2,3,0,1] (rreplicate 1 (rreplicate 1 (let x20 = 2 * 0 in rtranspose [0,2,1] (rreplicate 1 (rreplicate 2 (let x12 = 2 * 0 in rreplicate 1 (rreplicate 2 (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0]) ! [ifF ((0 <=. i21 &&* 1 >. i21) &&* ((0 <=. i20 &&* 2 >. i20) &&* (0 <=. i12 &&* 2 >. i12))) 0 1])))))))), rreplicate 1 (rreplicate 1 (rreplicate 1 (rgather [1,2,2] (rreplicate 2 (rreplicate 2 (rscalar 0.0))) (\\[i29, i26, i22] -> [i26, i22]))))])) (\\[i44, i38, i33, i30, i31, i32] -> [ifF ((0 <=. 1 + i33 &&* 1 >. 1 + i33) &&* ((0 <=. 1 + i30 &&* 1 >. 1 + i30) &&* ((0 <=. 2 * i44 + i31 &&* 2 >. 2 * i44 + i31) &&* (0 <=. 2 * i38 + i32 &&* 2 >. 2 * i38 + i32)))) 0 1, i44, i38, i33, i30, i31, i32]) in rgather [1,1] w36 (\\[i43, i37] -> [i43, i37, 0, 0, 0, 0])))" + @?= "rreplicate 1 (rreplicate 1 (let w36 = rgather [1,1,1,1,2,2] (rfromVector (fromList [let x21 = 1 + stoScalar (sscalar 0) in rtranspose [2,3,0,1] (rreplicate 1 (rreplicate 1 (let x20 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) in rtranspose [0,2,1] (rreplicate 1 (rreplicate 2 (let x12 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) in rreplicate 1 (rreplicate 2 (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0]) ! [ifF ((0 <=. i21 &&* 1 >. i21) &&* ((0 <=. i20 &&* 2 >. i20) &&* (0 <=. i12 &&* 2 >. i12))) 0 1])))))))), rreplicate 1 (rreplicate 1 (rreplicate 1 (rgather [1,2,2] (rreplicate 2 (rreplicate 2 (rscalar 0.0))) (\\[i29, i26, i22] -> [i26, i22]))))])) (\\[i44, i38, i33, i30, i31, i32] -> [ifF ((0 <=. 1 + i33 &&* 1 >. 1 + i33) &&* ((0 <=. 1 + i30 &&* 1 >. 1 + i30) &&* ((0 <=. 2 * i44 + i31 &&* 2 >. 2 * i44 + i31) &&* (0 <=. 2 * i38 + i32 &&* 2 >. 2 * i38 + i32)))) 0 1, i44, i38, i33, i30, i31, i32]) in rgather [1,1] w36 (\\[i43, i37] -> [i43, i37, 0, 0, 0, 0])))" printAstPretty IM.empty (simplifyInline afcnn2T) @?= "rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rscalar 0.0))))" diff --git a/test/simplified/TestMnistCNNR.hs b/test/simplified/TestMnistCNNR.hs index fbd9842a7..65deb533d 100644 --- a/test/simplified/TestMnistCNNR.hs +++ b/test/simplified/TestMnistCNNR.hs @@ -412,10 +412,10 @@ testCNNOPP = do batch_size blackGlyph (artifactRev, _) = revArtifactAdapt True afcnn2T valsInit printArtifactPretty renames artifactRev - @?= "\\m362 x1 -> let w269 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i255, i256, i257, i258, i259, i260, i261] -> [ifF ((0 <=. i255 + i258 &&* 1 >. i255 + i258) &&* ((0 <=. i259 &&* 1 >. i259) &&* ((0 <=. i256 + i260 &&* 4 >. i256 + i260) &&* (0 <=. i257 + i261 &&* 4 >. i257 + i261)))) 0 1])))) ; w270 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i262, i263] -> [i262 + i263]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i264, i265, i266, i267, i268] -> [ifF ((0 <=. i264 + i265 &&* 1 >. i264 + i265) &&* ((0 <=. i266 &&* 1 >. i266) &&* ((0 <=. i267 &&* 2 >. i267) &&* (0 <=. i268 &&* 2 >. i268)))) 0 1, i264, i265, i266, i267, i268])))))) ; w271 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w269 * w270) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; w288 = rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i272, i273, i274, i275, i276, i277, i278, i279] -> [ifF (w271 ! [i272, i273, i274, i275, i276, i277, i278, i279, i272, i273, 0, 0] <=. rscalar 0.0) 0 1]) ; w289 = rgather [1,1,2,2,1,1,2,2] w271 (\\[i280, i281, i282, i283, i284, i285, i286, i287] -> [i280, i281, i282, i283, i284, i285, i286, i287, i280, i281, 0, 0]) ; w298 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [w288 * w289, rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF ((0 <=. i290 + i294 &&* 1 >. i290 + i294) &&* ((0 <=. i291 + i295 &&* 1 >. i291 + i295) &&* ((0 <=. 2 * i292 + i296 &&* 4 >. 2 * i292 + i296) &&* (0 <=. 2 * i293 + i297 &&* 4 >. 2 * i293 + i297)))) 0 1, i290, i291, i292, i293, i294, i295, i296, i297])))))))) ; x306 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w321 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w298 (\\[i299, i300, i301, i302, i303, i304, i305] -> [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * i306)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i307, i308, i309, i310, i311, i312, i313] -> [ifF ((0 <=. i307 + i310 &&* 1 >. i307 + i310) &&* ((0 <=. i311 &&* 1 >. i311) &&* ((0 <=. i308 + i312 &&* 2 >. i308 + i312) &&* (0 <=. i309 + i313 &&* 2 >. i309 + i313)))) 0 1, i307, i308, i309, i310, i311, i312, i313])))) ; w322 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i314, i315] -> [i314 + i315]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i316, i317, i318, i319, i320] -> [ifF ((0 <=. i316 + i317 &&* 1 >. i316 + i317) &&* ((0 <=. i318 &&* 1 >. i318) &&* ((0 <=. i319 &&* 2 >. i319) &&* (0 <=. i320 &&* 2 >. i320)))) 0 1, i316, i317, i318, i319, i320])))))) ; w323 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w321 * w322) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; w340 = rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i324, i325, i326, i327, i328, i329, i330, i331] -> [ifF (w323 ! [i324, i325, i326, i327, i328, i329, i330, i331, i324, i325, 0, 0] <=. rscalar 0.0) 0 1]) ; w341 = rgather [1,1,1,1,1,1,2,2] w323 (\\[i332, i333, i334, i335, i336, i337, i338, i339] -> [i332, i333, i334, i335, i336, i337, i338, i339, i332, i333, 0, 0]) ; w350 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [w340 * w341, rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i342, i343, i344, i345, i346, i347, i348, i349] -> [ifF ((0 <=. i342 + i346 &&* 1 >. i342 + i346) &&* ((0 <=. i343 + i347 &&* 1 >. i343 + i347) &&* ((0 <=. 2 * i344 + i348 &&* 2 >. 2 * i344 + i348) &&* (0 <=. 2 * i345 + i349 &&* 2 >. 2 * i345 + i349)))) 0 1, i342, i343, i344, i345, i346, i347, i348, i349]) ; x355 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; t356 = rtranspose [1,0] (rreplicate 1 (rtranspose [1,0] (rreshape [1,1] (rgather [1,1,1,1] w350 (\\[i351, i352, i353, i354] -> [i351, i352, i353, i354, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * i355)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))]))))) ; m357 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t356) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) ; m360 = rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i358, i359] -> [ifF (m357 ! [i358, i359] <=. rscalar 0.0) 0 1]) ; t361 = rtranspose [1,0] (rreplicate 10 (m360 * m357)) ; m363 = m360 * rsum (rtranspose [1,0] (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * rreplicate 1 m362)) ; t364 = rreplicate 1 m363 ; x369 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w378 = rscatter [2,1,1,1,1,1,1,2,2] (rscatter [1,1,1,1,1,1,2,2] (rreshape [1,1,1,1] (rtranspose [1,0] (rsum (rtranspose [1,0] (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t364))))) (\\[i365, i366, i367, i368] -> [i365, i366, i367, i368, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i365, i366, i367, i368]))))) (stoScalar (sscalar 2) * i369)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i365, i366, i367, i368]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i365, i366, i367, i368]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i365, i366, i367, i368]))))) (stoScalar (sscalar 2))])) (\\[i370, i371, i372, i373, i374, i375, i376, i377] -> [ifF ((0 <=. i370 + i374 &&* 1 >. i370 + i374) &&* ((0 <=. i371 + i375 &&* 1 >. i371 + i375) &&* ((0 <=. 2 * i372 + i376 &&* 2 >. 2 * i372 + i376) &&* (0 <=. 2 * i373 + i377 &&* 2 >. 2 * i373 + i377)))) 0 1, i370, i371, i372, i373, i374, i375, i376, i377]) ; u387 = rsum (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rscatter [1,1,1,1,1,1,2,2,1,1,2,2] (w340 * w378 ! [0]) (\\[i379, i380, i381, i382, i383, i384, i385, i386] -> [i379, i380, i381, i382, i383, i384, i385, i386, i379, i380, 0, 0]))))))))) ; w388 = rreplicate 4 u387 ; w394 = rscatter [2,1,1,1,2,2] (rreshape [1,1,1,2,2] (rsum (rsum (rsum (rtranspose [1,3,4,2,0] (w321 * w388)))))) (\\[i389, i390, i391, i392, i393] -> [ifF ((0 <=. i389 + i390 &&* 1 >. i389 + i390) &&* ((0 <=. i391 &&* 1 >. i391) &&* ((0 <=. i392 &&* 2 >. i392) &&* (0 <=. i393 &&* 2 >. i393)))) 0 1, i389, i390, i391, i392, i393]) ; w404 = rscatter [2,1,2,2,1,1,2,2] (rreshape [1,2,2,1,1,2,2] (rsum (rtranspose [2,1,3,4,0] (w322 * w388)))) (\\[i397, i398, i399, i400, i401, i402, i403] -> [ifF ((0 <=. i397 + i400 &&* 1 >. i397 + i400) &&* ((0 <=. i401 &&* 1 >. i401) &&* ((0 <=. i398 + i402 &&* 2 >. i398 + i402) &&* (0 <=. i399 + i403 &&* 2 >. i399 + i403)))) 0 1, i397, i398, i399, i400, i401, i402, i403]) ; x412 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w421 = rscatter [2,1,1,2,2,1,1,2,2] (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rscatter [1,2,2,1,1,2,2,1,1,2,2,1,1,2,2] (w404 ! [0]) (\\[i405, i406, i407, i408, i409, i410, i411] -> [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407]))))) (stoScalar (sscalar 2) * i412)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407]))))) (stoScalar (sscalar 2))]))))))))) (\\[i413, i414, i415, i416, i417, i418, i419, i420] -> [ifF ((0 <=. i413 + i417 &&* 1 >. i413 + i417) &&* ((0 <=. i414 + i418 &&* 1 >. i414 + i418) &&* ((0 <=. 2 * i415 + i419 &&* 4 >. 2 * i415 + i419) &&* (0 <=. 2 * i416 + i420 &&* 4 >. 2 * i416 + i420)))) 0 1, i413, i414, i415, i416, i417, i418, i419, i420]) ; u430 = rsum (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rscatter [1,1,2,2,1,1,2,2,1,1,4,4] (w288 * w421 ! [0]) (\\[i422, i423, i424, i425, i426, i427, i428, i429] -> [i422, i423, i424, i425, i426, i427, i428, i429, i422, i423, 0, 0]))))))))) ; w436 = rscatter [2,1,1,1,2,2] (rreshape [1,1,1,2,2] (rsum (rsum (rsum (rtranspose [1,3,4,2,0] (w269 * rreplicate 4 u430)))))) (\\[i431, i432, i433, i434, i435] -> [ifF ((0 <=. i431 + i432 &&* 1 >. i431 + i432) &&* ((0 <=. i433 &&* 1 >. i433) &&* ((0 <=. i434 &&* 2 >. i434) &&* (0 <=. i435 &&* 2 >. i435)))) 0 1, i431, i432, i433, i434, i435]) in tpair (tpair (tpair (rscatter [1,1,2,2] (w436 ! [0]) (\\[i437, i438] -> [i437 + i438]), rsum (rsum (rsum (rtranspose [0,2,3,1] u430)))), tpair (rscatter [1,1,2,2] (w394 ! [0]) (\\[i395, i396] -> [i395 + i396]), rsum (rsum (rsum (rtranspose [0,2,3,1] u387))))), tpair (tpair (rsum (rtranspose [2,1,0] (t356 * t364)), rsum (rtranspose [1,0] m363)), tpair (rsum (rtranspose [2,1,0] (t361 * rreplicate 1 m362)), rsum (rtranspose [1,0] m362))))" + @?= "\\m387 x1 -> let w283 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i269, i270, i271, i272, i273, i274, i275] -> [ifF ((0 <=. i269 + i272 &&* 1 >. i269 + i272) &&* ((0 <=. i273 &&* 1 >. i273) &&* ((0 <=. i270 + i274 &&* 4 >. i270 + i274) &&* (0 <=. i271 + i275 &&* 4 >. i271 + i275)))) 0 1])))) ; w284 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i276, i277] -> [i276 + i277]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i278, i279, i280, i281, i282] -> [ifF ((0 <=. i278 + i279 &&* 1 >. i278 + i279) &&* ((0 <=. i280 &&* 1 >. i280) &&* ((0 <=. i281 &&* 2 >. i281) &&* (0 <=. i282 &&* 2 >. i282)))) 0 1, i278, i279, i280, i281, i282])))))) ; w285 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w283 * w284) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; x286 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x287 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x288 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x289 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w306 = rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF (w285 ! [i290, i291, i292, i293, i294, i295, i296, i297, i286, i287, i288, i289] <=. rscalar 0.0) 0 1]) ; w307 = rgather [1,1,2,2,1,1,2,2] w285 (\\[i298, i299, i300, i301, i302, i303, i304, i305] -> [i298, i299, i300, i301, i302, i303, i304, i305, i286, i287, i288, i289]) ; w316 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [w306 * w307, rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i308, i309, i310, i311, i312, i313, i314, i315] -> [ifF ((0 <=. i308 + i312 &&* 1 >. i308 + i312) &&* ((0 <=. i309 + i313 &&* 1 >. i309 + i313) &&* ((0 <=. 2 * i310 + i314 &&* 4 >. 2 * i310 + i314) &&* (0 <=. 2 * i311 + i315 &&* 4 >. 2 * i311 + i315)))) 0 1, i308, i309, i310, i311, i312, i313, i314, i315])))))))) ; x317 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x318 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x319 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x327 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w342 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w316 (\\[i320, i321, i322, i323, i324, i325, i326] -> [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * i327)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i328, i329, i330, i331, i332, i333, i334] -> [ifF ((0 <=. i328 + i331 &&* 1 >. i328 + i331) &&* ((0 <=. i332 &&* 1 >. i332) &&* ((0 <=. i329 + i333 &&* 2 >. i329 + i333) &&* (0 <=. i330 + i334 &&* 2 >. i330 + i334)))) 0 1, i328, i329, i330, i331, i332, i333, i334])))) ; w343 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i335, i336] -> [i335 + i336]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i337, i338, i339, i340, i341] -> [ifF ((0 <=. i337 + i338 &&* 1 >. i337 + i338) &&* ((0 <=. i339 &&* 1 >. i339) &&* ((0 <=. i340 &&* 2 >. i340) &&* (0 <=. i341 &&* 2 >. i341)))) 0 1, i337, i338, i339, i340, i341])))))) ; w344 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w342 * w343) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; x345 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x346 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x347 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x348 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w365 = rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i349, i350, i351, i352, i353, i354, i355, i356] -> [ifF (w344 ! [i349, i350, i351, i352, i353, i354, i355, i356, i345, i346, i347, i348] <=. rscalar 0.0) 0 1]) ; w366 = rgather [1,1,1,1,1,1,2,2] w344 (\\[i357, i358, i359, i360, i361, i362, i363, i364] -> [i357, i358, i359, i360, i361, i362, i363, i364, i345, i346, i347, i348]) ; w375 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [w365 * w366, rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i367, i368, i369, i370, i371, i372, i373, i374] -> [ifF ((0 <=. i367 + i371 &&* 1 >. i367 + i371) &&* ((0 <=. i368 + i372 &&* 1 >. i368 + i372) &&* ((0 <=. 2 * i369 + i373 &&* 2 >. 2 * i369 + i373) &&* (0 <=. 2 * i370 + i374 &&* 2 >. 2 * i370 + i374)))) 0 1, i367, i368, i369, i370, i371, i372, i373, i374]) ; x380 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; t381 = rtranspose [1,0] (rreplicate 1 (rtranspose [1,0] (rreshape [1,1] (rgather [1,1,1,1] w375 (\\[i376, i377, i378, i379] -> [i376, i377, i378, i379, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * i380)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))]))))) ; m382 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t381) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) ; m385 = rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i383, i384] -> [ifF (m382 ! [i383, i384] <=. rscalar 0.0) 0 1]) ; t386 = rtranspose [1,0] (rreplicate 10 (m385 * m382)) ; m388 = m385 * rsum (rtranspose [1,0] (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * rreplicate 1 m387)) ; t389 = rreplicate 1 m388 ; x394 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w403 = rscatter [2,1,1,1,1,1,1,2,2] (rscatter [1,1,1,1,1,1,2,2] (rreshape [1,1,1,1] (rtranspose [1,0] (rsum (rtranspose [1,0] (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t389))))) (\\[i390, i391, i392, i393] -> [i390, i391, i392, i393, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i390, i391, i392, i393]))))) (stoScalar (sscalar 2) * i394)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i390, i391, i392, i393]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i390, i391, i392, i393]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i390, i391, i392, i393]))))) (stoScalar (sscalar 2))])) (\\[i395, i396, i397, i398, i399, i400, i401, i402] -> [ifF ((0 <=. i395 + i399 &&* 1 >. i395 + i399) &&* ((0 <=. i396 + i400 &&* 1 >. i396 + i400) &&* ((0 <=. 2 * i397 + i401 &&* 2 >. 2 * i397 + i401) &&* (0 <=. 2 * i398 + i402 &&* 2 >. 2 * i398 + i402)))) 0 1, i395, i396, i397, i398, i399, i400, i401, i402]) ; u412 = rsum (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rscatter [1,1,1,1,1,1,2,2,1,1,2,2] (w365 * w403 ! [0]) (\\[i404, i405, i406, i407, i408, i409, i410, i411] -> [i404, i405, i406, i407, i408, i409, i410, i411, i345, i346, i347, i348]))))))))) ; w413 = rreplicate 4 u412 ; w419 = rscatter [2,1,1,1,2,2] (rreshape [1,1,1,2,2] (rsum (rsum (rsum (rtranspose [1,3,4,2,0] (w342 * w413)))))) (\\[i414, i415, i416, i417, i418] -> [ifF ((0 <=. i414 + i415 &&* 1 >. i414 + i415) &&* ((0 <=. i416 &&* 1 >. i416) &&* ((0 <=. i417 &&* 2 >. i417) &&* (0 <=. i418 &&* 2 >. i418)))) 0 1, i414, i415, i416, i417, i418]) ; w429 = rscatter [2,1,2,2,1,1,2,2] (rreshape [1,2,2,1,1,2,2] (rsum (rtranspose [2,1,3,4,0] (w343 * w413)))) (\\[i422, i423, i424, i425, i426, i427, i428] -> [ifF ((0 <=. i422 + i425 &&* 1 >. i422 + i425) &&* ((0 <=. i426 &&* 1 >. i426) &&* ((0 <=. i423 + i427 &&* 2 >. i423 + i427) &&* (0 <=. i424 + i428 &&* 2 >. i424 + i428)))) 0 1, i422, i423, i424, i425, i426, i427, i428]) ; x437 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w446 = rscatter [2,1,1,2,2,1,1,2,2] (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rscatter [1,2,2,1,1,2,2,1,1,2,2,1,1,2,2] (w429 ! [0]) (\\[i430, i431, i432, i433, i434, i435, i436] -> [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319]))))) (stoScalar (sscalar 2) * i437)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319]))))) (stoScalar (sscalar 2))]))))))))) (\\[i438, i439, i440, i441, i442, i443, i444, i445] -> [ifF ((0 <=. i438 + i442 &&* 1 >. i438 + i442) &&* ((0 <=. i439 + i443 &&* 1 >. i439 + i443) &&* ((0 <=. 2 * i440 + i444 &&* 4 >. 2 * i440 + i444) &&* (0 <=. 2 * i441 + i445 &&* 4 >. 2 * i441 + i445)))) 0 1, i438, i439, i440, i441, i442, i443, i444, i445]) ; u455 = rsum (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rscatter [1,1,2,2,1,1,2,2,1,1,4,4] (w306 * w446 ! [0]) (\\[i447, i448, i449, i450, i451, i452, i453, i454] -> [i447, i448, i449, i450, i451, i452, i453, i454, i286, i287, i288, i289]))))))))) ; w461 = rscatter [2,1,1,1,2,2] (rreshape [1,1,1,2,2] (rsum (rsum (rsum (rtranspose [1,3,4,2,0] (w283 * rreplicate 4 u455)))))) (\\[i456, i457, i458, i459, i460] -> [ifF ((0 <=. i456 + i457 &&* 1 >. i456 + i457) &&* ((0 <=. i458 &&* 1 >. i458) &&* ((0 <=. i459 &&* 2 >. i459) &&* (0 <=. i460 &&* 2 >. i460)))) 0 1, i456, i457, i458, i459, i460]) in tpair (tpair (tpair (rscatter [1,1,2,2] (w461 ! [0]) (\\[i462, i463] -> [i462 + i463]), rsum (rsum (rsum (rtranspose [0,2,3,1] u455)))), tpair (rscatter [1,1,2,2] (w419 ! [0]) (\\[i420, i421] -> [i420 + i421]), rsum (rsum (rsum (rtranspose [0,2,3,1] u412))))), tpair (tpair (rsum (rtranspose [2,1,0] (t381 * t389)), rsum (rtranspose [1,0] m388)), tpair (rsum (rtranspose [2,1,0] (t386 * rreplicate 1 m387)), rsum (rtranspose [1,0] m387))))" printArtifactPrimalPretty renames artifactRev - @?= "\\x1 -> let w269 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i255, i256, i257, i258, i259, i260, i261] -> [ifF ((0 <=. i255 + i258 &&* 1 >. i255 + i258) &&* ((0 <=. i259 &&* 1 >. i259) &&* ((0 <=. i256 + i260 &&* 4 >. i256 + i260) &&* (0 <=. i257 + i261 &&* 4 >. i257 + i261)))) 0 1])))) ; w270 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i262, i263] -> [i262 + i263]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i264, i265, i266, i267, i268] -> [ifF ((0 <=. i264 + i265 &&* 1 >. i264 + i265) &&* ((0 <=. i266 &&* 1 >. i266) &&* ((0 <=. i267 &&* 2 >. i267) &&* (0 <=. i268 &&* 2 >. i268)))) 0 1, i264, i265, i266, i267, i268])))))) ; w271 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w269 * w270) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; w288 = rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i272, i273, i274, i275, i276, i277, i278, i279] -> [ifF (w271 ! [i272, i273, i274, i275, i276, i277, i278, i279, i272, i273, 0, 0] <=. rscalar 0.0) 0 1]) ; w289 = rgather [1,1,2,2,1,1,2,2] w271 (\\[i280, i281, i282, i283, i284, i285, i286, i287] -> [i280, i281, i282, i283, i284, i285, i286, i287, i280, i281, 0, 0]) ; w298 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [w288 * w289, rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF ((0 <=. i290 + i294 &&* 1 >. i290 + i294) &&* ((0 <=. i291 + i295 &&* 1 >. i291 + i295) &&* ((0 <=. 2 * i292 + i296 &&* 4 >. 2 * i292 + i296) &&* (0 <=. 2 * i293 + i297 &&* 4 >. 2 * i293 + i297)))) 0 1, i290, i291, i292, i293, i294, i295, i296, i297])))))))) ; x306 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w321 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w298 (\\[i299, i300, i301, i302, i303, i304, i305] -> [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * i306)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i307, i308, i309, i310, i311, i312, i313] -> [ifF ((0 <=. i307 + i310 &&* 1 >. i307 + i310) &&* ((0 <=. i311 &&* 1 >. i311) &&* ((0 <=. i308 + i312 &&* 2 >. i308 + i312) &&* (0 <=. i309 + i313 &&* 2 >. i309 + i313)))) 0 1, i307, i308, i309, i310, i311, i312, i313])))) ; w322 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i314, i315] -> [i314 + i315]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i316, i317, i318, i319, i320] -> [ifF ((0 <=. i316 + i317 &&* 1 >. i316 + i317) &&* ((0 <=. i318 &&* 1 >. i318) &&* ((0 <=. i319 &&* 2 >. i319) &&* (0 <=. i320 &&* 2 >. i320)))) 0 1, i316, i317, i318, i319, i320])))))) ; w323 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w321 * w322) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; w340 = rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i324, i325, i326, i327, i328, i329, i330, i331] -> [ifF (w323 ! [i324, i325, i326, i327, i328, i329, i330, i331, i324, i325, 0, 0] <=. rscalar 0.0) 0 1]) ; w341 = rgather [1,1,1,1,1,1,2,2] w323 (\\[i332, i333, i334, i335, i336, i337, i338, i339] -> [i332, i333, i334, i335, i336, i337, i338, i339, i332, i333, 0, 0]) ; w350 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [w340 * w341, rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i342, i343, i344, i345, i346, i347, i348, i349] -> [ifF ((0 <=. i342 + i346 &&* 1 >. i342 + i346) &&* ((0 <=. i343 + i347 &&* 1 >. i343 + i347) &&* ((0 <=. 2 * i344 + i348 &&* 2 >. 2 * i344 + i348) &&* (0 <=. 2 * i345 + i349 &&* 2 >. 2 * i345 + i349)))) 0 1, i342, i343, i344, i345, i346, i347, i348, i349]) ; x355 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; t356 = rtranspose [1,0] (rreplicate 1 (rtranspose [1,0] (rreshape [1,1] (rgather [1,1,1,1] w350 (\\[i351, i352, i353, i354] -> [i351, i352, i353, i354, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * i355)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))]))))) ; m357 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t356) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) ; m360 = rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i358, i359] -> [ifF (m357 ! [i358, i359] <=. rscalar 0.0) 0 1]) ; t361 = rtranspose [1,0] (rreplicate 10 (m360 * m357)) in rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * t361) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject2 (tproject2 u1))))" + @?= "\\x1 -> let w283 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i269, i270, i271, i272, i273, i274, i275] -> [ifF ((0 <=. i269 + i272 &&* 1 >. i269 + i272) &&* ((0 <=. i273 &&* 1 >. i273) &&* ((0 <=. i270 + i274 &&* 4 >. i270 + i274) &&* (0 <=. i271 + i275 &&* 4 >. i271 + i275)))) 0 1])))) ; w284 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i276, i277] -> [i276 + i277]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i278, i279, i280, i281, i282] -> [ifF ((0 <=. i278 + i279 &&* 1 >. i278 + i279) &&* ((0 <=. i280 &&* 1 >. i280) &&* ((0 <=. i281 &&* 2 >. i281) &&* (0 <=. i282 &&* 2 >. i282)))) 0 1, i278, i279, i280, i281, i282])))))) ; w285 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w283 * w284) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; x286 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x287 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x288 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x289 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w306 = rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF (w285 ! [i290, i291, i292, i293, i294, i295, i296, i297, i286, i287, i288, i289] <=. rscalar 0.0) 0 1]) ; w307 = rgather [1,1,2,2,1,1,2,2] w285 (\\[i298, i299, i300, i301, i302, i303, i304, i305] -> [i298, i299, i300, i301, i302, i303, i304, i305, i286, i287, i288, i289]) ; w316 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [w306 * w307, rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i308, i309, i310, i311, i312, i313, i314, i315] -> [ifF ((0 <=. i308 + i312 &&* 1 >. i308 + i312) &&* ((0 <=. i309 + i313 &&* 1 >. i309 + i313) &&* ((0 <=. 2 * i310 + i314 &&* 4 >. 2 * i310 + i314) &&* (0 <=. 2 * i311 + i315 &&* 4 >. 2 * i311 + i315)))) 0 1, i308, i309, i310, i311, i312, i313, i314, i315])))))))) ; x317 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x318 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x319 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x327 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; w342 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w316 (\\[i320, i321, i322, i323, i324, i325, i326] -> [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * i327)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i328, i329, i330, i331, i332, i333, i334] -> [ifF ((0 <=. i328 + i331 &&* 1 >. i328 + i331) &&* ((0 <=. i332 &&* 1 >. i332) &&* ((0 <=. i329 + i333 &&* 2 >. i329 + i333) &&* (0 <=. i330 + i334 &&* 2 >. i330 + i334)))) 0 1, i328, i329, i330, i331, i332, i333, i334])))) ; w343 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i335, i336] -> [i335 + i336]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i337, i338, i339, i340, i341] -> [ifF ((0 <=. i337 + i338 &&* 1 >. i337 + i338) &&* ((0 <=. i339 &&* 1 >. i339) &&* ((0 <=. i340 &&* 2 >. i340) &&* (0 <=. i341 &&* 2 >. i341)))) 0 1, i337, i338, i339, i340, i341])))))) ; w344 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w342 * w343) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; x345 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x346 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x347 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x348 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w365 = rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i349, i350, i351, i352, i353, i354, i355, i356] -> [ifF (w344 ! [i349, i350, i351, i352, i353, i354, i355, i356, i345, i346, i347, i348] <=. rscalar 0.0) 0 1]) ; w366 = rgather [1,1,1,1,1,1,2,2] w344 (\\[i357, i358, i359, i360, i361, i362, i363, i364] -> [i357, i358, i359, i360, i361, i362, i363, i364, i345, i346, i347, i348]) ; w375 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [w365 * w366, rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i367, i368, i369, i370, i371, i372, i373, i374] -> [ifF ((0 <=. i367 + i371 &&* 1 >. i367 + i371) &&* ((0 <=. i368 + i372 &&* 1 >. i368 + i372) &&* ((0 <=. 2 * i369 + i373 &&* 2 >. 2 * i369 + i373) &&* (0 <=. 2 * i370 + i374 &&* 2 >. 2 * i370 + i374)))) 0 1, i367, i368, i369, i370, i371, i372, i373, i374]) ; x380 = stoScalar (sscalar 2) * stoScalar (sscalar 1) ; t381 = rtranspose [1,0] (rreplicate 1 (rtranspose [1,0] (rreshape [1,1] (rgather [1,1,1,1] w375 (\\[i376, i377, i378, i379] -> [i376, i377, i378, i379, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * i380)) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))]))))) ; m382 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t381) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) ; m385 = rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i383, i384] -> [ifF (m382 ! [i383, i384] <=. rscalar 0.0) 0 1]) ; t386 = rtranspose [1,0] (rreplicate 10 (m385 * m382)) in rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * t386) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject2 (tproject2 u1))))" printArtifactPretty renames (simplifyArtifact artifactRev) - @?= "\\m362 x1 -> let w269 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i255, i256, i257, i258, i259, i260, i261] -> [ifF ((0 <=. i255 + i258 &&* 1 >. i255 + i258) &&* ((0 <=. i259 &&* 1 >. i259) &&* ((0 <=. i256 + i260 &&* 4 >. i256 + i260) &&* (0 <=. i257 + i261 &&* 4 >. i257 + i261)))) 0 1])))) ; w271 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w269 * rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i262, i263] -> [i262 + i263]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i264, i265, i266, i267, i268] -> [ifF ((0 <=. i264 + i265 &&* 1 >. i264 + i265) &&* ((0 <=. i266 &&* 1 >. i266) &&* ((0 <=. i267 &&* 2 >. i267) &&* (0 <=. i268 &&* 2 >. i268)))) 0 1, i264, i265, i266, i267, i268]))))))) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; w288 = rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i272, i273, i274, i275, i276, i277, i278, i279] -> [ifF (w271 ! [i272, i273, i274, i275, i276, i277, i278, i279, i272, i273, 0, 0] <=. rscalar 0.0) 0 1]) ; w298 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [w288 * rgather [1,1,2,2,1,1,2,2] w271 (\\[i280, i281, i282, i283, i284, i285, i286, i287] -> [i280, i281, i282, i283, i284, i285, i286, i287, i280, i281, 0, 0]), rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF ((0 <=. i290 + i294 &&* 1 >. i290 + i294) &&* ((0 <=. i291 + i295 &&* 1 >. i291 + i295) &&* ((0 <=. 2 * i292 + i296 &&* 4 >. 2 * i292 + i296) &&* (0 <=. 2 * i293 + i297 &&* 4 >. 2 * i293 + i297)))) 0 1, i290, i291, i292, i293, i294, i295, i296, i297])))))))) ; w321 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w298 (\\[i299, i300, i301, i302, i303, i304, i305] -> [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i307, i308, i309, i310, i311, i312, i313] -> [ifF ((0 <=. i307 + i310 &&* 1 >. i307 + i310) &&* ((0 <=. i311 &&* 1 >. i311) &&* ((0 <=. i308 + i312 &&* 2 >. i308 + i312) &&* (0 <=. i309 + i313 &&* 2 >. i309 + i313)))) 0 1, i307, i308, i309, i310, i311, i312, i313])))) ; w322 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i314, i315] -> [i314 + i315]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i316, i317, i318, i319, i320] -> [ifF ((0 <=. i316 + i317 &&* 1 >. i316 + i317) &&* ((0 <=. i318 &&* 1 >. i318) &&* ((0 <=. i319 &&* 2 >. i319) &&* (0 <=. i320 &&* 2 >. i320)))) 0 1, i316, i317, i318, i319, i320])))))) ; w323 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w321 * w322) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; w340 = rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i324, i325, i326, i327, i328, i329, i330, i331] -> [ifF (w323 ! [i324, i325, i326, i327, i328, i329, i330, i331, i324, i325, 0, 0] <=. rscalar 0.0) 0 1]) ; w350 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [w340 * rgather [1,1,1,1,1,1,2,2] w323 (\\[i332, i333, i334, i335, i336, i337, i338, i339] -> [i332, i333, i334, i335, i336, i337, i338, i339, i332, i333, 0, 0]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i342, i343, i344, i345, i346, i347, i348, i349] -> [ifF ((0 <=. i342 + i346 &&* 1 >. i342 + i346) &&* ((0 <=. i343 + i347 &&* 1 >. i343 + i347) &&* ((0 <=. 2 * i344 + i348 &&* 2 >. 2 * i344 + i348) &&* (0 <=. 2 * i345 + i349 &&* 2 >. 2 * i345 + i349)))) 0 1, i342, i343, i344, i345, i346, i347, i348, i349]) ; t356 = rtranspose [2,0,1] (rreplicate 1 (rreshape [1,1] (rgather [1,1,1,1] w350 (\\[i351, i352, i353, i354] -> [i351, i352, i353, i354, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))])))) ; m357 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t356) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) ; m360 = rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i358, i359] -> [ifF (m357 ! [i358, i359] <=. rscalar 0.0) 0 1]) ; m363 = m360 * rsum (rtranspose [1,2,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * rtranspose [1,0] (rreplicate 1 m362)) ; u387 = rscatter [1,1,2,2] (w340 * rscatter [2,1,1,1,1,1,1,2,2] (rscatter [1,1,1,1,1,1,2,2] (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rsum (rgather [1] (tproject1 (tproject1 (tproject2 u1))) (\\[i634] -> [i634, 0]) * rgather [1] m363 (\\[i631] -> [i631, 0]))))))) (\\[i365, i366, i367, i368] -> [i365, i366, i367, i368, remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w350 ! [i365, i366, i367, i368, 0, 0]) (\\[i622] -> [remF (quotF i622 2) 2, remF i622 2]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w350 ! [i365, i366, i367, i368, 0, 0]) (\\[i623] -> [remF (quotF i623 2) 2, remF i623 2]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w350 ! [i365, i366, i367, i368, 0, 0]) (\\[i624] -> [remF (quotF i624 2) 2, remF i624 2]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rgather [4] (w350 ! [i365, i366, i367, i368, 0, 0]) (\\[i625] -> [remF (quotF i625 2) 2, remF i625 2]))))) (stoScalar (sscalar 2))])) (\\[i370, i371, i372, i373, i374, i375, i376, i377] -> [ifF ((0 <=. i370 + i374 &&* 1 >. i370 + i374) &&* ((0 <=. i371 + i375 &&* 1 >. i371 + i375) &&* ((0 <=. 2 * i372 + i376 &&* 2 >. 2 * i372 + i376) &&* (0 <=. 2 * i373 + i377 &&* 2 >. 2 * i373 + i377)))) 0 1, i370, i371, i372, i373, i374, i375, i376, i377]) ! [0]) (\\[i379, i380, i381, i382, i383, i384, i385, i386] -> [i379, i380, 0, 0]) ; u430 = rscatter [1,1,4,4] (w288 * rscatter [2,1,1,2,2,1,1,2,2] (rscatter [1,1,2,2,1,1,2,2] (rscatter [2,1,2,2,1,1,2,2] (rsum (rgather [1,1,2,2,1,1,2,2] (rgather [2,2,4,1] w322 (\\[i606, i607, i608, i605] -> [i608, 0, i605, i606, i607]) * rgather [2,2,4,1] (u387 ! [0]) (\\[i611, i612, i613, i610] -> [i610, i611, i612])) (\\[i614, i615, i616, i617, i618, i619, i620, i621] -> [remF (quotF (i621 + 2 * i620 + 4 * i619 + 4 * i618 + 4 * i617 + 16 * i615 + 8 * i616) 8) 2, remF (quotF (i621 + 2 * i620 + 4 * i619 + 4 * i618 + 4 * i617 + 16 * i615 + 8 * i616) 4) 2, remF (i621 + 2 * i620 + 4 * i619 + 4 * i618 + 4 * i617 + 16 * i615 + 8 * i616) 4, i614]))) (\\[i397, i398, i399, i400, i401, i402, i403] -> [ifF ((0 <=. i397 + i400 &&* 1 >. i397 + i400) &&* ((0 <=. i401 &&* 1 >. i401) &&* ((0 <=. i398 + i402 &&* 2 >. i398 + i402) &&* (0 <=. i399 + i403 &&* 2 >. i399 + i403)))) 0 1, i397, i398, i399, i400, i401, i402, i403]) ! [0]) (\\[i405, i406, i407, i408, i409, i410, i411] -> [i405, i409, i406, i407, remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407, 0, 0]) (\\[i593] -> [remF (quotF i593 2) 2, remF i593 2]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407, 0, 0]) (\\[i594] -> [remF (quotF i594 2) 2, remF i594 2]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407, 0, 0]) (\\[i595] -> [remF (quotF i595 2) 2, remF i595 2]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rgather [4] (w298 ! [i405, i406, i407, i408, i409, i410, i411, i405, i409, i406, i407, 0, 0]) (\\[i596] -> [remF (quotF i596 2) 2, remF i596 2]))))) (stoScalar (sscalar 2))])) (\\[i413, i414, i415, i416, i417, i418, i419, i420] -> [ifF ((0 <=. i413 + i417 &&* 1 >. i413 + i417) &&* ((0 <=. i414 + i418 &&* 1 >. i414 + i418) &&* ((0 <=. 2 * i415 + i419 &&* 4 >. 2 * i415 + i419) &&* (0 <=. 2 * i416 + i420 &&* 4 >. 2 * i416 + i420)))) 0 1, i413, i414, i415, i416, i417, i418, i419, i420]) ! [0]) (\\[i422, i423, i424, i425, i426, i427, i428, i429] -> [i422, i423, 0, 0]) in tpair (tpair (tpair (rscatter [1,1,2,2] (rscatter [2,1,1,1,2,2] (rsum (rsum (rsum (rgather [1,4,4,1,1,1,2,2] (rgather [4,1,4,4] w269 (\\[i525, i522] -> [i525, i522, 0]) * rreplicate 4 (rgather [1,4,4] u430 (\\[i527] -> [i527, 0]))) (\\[i585, i586, i587, i588, i589, i590, i591, i592] -> [remF (i592 + 2 * i591 + 4 * i590 + 4 * i588 + 4 * i589) 4, i585, i586, i587]))))) (\\[i431, i432, i433, i434, i435] -> [ifF ((0 <=. i431 + i432 &&* 1 >. i431 + i432) &&* ((0 <=. i433 &&* 1 >. i433) &&* ((0 <=. i434 &&* 2 >. i434) &&* (0 <=. i435 &&* 2 >. i435)))) 0 1, i431, i432, i433, i434, i435]) ! [0]) (\\[i437, i438] -> [i437 + i438]), rsum (rsum (rsum (rtranspose [0,2,3,1] u430)))), tpair (rscatter [1,1,2,2] (rscatter [2,1,1,1,2,2] (rsum (rsum (rsum (rgather [1,2,2,1,1,1,2,2] (rgather [4,1,2,2] w321 (\\[i448, i445] -> [i448, i445, 0]) * rreplicate 4 (rgather [1,2,2] u387 (\\[i450] -> [i450, 0]))) (\\[i508, i509, i510, i511, i512, i513, i514, i515] -> [remF (i515 + 2 * i514 + 4 * i513 + 4 * i511 + 4 * i512) 4, i508, i509, i510]))))) (\\[i389, i390, i391, i392, i393] -> [ifF ((0 <=. i389 + i390 &&* 1 >. i389 + i390) &&* ((0 <=. i391 &&* 1 >. i391) &&* ((0 <=. i392 &&* 2 >. i392) &&* (0 <=. i393 &&* 2 >. i393)))) 0 1, i389, i390, i391, i392, i393]) ! [0]) (\\[i395, i396] -> [i395 + i396]), rsum (rsum (rsum (rtranspose [0,2,3,1] u387))))), tpair (tpair (rsum (rtranspose [2,1,0] t356 * rtranspose [2,1,0] (rreplicate 1 m363)), rsum (rtranspose [1,0] m363)), tpair (rsum (rtranspose [2,0,1] (rreplicate 10 (m360 * m357)) * rtranspose [2,1,0] (rreplicate 1 m362)), rsum (rtranspose [1,0] m362))))" + @?= "\\m387 x1 -> let w283 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i269, i270, i271, i272, i273, i274, i275] -> [ifF ((0 <=. i269 + i272 &&* 1 >. i269 + i272) &&* ((0 <=. i273 &&* 1 >. i273) &&* ((0 <=. i270 + i274 &&* 4 >. i270 + i274) &&* (0 <=. i271 + i275 &&* 4 >. i271 + i275)))) 0 1])))) ; w285 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w283 * rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i276, i277] -> [i276 + i277]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i278, i279, i280, i281, i282] -> [ifF ((0 <=. i278 + i279 &&* 1 >. i278 + i279) &&* ((0 <=. i280 &&* 1 >. i280) &&* ((0 <=. i281 &&* 2 >. i281) &&* (0 <=. i282 &&* 2 >. i282)))) 0 1, i278, i279, i280, i281, i282]))))))) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; x286 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x287 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x288 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x289 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w306 = rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF (w285 ! [i290, i291, i292, i293, i294, i295, i296, i297, i286, i287, i288, i289] <=. rscalar 0.0) 0 1]) ; w316 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [w306 * rgather [1,1,2,2,1,1,2,2] w285 (\\[i298, i299, i300, i301, i302, i303, i304, i305] -> [i298, i299, i300, i301, i302, i303, i304, i305, i286, i287, i288, i289]), rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i308, i309, i310, i311, i312, i313, i314, i315] -> [ifF ((0 <=. i308 + i312 &&* 1 >. i308 + i312) &&* ((0 <=. i309 + i313 &&* 1 >. i309 + i313) &&* ((0 <=. 2 * i310 + i314 &&* 4 >. 2 * i310 + i314) &&* (0 <=. 2 * i311 + i315 &&* 4 >. 2 * i311 + i315)))) 0 1, i308, i309, i310, i311, i312, i313, i314, i315])))))))) ; x317 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x318 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x319 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w342 = rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w316 (\\[i320, i321, i322, i323, i324, i325, i326] -> [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i328, i329, i330, i331, i332, i333, i334] -> [ifF ((0 <=. i328 + i331 &&* 1 >. i328 + i331) &&* ((0 <=. i332 &&* 1 >. i332) &&* ((0 <=. i329 + i333 &&* 2 >. i329 + i333) &&* (0 <=. i330 + i334 &&* 2 >. i330 + i334)))) 0 1, i328, i329, i330, i331, i332, i333, i334])))) ; w343 = rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i335, i336] -> [i335 + i336]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i337, i338, i339, i340, i341] -> [ifF ((0 <=. i337 + i338 &&* 1 >. i337 + i338) &&* ((0 <=. i339 &&* 1 >. i339) &&* ((0 <=. i340 &&* 2 >. i340) &&* (0 <=. i341 &&* 2 >. i341)))) 0 1, i337, i338, i339, i340, i341])))))) ; w344 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (w342 * w343) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; x345 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x346 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x347 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x348 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w365 = rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i349, i350, i351, i352, i353, i354, i355, i356] -> [ifF (w344 ! [i349, i350, i351, i352, i353, i354, i355, i356, i345, i346, i347, i348] <=. rscalar 0.0) 0 1]) ; w375 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [w365 * rgather [1,1,1,1,1,1,2,2] w344 (\\[i357, i358, i359, i360, i361, i362, i363, i364] -> [i357, i358, i359, i360, i361, i362, i363, i364, i345, i346, i347, i348]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i367, i368, i369, i370, i371, i372, i373, i374] -> [ifF ((0 <=. i367 + i371 &&* 1 >. i367 + i371) &&* ((0 <=. i368 + i372 &&* 1 >. i368 + i372) &&* ((0 <=. 2 * i369 + i373 &&* 2 >. 2 * i369 + i373) &&* (0 <=. 2 * i370 + i374 &&* 2 >. 2 * i370 + i374)))) 0 1, i367, i368, i369, i370, i371, i372, i373, i374]) ; t381 = rtranspose [2,0,1] (rreplicate 1 (rreshape [1,1] (rgather [1,1,1,1] w375 (\\[i376, i377, i378, i379] -> [i376, i377, i378, i379, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))])))) ; m382 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * t381) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) ; m385 = rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i383, i384] -> [ifF (m382 ! [i383, i384] <=. rscalar 0.0) 0 1]) ; m388 = m385 * rsum (rtranspose [1,2,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * rtranspose [1,0] (rreplicate 1 m387)) ; u412 = roneHot [] (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rsum (w365 * rscatter [2,1,1,1,1,1,1,2,2] (rscatter [1,1,1,1,1,1,2,2] (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rsum (rgather [1] (tproject1 (tproject1 (tproject2 u1))) (\\[i659] -> [i659, 0]) * rgather [1] m388 (\\[i656] -> [i656, 0]))))))) (\\[i390, i391, i392, i393] -> [i390, i391, i392, i393, remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w375 ! [i390, i391, i392, i393, 0, 0]) (\\[i647] -> [remF (quotF i647 2) 2, remF i647 2]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w375 ! [i390, i391, i392, i393, 0, 0]) (\\[i648] -> [remF (quotF i648 2) 2, remF i648 2]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w375 ! [i390, i391, i392, i393, 0, 0]) (\\[i649] -> [remF (quotF i649 2) 2, remF i649 2]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rgather [4] (w375 ! [i390, i391, i392, i393, 0, 0]) (\\[i650] -> [remF (quotF i650 2) 2, remF i650 2]))))) (stoScalar (sscalar 2))])) (\\[i395, i396, i397, i398, i399, i400, i401, i402] -> [ifF ((0 <=. i395 + i399 &&* 1 >. i395 + i399) &&* ((0 <=. i396 + i400 &&* 1 >. i396 + i400) &&* ((0 <=. 2 * i397 + i401 &&* 2 >. 2 * i397 + i401) &&* (0 <=. 2 * i398 + i402 &&* 2 >. 2 * i398 + i402)))) 0 1, i395, i396, i397, i398, i399, i400, i401, i402]) ! [0]))))))))) [i345, i346, i347, i348] ; u455 = roneHot [] (rsum (rsum (rsum (rsum (rsum (rsum (rsum (rsum (w306 * rscatter [2,1,1,2,2,1,1,2,2] (rscatter [1,1,2,2,1,1,2,2] (rscatter [2,1,2,2,1,1,2,2] (rsum (rgather [1,1,2,2,1,1,2,2] (rgather [2,2,4,1] w343 (\\[i631, i632, i633, i630] -> [i633, 0, i630, i631, i632]) * rgather [2,2,4,1] (u412 ! [0]) (\\[i636, i637, i638, i635] -> [i635, i636, i637])) (\\[i639, i640, i641, i642, i643, i644, i645, i646] -> [remF (quotF (i646 + 2 * i645 + 4 * i644 + 4 * i643 + 4 * i642 + 16 * i640 + 8 * i641) 8) 2, remF (quotF (i646 + 2 * i645 + 4 * i644 + 4 * i643 + 4 * i642 + 16 * i640 + 8 * i641) 4) 2, remF (i646 + 2 * i645 + 4 * i644 + 4 * i643 + 4 * i642 + 16 * i640 + 8 * i641) 4, i639]))) (\\[i422, i423, i424, i425, i426, i427, i428] -> [ifF ((0 <=. i422 + i425 &&* 1 >. i422 + i425) &&* ((0 <=. i426 &&* 1 >. i426) &&* ((0 <=. i423 + i427 &&* 2 >. i423 + i427) &&* (0 <=. i424 + i428 &&* 2 >. i424 + i428)))) 0 1, i422, i423, i424, i425, i426, i427, i428]) ! [0]) (\\[i430, i431, i432, i433, i434, i435, i436] -> [i317, i434, i318, i319, remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319, 0, 0]) (\\[i618] -> [remF (quotF i618 2) 2, remF i618 2]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319, 0, 0]) (\\[i619] -> [remF (quotF i619 2) 2, remF i619 2]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rgather [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319, 0, 0]) (\\[i620] -> [remF (quotF i620 2) 2, remF i620 2]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rgather [4] (w316 ! [i430, i431, i432, i433, i434, i435, i436, i317, i434, i318, i319, 0, 0]) (\\[i621] -> [remF (quotF i621 2) 2, remF i621 2]))))) (stoScalar (sscalar 2))])) (\\[i438, i439, i440, i441, i442, i443, i444, i445] -> [ifF ((0 <=. i438 + i442 &&* 1 >. i438 + i442) &&* ((0 <=. i439 + i443 &&* 1 >. i439 + i443) &&* ((0 <=. 2 * i440 + i444 &&* 4 >. 2 * i440 + i444) &&* (0 <=. 2 * i441 + i445 &&* 4 >. 2 * i441 + i445)))) 0 1, i438, i439, i440, i441, i442, i443, i444, i445]) ! [0]))))))))) [i286, i287, i288, i289] in tpair (tpair (tpair (rscatter [1,1,2,2] (rscatter [2,1,1,1,2,2] (rsum (rsum (rsum (rgather [1,4,4,1,1,1,2,2] (rgather [4,1,4,4] w283 (\\[i550, i547] -> [i550, i547, 0]) * rreplicate 4 (rgather [1,4,4] u455 (\\[i552] -> [i552, 0]))) (\\[i610, i611, i612, i613, i614, i615, i616, i617] -> [remF (i617 + 2 * i616 + 4 * i615 + 4 * i613 + 4 * i614) 4, i610, i611, i612]))))) (\\[i456, i457, i458, i459, i460] -> [ifF ((0 <=. i456 + i457 &&* 1 >. i456 + i457) &&* ((0 <=. i458 &&* 1 >. i458) &&* ((0 <=. i459 &&* 2 >. i459) &&* (0 <=. i460 &&* 2 >. i460)))) 0 1, i456, i457, i458, i459, i460]) ! [0]) (\\[i462, i463] -> [i462 + i463]), rsum (rsum (rsum (rtranspose [0,2,3,1] u455)))), tpair (rscatter [1,1,2,2] (rscatter [2,1,1,1,2,2] (rsum (rsum (rsum (rgather [1,2,2,1,1,1,2,2] (rgather [4,1,2,2] w342 (\\[i473, i470] -> [i473, i470, 0]) * rreplicate 4 (rgather [1,2,2] u412 (\\[i475] -> [i475, 0]))) (\\[i533, i534, i535, i536, i537, i538, i539, i540] -> [remF (i540 + 2 * i539 + 4 * i538 + 4 * i536 + 4 * i537) 4, i533, i534, i535]))))) (\\[i414, i415, i416, i417, i418] -> [ifF ((0 <=. i414 + i415 &&* 1 >. i414 + i415) &&* ((0 <=. i416 &&* 1 >. i416) &&* ((0 <=. i417 &&* 2 >. i417) &&* (0 <=. i418 &&* 2 >. i418)))) 0 1, i414, i415, i416, i417, i418]) ! [0]) (\\[i420, i421] -> [i420 + i421]), rsum (rsum (rsum (rtranspose [0,2,3,1] u412))))), tpair (tpair (rsum (rtranspose [2,1,0] t381 * rtranspose [2,1,0] (rreplicate 1 m388)), rsum (rtranspose [1,0] m388)), tpair (rsum (rtranspose [2,0,1] (rreplicate 10 (m385 * m382)) * rtranspose [2,1,0] (rreplicate 1 m387)), rsum (rtranspose [1,0] m387))))" printArtifactPrimalPretty renames (simplifyArtifact artifactRev) - @?= "\\x1 -> let w271 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i255, i256, i257, i258, i259, i260, i261] -> [ifF ((0 <=. i255 + i258 &&* 1 >. i255 + i258) &&* ((0 <=. i259 &&* 1 >. i259) &&* ((0 <=. i256 + i260 &&* 4 >. i256 + i260) &&* (0 <=. i257 + i261 &&* 4 >. i257 + i261)))) 0 1])))) * rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i262, i263] -> [i262 + i263]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i264, i265, i266, i267, i268] -> [ifF ((0 <=. i264 + i265 &&* 1 >. i264 + i265) &&* ((0 <=. i266 &&* 1 >. i266) &&* ((0 <=. i267 &&* 2 >. i267) &&* (0 <=. i268 &&* 2 >. i268)))) 0 1, i264, i265, i266, i267, i268]))))))) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; w298 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i272, i273, i274, i275, i276, i277, i278, i279] -> [ifF (w271 ! [i272, i273, i274, i275, i276, i277, i278, i279, i272, i273, 0, 0] <=. rscalar 0.0) 0 1]) * rgather [1,1,2,2,1,1,2,2] w271 (\\[i280, i281, i282, i283, i284, i285, i286, i287] -> [i280, i281, i282, i283, i284, i285, i286, i287, i280, i281, 0, 0]), rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF ((0 <=. i290 + i294 &&* 1 >. i290 + i294) &&* ((0 <=. i291 + i295 &&* 1 >. i291 + i295) &&* ((0 <=. 2 * i292 + i296 &&* 4 >. 2 * i292 + i296) &&* (0 <=. 2 * i293 + i297 &&* 4 >. 2 * i293 + i297)))) 0 1, i290, i291, i292, i293, i294, i295, i296, i297])))))))) ; w323 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w298 (\\[i299, i300, i301, i302, i303, i304, i305] -> [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w298 ! [i299, i300, i301, i302, i303, i304, i305, i299, i303, i300, i301]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i307, i308, i309, i310, i311, i312, i313] -> [ifF ((0 <=. i307 + i310 &&* 1 >. i307 + i310) &&* ((0 <=. i311 &&* 1 >. i311) &&* ((0 <=. i308 + i312 &&* 2 >. i308 + i312) &&* (0 <=. i309 + i313 &&* 2 >. i309 + i313)))) 0 1, i307, i308, i309, i310, i311, i312, i313])))) * rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i314, i315] -> [i314 + i315]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i316, i317, i318, i319, i320] -> [ifF ((0 <=. i316 + i317 &&* 1 >. i316 + i317) &&* ((0 <=. i318 &&* 1 >. i318) &&* ((0 <=. i319 &&* 2 >. i319) &&* (0 <=. i320 &&* 2 >. i320)))) 0 1, i316, i317, i318, i319, i320]))))))) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; w350 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i324, i325, i326, i327, i328, i329, i330, i331] -> [ifF (w323 ! [i324, i325, i326, i327, i328, i329, i330, i331, i324, i325, 0, 0] <=. rscalar 0.0) 0 1]) * rgather [1,1,1,1,1,1,2,2] w323 (\\[i332, i333, i334, i335, i336, i337, i338, i339] -> [i332, i333, i334, i335, i336, i337, i338, i339, i332, i333, 0, 0]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i342, i343, i344, i345, i346, i347, i348, i349] -> [ifF ((0 <=. i342 + i346 &&* 1 >. i342 + i346) &&* ((0 <=. i343 + i347 &&* 1 >. i343 + i347) &&* ((0 <=. 2 * i344 + i348 &&* 2 >. 2 * i344 + i348) &&* (0 <=. 2 * i345 + i349 &&* 2 >. 2 * i345 + i349)))) 0 1, i342, i343, i344, i345, i346, i347, i348, i349]) ; m357 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * rtranspose [2,0,1] (rreplicate 1 (rreshape [1,1] (rgather [1,1,1,1] w350 (\\[i351, i352, i353, i354] -> [i351, i352, i353, i354, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w350 ! [i351, i352, i353, i354]))))) (stoScalar (sscalar 2))]))))) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) in rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * rtranspose [1,0] (rreplicate 10 (rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i358, i359] -> [ifF (m357 ! [i358, i359] <=. rscalar 0.0) 0 1]) * m357))) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject2 (tproject2 u1))))" + @?= "\\x1 -> let w285 = rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,4,4,4] (rgather [1,4,4,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [7.0,0.0])) (\\[i269, i270, i271, i272, i273, i274, i275] -> [ifF ((0 <=. i269 + i272 &&* 1 >. i269 + i272) &&* ((0 <=. i273 &&* 1 >. i273) &&* ((0 <=. i270 + i274 &&* 4 >. i270 + i274) &&* (0 <=. i271 + i275 &&* 4 >. i271 + i275)))) 0 1])))) * rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject1 (tproject1 u1))) (\\[i276, i277] -> [i276 + i277]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i278, i279, i280, i281, i282] -> [ifF ((0 <=. i278 + i279 &&* 1 >. i278 + i279) &&* ((0 <=. i280 &&* 1 >. i280) &&* ((0 <=. i281 &&* 2 >. i281) &&* (0 <=. i282 &&* 2 >. i282)))) 0 1, i278, i279, i280, i281, i282]))))))) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 4 (rreplicate 4 (tproject2 (tproject1 (tproject1 u1)))))))))))))) ; x286 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x287 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x288 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x289 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w316 = rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rgather [1,1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,1,2,2,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i290, i291, i292, i293, i294, i295, i296, i297] -> [ifF (w285 ! [i290, i291, i292, i293, i294, i295, i296, i297, i286, i287, i288, i289] <=. rscalar 0.0) 0 1]) * rgather [1,1,2,2,1,1,2,2] w285 (\\[i298, i299, i300, i301, i302, i303, i304, i305] -> [i298, i299, i300, i301, i302, i303, i304, i305, i286, i287, i288, i289]), rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i308, i309, i310, i311, i312, i313, i314, i315] -> [ifF ((0 <=. i308 + i312 &&* 1 >. i308 + i312) &&* ((0 <=. i309 + i313 &&* 1 >. i309 + i313) &&* ((0 <=. 2 * i310 + i314 &&* 4 >. 2 * i310 + i314) &&* (0 <=. 2 * i311 + i315 &&* 4 >. 2 * i311 + i315)))) 0 1, i308, i309, i310, i311, i312, i313, i314, i315])))))))) ; x317 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x318 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x319 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w344 = rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rsum (rtranspose [4,1,0,2,3] (rreplicate 1 (rreshape [1,2,2,4] (rgather [1,2,2,1,1,2,2] (rfromVector (fromList [rgather [1,2,2,1,1,2,2] w316 (\\[i320, i321, i322, i323, i324, i325, i326] -> [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w316 ! [i320, i321, i322, i323, i324, i325, i326, i317, i324, i318, i319]))))) (stoScalar (sscalar 2))]), rreplicate 1 (rreplicate 2 (rreplicate 2 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))))])) (\\[i328, i329, i330, i331, i332, i333, i334] -> [ifF ((0 <=. i328 + i331 &&* 1 >. i328 + i331) &&* ((0 <=. i332 &&* 1 >. i332) &&* ((0 <=. i329 + i333 &&* 2 >. i329 + i333) &&* (0 <=. i330 + i334 &&* 2 >. i330 + i334)))) 0 1, i328, i329, i330, i331, i332, i333, i334])))) * rtranspose [4,0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (rreshape [1,4] (rgather [1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,2,2] (tproject1 (tproject2 (tproject1 u1))) (\\[i335, i336] -> [i335 + i336]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0)))))])) (\\[i337, i338, i339, i340, i341] -> [ifF ((0 <=. i337 + i338 &&* 1 >. i337 + i338) &&* ((0 <=. i339 &&* 1 >. i339) &&* ((0 <=. i340 &&* 2 >. i340) &&* (0 <=. i341 &&* 2 >. i341)))) 0 1, i337, i338, i339, i340, i341]))))))) + rtranspose [0,3,1,2] (rreplicate 1 (rreplicate 2 (rreplicate 2 (tproject2 (tproject2 (tproject1 u1)))))))))))))) ; x345 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x346 = stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x347 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; x348 = 2 * stoScalar (sscalar 0) + stoScalar (sscalar 0) ; w375 = rgather [1,1,1,1,1,1,2,2] (rfromVector (fromList [rgather [1,1,1,1,1,1,2,2] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i349, i350, i351, i352, i353, i354, i355, i356] -> [ifF (w344 ! [i349, i350, i351, i352, i353, i354, i355, i356, i345, i346, i347, i348] <=. rscalar 0.0) 0 1]) * rgather [1,1,1,1,1,1,2,2] w344 (\\[i357, i358, i359, i360, i361, i362, i363, i364] -> [i357, i358, i359, i360, i361, i362, i363, i364, i345, i346, i347, i348]), rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 1 (rreplicate 2 (rreplicate 2 (rscalar 0.0))))))))])) (\\[i367, i368, i369, i370, i371, i372, i373, i374] -> [ifF ((0 <=. i367 + i371 &&* 1 >. i367 + i371) &&* ((0 <=. i368 + i372 &&* 1 >. i368 + i372) &&* ((0 <=. 2 * i369 + i373 &&* 2 >. 2 * i369 + i373) &&* (0 <=. 2 * i370 + i374 &&* 2 >. 2 * i370 + i374)))) 0 1, i367, i368, i369, i370, i371, i372, i373, i374]) ; m382 = rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject1 (tproject2 u1)))) * rtranspose [2,0,1] (rreplicate 1 (rreshape [1,1] (rgather [1,1,1,1] w375 (\\[i376, i377, i378, i379] -> [i376, i377, i378, i379, remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * (stoScalar (sscalar 2) * stoScalar (sscalar 1)))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2) * stoScalar (sscalar 2))) (stoScalar (sscalar 1)), remF (quotF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))) (stoScalar (sscalar 2)), remF (stoScalar (sfromR (rmaxIndex (rreshape [4] (w375 ! [i376, i377, i378, i379]))))) (stoScalar (sscalar 2))]))))) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject1 (tproject2 u1)))) in rsum (rtranspose [2,1,0] (rreplicate 1 (tproject1 (tproject2 (tproject2 u1)))) * rtranspose [1,0] (rreplicate 10 (rgather [1,1] (tconcrete (FTKR [2] FTKScalar) (rfromListLinear [2] [0.0,1.0])) (\\[i383, i384] -> [ifF (m382 ! [i383, i384] <=. rscalar 0.0) 0 1]) * m382))) + rtranspose [1,0] (rreplicate 1 (tproject2 (tproject2 (tproject2 u1))))" diff --git a/test/simplified/TestRevFwdFold.hs b/test/simplified/TestRevFwdFold.hs index 53b84049f..4a1923075 100644 --- a/test/simplified/TestRevFwdFold.hs +++ b/test/simplified/TestRevFwdFold.hs @@ -662,7 +662,7 @@ testSin0Fold0S = do assertEqualUpToEpsilon' 1e-10 (rscalar 1.0 :: RepN (TKR 0 Double)) (rev' (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[] Double) - f x0 = sfold @f @Double @Double @'[] @'[] @0 + f x0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[] @'[] @0 (\x _a -> sin x) x0 (srepl 0) in rfromS . f . sfromR) (rscalar 1.1)) @@ -739,7 +739,7 @@ testSin0Fold6S = do assertEqualUpToEpsilon' 1e-10 (rscalar 6 :: RepN (TKR 0 Double)) (rev' (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 1] Double) - f a0 = sfold @f @Double @Double @'[2, 1] @'[] @2 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 1] @'[] @2 (\x a -> str $ str x + sreplicate @_ @1 (sreplicate @_ @2 a)) @@ -752,7 +752,7 @@ testSin0Fold7S = do assertEqualUpToEpsilon' 1e-10 (rscalar 250 :: RepN (TKR 0 Double)) (rev' (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 5] Double) - f a0 = sfold @f @Double @Double @'[2, 5] @'[] @2 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 5] @'[] @2 (\x _a -> str $ sreplicate @_ @5 $ ssum (str x)) (sreplicate @_ @2 (sreplicate @_ @5 a0)) (sreplicate @_ @2 a0) @@ -763,7 +763,7 @@ testSin0Fold8S = do assertEqualUpToEpsilon' 1e-10 (rscalar (-2.200311410593445) :: RepN (TKR 0 Double)) (rev' (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 5] Double) - f a0 = sfold @f @Double @Double @'[2, 5] @'[] @3 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 5] @'[] @3 (\x a -> str $ sreplicate @_ @5 $ atan2F (ssum (str $ sin x)) (sreplicate @_ @2 @@ -802,7 +802,7 @@ testSin0Fold8Srev = do assertEqualUpToEpsilon 1e-10 (rscalar (-2.200311410593445) :: RepN (TKR 0 Double)) (rrev1 (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 5] Double) - f a0 = sfold @f @Double @Double @'[2, 5] @'[] @3 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 5] @'[] @3 (\x a -> str $ sreplicate @_ @5 $ atan2F (ssum (str $ sin x)) (sreplicate @_ @2 @@ -816,7 +816,7 @@ testSin0Fold8Srev2 = do let h = srev1 @(ADVal RepN) (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 5] Double) - f a0 = sfold @f @Double @Double @'[2, 5] @'[] @3 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 5] @'[] @3 (\x a -> str $ sreplicate @_ @5 $ atan2F (ssum (str $ sin x)) (sreplicate @_ @2 @@ -833,7 +833,7 @@ testSin0Fold182Srev = do assertEqualUpToEpsilon 1e-10 (rscalar (-0.4409160296923509) :: RepN (TKR 0 Double)) (rrev1 (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[5] Double) - f a0 = sfold @f @Double @Double @'[5] @'[] @1 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[5] @'[] @1 (\_x a -> atan2F (sreplicate @_ @5 a) (sreplicate @_ @5 $ sin (ssum $ sreplicate @_ @7 a))) @@ -846,7 +846,7 @@ testSin0Fold182SrevPP = do resetVarCounter let a1 = rrev1 @(AstTensor AstMethodLet PrimalSpan) (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[5] Double) - f a0 = sfold @f @Double @Double @'[5] @'[] @1 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[5] @'[] @1 (\_x a -> atan2F (sreplicate @_ @5 a) (sreplicate @_ @5 $ sin (ssum $ sreplicate @_ @7 a))) @@ -861,7 +861,7 @@ testSin0Fold18Srev = do assertEqualUpToEpsilon 1e-10 (rscalar (-2.4026418024701366) :: RepN (TKR 0 Double)) (rrev1 (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 5] Double) - f a0 = sfold @f @Double @Double @'[2, 5] @'[] @2 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 5] @'[] @2 (\x a -> str $ sreplicate @_ @5 $ atan2F (ssum (str $ sin x)) (sreplicate @_ @2 @@ -901,7 +901,7 @@ testSin0Fold8Sfwd = do (rconcrete $ Nested.rfromListPrimLinear [2, 5] (replicate 10 (-0.2200311410593445))) (rfwd1 @RepN (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 5] Double) - f a0 = sfold @f @Double @Double @'[2, 5] @'[] @3 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 5] @'[] @3 (\x a -> str $ sreplicate @_ @5 $ atan2F (ssum (str $ sin x)) (sreplicate @_ @2 @@ -915,7 +915,7 @@ testSin0Fold8Sfwd2 = do let h = rfwd1 @(ADVal RepN) (let f :: forall f. ADReady f => f (TKS '[] Double) -> f (TKS '[2, 5] Double) - f a0 = sfold @f @Double @Double @'[2, 5] @'[] @3 + f a0 = sfold @f @(TKScalar Double) @(TKScalar Double) @'[2, 5] @'[] @3 (\x a -> str $ sreplicate @_ @5 $ atan2F (ssum (str $ sin x)) (sreplicate @_ @2 @@ -1141,7 +1141,7 @@ testSin0Scan1Rev2PPA = do let (art, _) = revArtifactAdapt True - (\x0 -> rscan (\x a -> sin x - a) x0 + (\x0 -> rscan @_ @(TKScalar Double) (\x a -> sin x - a) x0 (rconcrete (Nested.rfromListPrimLinear @Double @1 [2] [5, 7]))) (rscalar 1.1) printArtifactPretty IM.empty (simplifyArtifact art)