{-# LANGUAGE OverloadedLists #-}
{-# OPTIONS_GHC -fno-cse #-}
-- | Assorted rather low rank tensor tests.
module TestAdaptorSimplified
  ( testTrees
  ) where

import Prelude

import Data.Int (Int64)
import Data.Kind (Type)
import Data.List.NonEmpty qualified as NonEmpty
import Foreign.C (CInt)
import GHC.Exts (IsList (..))
import GHC.TypeLits (KnownNat)
import Test.Tasty
import Test.Tasty.HUnit hiding (assert)

import Data.Array.Nested qualified as Nested
import Data.Array.Nested.Mixed.Shape
import Data.Array.Nested.Ranked.Shape
import Data.Array.Nested.Shaped.Shape

import HordeAd
import HordeAd.Core.Adaptor
import HordeAd.Core.AstEnv
import HordeAd.Core.AstFreshId (funToAst, resetVarCounter)
import HordeAd.Core.AstInterpret
import HordeAd.Core.DeltaFreshId (resetIdCounter)

import CrossTesting
import EqEpsilon

testTrees :: [TestTree]
testTrees :: [TestTree]
testTrees =
  [ [Char] -> Assertion -> TestTree
testCase [Char]
"2zeroZ" Assertion
testZeroZ
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zeroS" Assertion
testZeroS
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2CFwdZeroS" Assertion
testCFwdZeroS
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2FwdZeroS" Assertion
testFwdZeroS
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero2S" Assertion
testZero2S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2CFwdZero2S" Assertion
testCFwdZero2S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2FwdZero2S" Assertion
testFwdZero2S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero3S" Assertion
testZero3S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2CFwdZero3S" Assertion
testCFwdZero3S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2FwdZero3S" Assertion
testFwdZero3S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero4s" Assertion
testZero4s
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero5S" Assertion
testZero5S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero6S" Assertion
testZero6S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero7S" Assertion
testZero7S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero8" Assertion
testZero8
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero9S" Assertion
testZero9S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2CFwdZero9S" Assertion
testCFwdZero9S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2FwdZero9S" Assertion
testFwdZero9S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero10S" Assertion
testZero10S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2CFwdZero10S" Assertion
testCFwdZero10S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2FwdZero10S" Assertion
testFwdZero10S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2zero11S" Assertion
testZero11S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2CFwdZero11S" Assertion
testCFwdZero11S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2FwdZero11S" Assertion
testFwdZero11S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2piecewiseLinear" Assertion
testPiecewiseLinear
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2piecewiseLinearPP" Assertion
testPiecewiseLinearPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2piecewiseLinear2" Assertion
testPiecewiseLinear2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2piecewiseLinear2PP" Assertion
testPiecewiseLinear2PP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleaf" Assertion
testOverleaf
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleafInt64n" Assertion
testOverleafInt64n
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleafCIntn" Assertion
testOverleafCIntn
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleafCIntToFloatn" Assertion
testOverleafCIntToFloatn
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleafInt64p" Assertion
testOverleafInt64p
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleafCIntp" Assertion
testOverleafCIntp
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleafCIntToFloatp" Assertion
testOverleafCIntToFloatp
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2overleafPP" Assertion
testOverleafPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2foo" Assertion
testFoo
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradDouble" Assertion
testGradFooDouble
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooMatrix" Assertion
testFooMatrix
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradMatrix" Assertion
testGradFooMatrix
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooLetGradMatrixPP" Assertion
testGradFooLetMatrixPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradMatrixVjp" Assertion
testGradFooMatrixVjp
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradMatrixRev" Assertion
testGradFooMatrixRev
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooLetGradMatrixSimpPP" Assertion
testGradFooLetMatrixSimpPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooLetGradMatrixSimpRPP" Assertion
testGradFooLetMatrixSimpRPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooSumMatrix" Assertion
testfooSumMatrix
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradMatrix2" Assertion
testGradFooMatrix2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradMatrixPP" Assertion
testGradFooMatrixPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradMatrixSimpPP" Assertion
testGradFooMatrixSimpPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradScalar" Assertion
testGradFooScalar
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooGradCScalar" Assertion
testGradCFooScalar
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooS" Assertion
testFooS
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooSToFloat" Assertion
testFooSToFloat
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooSBoth" Assertion
testFooSBoth
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooBoth" Assertion
testFooBoth
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2trustVstackConcatRepl10" Assertion
testTrustVstackConcatRepl10
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2trustVstackConcatIota10" Assertion
testTrustVstackConcatIota10
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2trustVstackConcatReplIota10" Assertion
testTrustVstackConcatReplIota10
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackWarmup" Assertion
testVstackWarmup
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackConcatConcrete" Assertion
testVstackConcatConcrete
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildConcrete" Assertion
testVstackBuildConcrete
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackConcatAst" Assertion
testVstackConcatAst
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildAst" Assertion
testVstackBuildAst
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildAstSimp" Assertion
testVstackBuildAstSimp
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildAstPP" Assertion
testVstackBuildAstPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackConcatConcrete2" Assertion
testVstackConcatConcrete2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildConcrete2" Assertion
testVstackBuildConcrete2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackConcatAst2" Assertion
testVstackConcatAst2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildAst2" Assertion
testVstackBuildAst2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildAstSimp2" Assertion
testVstackBuildAstSimp2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2vstackBuildAstPP2" Assertion
testVstackBuildAstPP2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooPP" Assertion
testFooPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooLet" Assertion
testFooLet
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooLetPP" Assertion
testFooLetPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listProdPP" Assertion
testListProdPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listProdrPP" Assertion
testListProdrPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listProdrLongPP" Assertion
testListProdrLongPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listProd" Assertion
testListProd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listProdr" Assertion
testListProdr
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listSumrPP" Assertion
testListSumrPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listSum2rPP" Assertion
testListSum2rPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listSum22rPP" Assertion
testListSum22rPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listSumk22rPP" Assertion
testListSumk22rPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listSum2xpyrPP" Assertion
testListSum2xpyrPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listSum2xyrPP" Assertion
testListSum2xyrPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2list2xyPP" Assertion
test2xyPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2listSum23rPP" Assertion
testListSum23rPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2list23PP" Assertion
test23PP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluPP" Assertion
testReluPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluPP2" Assertion
testReluPP2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimpler" Assertion
testReluSimpler
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimplerPP" Assertion
testReluSimplerPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimplerPP2" Assertion
testReluSimplerPP2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimplerPP3" Assertion
testReluSimplerPP3
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimpler3" Assertion
testReluSimpler3
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimplerPP4" Assertion
testReluSimplerPP4
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimpler4" Assertion
testReluSimpler4
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimplerPP4s" Assertion
testReluSimplerPP4s
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimplerPP4s2" Assertion
testReluSimplerPP4s2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimpler4s" Assertion
testReluSimpler4s
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimplerPP7s2" Assertion
testReluSimplerPP7s2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluSimpler7s" Assertion
testReluSimpler7s
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluMax" Assertion
testReluMax
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluMaxPP" Assertion
testReluMaxPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluMaxPP2" Assertion
testReluMaxPP2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2reluMax3" Assertion
testReluMax3
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2dot1PP" Assertion
testDot1PP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2dot2PP" Assertion
testDot2PP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2matvecmulPP" Assertion
testMatvecmulPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2matmul2PP" Assertion
testMatmul2PP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2matmul2FromMatvecmulPP" Assertion
testMatmul2FromMatvecmulPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2matmul2PaperPP" Assertion
testMatmul2PaperPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2matmul2PPS" Assertion
testMatmul2PPS
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2addSpeedBig" Assertion
testAddSpeedBig
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2matmul2SpeedBig" Assertion
testMatmul2SpeedBig
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2bar" Assertion
testBar
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barS" Assertion
testBarS
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2bar2S" Assertion
testBar2S
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barCFwd" Assertion
testBarCFwd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barFwd" Assertion
testBarFwd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2baz old to force fooFromPrimal" Assertion
testBaz
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2baz if repetition breaks things" Assertion
testBaz
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2baz again with renumbered terms" Assertion
testBazRenumbered
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooD T Double [1.1, 2.2, 3.3]" Assertion
testFooD
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooBuildDt" Assertion
testFooBuildDt
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooBuildCFwd" Assertion
testFooBuildCFwd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooBuildFwd" Assertion
testFooBuildFwd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooBuild" Assertion
testFooBuild
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2fooNoGo0" Assertion
testFooNoGo0
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2nestedBuildMap1" Assertion
testNestedBuildMap1
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2nestedSumBuild" Assertion
testNestedSumBuild
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2nestedBuildIndex" Assertion
testNestedBuildIndex
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluDt" Assertion
testBarReluDt
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barRelu" Assertion
testBarRelu
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barRelu3" Assertion
testBarRelu3
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMaxDt" Assertion
testBarReluMaxDt
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMax" Assertion
testBarReluMax
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMax30" Assertion
testBarReluMax30
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMax31" Assertion
testBarReluMax31
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMax3CFwd" Assertion
testBarReluMax3CFwd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMax3FwdS" Assertion
testBarReluMax3FwdS
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMax3FwdFrom" Assertion
testBarReluMax3FwdFrom
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2barReluMax3FwdR" Assertion
testBarReluMax3FwdR
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2F1" Assertion
testF1
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2F11" Assertion
testF11
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2F2" Assertion
testF2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2F21" Assertion
testF21
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2F2CFwd" Assertion
testF2CFwd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2F2Fwd" Assertion
testF2Fwd
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2braidedBuilds1" Assertion
testBraidedBuilds1
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2recycled1" Assertion
testRecycled1
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild1" Assertion
testConcatBuild1
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild2" Assertion
testConcatBuild2
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild3" Assertion
testConcatBuild3
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild4" Assertion
testConcatBuild4
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild5" Assertion
testConcatBuild5
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild6" Assertion
testConcatBuild6
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild7" Assertion
testConcatBuild7
--  , testCase "2concatBuild8" testConcatBuild8
--  , testCase "2concatBuild9" testConcatBuild9
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild10" Assertion
testConcatBuild10
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild11" Assertion
testConcatBuild11
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2concatBuild12" Assertion
testConcatBuild12
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2emptyArgs0" Assertion
testEmptyArgs0
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2emptyArgs1" Assertion
testEmptyArgs1
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2emptyArgs4" Assertion
testEmptyArgs4
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2filterPositiveFail" Assertion
testFilterPositiveFail
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2blowupPP" Assertion
fblowupPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2blowup2LetPP" Assertion
fblowupLetPP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2blowup2LetPP23" Assertion
fblowupLetPP23
  , [Char] -> Assertion -> TestTree
testCase [Char]
"2blowup2LetPP10" Assertion
fblowupLetPP10
  , Item [TestTree]
TestTree
blowupTests
  , [Char] -> Assertion -> TestTree
testCase [Char]
"22concatBuild3PP" Assertion
testConcatBuild3PP
  , [Char] -> Assertion -> TestTree
testCase [Char]
"22concatBuild3PP2" Assertion
testConcatBuild3PP2
  ]

testZeroZ :: Assertion
testZeroZ :: Assertion
testZeroZ =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 (let f :: forall f. ADReady f => f (TKR 0 Double) -> f (TKR 0 Double)
                          f :: forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
f = f (TKR 0 Double) -> f (TKR 0 Double) -> f (TKR 0 Double)
forall a b. a -> b -> a
const (Double -> f (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3)
                      in f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
f) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42))

testZeroS :: Assertion
testZeroS :: Assertion
testZeroS =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [])
    ((ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double)
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> DValue
     (ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKS ('[] @Natural) r)
-> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> (ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double)
    -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double)
 -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double)
    -> ADVal
         Concrete
         (TKS
            ((':)
               @Natural
               0
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
            Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            let f :: ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double)
                  -> ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double)
                f :: ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3)
            in ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f) (Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42))

testCFwdZeroS :: Assertion
testCFwdZeroS :: Assertion
testCFwdZeroS =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [])
    ((ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double)
 -> ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> DValue
     (ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> DValue
     (ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Concrete
     (ADTensorKind
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp (let f :: ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double)
                 -> ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double)
               f :: ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3)
           in ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f) Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
DValue
  (ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double))
42 Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
DValue
  (ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double))
41)

testFwdZeroS :: Assertion
testFwdZeroS :: Assertion
testFwdZeroS =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [])
    ((AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double)
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Concrete
     (ADTensorKind
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp (let f :: AstTensor AstMethodLet FullSpan (TKS '[0, 2, 4, 0, 1] Double)
                -> AstTensor AstMethodLet FullSpan (TKS '[0, 2, 4, 0, 1] Double)
              f :: AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3)
          in AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f) (Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42) (Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
41))

testZero2S :: Assertion
testZero2S :: Assertion
testZero2S =
  Rational
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ('[] @Natural) Double
 -> Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[] ShS ('[] @Natural)
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
1])
    ((ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> DValue (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS @_ @Double (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
    -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
           let f :: a -> a
               f :: forall a. a -> a
f = a -> a
forall a. a -> a
id
           in ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall a. a -> a
f) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42))

testCFwdZero2S :: Assertion
testCFwdZero2S :: Assertion
testCFwdZero2S =
  Rational
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ('[] @Natural) Double
 -> Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[] ShS ('[] @Natural)
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
41])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp @_ @(TKS '[] Double)
          (let f :: a -> a
               f :: forall a. a -> a
f = a -> a
forall a. a -> a
id
           in ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall a. a -> a
f) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
41))

testFwdZero2S :: Assertion
testFwdZero2S :: Assertion
testFwdZero2S =
  Rational
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ('[] @Natural) Double
 -> Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[] ShS ('[] @Natural)
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
41])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp @_ @(TKS '[] Double)
          (let f :: a -> a
               f :: forall a. a -> a
f = a -> a
forall a. a -> a
id
           in AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall a. a -> a
f) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
41))

testZero3S :: Assertion
testZero3S :: Assertion
testZero3S =
  Rational
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
 -> Concrete
      (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> Shaped
     ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[33, 2] ShS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS (Int -> Double -> [Double]
forall a. Int -> a -> [a]
replicate Int
66 Double
3.6174114266850617))
    ((ADVal
   Concrete
   (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal
        Concrete
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> DValue
     (ADVal
        Concrete
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKS ('[] @Natural) r)
-> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> (ADVal
      Concrete
      (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
    -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ADVal
     Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal
  Concrete
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (ADVal
   Concrete
   (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
 -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (ADVal
      Concrete
      (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
    -> ADVal
         Concrete
         (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> ADVal
     Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\ADVal
  Concrete
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x -> forall a. RealFloatH a => (a, a) -> a
barF @(ADVal Concrete (TKS '[33, 2] Double)) (ADVal
  Concrete
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x, ADVal
  Concrete
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x))) (Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1))

testCFwdZero3S :: Assertion
testCFwdZero3S :: Assertion
testCFwdZero3S =
  Rational
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
 -> Concrete
      (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> Shaped
     ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[33, 2] ShS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS (Int -> Double -> [Double]
forall a. Int -> a -> [a]
replicate Int
66 Double
3.9791525693535674))
    ((ADVal
   Concrete
   (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
 -> ADVal
      Concrete
      (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> DValue
     (ADVal
        Concrete
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> DValue
     (ADVal
        Concrete
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> Concrete
     (ADTensorKind
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp (\ADVal
  Concrete
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x -> forall a. RealFloatH a => (a, a) -> a
barF @(ADVal Concrete (TKS '[33, 2] Double)) (ADVal
  Concrete
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x, ADVal
  Concrete
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x)) (Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1) (Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1))

testFwdZero3S :: Assertion
testFwdZero3S :: Assertion
testFwdZero3S =
  Rational
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
 -> Concrete
      (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> Shaped
     ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[33, 2] ShS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS (Int -> Double -> [Double]
forall a. Int -> a -> [a]
replicate Int
66 Double
3.9791525693535674))
    ((AstTensor
   AstMethodLet
   FullSpan
   (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
-> Concrete
     (ADTensorKind
        (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp (\AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x -> forall a. RealFloatH a => (a, a) -> a
barF @(AstTensor AstMethodLet FullSpan (TKS '[33, 2] Double)) (AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x, AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
x)) (Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1) (Double
-> Concrete
     (TKS ((':) @Natural 33 ((':) @Natural 2 ('[] @Natural))) Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1))

testZero4s :: Assertion
testZero4s :: Assertion
testZero4s =
  Rational
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ('[] @Natural) Double
 -> Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[] ShS ('[] @Natural)
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
0])
    (forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad @(AstTensor AstMethodLet FullSpan (TKS '[] Double))
          (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS @_ @Double (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
          let f :: b
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
f = AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> b
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. a -> b -> a
const (Double
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3)
          in AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall {b}.
b
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
f) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42))

testZero5S :: Assertion
testZero5S :: Assertion
testZero5S =
  Rational
-> Concrete (TKS ((':) @Natural 44 ('[] @Natural)) Double)
-> Concrete (TKS ((':) @Natural 44 ('[] @Natural)) Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped ((':) @Natural 44 ('[] @Natural)) Double
-> Concrete (TKS ((':) @Natural 44 ('[] @Natural)) Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 44 ('[] @Natural)) Double
 -> Concrete (TKS ((':) @Natural 44 ('[] @Natural)) Double))
-> Shaped ((':) @Natural 44 ('[] @Natural)) Double
-> Concrete (TKS ((':) @Natural 44 ('[] @Natural)) Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[44] ShS ((':) @Natural 44 ('[] @Natural))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS (Int -> Double -> [Double]
forall a. Int -> a -> [a]
replicate Int
44 Double
1))
    ((AstTensor
   AstMethodLet
   FullSpan
   (TKS ((':) @Natural 44 ('[] @Natural)) Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS ((':) @Natural 44 ('[] @Natural)) Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS ((':) @Natural 44 ('[] @Natural)) Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 44 ('[] @Natural)) Double)
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 44 ('[] @Natural)) Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 44 ('[] @Natural)) Double)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (AstTensor
   AstMethodLet
   FullSpan
   (TKS ((':) @Natural 44 ('[] @Natural)) Double)
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 44 ('[] @Natural)) Double)
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS ((':) @Natural 44 ('[] @Natural)) Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 44 ('[] @Natural)) Double)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
           let f :: a -> a
               f :: forall a. a -> a
f = a -> a
forall a. a -> a
id
           in forall a. a -> a
f @(AstTensor AstMethodLet FullSpan (TKS '[44] Double))) (Double -> Concrete (TKS ((':) @Natural 44 ('[] @Natural)) Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42))

testZero6S :: Assertion
testZero6S :: Assertion
testZero6S =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     2
     ((':)
        @Natural
        2
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 1
                 ((':)
                    @Natural
                    1
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   2
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      2
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            1
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               1
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            11
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                111
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               2
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  2
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ('[]
                                                                                                                                                                                                                                                                                                           @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      2
      ((':)
         @Natural
         2
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  1
                  ((':)
                     @Natural
                     1
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    2
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       2
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             1
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                1
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             11
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                1
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   1
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 111
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                2
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   2
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ('[]
                                                                                                                                                                                                                                                                                                            @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     2
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       1
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                2
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                1
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   11
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       111
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                                               2
                                                                                                                                                                                                                                                                                                               ('[]
                                                                                                                                                                                                                                                                                                                  @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
         Double))
-> Shaped
     ((':)
        @Natural
        2
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    1
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      2
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               1
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               11
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   111
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  2
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ('[]
                                                                                                                                                                                                                                                                                                              @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[2, 2, 2, 2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2, 2, 2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,111,1,1,1,1, 2, 2, 2, 2] ShS
  ((':)
     @Natural
     2
     ((':)
        @Natural
        2
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 1
                 ((':)
                    @Natural
                    1
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   2
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      2
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            1
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               1
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            11
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                111
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               2
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  2
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ('[]
                                                                                                                                                                                                                                                                                                           @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS (Int -> Double -> [Double]
forall a. Int -> a -> [a]
replicate ([Int] -> Int
forall a. Num a => [a] -> a
forall (t :: Type -> Type) a. (Foldable t, Num a) => t a -> a
product ([Int
Item [Int]
2, Int
Item [Int]
2, Int
Item [Int]
2, Int
Item [Int]
2, Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1, Int
Item [Int]
2, Int
Item [Int]
2, Int
Item [Int]
2, Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
11,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
111,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1,Int
Item [Int]
1, Int
Item [Int]
2, Int
Item [Int]
2, Int
Item [Int]
2, Int
Item [Int]
2] :: [Int])) Double
3.6174114266850617))
    ((AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         2
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     1
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       2
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                1
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                11
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   1
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    111
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   2
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ('[]
                                                                                                                                                                                                                                                                                                               @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
      Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       2
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         1
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  2
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     11
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         111
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                                                 2
                                                                                                                                                                                                                                                                                                                 ('[]
                                                                                                                                                                                                                                                                                                                    @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
           Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       2
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         1
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  2
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     11
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         111
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                                                 2
                                                                                                                                                                                                                                                                                                                 ('[]
                                                                                                                                                                                                                                                                                                                    @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     2
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       1
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                2
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                1
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   11
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       111
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                                               2
                                                                                                                                                                                                                                                                                                               ('[]
                                                                                                                                                                                                                                                                                                                  @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
         Double)
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 @'[2, 2, 2, 2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2, 2, 2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,111,1,1,1,1, 2, 2, 2, 2] @(TKScalar Double) (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         2
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     1
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       2
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                1
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                11
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   1
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    111
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   2
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ('[]
                                                                                                                                                                                                                                                                                                               @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
      Double)
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     2
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       1
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                2
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                1
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   11
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       111
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                                               2
                                                                                                                                                                                                                                                                                                               ('[]
                                                                                                                                                                                                                                                                                                                  @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
         Double)
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     2
                     ((':)
                        @Natural
                        2
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       1
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          1
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                2
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   2
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                1
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   1
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      11
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          111
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                                               2
                                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                                  2
                                                                                                                                                                                                                                                                                                                  ('[]
                                                                                                                                                                                                                                                                                                                     @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
            Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        2
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    1
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      2
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               1
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               11
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   111
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  2
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ('[]
                                                                                                                                                                                                                                                                                                              @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
     Double)
x -> (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         2
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     1
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       2
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                1
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                11
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   1
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    111
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   2
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ('[]
                                                                                                                                                                                                                                                                                                               @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
      Double),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         2
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     1
                     ((':)
                        @Natural
                        1
                        ((':)
                           @Natural
                           1
                           ((':)
                              @Natural
                              1
                              ((':)
                                 @Natural
                                 1
                                 ((':)
                                    @Natural
                                    1
                                    ((':)
                                       @Natural
                                       1
                                       ((':)
                                          @Natural
                                          1
                                          ((':)
                                             @Natural
                                             1
                                             ((':)
                                                @Natural
                                                1
                                                ((':)
                                                   @Natural
                                                   1
                                                   ((':)
                                                      @Natural
                                                      1
                                                      ((':)
                                                         @Natural
                                                         1
                                                         ((':)
                                                            @Natural
                                                            1
                                                            ((':)
                                                               @Natural
                                                               1
                                                               ((':)
                                                                  @Natural
                                                                  1
                                                                  ((':)
                                                                     @Natural
                                                                     1
                                                                     ((':)
                                                                        @Natural
                                                                        1
                                                                        ((':)
                                                                           @Natural
                                                                           1
                                                                           ((':)
                                                                              @Natural
                                                                              1
                                                                              ((':)
                                                                                 @Natural
                                                                                 1
                                                                                 ((':)
                                                                                    @Natural
                                                                                    1
                                                                                    ((':)
                                                                                       @Natural
                                                                                       1
                                                                                       ((':)
                                                                                          @Natural
                                                                                          1
                                                                                          ((':)
                                                                                             @Natural
                                                                                             1
                                                                                             ((':)
                                                                                                @Natural
                                                                                                1
                                                                                                ((':)
                                                                                                   @Natural
                                                                                                   1
                                                                                                   ((':)
                                                                                                      @Natural
                                                                                                      1
                                                                                                      ((':)
                                                                                                         @Natural
                                                                                                         1
                                                                                                         ((':)
                                                                                                            @Natural
                                                                                                            1
                                                                                                            ((':)
                                                                                                               @Natural
                                                                                                               1
                                                                                                               ((':)
                                                                                                                  @Natural
                                                                                                                  1
                                                                                                                  ((':)
                                                                                                                     @Natural
                                                                                                                     1
                                                                                                                     ((':)
                                                                                                                        @Natural
                                                                                                                        1
                                                                                                                        ((':)
                                                                                                                           @Natural
                                                                                                                           1
                                                                                                                           ((':)
                                                                                                                              @Natural
                                                                                                                              1
                                                                                                                              ((':)
                                                                                                                                 @Natural
                                                                                                                                 1
                                                                                                                                 ((':)
                                                                                                                                    @Natural
                                                                                                                                    1
                                                                                                                                    ((':)
                                                                                                                                       @Natural
                                                                                                                                       2
                                                                                                                                       ((':)
                                                                                                                                          @Natural
                                                                                                                                          2
                                                                                                                                          ((':)
                                                                                                                                             @Natural
                                                                                                                                             2
                                                                                                                                             ((':)
                                                                                                                                                @Natural
                                                                                                                                                1
                                                                                                                                                ((':)
                                                                                                                                                   @Natural
                                                                                                                                                   1
                                                                                                                                                   ((':)
                                                                                                                                                      @Natural
                                                                                                                                                      1
                                                                                                                                                      ((':)
                                                                                                                                                         @Natural
                                                                                                                                                         1
                                                                                                                                                         ((':)
                                                                                                                                                            @Natural
                                                                                                                                                            1
                                                                                                                                                            ((':)
                                                                                                                                                               @Natural
                                                                                                                                                               1
                                                                                                                                                               ((':)
                                                                                                                                                                  @Natural
                                                                                                                                                                  1
                                                                                                                                                                  ((':)
                                                                                                                                                                     @Natural
                                                                                                                                                                     1
                                                                                                                                                                     ((':)
                                                                                                                                                                        @Natural
                                                                                                                                                                        1
                                                                                                                                                                        ((':)
                                                                                                                                                                           @Natural
                                                                                                                                                                           1
                                                                                                                                                                           ((':)
                                                                                                                                                                              @Natural
                                                                                                                                                                              1
                                                                                                                                                                              ((':)
                                                                                                                                                                                 @Natural
                                                                                                                                                                                 1
                                                                                                                                                                                 ((':)
                                                                                                                                                                                    @Natural
                                                                                                                                                                                    1
                                                                                                                                                                                    ((':)
                                                                                                                                                                                       @Natural
                                                                                                                                                                                       1
                                                                                                                                                                                       ((':)
                                                                                                                                                                                          @Natural
                                                                                                                                                                                          1
                                                                                                                                                                                          ((':)
                                                                                                                                                                                             @Natural
                                                                                                                                                                                             1
                                                                                                                                                                                             ((':)
                                                                                                                                                                                                @Natural
                                                                                                                                                                                                11
                                                                                                                                                                                                ((':)
                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                   1
                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                      1
                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                         1
                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                            1
                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                               1
                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                  1
                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                     1
                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                        1
                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                           1
                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                                    111
                                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                                   2
                                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                                      2
                                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                                         2
                                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                                            2
                                                                                                                                                                                                                                                                                                            ('[]
                                                                                                                                                                                                                                                                                                               @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
      Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
forall a. RealFloatH a => (a, a) -> a
barF (AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        2
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    1
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      2
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               1
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               11
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   111
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  2
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ('[]
                                                                                                                                                                                                                                                                                                              @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
     Double)
x, AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        2
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    1
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      2
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               1
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               11
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  1
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   111
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  2
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ('[]
                                                                                                                                                                                                                                                                                                              @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
     Double)
x))) (Double
-> Concrete
     (TKS
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural
                       1
                       ((':)
                          @Natural
                          1
                          ((':)
                             @Natural
                             1
                             ((':)
                                @Natural
                                1
                                ((':)
                                   @Natural
                                   1
                                   ((':)
                                      @Natural
                                      1
                                      ((':)
                                         @Natural
                                         1
                                         ((':)
                                            @Natural
                                            1
                                            ((':)
                                               @Natural
                                               1
                                               ((':)
                                                  @Natural
                                                  1
                                                  ((':)
                                                     @Natural
                                                     1
                                                     ((':)
                                                        @Natural
                                                        1
                                                        ((':)
                                                           @Natural
                                                           1
                                                           ((':)
                                                              @Natural
                                                              1
                                                              ((':)
                                                                 @Natural
                                                                 1
                                                                 ((':)
                                                                    @Natural
                                                                    1
                                                                    ((':)
                                                                       @Natural
                                                                       1
                                                                       ((':)
                                                                          @Natural
                                                                          1
                                                                          ((':)
                                                                             @Natural
                                                                             1
                                                                             ((':)
                                                                                @Natural
                                                                                1
                                                                                ((':)
                                                                                   @Natural
                                                                                   1
                                                                                   ((':)
                                                                                      @Natural
                                                                                      1
                                                                                      ((':)
                                                                                         @Natural
                                                                                         1
                                                                                         ((':)
                                                                                            @Natural
                                                                                            1
                                                                                            ((':)
                                                                                               @Natural
                                                                                               1
                                                                                               ((':)
                                                                                                  @Natural
                                                                                                  1
                                                                                                  ((':)
                                                                                                     @Natural
                                                                                                     1
                                                                                                     ((':)
                                                                                                        @Natural
                                                                                                        1
                                                                                                        ((':)
                                                                                                           @Natural
                                                                                                           1
                                                                                                           ((':)
                                                                                                              @Natural
                                                                                                              1
                                                                                                              ((':)
                                                                                                                 @Natural
                                                                                                                 1
                                                                                                                 ((':)
                                                                                                                    @Natural
                                                                                                                    1
                                                                                                                    ((':)
                                                                                                                       @Natural
                                                                                                                       1
                                                                                                                       ((':)
                                                                                                                          @Natural
                                                                                                                          1
                                                                                                                          ((':)
                                                                                                                             @Natural
                                                                                                                             1
                                                                                                                             ((':)
                                                                                                                                @Natural
                                                                                                                                1
                                                                                                                                ((':)
                                                                                                                                   @Natural
                                                                                                                                   1
                                                                                                                                   ((':)
                                                                                                                                      @Natural
                                                                                                                                      1
                                                                                                                                      ((':)
                                                                                                                                         @Natural
                                                                                                                                         2
                                                                                                                                         ((':)
                                                                                                                                            @Natural
                                                                                                                                            2
                                                                                                                                            ((':)
                                                                                                                                               @Natural
                                                                                                                                               2
                                                                                                                                               ((':)
                                                                                                                                                  @Natural
                                                                                                                                                  1
                                                                                                                                                  ((':)
                                                                                                                                                     @Natural
                                                                                                                                                     1
                                                                                                                                                     ((':)
                                                                                                                                                        @Natural
                                                                                                                                                        1
                                                                                                                                                        ((':)
                                                                                                                                                           @Natural
                                                                                                                                                           1
                                                                                                                                                           ((':)
                                                                                                                                                              @Natural
                                                                                                                                                              1
                                                                                                                                                              ((':)
                                                                                                                                                                 @Natural
                                                                                                                                                                 1
                                                                                                                                                                 ((':)
                                                                                                                                                                    @Natural
                                                                                                                                                                    1
                                                                                                                                                                    ((':)
                                                                                                                                                                       @Natural
                                                                                                                                                                       1
                                                                                                                                                                       ((':)
                                                                                                                                                                          @Natural
                                                                                                                                                                          1
                                                                                                                                                                          ((':)
                                                                                                                                                                             @Natural
                                                                                                                                                                             1
                                                                                                                                                                             ((':)
                                                                                                                                                                                @Natural
                                                                                                                                                                                1
                                                                                                                                                                                ((':)
                                                                                                                                                                                   @Natural
                                                                                                                                                                                   1
                                                                                                                                                                                   ((':)
                                                                                                                                                                                      @Natural
                                                                                                                                                                                      1
                                                                                                                                                                                      ((':)
                                                                                                                                                                                         @Natural
                                                                                                                                                                                         1
                                                                                                                                                                                         ((':)
                                                                                                                                                                                            @Natural
                                                                                                                                                                                            1
                                                                                                                                                                                            ((':)
                                                                                                                                                                                               @Natural
                                                                                                                                                                                               1
                                                                                                                                                                                               ((':)
                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                  11
                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                     1
                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                        1
                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                           1
                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                              1
                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                 1
                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                    1
                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                       1
                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                          1
                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                             1
                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                      1
                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                     1
                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                        1
                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                           1
                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                              1
                                                                                                                                                                                                                                                              ((':)
                                                                                                                                                                                                                                                                 @Natural
                                                                                                                                                                                                                                                                 1
                                                                                                                                                                                                                                                                 ((':)
                                                                                                                                                                                                                                                                    @Natural
                                                                                                                                                                                                                                                                    1
                                                                                                                                                                                                                                                                    ((':)
                                                                                                                                                                                                                                                                       @Natural
                                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                                                       ((':)
                                                                                                                                                                                                                                                                          @Natural
                                                                                                                                                                                                                                                                          1
                                                                                                                                                                                                                                                                          ((':)
                                                                                                                                                                                                                                                                             @Natural
                                                                                                                                                                                                                                                                             1
                                                                                                                                                                                                                                                                             ((':)
                                                                                                                                                                                                                                                                                @Natural
                                                                                                                                                                                                                                                                                1
                                                                                                                                                                                                                                                                                ((':)
                                                                                                                                                                                                                                                                                   @Natural
                                                                                                                                                                                                                                                                                   1
                                                                                                                                                                                                                                                                                   ((':)
                                                                                                                                                                                                                                                                                      @Natural
                                                                                                                                                                                                                                                                                      111
                                                                                                                                                                                                                                                                                      ((':)
                                                                                                                                                                                                                                                                                         @Natural
                                                                                                                                                                                                                                                                                         1
                                                                                                                                                                                                                                                                                         ((':)
                                                                                                                                                                                                                                                                                            @Natural
                                                                                                                                                                                                                                                                                            1
                                                                                                                                                                                                                                                                                            ((':)
                                                                                                                                                                                                                                                                                               @Natural
                                                                                                                                                                                                                                                                                               1
                                                                                                                                                                                                                                                                                               ((':)
                                                                                                                                                                                                                                                                                                  @Natural
                                                                                                                                                                                                                                                                                                  1
                                                                                                                                                                                                                                                                                                  ((':)
                                                                                                                                                                                                                                                                                                     @Natural
                                                                                                                                                                                                                                                                                                     2
                                                                                                                                                                                                                                                                                                     ((':)
                                                                                                                                                                                                                                                                                                        @Natural
                                                                                                                                                                                                                                                                                                        2
                                                                                                                                                                                                                                                                                                        ((':)
                                                                                                                                                                                                                                                                                                           @Natural
                                                                                                                                                                                                                                                                                                           2
                                                                                                                                                                                                                                                                                                           ((':)
                                                                                                                                                                                                                                                                                                              @Natural
                                                                                                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                                                                                              ('[]
                                                                                                                                                                                                                                                                                                                 @Natural)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1))

testZero7S :: Assertion
testZero7S :: Assertion
testZero7S =
  Rational
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ('[] @Natural) Double
 -> Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Shaped ('[] @Natural) Double
-> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[] ShS ('[] @Natural)
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
0])
    ((AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> Value
     (AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKR 0 r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a b. a -> b -> a
const (Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3) :: AstTensor AstMethodLet FullSpan (TKS '[] Double) -> AstTensor AstMethodLet FullSpan (TKR 0 Double))) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
42))

testZero8 :: Assertion
testZero8 :: Assertion
testZero8 =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (IShR 0 -> [Concrete (TKR 0 Double)] -> Concrete (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [] [Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0])
    ((AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. a -> b -> a
const (Double
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Double
3) :: AstTensor AstMethodLet FullSpan (TKR 0 Double) -> AstTensor AstMethodLet FullSpan (TKS '[] Double))) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42))

testZero9S :: Assertion
testZero9S :: Assertion
testZero9S =
  Rational
-> Concrete (TKR2 5 (TKScalar Double))
-> Concrete (TKR2 5 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] [])
    ((ADVal Concrete (TKR2 5 (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue (ADVal Concrete (TKR2 5 (TKScalar Double)))
-> DValue (ADVal Concrete (TKR2 5 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKS ('[] @Natural) r)
-> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> (ADVal Concrete (TKR2 5 (TKScalar Double))
    -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double)
 -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (ADVal Concrete (TKR2 5 (TKScalar Double))
    -> ADVal
         Concrete
         (TKS
            ((':)
               @Natural
               0
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
            Double))
-> ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            let f :: ADVal Concrete (TKR 5 Double)
                  -> ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double)
                f :: ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3)
            in ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f)
           (IShR 5
-> Concrete (TKR 0 Double) -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42)))

testCFwdZero9S :: Assertion
testCFwdZero9S :: Assertion
testCFwdZero9S =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [])
    ((ADVal Concrete (TKR2 5 (TKScalar Double))
 -> ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> DValue (ADVal Concrete (TKR2 5 (TKScalar Double)))
-> DValue (ADVal Concrete (TKR2 5 (TKScalar Double)))
-> Concrete
     (ADTensorKind
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp (let f :: ADVal Concrete (TKR 5 Double)
                 -> ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double)
               f :: ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3)
           in ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f)
          (IShR 5
-> Concrete (TKR 0 Double) -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42)) (IShR 5
-> Concrete (TKR 0 Double) -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
41)))

testFwdZero9S :: Assertion
testFwdZero9S :: Assertion
testFwdZero9S =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [])
    ((AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)))
-> Concrete
     (ADTensorKind
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp (let f :: AstTensor AstMethodLet FullSpan (TKR 5 Double)
                -> AstTensor AstMethodLet FullSpan (TKS '[0, 2, 4, 0, 1] Double)
              f :: AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3)
          in AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f)
         (IShR 5
-> Concrete (TKR 0 Double) -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42)) (IShR 5
-> Concrete (TKR 0 Double) -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
41)))

testZero10S :: Assertion
testZero10S :: Assertion
testZero10S =
  Rational
-> (Concrete (TKR2 5 (TKScalar Double)),
    Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> (Concrete (TKR2 5 (TKScalar Double)),
    Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
    , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] )
    (((ADVal Concrete (TKR2 5 (TKScalar Double)),
  ADVal
    Concrete
    (TKS
       ((':)
          @Natural
          0
          ((':)
             @Natural
             2
             ((':)
                @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
       Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKS ('[] @Natural) r)
-> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> ((ADVal Concrete (TKR2 5 (TKScalar Double)),
     ADVal
       Concrete
       (TKS
          ((':)
             @Natural
             0
             ((':)
                @Natural
                2
                ((':)
                   @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
          Double))
    -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (ADVal Concrete (TKR2 5 (TKScalar Double)),
    ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double)
 -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ((ADVal Concrete (TKR2 5 (TKScalar Double)),
     ADVal
       Concrete
       (TKS
          ((':)
             @Natural
             0
             ((':)
                @Natural
                2
                ((':)
                   @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
          Double))
    -> ADVal
         Concrete
         (TKS
            ((':)
               @Natural
               0
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
            Double))
-> (ADVal Concrete (TKR2 5 (TKScalar Double)),
    ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            let f :: (a, b)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> b
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3) (b
 -> ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> ((a, b) -> b)
-> (a, b)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a, b) -> b
forall a b. (a, b) -> b
snd
            in (ADVal Concrete (TKR2 5 (TKScalar Double)),
 ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall {a} {b}.
(a, b)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f :: ( ADVal Concrete (TKR 5 Double)
                    , ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double) )
                 -> ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double))
          (IShR 5
-> Concrete (TKR 0 Double) -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42), Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
21))

testCFwdZero10S :: Assertion
testCFwdZero10S :: Assertion
testCFwdZero10S =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [])
    (((ADVal Concrete (TKR2 5 (TKScalar Double)),
  ADVal
    Concrete
    (TKS
       ((':)
          @Natural
          0
          ((':)
             @Natural
             2
             ((':)
                @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
       Double))
 -> ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Concrete
     (ADTensorKind
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp (let f :: (a, b)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = ADVal
  Concrete
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> b
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3) (b
 -> ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> ((a, b) -> b)
-> (a, b)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a, b) -> b
forall a b. (a, b) -> b
snd
           in (ADVal Concrete (TKR2 5 (TKScalar Double)),
 ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double))
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall {a} {b}.
(a, b)
-> ADVal
     Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f :: ( ADVal Concrete (TKR 5 Double)
                   , ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double) )
                   -> ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double))
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] )
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] ))

testFwdZero10S :: Assertion
testFwdZero10S :: Assertion
testFwdZero10S =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [])
    (((AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural
          0
          ((':)
             @Natural
             2
             ((':)
                @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
       Double))
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Concrete
     (ADTensorKind
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp  (let f :: (a, b)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f = AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double)
-> b
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. a -> b -> a
const (Double
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3) (b
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> ((a, b) -> b)
-> (a, b)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a, b) -> b
forall a b. (a, b) -> b
snd
           in (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall {a} {b}.
(a, b)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
f :: ( AstTensor AstMethodLet FullSpan (TKR 5 Double)
                   , AstTensor AstMethodLet FullSpan (TKS '[0, 2, 4, 0, 1] Double) )
                   -> AstTensor AstMethodLet FullSpan (TKS '[0, 2, 4, 0, 1] Double))
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] )
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] ))

testZero11S :: Assertion
testZero11S :: Assertion
testZero11S =
  Rational
-> (Concrete (TKR2 5 (TKScalar Double)),
    Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> (Concrete (TKR2 5 (TKScalar Double)),
    Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
    , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] )
    (((ADVal Concrete (TKR2 5 (TKScalar Double)),
  ADVal
    Concrete
    (TKS
       ((':)
          @Natural
          0
          ((':)
             @Natural
             2
             ((':)
                @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
       Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double))
-> ((ADVal Concrete (TKR2 5 (TKScalar Double)),
     ADVal
       Concrete
       (TKS
          ((':)
             @Natural
             0
             ((':)
                @Natural
                2
                ((':)
                   @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
          Double))
    -> ADVal Concrete (TKR 0 Double))
-> (ADVal Concrete (TKR2 5 (TKScalar Double)),
    ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal Concrete (TKR2 5 (TKScalar Double))
-> ADVal Concrete (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (ADVal Concrete (TKR2 5 (TKScalar Double))
 -> ADVal Concrete (TKR 0 Double))
-> ((ADVal Concrete (TKR2 5 (TKScalar Double)),
     ADVal
       Concrete
       (TKS
          ((':)
             @Natural
             0
             ((':)
                @Natural
                2
                ((':)
                   @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
          Double))
    -> ADVal Concrete (TKR2 5 (TKScalar Double)))
-> (ADVal Concrete (TKR2 5 (TKScalar Double)),
    ADVal
      Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> ADVal Concrete (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            let f :: (a, b) -> ADVal Concrete (TKR2 5 (TKScalar Double))
f = ADVal Concrete (TKR2 5 (TKScalar Double))
-> b -> ADVal Concrete (TKR2 5 (TKScalar Double))
forall a b. a -> b -> a
const (IShR 5
-> ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> ADVal Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3)) (b -> ADVal Concrete (TKR2 5 (TKScalar Double)))
-> ((a, b) -> b)
-> (a, b)
-> ADVal Concrete (TKR2 5 (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a, b) -> b
forall a b. (a, b) -> b
snd
            in (ADVal Concrete (TKR2 5 (TKScalar Double)),
 ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double))
-> ADVal Concrete (TKR2 5 (TKScalar Double))
forall {a} {b}. (a, b) -> ADVal Concrete (TKR2 5 (TKScalar Double))
f :: ( ADVal Concrete (TKR 5 Double)
                    , ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double) )
                 -> ADVal Concrete (TKR 5 Double))
          (IShR 5
-> Concrete (TKR 0 Double) -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42), Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
21))

testCFwdZero11S :: Assertion
testCFwdZero11S :: Assertion
testCFwdZero11S =
  Rational
-> Concrete (TKR2 5 (TKScalar Double))
-> Concrete (TKR2 5 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] [])
    (((ADVal Concrete (TKR2 5 (TKScalar Double)),
  ADVal
    Concrete
    (TKS
       ((':)
          @Natural
          0
          ((':)
             @Natural
             2
             ((':)
                @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
       Double))
 -> ADVal Concrete (TKR2 5 (TKScalar Double)))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> DValue
     (ADVal Concrete (TKR2 5 (TKScalar Double)),
      ADVal
        Concrete
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Concrete (ADTensorKind (TKR2 5 (TKScalar Double)))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp (let f :: (a, b) -> ADVal Concrete (TKR2 5 (TKScalar Double))
f = ADVal Concrete (TKR2 5 (TKScalar Double))
-> b -> ADVal Concrete (TKR2 5 (TKScalar Double))
forall a b. a -> b -> a
const (IShR 5
-> ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> ADVal Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3)) (b -> ADVal Concrete (TKR2 5 (TKScalar Double)))
-> ((a, b) -> b)
-> (a, b)
-> ADVal Concrete (TKR2 5 (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a, b) -> b
forall a b. (a, b) -> b
snd
           in (ADVal Concrete (TKR2 5 (TKScalar Double)),
 ADVal
   Concrete
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double))
-> ADVal Concrete (TKR2 5 (TKScalar Double))
forall {a} {b}. (a, b) -> ADVal Concrete (TKR2 5 (TKScalar Double))
f :: ( ADVal Concrete (TKR 5 Double)
                   , ADVal Concrete (TKS '[0, 2, 4, 0, 1] Double) )
                   -> ADVal Concrete (TKR 5 Double))
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] )
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] ))

testFwdZero11S :: Assertion
testFwdZero11S :: Assertion
testFwdZero11S =
  Rational
-> Concrete (TKR2 5 (TKScalar Double))
-> Concrete (TKR2 5 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] [])
    (((AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural
          0
          ((':)
             @Natural
             2
             ((':)
                @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
       Double))
 -> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              0
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
           Double))
-> Concrete (ADTensorKind (TKR2 5 (TKScalar Double)))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp  (let f :: (a, b)
-> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
f = AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
-> b -> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
forall a b. a -> b -> a
const (IShR 5
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] (Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3)) (b -> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)))
-> ((a, b) -> b)
-> (a, b)
-> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a, b) -> b
forall a b. (a, b) -> b
snd
           in (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         0
         ((':)
            @Natural
            2
            ((':)
               @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
      Double))
-> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
forall {a} {b}.
(a, b)
-> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
f :: ( AstTensor AstMethodLet FullSpan (TKR 5 Double)
                   , AstTensor AstMethodLet FullSpan (TKS '[0, 2, 4, 0, 1] Double) )
                   -> AstTensor AstMethodLet FullSpan (TKR 5 Double))
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] )
          ( IShR 5
-> [Concrete (TKR 0 Double)] -> Concrete (TKR2 5 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 5)
0, Int
Item (IShR 5)
2, Int
Item (IShR 5)
4, Int
Item (IShR 5)
0, Int
Item (IShR 5)
1] []
          , Shaped
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural
      0
      ((':)
         @Natural
         2
         ((':)
            @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural
            0
            ((':)
               @Natural
               2
               ((':)
                  @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
         Double))
-> Shaped
     ((':)
        @Natural
        0
        ((':)
           @Natural
           2
           ((':)
              @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural
           0
           ((':)
              @Natural
              2
              ((':)
                 @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[0, 2, 4, 0, 1] ShS
  ((':)
     @Natural
     0
     ((':)
        @Natural
        2
        ((':)
           @Natural 4 ((':) @Natural 0 ((':) @Natural 1 ('[] @Natural))))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [] ))

testPiecewiseLinear :: Assertion
testPiecewiseLinear :: Assertion
testPiecewiseLinear =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2)
    (let fT :: ADReady f => f (TKR 0 Double) -> f (TKR 0 Double)
         fT :: forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
fT f (TKR 0 Double)
x = BoolOf f
-> f (TKR 0 Double) -> f (TKR 0 Double) -> f (TKR 0 Double)
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (f (TKR 0 Double)
x f (TKR 0 Double) -> f (TKR 0 Double) -> BoolOf f
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
>. Double -> f (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0) (Double -> f (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2 f (TKR 0 Double) -> f (TKR 0 Double) -> f (TKR 0 Double)
forall a. Num a => a -> a -> a
* f (TKR 0 Double)
x) (Double -> f (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
5 f (TKR 0 Double) -> f (TKR 0 Double) -> f (TKR 0 Double)
forall a. Num a => a -> a -> a
* f (TKR 0 Double)
x)
     in forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
fT (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42))

testPiecewiseLinearPP :: Assertion
testPiecewiseLinearPP :: Assertion
testPiecewiseLinearPP = do
  Assertion
resetVarCounter
  let fT :: AstTensor AstMethodLet FullSpan (TKR 0 Double)
         -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT AstTensor AstMethodLet FullSpan (TKR 0 Double)
x = BoolOf (AstTensor AstMethodLet FullSpan)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (AstTensor AstMethodLet FullSpan (TKR 0 Double)
x AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> BoolOf (AstTensor AstMethodLet FullSpan)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
>. Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0) (Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2 AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a. Num a => a -> a -> a
* AstTensor AstMethodLet FullSpan (TKR 0 Double)
x) (Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
5 AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a. Num a => a -> a -> a
* AstTensor AstMethodLet FullSpan (TKR 0 Double)
x)
      (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 0 Double))) (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK (X (AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR 0 Double) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev (TKR 0 Double) (TKR 0 Double)
-> AstArtifactRev (TKR 0 Double) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 0 Double) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> rfromS (let v4 = soneHot (sfromR dret) [ifH (sscalar -0.0 <=. negate (sfromR x1)) 0 1] in sscalar 2.0 * v4 !$ [1] + sscalar 5.0 * v4 !$ [0])"
  AstArtifactRev (TKR 0 Double) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev (TKR 0 Double) (TKR 0 Double)
-> AstArtifactRev (TKR 0 Double) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 0 Double) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (ifH (sscalar -0.0 <=. negate (sfromR x1)) (sscalar 5.0 * sfromR x1) (sscalar 2.0 * sfromR x1))"

testPiecewiseLinear2 :: Assertion
testPiecewiseLinear2 :: Assertion
testPiecewiseLinear2 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
5)
    (let fT :: ADReady f => f (TKR 0 Double) -> f (TKR 0 Double)
         fT :: forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
fT f (TKR 0 Double)
x = BoolOf f
-> f (TKR 0 Double) -> f (TKR 0 Double) -> f (TKR 0 Double)
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (f (TKR 0 Double)
x f (TKR 0 Double) -> f (TKR 0 Double) -> BoolOf f
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
>. Double -> f (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0) (Double -> f (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2) (Double -> f (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
5) f (TKR 0 Double) -> f (TKR 0 Double) -> f (TKR 0 Double)
forall a. Num a => a -> a -> a
* f (TKR 0 Double)
x
     in forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
fT (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Double
42)))

testPiecewiseLinear2PP :: Assertion
testPiecewiseLinear2PP :: Assertion
testPiecewiseLinear2PP = do
  Assertion
resetVarCounter
  let fT :: AstTensor AstMethodLet FullSpan (TKR 0 Double)
         -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT AstTensor AstMethodLet FullSpan (TKR 0 Double)
x = BoolOf (AstTensor AstMethodLet FullSpan)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (AstTensor AstMethodLet FullSpan (TKR 0 Double)
x AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> BoolOf (AstTensor AstMethodLet FullSpan)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
>. Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0) (Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2) (Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
5) AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a. Num a => a -> a -> a
* AstTensor AstMethodLet FullSpan (TKR 0 Double)
x
      (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 0 Double))) (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK (X (AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR 0 Double) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev (TKR 0 Double) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> let x2 = ifH (sscalar -0.0 <=. negate (sfromR x1)) (sscalar 5.0) (sscalar 2.0) in rfromS (x2 * sfromR dret)"
  AstArtifactRev (TKR 0 Double) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev (TKR 0 Double) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> let x2 = ifH (sscalar -0.0 <=. negate (sfromR x1)) (sscalar 5.0) (sscalar 2.0) in rfromS (x2 * sfromR x1)"

overleaf :: forall r target. (BaseTensor target, GoodScalar r)
         => target (TKR 1 r) -> target (TKR 0 r)
overleaf :: forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
overleaf target (TKR 1 r)
v = let wrap :: PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
wrap PrimalOf target (TKScalar Int64)
i = PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`remH` Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral (target (TKR2 (1 + 0) (TKScalar r)) -> Int
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 (1 + n) x) -> Int
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 (1 + n) x) -> Int
rwidth target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v)
             in target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
IShR (m + n)
-> (IxROf target m -> target (TKR2 n x)) -> target (TKR2 (m + n) x)
rbuild @1 [Int
Item (IShR 1)
50] (\[Item (IxR 1 (PrimalOf target (TKScalar Int64)))
i] -> target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v [PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
wrap Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
i]))

testOverleaf :: Assertion
testOverleaf :: Assertion
testOverleaf =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData @_ @Double [Int
Item (IShR 1)
28] [Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR2 1 (TKScalar Double)) -> f (TKR 0 Double)
forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR 0 Double)
overleaf (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] [Double
Item [Double]
0 .. Double
Item [Double]
27]))

testOverleafInt64n :: Assertion
testOverleafInt64n :: Assertion
testOverleafInt64n =
  Rational
-> Concrete (TKR 1 Int64) -> Concrete (TKR 1 Int64) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (IShR 1 -> [Int64] -> Concrete (TKR 1 Int64)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] ((Double -> Int64) -> [Double] -> [Int64]
forall a b. (a -> b) -> [a] -> [b]
map Double -> Int64
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round [Double
0 :: Double,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0]))
    ((ADVal Concrete (TKR 1 Int64) -> ADVal Concrete (TKScalar Int64))
-> DValue (ADVal Concrete (TKR 1 Int64))
-> DValue (ADVal Concrete (TKR 1 Int64))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Int64 (ADVal Concrete (TKR 0 Int64) -> ADVal Concrete (TKScalar Int64))
-> (ADVal Concrete (TKR 1 Int64) -> ADVal Concrete (TKR 0 Int64))
-> ADVal Concrete (TKR 1 Int64)
-> ADVal Concrete (TKScalar Int64)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal Concrete (TKR 1 Int64) -> ADVal Concrete (TKR 0 Int64)
forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
overleaf) (IShR 1 -> [Int64] -> Concrete (TKR 1 Int64)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] [Int64
Item [Int64]
0 .. Int64
Item [Int64]
27]))

testOverleafCIntn :: Assertion
testOverleafCIntn :: Assertion
testOverleafCIntn =
  Rational
-> Concrete (TKR 1 CInt) -> Concrete (TKR 1 CInt) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (IShR 1 -> [CInt] -> Concrete (TKR 1 CInt)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] ((Double -> CInt) -> [Double] -> [CInt]
forall a b. (a -> b) -> [a] -> [b]
map Double -> CInt
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round [Double
0 :: Double,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0]))
    ((AstTensor AstMethodLet FullSpan (TKR 1 CInt)
 -> AstTensor AstMethodLet FullSpan (TKScalar CInt))
-> Value (AstTensor AstMethodLet FullSpan (TKR 1 CInt))
-> Value (AstTensor AstMethodLet FullSpan (TKR 1 CInt))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @CInt (AstTensor AstMethodLet FullSpan (TKR 0 CInt)
 -> AstTensor AstMethodLet FullSpan (TKScalar CInt))
-> (AstTensor AstMethodLet FullSpan (TKR 1 CInt)
    -> AstTensor AstMethodLet FullSpan (TKR 0 CInt))
-> AstTensor AstMethodLet FullSpan (TKR 1 CInt)
-> AstTensor AstMethodLet FullSpan (TKScalar CInt)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 1 CInt)
-> AstTensor AstMethodLet FullSpan (TKR 0 CInt)
forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
overleaf) (IShR 1 -> [CInt] -> Concrete (TKR 1 CInt)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] [CInt
Item [CInt]
0 .. CInt
Item [CInt]
27]))

testOverleafCIntToFloatn :: Assertion
testOverleafCIntToFloatn :: Assertion
testOverleafCIntToFloatn =
  Rational
-> Concrete (TKR 1 Float) -> Concrete (TKR 1 Float) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (IShR 1 -> [Concrete (TKR 0 Float)] -> Concrete (TKR 1 Float)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (IShR 1)
28] (Int -> Concrete (TKR 0 Float) -> [Concrete (TKR 0 Float)]
forall a. Int -> a -> [a]
replicate Int
28 (Float -> Concrete (TKR 0 Float)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Float
0.0)))
    ((AstTensor AstMethodLet FullSpan (TKR 1 Float)
 -> AstTensor AstMethodLet FullSpan (TKScalar CInt))
-> Value (AstTensor AstMethodLet FullSpan (TKR 1 Float))
-> Value (AstTensor AstMethodLet FullSpan (TKR 1 Float))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @CInt (AstTensor AstMethodLet FullSpan (TKR 0 CInt)
 -> AstTensor AstMethodLet FullSpan (TKScalar CInt))
-> (AstTensor AstMethodLet FullSpan (TKR 1 Float)
    -> AstTensor AstMethodLet FullSpan (TKR 0 CInt))
-> AstTensor AstMethodLet FullSpan (TKR 1 Float)
-> AstTensor AstMethodLet FullSpan (TKScalar CInt)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 0 CInt)
-> AstTensor AstMethodLet FullSpan (TKR 0 CInt)
forall r1 r2 (target :: Target) (n :: Natural).
(GoodScalar r1, Integral r1, GoodScalar r2, BaseTensor target) =>
target (TKR n r1) -> target (TKR n r2)
rfromIntegral (AstTensor AstMethodLet FullSpan (TKR 0 CInt)
 -> AstTensor AstMethodLet FullSpan (TKR 0 CInt))
-> (AstTensor AstMethodLet FullSpan (TKR 1 Float)
    -> AstTensor AstMethodLet FullSpan (TKR 0 CInt))
-> AstTensor AstMethodLet FullSpan (TKR 1 Float)
-> AstTensor AstMethodLet FullSpan (TKR 0 CInt)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
overleaf @CInt (AstTensor AstMethodLet FullSpan (TKR 1 CInt)
 -> AstTensor AstMethodLet FullSpan (TKR 0 CInt))
-> (AstTensor AstMethodLet FullSpan (TKR 1 Float)
    -> AstTensor AstMethodLet FullSpan (TKR 1 CInt))
-> AstTensor AstMethodLet FullSpan (TKR 1 Float)
-> AstTensor AstMethodLet FullSpan (TKR 0 CInt)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 1 Float)
-> AstTensor AstMethodLet FullSpan (TKR 1 CInt)
forall r r2 (target :: Target) (n :: Natural).
(GoodScalar r, RealFrac r, GoodScalar r2, Integral r2,
 BaseTensor target) =>
target (TKR n r) -> target (TKR n r2)
rfloor) (forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData @_ @Float [Int
Item (IShR 1)
28] [Float
Item [Float]
0 .. Float
Item [Float]
27]))

testOverleafInt64p :: Assertion
testOverleafInt64p :: Assertion
testOverleafInt64p =
  Rational
-> Concrete (TKR 1 Int64)
-> ((Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Int64),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR 1 Int64), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 0 (TKScalar Z1)), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1))),
    (Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Int64),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR 0 Int64), Concrete (TKR 0 Int64),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR 1 Int64), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 0 (TKScalar Z1)), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData @_ @Int64 [Int
Item (IShR 1)
28] ((Double -> Int64) -> [Double] -> [Int64]
forall a b. (a -> b) -> [a] -> [b]
map Double -> Int64
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round [Double
2.0 :: Double,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0]))
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Int64 @0 f (TKR 1 Int64) -> f (TKR 0 Int64)
forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
forall (f :: Target).
ADReady f =>
f (TKR 1 Int64) -> f (TKR 0 Int64)
overleaf (IShR 1 -> [Int64] -> Concrete (TKR 1 Int64)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] [Int64
Item [Int64]
0 .. Int64
Item [Int64]
27]))

testOverleafCIntp :: Assertion
testOverleafCIntp :: Assertion
testOverleafCIntp =
  Rational
-> Concrete (TKR 1 CInt)
-> ((Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 CInt),
     AstTensor AstMethodLet PrimalSpan (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR 1 CInt), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 0 (TKScalar Z1)), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1))),
    (Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 CInt),
     AstTensor AstMethodLet PrimalSpan (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR 0 CInt), Concrete (TKR 0 CInt),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR 1 CInt), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 0 (TKScalar Z1)), Concrete (TKR2 0 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1)), Concrete (TKR2 1 (TKScalar Z1)),
     Concrete (TKR2 1 (TKScalar Z1))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData @_ @CInt [Int
Item (IShR 1)
28] ((Double -> CInt) -> [Double] -> [CInt]
forall a b. (a -> b) -> [a] -> [b]
map Double -> CInt
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round [Double
2.0 :: Double,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
2.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0]))
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @CInt @0 f (TKR 1 CInt) -> f (TKR 0 CInt)
forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
forall (f :: Target). ADReady f => f (TKR 1 CInt) -> f (TKR 0 CInt)
overleaf (IShR 1 -> [CInt] -> Concrete (TKR 1 CInt)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] [CInt
Item [CInt]
0 .. CInt
Item [CInt]
27]))

testOverleafCIntToFloatp :: Assertion
testOverleafCIntToFloatp :: Assertion
testOverleafCIntToFloatp =
  Rational
-> Concrete (TKR 1 Float)
-> ((Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float)),
    (Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 0 Float),
     Concrete (TKR 0 Float), Concrete (TKR 0 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData @1 @Float [Int
Item (IShR 1)
28] (Int -> Float -> [Float]
forall a. Int -> a -> [a]
replicate Int
28 Float
0.0))
    (let f :: forall f. ADReady f => f (TKR 1 Float) -> f (TKR 0 Float)
         f :: forall (f :: Target).
ADReady f =>
f (TKR 1 Float) -> f (TKR 0 Float)
f = f (TKR 0 CInt) -> f (TKR 0 Float)
forall r1 r2 (target :: Target) (n :: Natural).
(GoodScalar r1, Integral r1, GoodScalar r2, BaseTensor target) =>
target (TKR n r1) -> target (TKR n r2)
rfromIntegral (f (TKR 0 CInt) -> f (TKR 0 Float))
-> (f (TKR 1 Float) -> f (TKR 0 CInt))
-> f (TKR 1 Float)
-> f (TKR 0 Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
overleaf @CInt (f (TKR 1 CInt) -> f (TKR 0 CInt))
-> (f (TKR 1 Float) -> f (TKR 1 CInt))
-> f (TKR 1 Float)
-> f (TKR 0 CInt)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (TKR 1 Float) -> f (TKR 1 CInt)
forall r r2 (target :: Target) (n :: Natural).
(GoodScalar r, RealFrac r, GoodScalar r2, Integral r2,
 BaseTensor target) =>
target (TKR n r) -> target (TKR n r2)
rfloor
     in forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Float @0 f (TKR 1 Float) -> f (TKR 0 Float)
forall (f :: Target).
ADReady f =>
f (TKR 1 Float) -> f (TKR 0 Float)
f (IShR 1 -> [Float] -> Concrete (TKR 1 Float)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
28] [Float
Item [Float]
0 .. Float
Item [Float]
27]))

testOverleafPP :: Assertion
testOverleafPP :: Assertion
testOverleafPP = do
  Assertion
resetVarCounter Assertion -> Assertion -> Assertion
forall a b. IO a -> IO b -> IO b
forall (m :: Type -> Type) a b. Monad m => m a -> m b -> m b
>> Assertion
resetIdCounter
  let fT :: AstTensor AstMethodLet FullSpan (TKR 1 Double)
         -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(BaseTensor target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 0 r)
overleaf
      (AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3, AstTensor AstMethodLet FullSpan (TKR 0 Double)
ast3) = FullShapeTK (TKR2 1 (TKScalar Double))
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstVarName FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
28] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR2 1 (TKScalar Double)) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 0 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 0 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (ssum @50 (sgather [] (sfromR v1) (\\[i2] -> [remH i2 28])))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
deltas) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
28] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
-> AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> rfromS (sscatter (sreplicate @50 (sfromR dret)) (\\[i5] -> [remH i5 28]))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
-> AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (ssum0 (sgather (sfromR v1) (\\[i3] -> [remH i3 28])))"
  Delta (AstRaw PrimalSpan) (TKR 0 Double) -> [Char]
forall a. Show a => a -> [Char]
show Delta (AstRaw PrimalSpan) (TKR 0 Double)
deltas
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"DeltaConvert (ConvCmp (ConvXR STKScalar) ConvSX) (DeltaShare 100000002 (DeltaSum (SNat @50) (STKS [] STKScalar) (DeltaShare 100000001 (DeltaGatherS [50] [] [28] (DeltaConvert (ConvCmp (ConvXS' (FTKS [28] FTKScalar)) ConvRX) (DeltaInput (InputId 0))) <function>))))"

foo :: RealFloat a => (a, a, a) -> a
foo :: forall a. RealFloat a => (a, a, a) -> a
foo (a
x, a
y, a
z) =
  let w :: a
w = a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
y
  in a -> a -> a
forall a. RealFloat a => a -> a -> a
atan2 a
z a
w a -> a -> a
forall a. Num a => a -> a -> a
+ a
z a -> a -> a
forall a. Num a => a -> a -> a
* a
w  -- note that w appears twice

testFoo :: Assertion
testFoo :: Assertion
testFoo = do
  Rational
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.4396285219055063, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Double
1.953374825727421), Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.9654825811012627)
    (((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
  ADVal Concrete (TKR 0 Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
      ADVal Concrete (TKR 0 Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
      ADVal Concrete (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double))
-> ((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
     ADVal Concrete (TKR 0 Double))
    -> ADVal Concrete (TKR 0 Double))
-> (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
    ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
 ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR 0 Double)
forall a. RealFloat a => (a, a, a) -> a
foo) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.3))

gradFooDouble :: (Double, Double, Double) -> (Double, Double, Double)
gradFooDouble :: (Double, Double, Double) -> (Double, Double, Double)
gradFooDouble = (Concrete (TKScalar Double), Concrete (TKScalar Double),
 Concrete (TKScalar Double))
-> (Double, Double, Double)
DValue (Double, Double, Double) -> (Double, Double, Double)
forall vals. DualNumberValue vals => DValue vals -> vals
fromDValue ((Concrete (TKScalar Double), Concrete (TKScalar Double),
  Concrete (TKScalar Double))
 -> (Double, Double, Double))
-> ((Double, Double, Double)
    -> (Concrete (TKScalar Double), Concrete (TKScalar Double),
        Concrete (TKScalar Double)))
-> (Double, Double, Double)
-> (Double, Double, Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ADVal Concrete (TKScalar Double),
  ADVal Concrete (TKScalar Double), ADVal Concrete (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKScalar Double),
      ADVal Concrete (TKScalar Double), ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKScalar Double),
      ADVal Concrete (TKScalar Double), ADVal Concrete (TKScalar Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKScalar Double),
 ADVal Concrete (TKScalar Double), ADVal Concrete (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall a. RealFloat a => (a, a, a) -> a
foo ((Concrete (TKScalar Double), Concrete (TKScalar Double),
  Concrete (TKScalar Double))
 -> (Concrete (TKScalar Double), Concrete (TKScalar Double),
     Concrete (TKScalar Double)))
-> ((Double, Double, Double)
    -> (Concrete (TKScalar Double), Concrete (TKScalar Double),
        Concrete (TKScalar Double)))
-> (Double, Double, Double)
-> (Concrete (TKScalar Double), Concrete (TKScalar Double),
    Concrete (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Double, Double, Double)
-> (Concrete (TKScalar Double), Concrete (TKScalar Double),
    Concrete (TKScalar Double))
Value
  (Concrete (TKScalar Double), Concrete (TKScalar Double),
   Concrete (TKScalar Double))
-> (Concrete (TKScalar Double), Concrete (TKScalar Double),
    Concrete (TKScalar Double))
forall vals. TermValue vals => Value vals -> vals
fromValue

testGradFooDouble :: Assertion
testGradFooDouble :: Assertion
testGradFooDouble =
  Rational
-> (Double, Double, Double)
-> (Double, Double, Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double
2.4396285219055063, -Double
1.953374825727421, Double
0.9654825811012627)
    ((Double, Double, Double) -> (Double, Double, Double)
gradFooDouble (Double
1.1, Double
2.2, Double
3.3))

type Matrix2x2 :: Type -> Type
type Matrix2x2 r = Concrete (TKS '[2, 2] r)
type ThreeMatrices r = (Matrix2x2 r, Matrix2x2 r, Matrix2x2 r)
threeSimpleMatrices :: ThreeMatrices Double
threeSimpleMatrices :: ThreeMatrices Double
threeSimpleMatrices = (Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1, Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.2, Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3.3)
fooMatrixValue :: Matrix2x2 Double
fooMatrixValue :: Matrix2x2 Double
fooMatrixValue = ThreeMatrices Double -> Matrix2x2 Double
forall a. RealFloat a => (a, a, a) -> a
foo ThreeMatrices Double
threeSimpleMatrices
gradSumFooMatrix :: ThreeMatrices Double -> ThreeMatrices Double
gradSumFooMatrix :: ThreeMatrices Double -> ThreeMatrices Double
gradSumFooMatrix = ((ADVal
    Concrete
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)),
  ADVal
    Concrete
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)),
  ADVal
    Concrete
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal
        Concrete
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      ADVal
        Concrete
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      ADVal
        Concrete
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
-> DValue
     (ADVal
        Concrete
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      ADVal
        Concrete
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      ADVal
        Concrete
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKS ('[] @Natural) r)
-> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> ((ADVal
       Concrete
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     ADVal
       Concrete
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     ADVal
       Concrete
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)))
    -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (ADVal
      Concrete
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    ADVal
      Concrete
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    ADVal
      Concrete
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal
  Concrete
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (ADVal
   Concrete
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double))
 -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ((ADVal
       Concrete
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     ADVal
       Concrete
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     ADVal
       Concrete
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)))
    -> ADVal
         Concrete
         (TKS2
            ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
            (TKScalar Double)))
-> (ADVal
      Concrete
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    ADVal
      Concrete
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    ADVal
      Concrete
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)))
-> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ADVal
   Concrete
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 ADVal
   Concrete
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 ADVal
   Concrete
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)))
-> ADVal
     Concrete
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall a. RealFloat a => (a, a, a) -> a
foo)

testFooMatrix :: Assertion
testFooMatrix :: Assertion
testFooMatrix =
  Rational -> Matrix2x2 Double -> Matrix2x2 Double -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [Double
Item (NonEmpty Double)
4.242393641025528,Double
Item (NonEmpty Double)
4.242393641025528,Double
Item (NonEmpty Double)
4.242393641025528,Double
Item (NonEmpty Double)
4.242393641025528])
    Matrix2x2 Double
fooMatrixValue

testGradFooMatrix :: Assertion
testGradFooMatrix :: Assertion
testGradFooMatrix =
  Rational
-> ThreeMatrices Double -> ThreeMatrices Double -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063],ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421],ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627])
    (ThreeMatrices Double -> ThreeMatrices Double
gradSumFooMatrix ThreeMatrices Double
threeSimpleMatrices)

fooLet :: (RealFloatH (f r), ADReady f)
       => (f r, f r, f r) -> f r
fooLet :: forall (f :: Target) (r :: TK).
(RealFloatH (f r), ADReady f) =>
(f r, f r, f r) -> f r
fooLet (f r
x, f r
y, f r
z) =
  f r -> (f r -> f r) -> f r
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (f r
x f r -> f r -> f r
forall a. Num a => a -> a -> a
* f r -> f r
forall a. Floating a => a -> a
sin f r
y) ((f r -> f r) -> f r) -> (f r -> f r) -> f r
forall a b. (a -> b) -> a -> b
$ \f r
w ->
    f r -> f r -> f r
forall a. RealFloatH a => a -> a -> a
atan2H f r
z f r
w f r -> f r -> f r
forall a. Num a => a -> a -> a
+ f r
z f r -> f r -> f r
forall a. Num a => a -> a -> a
* f r
w  -- note that w still appears twice

artifact :: AstArtifactRev (X (ThreeMatrices Double)) (TKS '[2, 2] Double)
artifact :: AstArtifactRev
  (X (ThreeMatrices Double))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
artifact = ((AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)))
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
-> AstArtifactRev
     (X (AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt) -> Value src -> AstArtifactRev (X src) ztgt
vjpArtifact (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall (f :: Target) (r :: TK).
(RealFloatH (f r), ADReady f) =>
(f r, f r, f r) -> f r
fooLet ThreeMatrices Double
Value
  (AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)),
   AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)),
   AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
threeSimpleMatrices

testGradFooLetMatrixPP :: Assertion
testGradFooLetMatrixPP :: Assertion
testGradFooLetMatrixPP = do
  Assertion
resetVarCounter
  AstArtifactRev
  (TKProduct
     (TKProduct
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev
  (TKProduct
     (TKProduct
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
AstArtifactRev
  (X (ThreeMatrices Double))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
artifact
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m3 = sin (tproject2 (tproject1 m1)) ; m4 = tproject1 (tproject1 m1) * m3 ; m5 = recip (tproject2 m1 * tproject2 m1 + m4 * m4) ; m7 = (negate (tproject2 m1) * m5) * dret + tproject2 m1 * dret in tpair (tpair (m3 * m7) (cos (tproject2 (tproject1 m1)) * (tproject1 (tproject1 m1) * m7))) ((m4 * m5) * dret + m4 * dret)"

testGradFooMatrixVjp :: Assertion
testGradFooMatrixVjp :: Assertion
testGradFooMatrixVjp =
  Rational
-> ThreeMatrices Double -> ThreeMatrices Double -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    ((ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063],ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421],ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627]) :: ThreeMatrices Double)
    (AstArtifactRev
  (TKProduct
     (TKProduct
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
-> Concrete
     (TKProduct
        (TKProduct
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
-> Concrete
     (ADTensorKind
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
-> ThreeMatrices Double
forall (x :: TK) (z :: TK) avals.
((X avals :: TK) ~ (ADTensorKind x :: TK),
 AdaptableTarget Concrete avals) =>
AstArtifactRev x z
-> Concrete x -> Concrete (ADTensorKind z) -> avals
vjpInterpretArtifact AstArtifactRev
  (TKProduct
     (TKProduct
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
AstArtifactRev
  (X (ThreeMatrices Double))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
artifact (ThreeMatrices Double -> Concrete (X (ThreeMatrices Double))
forall (target :: Target) vals.
AdaptableTarget target vals =>
vals -> target (X vals)
toTarget ThreeMatrices Double
threeSimpleMatrices) (Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1))

testGradFooMatrixRev :: Assertion
testGradFooMatrixRev :: Assertion
testGradFooMatrixRev =
  Rational
-> ThreeMatrices Double -> ThreeMatrices Double -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063,Double
Item (NonEmpty Double)
2.4396285219055063],ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421],ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
-> NonEmpty Double -> Matrix2x2 Double
forall (sh :: [Natural]) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
ShS sh -> NonEmpty r -> target (TKS sh r)
sfromListLinear [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2,Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] [Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627,Double
Item (NonEmpty Double)
0.9654825811012627])
    (((AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
       (TKScalar Double)))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS2
            ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
            (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall (f :: Target) (r :: TK).
(RealFloatH (f r), ADReady f) =>
(f r, f r, f r) -> f r
fooLet) ThreeMatrices Double
Value
  (AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)),
   AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)),
   AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
threeSimpleMatrices)

testGradFooLetMatrixSimpPP :: Assertion
testGradFooLetMatrixSimpPP :: Assertion
testGradFooLetMatrixSimpPP = do
  Assertion
resetVarCounter
  (let ftk :: FullShapeTK
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
ftk = forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS @'[2, 2] [Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2, Int
Item (ShS ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural))))
2] (forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar @Double)
   in AstArtifactRev
  (TKProduct
     (TKProduct
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty
        (AstArtifactRev
  (TKProduct
     (TKProduct
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKProduct
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact (AstArtifactRev
   (TKProduct
      (TKProduct
         (TKS2
            ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
            (TKScalar Double))
         (TKS2
            ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
            (TKScalar Double)))
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)))
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double))
 -> AstArtifactRev
      (TKProduct
         (TKProduct
            (TKS2
               ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
               (TKScalar Double))
            (TKS2
               ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
               (TKScalar Double)))
         (TKS2
            ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
            (TKScalar Double)))
      (TKS2
         ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
         (TKScalar Double)))
-> AstArtifactRev
     (TKProduct
        (TKProduct
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKProduct
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ IncomingCotangentHandling
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
          (TKScalar Double)))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS2
            ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
            (TKScalar Double)))
-> FullShapeTK
     (X (AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))))
-> AstArtifactRev
     (X (AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> AstArtifactRev (X src) ztgt
revArtifactAdapt IncomingCotangentHandling
UseIncomingCotangent (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
      (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
forall (f :: Target) (r :: TK).
(RealFloatH (f r), ADReady f) =>
(f r, f r, f r) -> f r
fooLet (FullShapeTK
  (TKProduct
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double)))
-> FullShapeTK
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
-> FullShapeTK
     (TKProduct
        (TKProduct
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double))
           (TKS2
              ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
              (TKScalar Double)))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (FullShapeTK
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
-> FullShapeTK
     (TKS2
        ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
        (TKScalar Double))
-> FullShapeTK
     (TKProduct
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double))
        (TKS2
           ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
           (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct FullShapeTK
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
ftk FullShapeTK
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
ftk) FullShapeTK
  (TKS2
     ((':) @Natural 2 ((':) @Natural 2 ('[] @Natural)))
     (TKScalar Double))
ftk)))
      [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m3 = sin (tproject2 (tproject1 m1)) ; m4 = tproject1 (tproject1 m1) * m3 ; m5 = recip (tproject2 m1 * tproject2 m1 + m4 * m4) ; m7 = (negate (tproject2 m1) * m5) * dret + tproject2 m1 * dret in tpair (tpair (m3 * m7) (cos (tproject2 (tproject1 m1)) * (tproject1 (tproject1 m1) * m7))) ((m4 * m5) * dret + m4 * dret)"

testGradFooLetMatrixSimpRPP :: Assertion
testGradFooLetMatrixSimpRPP :: Assertion
testGradFooLetMatrixSimpRPP = do
  Assertion
resetVarCounter
  (let ftk :: FullShapeTK (TKR2 ((0 + 1) + 1) (TKScalar Double))
ftk = IShR ((0 + 1) + 1)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 ((0 + 1) + 1) (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR (Int
2 Int -> ShR (0 + 1) Int -> IShR ((0 + 1) + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: Int
2 Int -> IShR 0 -> ShR (0 + 1) Int
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR) (forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar @Double)
    in AstArtifactRev
  (TKProduct
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
  (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
  (TKR 2 Double)
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
     (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact (AstArtifactRev
   (TKProduct
      (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
   (TKR 2 Double)
 -> AstArtifactRev
      (TKProduct
         (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
      (TKR 2 Double))
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
     (TKR 2 Double)
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
     (TKR 2 Double)
forall a b. (a -> b) -> a -> b
$ IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> AstArtifactRev
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
     (TKR 2 Double)
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> AstArtifactRev (X src) ztgt
revArtifactAdapt IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (f :: Target) (r :: TK).
(RealFloatH (f r), ADReady f) =>
(f r, f r, f r) -> f r
fooLet (FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct FullShapeTK (TKR 2 Double)
ftk FullShapeTK (TKR 2 Double)
ftk) FullShapeTK (TKR 2 Double)
ftk)))
       [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tconvert (ConvT2 (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [2,2] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [2,2] FTKScalar)) ConvSX))) (ConvCmp (ConvXR STKScalar) ConvSX)) (STKProduct (STKProduct (STKS [2,2] STKScalar) (STKS [2,2] STKScalar)) (STKS [2,2] STKScalar)) (let m3 = sin (sfromR (tproject2 (tproject1 m1))) ; m4 = sfromR (tproject1 (tproject1 m1)) * m3 ; m5 = recip (sfromR (tproject2 m1) * sfromR (tproject2 m1) + m4 * m4) ; m7 = (negate (sfromR (tproject2 m1)) * m5) * sfromR dret + sfromR (tproject2 m1) * sfromR dret in tpair (tpair (m3 * m7) (cos (sfromR (tproject2 (tproject1 m1))) * (sfromR (tproject1 (tproject1 m1)) * m7))) ((m4 * m5) * sfromR dret + m4 * sfromR dret))"

type Matrix2x2f :: Target -> Type -> Type
type Matrix2x2f f r = f (TKS '[2, 2] r)

sumFooMatrix :: (ADReady f, RealFloat (Matrix2x2f f r), GoodScalar r)
             => (Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r)
             -> f (TKScalar r)
sumFooMatrix :: forall (f :: Target) r.
(ADReady f, RealFloat (Matrix2x2f f r), GoodScalar r) =>
(Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r) -> f (TKScalar r)
sumFooMatrix = f (TKS ('[] @Natural) r) -> f (TKScalar r)
forall r.
GoodScalar r =>
f (TKS ('[] @Natural) r) -> f (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (f (TKS ('[] @Natural) r) -> f (TKScalar r))
-> ((Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r)
    -> f (TKS ('[] @Natural) r))
-> (Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r)
-> f (TKScalar r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Matrix2x2f f r -> f (TKS ('[] @Natural) r)
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (Matrix2x2f f r -> f (TKS ('[] @Natural) r))
-> ((Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r)
    -> Matrix2x2f f r)
-> (Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r)
-> f (TKS ('[] @Natural) r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r) -> Matrix2x2f f r
forall a. RealFloat a => (a, a, a) -> a
foo

testfooSumMatrix :: Assertion
testfooSumMatrix :: Assertion
testfooSumMatrix =
  Rational
-> Concrete (TKScalar Double)
-> Concrete (TKScalar Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    Concrete (TKScalar Double)
16.96957456410211
    (ThreeMatrices Double -> Concrete (TKScalar Double)
forall (f :: Target) r.
(ADReady f, RealFloat (Matrix2x2f f r), GoodScalar r) =>
(Matrix2x2f f r, Matrix2x2f f r, Matrix2x2f f r) -> f (TKScalar r)
sumFooMatrix ThreeMatrices Double
threeSimpleMatrices)

foo2 :: RealFloatH a => (a, a, a) -> a
foo2 :: forall a. RealFloatH a => (a, a, a) -> a
foo2 (a
x, a
y, a
z) =
  let w :: a
w = a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
y
  in a -> a -> a
forall a. RealFloatH a => a -> a -> a
atan2H a
z a
w a -> a -> a
forall a. Num a => a -> a -> a
+ a
z a -> a -> a
forall a. Num a => a -> a -> a
* a
w

gradFooMatrix2 :: (Differentiable r, GoodScalar r)
               => (Concrete (TKR 2 r), Concrete (TKR 2 r), Concrete (TKR 2 r))
               -> (Concrete (TKR 2 r), Concrete (TKR 2 r), Concrete (TKR 2 r))
gradFooMatrix2 :: forall r.
(Differentiable r, GoodScalar r) =>
(Concrete (TKR 2 r), Concrete (TKR 2 r), Concrete (TKR 2 r))
-> (Concrete (TKR 2 r), Concrete (TKR 2 r), Concrete (TKR 2 r))
gradFooMatrix2 = ((AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
  AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
  AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
 -> AstTensor AstMethodLet FullSpan (TKScalar r))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
      AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
      AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
      AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
      AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor AstMethodLet FullSpan (TKR 0 r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKR 0 r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (AstTensor AstMethodLet FullSpan (TKR 0 r)
 -> AstTensor AstMethodLet FullSpan (TKScalar r))
-> ((AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
     AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
     AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
    -> AstTensor AstMethodLet FullSpan (TKR 0 r))
-> (AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
    AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
    AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r))
-> AstTensor AstMethodLet FullSpan (TKR 0 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r))
 -> AstTensor AstMethodLet FullSpan (TKR 0 r))
-> ((AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
     AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
     AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
    -> AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
-> (AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
    AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
    AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
-> AstTensor AstMethodLet FullSpan (TKR 0 r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
 AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)),
 AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r)))
-> AstTensor AstMethodLet FullSpan (TKR2 2 (TKScalar r))
forall a. RealFloatH a => (a, a, a) -> a
foo2)

testGradFooMatrix2 :: Assertion
testGradFooMatrix2 :: Assertion
testGradFooMatrix2 =
  Rational
-> (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
    Concrete (TKR 2 Double))
-> (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
    Concrete (TKR 2 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
2, Int
Item (IShR 2)
2] [Double
2.4396285219055063 :: Double,Double
Item [Double]
2.4396285219055063,Double
Item [Double]
2.4396285219055063,Double
Item [Double]
2.4396285219055063], IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
2, Int
Item (IShR 2)
2] [-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421,-Double
1.953374825727421], IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
2, Int
Item (IShR 2)
2] [Double
Item [Double]
0.9654825811012627,Double
Item [Double]
0.9654825811012627,Double
Item [Double]
0.9654825811012627,Double
Item [Double]
0.9654825811012627])
    ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
 Concrete (TKR 2 Double))
-> (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
    Concrete (TKR 2 Double))
forall r.
(Differentiable r, GoodScalar r) =>
(Concrete (TKR 2 r), Concrete (TKR 2 r), Concrete (TKR 2 r))
-> (Concrete (TKR 2 r), Concrete (TKR 2 r), Concrete (TKR 2 r))
gradFooMatrix2 (IShR 2 -> Concrete (TKR 0 Double) -> Concrete (TKR 2 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 2)
2, Int
Item (IShR 2)
2] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1), IShR 2 -> Concrete (TKR 0 Double) -> Concrete (TKR 2 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 2)
2, Int
Item (IShR 2)
2] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2), IShR 2 -> Concrete (TKR 0 Double) -> Concrete (TKR 2 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 2)
2, Int
Item (IShR 2)
2] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.3)))

testGradFooMatrixPP :: Assertion
testGradFooMatrixPP :: Assertion
testGradFooMatrixPP = do
  Assertion
resetVarCounter
  (let ftk :: FullShapeTK (TKR2 ((0 + 1) + 1) (TKScalar Double))
ftk = IShR ((0 + 1) + 1)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 ((0 + 1) + 1) (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR (Int
2 Int -> ShR (0 + 1) Int -> IShR ((0 + 1) + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: Int
2 Int -> IShR 0 -> ShR (0 + 1) Int
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR) (forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar @Double)
    in AstArtifactRev
  (TKProduct
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
  (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> AstArtifactRev
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
     (TKR 2 Double)
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> AstArtifactRev (X src) ztgt
revArtifactAdapt IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2 (FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct FullShapeTK (TKR 2 Double)
ftk FullShapeTK (TKR 2 Double)
ftk) FullShapeTK (TKR 2 Double)
ftk)))
      [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m2 = sin (sfromR (tproject2 (tproject1 m1))) ; m3 = sfromR (tproject1 (tproject1 m1)) * m2 ; m4 = recip (sfromR (tproject2 m1) * sfromR (tproject2 m1) + m3 * m3) ; m5 = sin (sfromR (tproject2 (tproject1 m1))) ; m6 = sfromR (tproject1 (tproject1 m1)) * m5 ; m8 = sfromR (tproject2 m1) * sfromR dret ; m9 = (negate (sfromR (tproject2 m1)) * m4) * sfromR dret in tpair (tpair (rfromS (m2 * m9 + m5 * m8)) (rfromS (cos (sfromR (tproject2 (tproject1 m1))) * (sfromR (tproject1 (tproject1 m1)) * m9) + cos (sfromR (tproject2 (tproject1 m1))) * (sfromR (tproject1 (tproject1 m1)) * m8)))) (rfromS ((m3 * m4) * sfromR dret + m6 * sfromR dret))"

testGradFooMatrixSimpPP :: Assertion
testGradFooMatrixSimpPP :: Assertion
testGradFooMatrixSimpPP = do
  Assertion
resetVarCounter
  (let ftk :: FullShapeTK (TKR2 ((0 + 1) + 1) (TKScalar Double))
ftk = IShR ((0 + 1) + 1)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 ((0 + 1) + 1) (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR (Int
2 Int -> ShR (0 + 1) Int -> IShR ((0 + 1) + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: Int
2 Int -> IShR 0 -> ShR (0 + 1) Int
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR) (forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar @Double)
    in AstArtifactRev
  (TKProduct
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
  (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
  (TKR 2 Double)
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
     (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact (AstArtifactRev
   (TKProduct
      (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
   (TKR 2 Double)
 -> AstArtifactRev
      (TKProduct
         (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
      (TKR 2 Double))
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
     (TKR 2 Double)
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
     (TKR 2 Double)
forall a b. (a -> b) -> a -> b
$ IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> AstArtifactRev
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
     (TKR 2 Double)
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> AstArtifactRev (X src) ztgt
revArtifactAdapt IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2 (FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK
     (TKProduct
        (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct FullShapeTK (TKR 2 Double)
ftk FullShapeTK (TKR 2 Double)
ftk) FullShapeTK (TKR 2 Double)
ftk)))
      [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tconvert (ConvT2 (ConvT2 (ConvCmp (ConvXR STKScalar) ConvSX) (ConvCmp (ConvXR STKScalar) ConvSX)) (ConvCmp (ConvXR STKScalar) ConvSX)) (STKProduct (STKProduct (STKS [2,2] STKScalar) (STKS [2,2] STKScalar)) (STKS [2,2] STKScalar)) (let m2 = sin (sfromR (tproject2 (tproject1 m1))) ; m3 = sfromR (tproject1 (tproject1 m1)) * m2 ; m4 = recip (sfromR (tproject2 m1) * sfromR (tproject2 m1) + m3 * m3) ; m5 = sin (sfromR (tproject2 (tproject1 m1))) ; m8 = sfromR (tproject2 m1) * sfromR dret ; m9 = (negate (sfromR (tproject2 m1)) * m4) * sfromR dret in tpair (tpair (m2 * m9 + m5 * m8) (cos (sfromR (tproject2 (tproject1 m1))) * (sfromR (tproject1 (tproject1 m1)) * m9) + cos (sfromR (tproject2 (tproject1 m1))) * (sfromR (tproject1 (tproject1 m1)) * m8))) ((m3 * m4) * sfromR dret + (sfromR (tproject1 (tproject1 m1)) * m5) * sfromR dret))"

gradFooScalar :: forall r. r ~ Double
              => (r, r, r) -> (r, r, r)
gradFooScalar :: forall r.
((r :: Type) ~ (Double :: Type)) =>
(r, r, r) -> (r, r, r)
gradFooScalar = (Concrete (TKScalar Double), Concrete (TKScalar Double),
 Concrete (TKScalar Double))
-> (r, r, r)
DValue (r, r, r) -> (r, r, r)
forall vals. DualNumberValue vals => DValue vals -> vals
fromDValue ((Concrete (TKScalar Double), Concrete (TKScalar Double),
  Concrete (TKScalar Double))
 -> (r, r, r))
-> ((r, r, r)
    -> (Concrete (TKScalar Double), Concrete (TKScalar Double),
        Concrete (TKScalar Double)))
-> (r, r, r)
-> (r, r, r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((AstTensor AstMethodLet FullSpan (TKScalar Double),
  AstTensor AstMethodLet FullSpan (TKScalar Double),
  AstTensor AstMethodLet FullSpan (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKScalar Double),
      AstTensor AstMethodLet FullSpan (TKScalar Double),
      AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKScalar Double),
      AstTensor AstMethodLet FullSpan (TKScalar Double),
      AstTensor AstMethodLet FullSpan (TKScalar Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor AstMethodLet FullSpan (TKScalar Double),
 AstTensor AstMethodLet FullSpan (TKScalar Double),
 AstTensor AstMethodLet FullSpan (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2 ((Concrete (TKScalar Double), Concrete (TKScalar Double),
  Concrete (TKScalar Double))
 -> (Concrete (TKScalar Double), Concrete (TKScalar Double),
     Concrete (TKScalar Double)))
-> ((r, r, r)
    -> (Concrete (TKScalar Double), Concrete (TKScalar Double),
        Concrete (TKScalar Double)))
-> (r, r, r)
-> (Concrete (TKScalar Double), Concrete (TKScalar Double),
    Concrete (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r, r, r)
-> (Concrete (TKScalar Double), Concrete (TKScalar Double),
    Concrete (TKScalar Double))
Value
  (Concrete (TKScalar Double), Concrete (TKScalar Double),
   Concrete (TKScalar Double))
-> (Concrete (TKScalar Double), Concrete (TKScalar Double),
    Concrete (TKScalar Double))
forall vals. TermValue vals => Value vals -> vals
fromValue

testGradFooScalar :: Assertion
testGradFooScalar :: Assertion
testGradFooScalar =
  Rational
-> (Double, Double, Double)
-> (Double, Double, Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double
2.4396285219055063, -Double
1.953374825727421, Double
0.9654825811012627)
    ((Double, Double, Double) -> (Double, Double, Double)
forall r.
((r :: Type) ~ (Double :: Type)) =>
(r, r, r) -> (r, r, r)
gradFooScalar (Double
1.1, Double
2.2, Double
3.3))

gradCFooScalar :: forall r. r ~ Float
               => (r, r, r) -> (r, r, r)
gradCFooScalar :: forall r. ((r :: Type) ~ (Float :: Type)) => (r, r, r) -> (r, r, r)
gradCFooScalar = (Concrete (TKScalar Float), Concrete (TKScalar Float),
 Concrete (TKScalar Float))
-> (r, r, r)
DValue (r, r, r) -> (r, r, r)
forall vals. DualNumberValue vals => DValue vals -> vals
fromDValue ((Concrete (TKScalar Float), Concrete (TKScalar Float),
  Concrete (TKScalar Float))
 -> (r, r, r))
-> ((r, r, r)
    -> (Concrete (TKScalar Float), Concrete (TKScalar Float),
        Concrete (TKScalar Float)))
-> (r, r, r)
-> (r, r, r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ADVal Concrete (TKScalar Float), ADVal Concrete (TKScalar Float),
  ADVal Concrete (TKScalar Float))
 -> ADVal Concrete (TKScalar Float))
-> DValue
     (ADVal Concrete (TKScalar Float), ADVal Concrete (TKScalar Float),
      ADVal Concrete (TKScalar Float))
-> DValue
     (ADVal Concrete (TKScalar Float), ADVal Concrete (TKScalar Float),
      ADVal Concrete (TKScalar Float))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKScalar Float), ADVal Concrete (TKScalar Float),
 ADVal Concrete (TKScalar Float))
-> ADVal Concrete (TKScalar Float)
forall a. RealFloatH a => (a, a, a) -> a
foo2 ((Concrete (TKScalar Float), Concrete (TKScalar Float),
  Concrete (TKScalar Float))
 -> (Concrete (TKScalar Float), Concrete (TKScalar Float),
     Concrete (TKScalar Float)))
-> ((r, r, r)
    -> (Concrete (TKScalar Float), Concrete (TKScalar Float),
        Concrete (TKScalar Float)))
-> (r, r, r)
-> (Concrete (TKScalar Float), Concrete (TKScalar Float),
    Concrete (TKScalar Float))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r, r, r)
-> (Concrete (TKScalar Float), Concrete (TKScalar Float),
    Concrete (TKScalar Float))
Value
  (Concrete (TKScalar Float), Concrete (TKScalar Float),
   Concrete (TKScalar Float))
-> (Concrete (TKScalar Float), Concrete (TKScalar Float),
    Concrete (TKScalar Float))
forall vals. TermValue vals => Value vals -> vals
fromValue

testGradCFooScalar :: Assertion
testGradCFooScalar :: Assertion
testGradCFooScalar =
  Rational
-> (Float, Float, Float) -> (Float, Float, Float) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Float
2.4396284,-Float
1.9533751,Float
0.96548253)
    ((Float, Float, Float) -> (Float, Float, Float)
forall r. ((r :: Type) ~ (Float :: Type)) => (r, r, r) -> (r, r, r)
gradCFooScalar (Float
1.1, Float
2.2, Float
3.3))

testFooS :: Assertion
testFooS :: Assertion
testFooS = do
  Rational
-> (Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> (Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.4396285219055063, Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl (-Double
1.953374825727421), Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
0.9654825811012627)
    (((AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS @_ @Double (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 @'[3, 534, 3] @(TKScalar Double) (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double)
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS
            ((':)
               @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
            Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2) (Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1, Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.2, Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3.3))

testFooSToFloat :: Assertion
testFooSToFloat :: Assertion
testFooSToFloat = do
  Rational
-> (Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> (Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-5
    (Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.4396285219055063, Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl (-Double
1.953374825727421), Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
0.9654825811012627)
    (((AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Float))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS @_ @Float (AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
 -> AstTensor AstMethodLet FullSpan (TKScalar Float))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Float)
-> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Float)
 -> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS
            ((':)
               @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
            Float))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Float)
forall r1 r2 (target :: Target) (sh :: [Natural]).
(RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2,
 BaseTensor target) =>
target (TKS sh r1) -> target (TKS sh r2)
scast (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double)
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS
            ((':)
               @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
            Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2)
         (Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1 :: Concrete (TKS '[3, 534, 3] Double), Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.2, Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3.3))

testFooSBoth :: Assertion
testFooSBoth :: Assertion
testFooSBoth = do
  Rational
-> (Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> (Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float),
    Concrete
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-5
    (Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.439628436155373, Float
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Float)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl (-Float
1.9533749), Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
0.9654825479484146)
    (((AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Float),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Float))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Float),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Float),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS @_ @Float (AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
 -> AstTensor AstMethodLet FullSpan (TKScalar Float))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Float),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Float)
-> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Float)
 -> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Float),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS
            ((':)
               @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
            Float))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Float)
forall r1 r2 (target :: Target) (sh :: [Natural]).
(RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2,
 BaseTensor target) =>
target (TKS sh r1) -> target (TKS sh r2)
scast (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double)
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Float),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS
            ((':)
               @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
            Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double),
 AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
      Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2 ((AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
       Double))
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Float),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
          Double))
    -> (AstTensor
          AstMethodLet
          FullSpan
          (TKS
             ((':)
                @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
             Double),
        AstTensor
          AstMethodLet
          FullSpan
          (TKS
             ((':)
                @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
             Double),
        AstTensor
          AstMethodLet
          FullSpan
          (TKS
             ((':)
                @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
             Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Float),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
         Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\(AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Double)
d, AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Float)
f, AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Double)
d2) -> (AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Double)
d, AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Float)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall r1 r2 (target :: Target) (sh :: [Natural]).
(RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2,
 BaseTensor target) =>
target (TKS sh r1) -> target (TKS sh r2)
scast AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Float)
f, AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
     Double)
d2)))
         ( Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1 :: Concrete (TKS '[3, 534, 3] Double)
         , Float
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Float)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Float
2.2 :: Concrete (TKS '[3, 534, 3] Float)
         , Double
-> Concrete
     (TKS
        ((':)
           @Natural 3 ((':) @Natural 534 ((':) @Natural 3 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3.3 ))

testFooBoth :: Assertion
testFooBoth :: Assertion
testFooBoth = do
  Rational
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Float),
    Concrete (TKR 0 Double))
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Float),
    Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-5
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.439628436155373, Float -> Concrete (TKR 0 Float)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Float
1.9533749), Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.9654825479484146)
    (((AstTensor AstMethodLet FullSpan (TKR 0 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Float),
  AstTensor AstMethodLet FullSpan (TKR 0 Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Float))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Float),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Float),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Float (AstTensor AstMethodLet FullSpan (TKR 0 Float)
 -> AstTensor AstMethodLet FullSpan (TKScalar Float))
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Float),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Float))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Float),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Float)
forall r1 r2 (target :: Target) (n :: Natural).
(RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2,
 BaseTensor target) =>
target (TKR n r1) -> target (TKR n r2)
rcast (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 0 Float))
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Float),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Float),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2 ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Float),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> (AstTensor AstMethodLet FullSpan (TKR 0 Double),
        AstTensor AstMethodLet FullSpan (TKR 0 Double),
        AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Float),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\(AstTensor AstMethodLet FullSpan (TKR 0 Double)
d, AstTensor AstMethodLet FullSpan (TKR 0 Float)
f, AstTensor AstMethodLet FullSpan (TKR 0 Double)
d2) -> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
d, AstTensor AstMethodLet FullSpan (TKR 0 Float)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r1 r2 (target :: Target) (n :: Natural).
(RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2,
 BaseTensor target) =>
target (TKR n r1) -> target (TKR n r2)
rcast AstTensor AstMethodLet FullSpan (TKR 0 Float)
f, AstTensor AstMethodLet FullSpan (TKR 0 Double)
d2)))
         ( Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1 :: Concrete (TKR 0 Double)
         , Float -> Concrete (TKR 0 Float)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Float
2.2 :: Concrete (TKR 0 Float)
         , Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.3 ))

-- Add arrays a,b,c, but shifting b and c one to left/right
-- and then remove the first and last element.
--
-- In PyTorch
-- vstack( a[0] + b[1]
--       , a[1:N-1] + b[2:N] + c[:N-2]
--       , a[N-1] + c[N-2] )
vstackABC :: (ADReady target, GoodScalar r)
          => (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
          -> target (TKR 1 r)
vstackABC :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC (target (TKR2 1 (TKScalar r))
a, target (TKR2 1 (TKScalar r))
b, target (TKR2 1 (TKScalar r))
c) =
  let n :: Int
n = target (TKR2 (1 + 0) (TKScalar r)) -> Int
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 (1 + n) x) -> Int
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 (1 + n) x) -> Int
rwidth target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
a
  in NonEmpty (target (TKR2 (1 + 0) (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 (1 + n) x)) -> target (TKR2 (1 + n) x)
rconcat [ Int
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 (target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
a target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
0] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
b target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
1])
             , Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
1 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
a target (TKR2 1 (TKScalar r))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall a. Num a => a -> a -> a
+ Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
2 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
b target (TKR2 1 (TKScalar r))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall a. Num a => a -> a -> a
+ Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
0 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
c
             , Int
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 (target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
a target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
1]
                             target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
c target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
2]) ]

vstackBuild :: (ADReady target, GoodScalar r)
            => (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
            -> target (TKR 1 r)
vstackBuild :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild (target (TKR 1 r)
a, target (TKR 1 r)
b, target (TKR 1 r)
c) =
  let n :: Int
n = target (TKR2 (1 + 0) (TKScalar r)) -> Int
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 (1 + n) x) -> Int
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 (1 + n) x) -> Int
rwidth target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
a
  in Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
n (\PrimalOf target (TKScalar Int64)
i ->
       BoolOf target
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64) -> BoolOf (PrimalOf target)
forall (f :: Target) (y :: TK). EqH f y => f y -> f y -> BoolOf f
==. PrimalOf target (TKScalar Int64)
0)
           (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
a target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
0] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
b target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
1])
           (BoolOf target
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64) -> BoolOf (PrimalOf target)
forall (f :: Target) (y :: TK). EqH f y => f y -> f y -> BoolOf f
==. Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
1)
                (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
a target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
1] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
c target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
2])
                (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
a target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
i] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
b target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
1] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
c target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
1])))

testTrustVstackConcatRepl10 :: Assertion
testTrustVstackConcatRepl10 :: Assertion
testTrustVstackConcatRepl10 = do
  forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @Concrete @Double (IShR 1 -> Double -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
10] Double
1, IShR 1 -> Double -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
10] Double
2, IShR 1 -> Double -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
10] Double
3)
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= IShR 1 -> NonEmpty Double -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> NonEmpty r -> target (TKR n r)
rfromListLinear [Int
Item (IShR 1)
10] [Double
Item (NonEmpty Double)
3.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
4.0]

testTrustVstackConcatIota10 :: Assertion
testTrustVstackConcatIota10 :: Assertion
testTrustVstackConcatIota10 = do
  forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @Concrete @Double (Int -> Concrete (TKR2 1 (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
10, Int -> Concrete (TKR2 1 (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
10, Int -> Concrete (TKR2 1 (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
10)
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= IShR 1 -> NonEmpty Double -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> NonEmpty r -> target (TKR n r)
rfromListLinear [Int
Item (IShR 1)
10] [Double
Item (NonEmpty Double)
1.0,Double
Item (NonEmpty Double)
3.0,Double
Item (NonEmpty Double)
6.0,Double
Item (NonEmpty Double)
9.0,Double
Item (NonEmpty Double)
12.0,Double
Item (NonEmpty Double)
15.0,Double
Item (NonEmpty Double)
18.0,Double
Item (NonEmpty Double)
21.0,Double
Item (NonEmpty Double)
24.0,Double
Item (NonEmpty Double)
17.0]

replIota :: (ADReady target, GoodScalar r)
         => Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
n =
  ( Ranked 1 r -> target (TKR 1 r)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Concrete (TKR 1 r) -> RepConcrete (TKR 1 r)
forall (y :: TK). Concrete y -> RepConcrete y
unConcrete (Concrete (TKR 1 r) -> RepConcrete (TKR 1 r))
-> Concrete (TKR 1 r) -> RepConcrete (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ IShR 1 -> r -> Concrete (TKR 1 r)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
n] r
1 Concrete (TKR 1 r) -> Concrete (TKR 1 r) -> Concrete (TKR 1 r)
forall a. Num a => a -> a -> a
* Int -> Concrete (TKR 1 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
n)
  , Ranked 1 r -> target (TKR 1 r)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Concrete (TKR 1 r) -> RepConcrete (TKR 1 r)
forall (y :: TK). Concrete y -> RepConcrete y
unConcrete (Concrete (TKR 1 r) -> RepConcrete (TKR 1 r))
-> Concrete (TKR 1 r) -> RepConcrete (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ IShR 1 -> r -> Concrete (TKR 1 r)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
n] r
2 Concrete (TKR 1 r) -> Concrete (TKR 1 r) -> Concrete (TKR 1 r)
forall a. Num a => a -> a -> a
* Int -> Concrete (TKR 1 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
n)
  , Ranked 1 r -> target (TKR 1 r)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Concrete (TKR 1 r) -> RepConcrete (TKR 1 r)
forall (y :: TK). Concrete y -> RepConcrete y
unConcrete (Concrete (TKR 1 r) -> RepConcrete (TKR 1 r))
-> Concrete (TKR 1 r) -> RepConcrete (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ IShR 1 -> r -> Concrete (TKR 1 r)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
n] r
3 Concrete (TKR 1 r) -> Concrete (TKR 1 r) -> Concrete (TKR 1 r)
forall a. Num a => a -> a -> a
* Int -> Concrete (TKR 1 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
n) )

testTrustVstackConcatReplIota10 :: Assertion
testTrustVstackConcatReplIota10 :: Assertion
testTrustVstackConcatReplIota10 = do
  forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @Concrete @Double (Int
-> (Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
10)
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= IShR 1 -> NonEmpty Double -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> NonEmpty r -> target (TKR n r)
rfromListLinear [Int
Item (IShR 1)
10] [Double
Item (NonEmpty Double)
2.0,Double
Item (NonEmpty Double)
5.0,Double
Item (NonEmpty Double)
11.0,Double
Item (NonEmpty Double)
17.0,Double
Item (NonEmpty Double)
23.0,Double
Item (NonEmpty Double)
29.0,Double
Item (NonEmpty Double)
35.0,Double
Item (NonEmpty Double)
41.0,Double
Item (NonEmpty Double)
47.0,Double
Item (NonEmpty Double)
33.0]

nN :: Int
nN :: Int
nN = (Double -> Int
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round :: Double -> Int) Double
1e6  -- 1e6

trustedResult :: Concrete (TKR 1 Double)
trustedResult :: Concrete (TKR2 1 (TKScalar Double))
trustedResult =
  Concrete (TKR 1 Float) -> Concrete (TKR2 1 (TKScalar Double))
forall r1 r2 (target :: Target) (n :: Natural).
(RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2,
 BaseTensor target) =>
target (TKR n r1) -> target (TKR n r2)
rcast (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @Concrete @Float (Int
-> (Concrete (TKR 1 Float), Concrete (TKR 1 Float),
    Concrete (TKR 1 Float))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
nN))
    -- the cast prevents computation sharing with the first test below

testVstackWarmup :: Assertion
testVstackWarmup :: Assertion
testVstackWarmup = do
  trustedResult
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackConcatConcrete :: Assertion
testVstackConcatConcrete :: Assertion
testVstackConcatConcrete = do
  forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @Concrete @Double (Int
-> (Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
nN)
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildConcrete :: Assertion
testVstackBuildConcrete :: Assertion
testVstackBuildConcrete = do
  forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @Concrete @Double (Int
-> (Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
nN)
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackConcatAst :: Assertion
testVstackConcatAst :: Assertion
testVstackConcatAst = do
  forall (target :: Target) (y :: TK).
ADReady target =>
AstEnv target -> AstTensor AstMethodLet FullSpan y -> target y
interpretAstFull @Concrete
    AstEnv Concrete
forall (target :: Target). AstEnv target
emptyEnv
    (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @(AstTensor AstMethodLet FullSpan) @Double
               (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
nN))
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildAst :: Assertion
testVstackBuildAst :: Assertion
testVstackBuildAst = do
  forall (target :: Target) (y :: TK).
ADReady target =>
AstEnv target -> AstTensor AstMethodLet FullSpan y -> target y
interpretAstFull @Concrete
    AstEnv Concrete
forall (target :: Target). AstEnv target
emptyEnv
    (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @(AstTensor AstMethodLet FullSpan) @Double
                 (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
nN))
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildAstSimp :: Assertion
testVstackBuildAstSimp :: Assertion
testVstackBuildAstSimp = do
  forall (target :: Target) (y :: TK).
ADReady target =>
AstEnv target -> AstTensor AstMethodLet FullSpan y -> target y
interpretAstFull @Concrete
    AstEnv Concrete
forall (target :: Target). AstEnv target
emptyEnv
      (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (z :: TK) (s :: AstSpanType).
AstSpan s =>
AstTensor AstMethodLet s z -> AstTensor AstMethodLet s z
simplifyInlineContract
         (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @(AstTensor AstMethodLet FullSpan) @Double
                      (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
nN)))
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildAstPP :: Assertion
testVstackBuildAstPP :: Assertion
testVstackBuildAstPP = do
  Assertion
resetVarCounter
  let (AstVarName
  FullSpan
  (TKProduct
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double)))
var3, AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3) =
        FullShapeTK
  (TKProduct
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double)))
-> Maybe (Int64, Int64)
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKProduct
         (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
         (TKR2 1 (TKScalar Double)))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> (AstVarName
      FullSpan
      (TKProduct
         (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
         (TKR2 1 (TKScalar Double))),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (FullShapeTK
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
-> FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK
     (TKProduct
        (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
        (TKR2 1 (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
10] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
10] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)) (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
10] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
          Maybe (Int64, Int64)
forall a. Maybe a
Nothing (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @(AstTensor AstMethodLet FullSpan) @Double ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
  AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
  AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
 -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKProduct
         (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
         (TKR2 1 (TKScalar Double)))
    -> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
        AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
        AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKProduct
        (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
        (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKProduct
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double)))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
AstTensor
  AstMethodLet
  FullSpan
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
      AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
      AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) vals.
AdaptableTarget target vals =>
target (X vals) -> vals
fromTarget)
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName
  FullSpan
  (TKProduct
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double)))
-> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName
  FullSpan
  (TKProduct
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double)))
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstPretty AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (let x9 = sfromR (tproject1 (tproject1 v1)) !$ [0] + sfromR (tproject2 (tproject1 v1)) !$ [1] ; v10 = let x6 = sfromR (tproject1 (tproject1 v1)) !$ [9] + sfromR (tproject2 v1) !$ [8] ; v7 = (sfromR (tproject1 (tproject1 v1)) + sappend (sslice (SNat @1) (SNat @9) (sfromR (tproject2 (tproject1 v1)))) (sconcrete (sfromListLinear [1] [0.0]))) + sappend (sconcrete (sfromListLinear [1] [0.0])) (sslice (SNat @0) (SNat @9) (sfromR (tproject2 v1))) in sappend (sslice (SNat @0) (SNat @9) v7) (sreplicate @1 x6) in sappend (sreplicate @1 x9) (sslice (SNat @1) (SNat @9) v10))"
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName
  FullSpan
  (TKProduct
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double)))
-> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName
  FullSpan
  (TKProduct
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double)))
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstPretty (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (z :: TK) (s :: AstSpanType).
AstSpan s =>
AstTensor AstMethodLet s z -> AstTensor AstMethodLet s z
simplifyInlineContract AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (sappend (sreplicate @1 (sfromR (tproject1 (tproject1 v1)) !$ [0] + sfromR (tproject2 (tproject1 v1)) !$ [1])) (sappend ((sslice (SNat @1) (SNat @8) (sfromR (tproject1 (tproject1 v1))) + sslice (SNat @2) (SNat @8) (sfromR (tproject2 (tproject1 v1)))) + sslice (SNat @0) (SNat @8) (sfromR (tproject2 v1))) (sreplicate @1 (sfromR (tproject1 (tproject1 v1)) !$ [9] + sfromR (tproject2 v1) !$ [8]))))"

{- The above is:
\v1 ->
  rfromS
    (sappend
       (sreplicate @1
          (sfromR (tproject1 (tproject1 v1)) !$ [0] +
           sfromR (tproject2 (tproject1 v1)) !$ [1]))
       (sappend
          ((sslice (SNat @1) (SNat @8) (sfromR (tproject1 (tproject1 v1))) +
            sslice (SNat @2) (SNat @8) (sfromR (tproject2 (tproject1 v1)))) +
           sslice (SNat @0) (SNat @8) (sfromR (tproject2 v1)))
          (sreplicate @1
             (sfromR (tproject1 (tproject1 v1)) !$ [9] +
              sfromR (tproject2 v1) !$ [8]))))
-}

replIota2 :: (ADReady target, GoodScalar r)
          => Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 Int
n =
  (IShR 1 -> r -> target (TKR 1 r)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
n] r
1 target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* Int -> target (TKR 1 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
n, IShR 1 -> r -> target (TKR 1 r)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
n] r
2 target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* Int -> target (TKR 1 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
n, IShR 1 -> r -> target (TKR 1 r)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> r -> target (TKR n r)
rrepl [Int
Item (IShR 1)
n] r
3 target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* Int -> target (TKR 1 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
Int -> target (TKR 1 r)
riota Int
n)

testVstackConcatConcrete2 :: Assertion
testVstackConcatConcrete2 :: Assertion
testVstackConcatConcrete2 = do
  forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @Concrete @Double (Int
-> (Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota Int
nN)
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildConcrete2 :: Assertion
testVstackBuildConcrete2 :: Assertion
testVstackBuildConcrete2 = do
  forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @Concrete @Double (Int
-> (Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)),
    Concrete (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 Int
nN)
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackConcatAst2 :: Assertion
testVstackConcatAst2 :: Assertion
testVstackConcatAst2 = do
  forall (target :: Target) (y :: TK).
ADReady target =>
AstEnv target -> AstTensor AstMethodLet FullSpan y -> target y
interpretAstFull @Concrete
    AstEnv Concrete
forall (target :: Target). AstEnv target
emptyEnv
    (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackABC @(AstTensor AstMethodLet FullSpan) @Double
               (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 Int
nN))
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildAst2 :: Assertion
testVstackBuildAst2 :: Assertion
testVstackBuildAst2 = do
  forall (target :: Target) (y :: TK).
ADReady target =>
AstEnv target -> AstTensor AstMethodLet FullSpan y -> target y
interpretAstFull @Concrete
    AstEnv Concrete
forall (target :: Target). AstEnv target
emptyEnv
    (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @(AstTensor AstMethodLet FullSpan) @Double
                 (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 Int
nN))
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildAstSimp2 :: Assertion
testVstackBuildAstSimp2 :: Assertion
testVstackBuildAstSimp2 = do
  forall (target :: Target) (y :: TK).
ADReady target =>
AstEnv target -> AstTensor AstMethodLet FullSpan y -> target y
interpretAstFull @Concrete
    AstEnv Concrete
forall (target :: Target). AstEnv target
emptyEnv
      (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (z :: TK) (s :: AstSpanType).
AstSpan s =>
AstTensor AstMethodLet s z -> AstTensor AstMethodLet s z
simplifyInlineContract
         (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @(AstTensor AstMethodLet FullSpan) @Double
                      (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 Int
nN)))
  Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double)) -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= Concrete (TKR2 1 (TKScalar Double))
trustedResult

testVstackBuildAstPP2 :: Assertion
testVstackBuildAstPP2 :: Assertion
testVstackBuildAstPP2 = do
  Assertion
resetVarCounter
  (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstPretty
     (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @(AstTensor AstMethodLet FullSpan) @Double
                  (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 Int
10)))
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"rfromS (let x14 = sfromIntegral (sscalar 0) + sscalar 2.0 * sfromIntegral (sscalar 1) ; v15 = let x11 = sfromIntegral (sscalar 9) + sscalar 3.0 * sfromIntegral (sscalar 8) ; v12 = (siota (SNat @10) + (let v2 = sconcrete (sreplicate [10] 1) + siota (SNat @10) in sgather (sconcrete (sreplicate [10] 2.0)) (\\[i8] -> [kfromS (v2 !$ [i8])]) * sgather (sfromVector (fromList [sfromIntegral v2, sconcrete (sreplicate [10] 0.0)])) (\\[i9] -> [ifH (sscalar (-9) <=. negate (v2 !$ [i9])) 0 1, i9]))) + (let v3 = sconcrete (sreplicate [10] (-1)) + siota (SNat @10) in sgather (sconcrete (sreplicate [10] 3.0)) (\\[i6] -> [kfromS (v3 !$ [i6])]) * sgather (sfromVector (fromList [sfromIntegral v3, sconcrete (sreplicate [10] 0.0)])) (\\[i7] -> [ifH (sscalar 0 <=. v3 !$ [i7]) 0 1, i7])) in sappend (sslice (SNat @0) (SNat @9) v12) (sreplicate @1 x11) in sappend (sreplicate @1 x14) (sslice (SNat @1) (SNat @9) v15))"
  (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstPretty
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (z :: TK) (s :: AstSpanType).
AstSpan s =>
AstTensor AstMethodLet s z -> AstTensor AstMethodLet s z
simplifyInlineContract
        (forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
(target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
-> target (TKR 1 r)
vstackBuild @(AstTensor AstMethodLet FullSpan) @Double
                     (Int
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
Int -> (target (TKR 1 r), target (TKR 1 r), target (TKR 1 r))
replIota2 Int
10))))
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"rfromS (sappend (sconcrete (sfromListLinear [1] [2.0])) (sappend (sconcrete (sfromListLinear [8] [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0]) + (sgather (sconcrete (sreplicate [10] 2.0)) (\\[i23] -> [kfromS (sconcrete (sfromListLinear [10] [1,2,3,4,5,6,7,8,9,10]) !$ [1 + i23])]) * sgather (sfromVector (fromList [sfromIntegral (sconcrete (sfromListLinear [8] [2,3,4,5,6,7,8,9])), sconcrete (sreplicate [8] 0.0)])) (\\[i24] -> [ifH (sscalar (-9) <=. negate (sconcrete (sfromListLinear [10] [1,2,3,4,5,6,7,8,9,10]) !$ [1 + i24])) 0 1, i24]) + sgather (sconcrete (sreplicate [10] 3.0)) (\\[i21] -> [kfromS (sconcrete (sfromListLinear [10] [-1,0,1,2,3,4,5,6,7,8]) !$ [1 + i21])]) * sgather (sfromVector (fromList [sfromIntegral (sconcrete (sfromListLinear [8] [0,1,2,3,4,5,6,7])), sconcrete (sreplicate [8] 0.0)])) (\\[i22] -> [ifH (sscalar 0 <=. sconcrete (sfromListLinear [10] [-1,0,1,2,3,4,5,6,7,8]) !$ [1 + i22]) 0 1, i22]))) (sconcrete (sfromListLinear [1] [33.0]))))"
      -- TODO: this reduced to "rfromS (sconcrete (sfromListLinear [10] [2.0,5.0,11.0,17.0,23.0,29.0,35.0,41.0,47.0,33.0]))" when tshare/tlet were inserted less often

testFooPP :: Assertion
testFooPP :: Assertion
testFooPP = do
  Assertion
resetVarCounter
  let fooT :: (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fooT = forall a. RealFloatH a => (a, a, a) -> a
foo2 @(AstTensor AstMethodLet FullSpan (TKR 0 Double))
      foo3 :: AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
foo3 AstTensor AstMethodLet FullSpan (TKR 0 Double)
x = (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fooT (AstTensor AstMethodLet FullSpan (TKR 0 Double)
x, AstTensor AstMethodLet FullSpan (TKR 0 Double)
x, AstTensor AstMethodLet FullSpan (TKR 0 Double)
x)
      (AstVarName FullSpan (TKR 0 Double)
var3, AstTensor AstMethodLet FullSpan (TKR 0 Double)
ast3) = FullShapeTK (TKR 0 Double)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstVarName FullSpan (TKR 0 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
foo3
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 0 Double) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 0 Double)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 0 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 0 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (atan2H (sfromR x1) (sfromR x1 * sin (sfromR x1)) + sfromR x1 * (sfromR x1 * sin (sfromR x1)))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fooT (FullShapeTK (TKProduct (TKR 0 Double) (TKR 0 Double))
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tlet (sin (sfromR (tproject2 (tproject1 x1)))) (\\x2 -> tlet (sfromR (tproject1 (tproject1 x1)) * x2) (\\x3 -> tlet (recip (sfromR (tproject2 x1) * sfromR (tproject2 x1) + x3 * x3)) (\\x4 -> tlet (sin (sfromR (tproject2 (tproject1 x1)))) (\\x5 -> tlet (sfromR (tproject1 (tproject1 x1)) * x5) (\\x6 -> tlet (sfromR (tproject2 x1) * sfromR dret) (\\x8 -> tlet ((negate (sfromR (tproject2 x1)) * x4) * sfromR dret) (\\x9 -> tpair (tpair (rfromS (x2 * x9 + x5 * x8)) (rfromS (cos (sfromR (tproject2 (tproject1 x1))) * (sfromR (tproject1 (tproject1 x1)) * x9) + cos (sfromR (tproject2 (tproject1 x1))) * (sfromR (tproject1 (tproject1 x1)) * x8)))) (rfromS ((x3 * x4) * sfromR dret + x6 * sfromR dret)))))))))"
  AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> tlet (sin (sfromR (tproject2 (tproject1 x1)))) (\\x2 -> tlet (sfromR (tproject1 (tproject1 x1)) * x2) (\\x3 -> tlet (sin (sfromR (tproject2 (tproject1 x1)))) (\\x5 -> tlet (sfromR (tproject1 (tproject1 x1)) * x5) (\\x6 -> rfromS (atan2H (sfromR (tproject2 x1)) x3 + sfromR (tproject2 x1) * x6)))))"

fooLetOld :: forall target r n.
          (RealFloatH (target (TKR n r)), LetTensor target)
       => (target (TKR n r), target (TKR n r), target (TKR n r)) -> target (TKR n r)
fooLetOld :: forall (target :: Target) r (n :: Natural).
(RealFloatH (target (TKR n r)), LetTensor target) =>
(target (TKR n r), target (TKR n r), target (TKR n r))
-> target (TKR n r)
fooLetOld (target (TKR n r)
x, target (TKR n r)
y, target (TKR n r)
z) =
  let w0 :: target (TKR n r)
w0 = target (TKR n r)
x target (TKR n r) -> target (TKR n r) -> target (TKR n r)
forall a. Num a => a -> a -> a
* target (TKR n r) -> target (TKR n r)
forall a. Floating a => a -> a
sin target (TKR n r)
y
  in target (TKR n r)
-> (target (TKR n r) -> target (TKR n r)) -> target (TKR n r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR n r)
w0 ((target (TKR n r) -> target (TKR n r)) -> target (TKR n r))
-> (target (TKR n r) -> target (TKR n r)) -> target (TKR n r)
forall a b. (a -> b) -> a -> b
$ \target (TKR n r)
w ->
     target (TKR n r) -> target (TKR n r) -> target (TKR n r)
forall a. RealFloatH a => a -> a -> a
atan2H target (TKR n r)
z target (TKR n r)
w target (TKR n r) -> target (TKR n r) -> target (TKR n r)
forall a. Num a => a -> a -> a
+ target (TKR n r)
z target (TKR n r) -> target (TKR n r) -> target (TKR n r)
forall a. Num a => a -> a -> a
* target (TKR n r)
w

testFooLet :: Assertion
testFooLet :: Assertion
testFooLet = do
  Rational
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.4396285219055063, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Double
1.953374825727421), Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.9654825811012627)
    (((AstTensor AstMethodLet FullSpan (TKR 0 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r (n :: Natural).
(RealFloatH (target (TKR n r)), LetTensor target) =>
(target (TKR n r), target (TKR n r), target (TKR n r))
-> target (TKR n r)
fooLetOld) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.3))

testFooLetPP :: Assertion
testFooLetPP :: Assertion
testFooLetPP = do
  Assertion
resetVarCounter
  let fooLetT :: (AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double))
-> AstTensor AstMethodLet FullSpan (TKR n Double)
fooLetT = forall (target :: Target) r (n :: Natural).
(RealFloatH (target (TKR n r)), LetTensor target) =>
(target (TKR n r), target (TKR n r), target (TKR n r))
-> target (TKR n r)
fooLetOld @(AstTensor AstMethodLet FullSpan) @Double
      fooLet3 :: AstTensor AstMethodLet FullSpan (TKR n Double)
-> AstTensor AstMethodLet FullSpan (TKR n Double)
fooLet3 AstTensor AstMethodLet FullSpan (TKR n Double)
x = (AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double))
-> AstTensor AstMethodLet FullSpan (TKR n Double)
forall {n :: Natural}.
(AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double))
-> AstTensor AstMethodLet FullSpan (TKR n Double)
fooLetT (AstTensor AstMethodLet FullSpan (TKR n Double)
x, AstTensor AstMethodLet FullSpan (TKR n Double)
x, AstTensor AstMethodLet FullSpan (TKR n Double)
x)
      (AstVarName FullSpan (TKR 0 Double)
var3, AstTensor AstMethodLet FullSpan (TKR 0 Double)
ast3) = FullShapeTK (TKR 0 Double)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstVarName FullSpan (TKR 0 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall {n :: Natural}.
AstTensor AstMethodLet FullSpan (TKR n Double)
-> AstTensor AstMethodLet FullSpan (TKR n Double)
fooLet3
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 0 Double) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 0 Double)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 0 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 0 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (tlet (sfromR x1 * sin (sfromR x1)) (\\x2 -> atan2H (sfromR x1) x2 + sfromR x1 * x2))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall {n :: Natural}.
(AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double),
 AstTensor AstMethodLet FullSpan (TKR n Double))
-> AstTensor AstMethodLet FullSpan (TKR n Double)
fooLetT (FullShapeTK (TKProduct (TKR 0 Double) (TKR 0 Double))
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX))) (ConvCmp (ConvXR STKScalar) ConvSX)) (STKProduct (STKProduct (STKS [] STKScalar) (STKS [] STKScalar)) (STKS [] STKScalar)) (let x3 = sin (sfromR (tproject2 (tproject1 x1))) ; x4 = sfromR (tproject1 (tproject1 x1)) * x3 ; x5 = recip (sfromR (tproject2 x1) * sfromR (tproject2 x1) + x4 * x4) ; x7 = (negate (sfromR (tproject2 x1)) * x5) * sfromR dret + sfromR (tproject2 x1) * sfromR dret in tpair (tpair (x3 * x7) (cos (sfromR (tproject2 (tproject1 x1))) * (sfromR (tproject1 (tproject1 x1)) * x7))) ((x4 * x5) * sfromR dret + x4 * sfromR dret))"
  AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (let x4 = sfromR (tproject1 (tproject1 x1)) * sin (sfromR (tproject2 (tproject1 x1))) in atan2H (sfromR (tproject2 x1)) x4 + sfromR (tproject2 x1) * x4)"

shapedListProd :: forall k target r. (BaseTensor target, GoodScalar r)
               => ListR k (target (TKS '[] r)) -> target (TKS '[] r)
shapedListProd :: forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKS ('[] @Natural) r))
-> target (TKS ('[] @Natural) r)
shapedListProd = (target (TKS ('[] @Natural) r)
 -> target (TKS ('[] @Natural) r) -> target (TKS ('[] @Natural) r))
-> ListR k (target (TKS ('[] @Natural) r))
-> target (TKS ('[] @Natural) r)
forall a. (a -> a -> a) -> ListR k a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 target (TKS ('[] @Natural) r)
-> target (TKS ('[] @Natural) r) -> target (TKS ('[] @Natural) r)
forall a. Num a => a -> a -> a
(*)

testListProdPP :: Assertion
testListProdPP :: Assertion
testListProdPP = do
  Assertion
resetVarCounter
  let fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKS '[] Double)) -> AstTensor AstMethodLet FullSpan (TKS '[] Double)
      fT :: ListR
  4
  (AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
fT = ListR
  4
  (AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKS ('[] @Natural) r))
-> target (TKS ('[] @Natural) r)
shapedListProd
  let (AstArtifactRev
  (X (ListR
        4
        (AstTensor
           AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
artifactRev, Delta (AstRaw PrimalSpan) (TKS2 ('[] @Natural) (TKScalar Double))
_deltas) = IncomingCotangentHandling
-> (ListR
      4
      (AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> FullShapeTK
     (X (ListR
           4
           (AstTensor
              AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))))
-> (AstArtifactRev
      (X (ListR
            4
            (AstTensor
               AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))))
      (TKS2 ('[] @Natural) (TKScalar Double)),
    Delta (AstRaw PrimalSpan) (TKS2 ('[] @Natural) (TKScalar Double)))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR
  4
  (AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
fT (FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
-> FullShapeTK
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double))
              (TKProduct
                 (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (ShS ('[] @Natural)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
-> FullShapeTK
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (ShS ('[] @Natural)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
-> FullShapeTK
     (TKProduct (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1))
-> FullShapeTK
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (ShS ('[] @Natural)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK
     (TKProduct (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (ShS ('[] @Natural)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tlet (tproject1 (tproject2 (tproject2 x1)) * tproject1 (tproject2 (tproject2 (tproject2 x1)))) (\\x2 -> tlet (tproject1 (tproject2 x1) * x2) (\\x3 -> tlet (tproject1 x1 * dret) (\\x5 -> tlet (tproject1 (tproject2 x1) * x5) (\\x6 -> tpair (x3 * dret) (tpair (x2 * x5) (tpair (tproject1 (tproject2 (tproject2 (tproject2 x1))) * x6) (tpair (tproject1 (tproject2 (tproject2 x1)) * x6) Z1)))))))"
  AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> tlet (tproject1 (tproject2 (tproject2 x1)) * tproject1 (tproject2 (tproject2 (tproject2 x1)))) (\\x2 -> tlet (tproject1 (tproject2 x1) * x2) (\\x3 -> tproject1 x1 * x3))"
  AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double))
              (TKProduct
                 (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
     (TKS2 ('[] @Natural) (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> let x2 = tproject1 (tproject2 (tproject2 x1)) * tproject1 (tproject2 (tproject2 (tproject2 x1))) ; x5 = tproject1 x1 * dret ; x6 = tproject1 (tproject2 x1) * x5 in tpair ((tproject1 (tproject2 x1) * x2) * dret) (tpair (x2 * x5) (tpair (tproject1 (tproject2 (tproject2 (tproject2 x1))) * x6) (tpair (tproject1 (tproject2 (tproject2 x1)) * x6) Z1)))"
  AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double))
              (TKProduct
                 (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
     (TKS2 ('[] @Natural) (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS2 ('[] @Natural) (TKScalar Double))
     (TKProduct
        (TKS2 ('[] @Natural) (TKScalar Double))
        (TKProduct
           (TKS2 ('[] @Natural) (TKScalar Double))
           (TKProduct
              (TKS2 ('[] @Natural) (TKScalar Double)) (TKScalar Z1)))))
  (TKS2 ('[] @Natural) (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> tproject1 x1 * (tproject1 (tproject2 x1) * (tproject1 (tproject2 (tproject2 x1)) * tproject1 (tproject2 (tproject2 (tproject2 x1)))))"

rankedListProdr :: forall k target r. (BaseTensor target, GoodScalar r)
                => ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListProdr :: forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListProdr = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR k (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR k a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
(*)

testListProdrPP :: Assertion
testListProdrPP :: Assertion
testListProdrPP = do
  Assertion
resetVarCounter
  let fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListProdr
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId)))) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar)))) (let x2 = sfromR (tproject1 (tproject2 (tproject2 x1))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) ; x5 = sfromR (tproject1 x1) * sfromR dret ; x6 = sfromR (tproject1 (tproject2 x1)) * x5 in tpair ((sfromR (tproject1 (tproject2 x1)) * x2) * sfromR dret) (tpair (x2 * x5) (tpair (sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * x6) (tpair (sfromR (tproject1 (tproject2 (tproject2 x1))) * x6) Z1))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sfromR (tproject1 x1) * (sfromR (tproject1 (tproject2 x1)) * (sfromR (tproject1 (tproject2 (tproject2 x1))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))))))"

testListProdrLongPP :: Assertion
testListProdrLongPP :: Assertion
testListProdrLongPP = do
  Assertion
resetVarCounter
  let fT :: ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListProdr
  let (AstArtifactRev
  (X (ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) =
        IncomingCotangentHandling
-> (ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 13 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1)))))))))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct
                                         (TKR 0 Double)
                                         (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1)))))))))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit)))))))))))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))))) (\\x2 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))) * x2) (\\x3 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))) * x3) (\\x4 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))) * x4) (\\x5 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))) * x5) (\\x6 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))) * x6) (\\x7 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))) * x7) (\\x8 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 x1))))) * x8) (\\x9 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * x9) (\\x10 -> tlet (sfromR (tproject1 (tproject2 (tproject2 x1))) * x10) (\\x11 -> tlet (sfromR (tproject1 (tproject2 x1)) * x11) (\\x12 -> tlet (sfromR (tproject1 x1) * sfromR dret) (\\x14 -> tlet (sfromR (tproject1 (tproject2 x1)) * x14) (\\x15 -> tlet (sfromR (tproject1 (tproject2 (tproject2 x1))) * x15) (\\x16 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * x16) (\\x17 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 x1))))) * x17) (\\x18 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))) * x18) (\\x19 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))) * x19) (\\x20 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))) * x20) (\\x21 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))) * x21) (\\x22 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))) * x22) (\\x23 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))) * x23) (\\x24 -> tpair (rfromS (x12 * sfromR dret)) (tpair (rfromS (x11 * x14)) (tpair (rfromS (x10 * x15)) (tpair (rfromS (x9 * x16)) (tpair (rfromS (x8 * x17)) (tpair (rfromS (x7 * x18)) (tpair (rfromS (x6 * x19)) (tpair (rfromS (x5 * x20)) (tpair (rfromS (x4 * x21)) (tpair (rfromS (x3 * x22)) (tpair (rfromS (x2 * x23)) (tpair (rfromS (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))))) * x24)) (tpair (rfromS (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))) * x24)) Z1))))))))))))))))))))))))))))))))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))))) (\\x2 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))) * x2) (\\x3 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))) * x3) (\\x4 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))) * x4) (\\x5 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))) * x5) (\\x6 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))) * x6) (\\x7 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))) * x7) (\\x8 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 x1))))) * x8) (\\x9 -> tlet (sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * x9) (\\x10 -> tlet (sfromR (tproject1 (tproject2 (tproject2 x1))) * x10) (\\x11 -> tlet (sfromR (tproject1 (tproject2 x1)) * x11) (\\x12 -> rfromS (sfromR (tproject1 x1) * x12))))))))))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct
                                         (TKR 0 Double)
                                         (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId))))))))))))) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar))))))))))))) (let x2 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))))) ; x3 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))) * x2 ; x4 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))) * x3 ; x5 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))) * x4 ; x6 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))) * x5 ; x7 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))) * x6 ; x8 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))) * x7 ; x9 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 x1))))) * x8 ; x10 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * x9 ; x11 = sfromR (tproject1 (tproject2 (tproject2 x1))) * x10 ; x14 = sfromR (tproject1 x1) * sfromR dret ; x15 = sfromR (tproject1 (tproject2 x1)) * x14 ; x16 = sfromR (tproject1 (tproject2 (tproject2 x1))) * x15 ; x17 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * x16 ; x18 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 x1))))) * x17 ; x19 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))) * x18 ; x20 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))) * x19 ; x21 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))) * x20 ; x22 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))) * x21 ; x23 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))) * x22 ; x24 = sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))) * x23 in tpair ((sfromR (tproject1 (tproject2 x1)) * x11) * sfromR dret) (tpair (x11 * x14) (tpair (x10 * x15) (tpair (x9 * x16) (tpair (x8 * x17) (tpair (x7 * x18) (tpair (x6 * x19) (tpair (x5 * x20) (tpair (x4 * x21) (tpair (x3 * x22) (tpair (x2 * x23) (tpair (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))))) * x24) (tpair (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))) * x24) Z1)))))))))))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct
                                         (TKR 0 Double)
                                         (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double)
              (TKProduct
                 (TKR 0 Double)
                 (TKProduct
                    (TKR 0 Double)
                    (TKProduct
                       (TKR 0 Double)
                       (TKProduct
                          (TKR 0 Double)
                          (TKProduct
                             (TKR 0 Double)
                             (TKProduct
                                (TKR 0 Double)
                                (TKProduct
                                   (TKR 0 Double)
                                   (TKProduct
                                      (TKR 0 Double)
                                      (TKProduct (TKR 0 Double) (TKScalar Z1))))))))))))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sfromR (tproject1 x1) * (sfromR (tproject1 (tproject2 x1)) * (sfromR (tproject1 (tproject2 (tproject2 x1))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 x1))))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1))))))))))) * (sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 (tproject2 x1)))))))))))))))))))))))))"

testListProd :: Assertion
testListProd :: Assertion
testListProd = do
  Rational
-> ListR 4 (Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ListR 4 (Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    [Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
24, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
12, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
8, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
6]
    ((ListR
   4
   (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (ListR
        4
        (AstTensor
           AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
-> Value
     (ListR
        4
        (AstTensor
           AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS @_ @Double (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (ListR
      4
      (AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> ListR
     4
     (AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKS ('[] @Natural) r))
-> target (TKS ('[] @Natural) r)
shapedListProd @4) [Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
4])

testListProdr :: Assertion
testListProdr :: Assertion
testListProdr = do
  Rational
-> ListR 4 (Concrete (TKR 0 Double))
-> ListR 4 (Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    [Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
24, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
12, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
8, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
6]
    ((ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> Value (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListProdr @4) [Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
4])

rankedListSumr :: (BaseTensor target, GoodScalar r)
               => ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSumr :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSumr = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR 4 a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
(+)

testListSumrPP :: Assertion
testListSumrPP :: Assertion
testListSumrPP = do
  Assertion
resetVarCounter Assertion -> Assertion -> Assertion
forall a b. IO a -> IO b -> IO b
forall (m :: Type -> Type) a b. Monad m => m a -> m b -> m b
>> Assertion
resetIdCounter
  let fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSumr
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tpair dret (tpair dret (tpair dret (tpair dret Z1)))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sfromR (tproject1 x1) + (sfromR (tproject1 (tproject2 x1)) + (sfromR (tproject1 (tproject2 (tproject2 x1))) + sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))))))"
  Delta (AstRaw PrimalSpan) (TKR 0 Double) -> [Char]
forall a. Show a => a -> [Char]
show Delta (AstRaw PrimalSpan) (TKR 0 Double)
deltas
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"DeltaConvert (ConvCmp (ConvXR STKScalar) ConvSX) (DeltaShare 100000003 (DeltaAdd (DeltaConvert (ConvCmp (ConvXS' (FTKS [] FTKScalar)) ConvRX) (DeltaInput (InputId 0))) (DeltaShare 100000002 (DeltaAdd (DeltaConvert (ConvCmp (ConvXS' (FTKS [] FTKScalar)) ConvRX) (DeltaInput (InputId 1))) (DeltaShare 100000001 (DeltaAdd (DeltaConvert (ConvCmp (ConvXS' (FTKS [] FTKScalar)) ConvRX) (DeltaInput (InputId 2))) (DeltaConvert (ConvCmp (ConvXS' (FTKS [] FTKScalar)) ConvRX) (DeltaInput (InputId 3)))))))))"

-- Note that the function is not associative, so foldr vs foldl matters.
rankedListSum2r :: (BaseTensor target, GoodScalar r)
                => ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2r :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2r = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR 4 a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 (\target (TKR 0 r)
x target (TKR 0 r)
y -> target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
y)

testListSum2rPP :: Assertion
testListSum2rPP :: Assertion
testListSum2rPP = do
  Assertion
resetVarCounter
  let fT ::  ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2r
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 ConvId (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId)))) (STKProduct (STKR (SNat @0) STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar)))) (let x5 = sscalar 2.0 * sfromR dret ; x6 = sscalar 2.0 * x5 in tpair dret (tpair x5 (tpair x6 (tpair (sscalar 2.0 * x6) Z1))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sfromR (tproject1 x1) + (sscalar 2.0 * sfromR (tproject1 (tproject2 x1)) + (sscalar 4.0 * sfromR (tproject1 (tproject2 (tproject2 x1))) + sscalar 8.0 * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))))))"

rankedListSum22r :: (BaseTensor target, GoodScalar r)
                 => ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum22r :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum22r = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR 4 a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 (\target (TKR 0 r)
x target (TKR 0 r)
y -> r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
y)

testListSum22rPP :: Assertion
testListSum22rPP :: Assertion
testListSum22rPP = do
  Assertion
resetVarCounter
  let fT ::  ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum22r
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId)))) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar)))) (let x5 = sscalar 2.0 * sfromR dret ; x6 = sscalar 2.0 * x5 in tpair (sscalar 2.0 * sfromR dret) (tpair (sscalar 2.0 * x5) (tpair (sscalar 2.0 * x6) (tpair (sscalar 2.0 * x6) Z1))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sscalar 2.0 * sfromR (tproject1 x1) + (sscalar 4.0 * sfromR (tproject1 (tproject2 x1)) + (sscalar 8.0 * sfromR (tproject1 (tproject2 (tproject2 x1))) + sscalar 8.0 * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))))))"

-- Note how this tlet did not change anything, in particular the sharing.
rankedListSumk22r :: ( BaseTensor target, LetTensor target
                     , GoodScalar r )
                 =>  ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSumk22r :: forall (target :: Target) r (k :: Natural).
(BaseTensor target, LetTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSumk22r = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR k (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR k a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 (\target (TKR 0 r)
x target (TKR 0 r)
y -> target (TKR 0 r)
-> (target (TKR 0 r) -> target (TKR 0 r)) -> target (TKR 0 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2) (\target (TKR 0 r)
k -> target (TKR 0 r)
k target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ target (TKR 0 r)
k target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
y))

testListSumk22rPP :: Assertion
testListSumk22rPP :: Assertion
testListSumk22rPP = do
  Assertion
resetVarCounter
  let fT ::  ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r (k :: Natural).
(BaseTensor target, LetTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSumk22r
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId)))) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar)))) (let x5 = sscalar 2.0 * sfromR dret ; x6 = sscalar 2.0 * x5 in tpair (sscalar 2.0 * sfromR dret) (tpair (sscalar 2.0 * x5) (tpair (sscalar 2.0 * x6) (tpair (sscalar 2.0 * x6) Z1))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sscalar 2.0 * sfromR (tproject1 x1) + (sscalar 4.0 * sfromR (tproject1 (tproject2 x1)) + (sscalar 8.0 * sfromR (tproject1 (tproject2 (tproject2 x1))) + sscalar 8.0 * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))))))"

rankedListSum2xpyr :: (BaseTensor target, GoodScalar r)
                   =>  ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2xpyr :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2xpyr = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR 4 a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 (\target (TKR 0 r)
x target (TKR 0 r)
y -> r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* (target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ target (TKR 0 r)
y))

testListSum2xpyrPP :: Assertion
testListSum2xpyrPP :: Assertion
testListSum2xpyrPP = do
  Assertion
resetVarCounter
  let fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2xpyr
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId)))) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar)))) (let x6 = sscalar 2.0 * sfromR dret ; x7 = sscalar 2.0 * x6 ; x8 = sscalar 2.0 * x7 in tpair x6 (tpair x7 (tpair x8 (tpair x8 Z1))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sscalar 2.0 * sfromR (tproject1 x1) + (sscalar 4.0 * sfromR (tproject1 (tproject2 x1)) + (sscalar 8.0 * sfromR (tproject1 (tproject2 (tproject2 x1))) + sscalar 8.0 * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))))))"

rankedListSum2xyr :: (BaseTensor target, GoodScalar r)
                  => ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2xyr :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2xyr = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR 4 a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 (\target (TKR 0 r)
x target (TKR 0 r)
y -> r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* (target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
y))

testListSum2xyrPP :: Assertion
testListSum2xyrPP :: Assertion
testListSum2xyrPP = do
  Assertion
resetVarCounter
  let fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR 4 (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum2xyr
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId)))) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar)))) (let x3 = sscalar 2.0 * (sfromR (tproject1 (tproject2 (tproject2 x1))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1))))) ; x8 = sscalar 2.0 * sfromR dret ; x9 = sscalar 2.0 * (sfromR (tproject1 x1) * x8) ; x10 = sscalar 2.0 * (sfromR (tproject1 (tproject2 x1)) * x9) in tpair (sscalar 2.0 * ((sfromR (tproject1 (tproject2 x1)) * x3) * x8)) (tpair (x3 * x9) (tpair (sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))) * x10) (tpair (sfromR (tproject1 (tproject2 (tproject2 x1))) * x10) Z1))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sscalar 8.0 * (sfromR (tproject1 x1) * (sfromR (tproject1 (tproject2 x1)) * (sfromR (tproject1 (tproject2 (tproject2 x1))) * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1))))))))"

ranked2xy :: (BaseTensor target, GoodScalar r)
          => (target (TKR 0 r), target (TKR 0 r)) -> target (TKR 0 r)
ranked2xy :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
(target (TKR 0 r), target (TKR 0 r)) -> target (TKR 0 r)
ranked2xy = \(target (TKR 0 r)
x, target (TKR 0 r)
y) -> r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
y

test2xyPP :: Assertion
test2xyPP :: Assertion
test2xyPP = do
  Assertion
resetVarCounter
  let fT :: (AstTensor AstMethodLet FullSpan (TKR 0 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
         -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
(target (TKR 0 r), target (TKR 0 r)) -> target (TKR 0 r)
ranked2xy
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> AstArtifactRev
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX))) (STKProduct (STKS [] STKScalar) (STKS [] STKScalar)) (tpair (sscalar 2.0 * (sfromR (tproject2 x1) * sfromR dret)) (sscalar 2.0 * (sfromR (tproject1 x1) * sfromR dret)))"
  AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> AstArtifactRev
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sscalar 2.0 * (sfromR (tproject1 x1) * sfromR (tproject2 x1)))"

-- Note that the function is not associative, so foldr vs foldl matters.
rankedListSum23r :: forall k target r. (BaseTensor target, GoodScalar r)
                 => ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum23r :: forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum23r = (target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r))
-> ListR k (target (TKR 0 r)) -> target (TKR 0 r)
forall a. (a -> a -> a) -> ListR k a -> a
forall (t :: Type -> Type) a.
Foldable t =>
(a -> a -> a) -> t a -> a
foldr1 (\target (TKR 0 r)
x target (TKR 0 r)
y -> r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
3 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
y)

testListSum23rPP :: Assertion
testListSum23rPP :: Assertion
testListSum23rPP = do
  Assertion
resetVarCounter
  let fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double)) -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (k :: Natural) (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
ListR k (target (TKR 0 r)) -> target (TKR 0 r)
rankedListSum23r
  let (AstArtifactRev
  (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
-> (AstArtifactRev
      (X (ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ListR 4 (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
-> FullShapeTK
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1))))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
-> FullShapeTK
     (TKProduct (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKScalar Z1)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKScalar Z1))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) FullShapeTK (TKScalar Z1)
ftkUnit))))
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) ConvId)))) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) (STKProduct (STKS [] STKScalar) STKScalar)))) (let x5 = sscalar 3.0 * sfromR dret ; x6 = sscalar 3.0 * x5 in tpair (sscalar 2.0 * sfromR dret) (tpair (sscalar 2.0 * x5) (tpair (sscalar 2.0 * x6) (tpair (sscalar 3.0 * x6) Z1))))"
  AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
-> AstArtifactRev
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double)
           (TKProduct
              (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
     (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKR 0 Double)
     (TKProduct
        (TKR 0 Double)
        (TKProduct
           (TKR 0 Double) (TKProduct (TKR 0 Double) (TKScalar Z1)))))
  (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sscalar 2.0 * sfromR (tproject1 x1) + (sscalar 6.0 * sfromR (tproject1 (tproject2 x1)) + (sscalar 18.0 * sfromR (tproject1 (tproject2 (tproject2 x1))) + sscalar 27.0 * sfromR (tproject1 (tproject2 (tproject2 (tproject2 x1)))))))"

ranked23 :: (BaseTensor target, GoodScalar r)
         => (target (TKR 0 r), target (TKR 0 r)) -> target (TKR 0 r)
ranked23 :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
(target (TKR 0 r), target (TKR 0 r)) -> target (TKR 0 r)
ranked23 = \(target (TKR 0 r)
x, target (TKR 0 r)
y) -> r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
x target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
3 target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* target (TKR 0 r)
y

test23PP :: Assertion
test23PP :: Assertion
test23PP = do
  Assertion
resetVarCounter
  let fT :: (AstTensor AstMethodLet FullSpan (TKR 0 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
         -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
      fT :: (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT = (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
(target (TKR 0 r), target (TKR 0 r)) -> target (TKR 0 r)
ranked23
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 0 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 0 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fT (FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 0 Double) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> AstArtifactRev
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret x1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX))) (STKProduct (STKS [] STKScalar) (STKS [] STKScalar)) (tpair (sscalar 2.0 * sfromR dret) (sscalar 3.0 * sfromR dret))"
  AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
-> AstArtifactRev
     (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 0 Double) (TKR 0 Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\x1 -> rfromS (sscalar 2.0 * sfromR (tproject1 x1) + sscalar 3.0 * sfromR (tproject2 x1))"

reluPrimal
  :: forall target n r.
     (ADReady target, GoodScalar r, KnownNat n, Differentiable r)
  => target (TKR n r) -> target (TKR n r)
reluPrimal :: forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
reluPrimal target (TKR n r)
v =
  let oneIfGtZero :: PrimalOf target (TKR n r)
oneIfGtZero = (PrimalOf target (TKR2 0 (TKScalar r))
 -> PrimalOf target (TKR2 0 (TKScalar r)))
-> PrimalOf target (TKR n r) -> PrimalOf target (TKR n r)
forall (n :: Natural) (x :: TK) (x1 :: TK) (target :: Target).
(KnownNat n, KnownSTK x, KnownSTK x1, BaseTensor target) =>
(target (TKR2 0 x1) -> target (TKR2 0 x))
-> target (TKR2 n x1) -> target (TKR2 n x)
rmap0N (\PrimalOf target (TKR2 0 (TKScalar r))
x -> BoolOf (PrimalOf target)
-> PrimalOf target (TKR2 0 (TKScalar r))
-> PrimalOf target (TKR2 0 (TKScalar r))
-> PrimalOf target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (PrimalOf target (TKR2 0 (TKScalar r))
x PrimalOf target (TKR2 0 (TKScalar r))
-> PrimalOf target (TKR2 0 (TKScalar r))
-> BoolOf (PrimalOf target)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
<=. r -> PrimalOf target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0) (r -> PrimalOf target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.0) (r -> PrimalOf target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
1.0))
                           (target (TKR n r) -> PrimalOf target (TKR n r)
forall (target :: Target) (n :: Natural) (x :: TK).
BaseTensor target =>
target (TKR2 n x) -> PrimalOf target (TKR2 n x)
rprimalPart target (TKR n r)
v)
  in PrimalOf target (TKR n r) -> target (TKR n r) -> target (TKR n r)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n) =>
PrimalOf target (TKR n r) -> target (TKR n r) -> target (TKR n r)
scale2 PrimalOf target (TKR n r)
oneIfGtZero target (TKR n r)
v

scale2 :: forall target r n.
          (ADReady target, GoodScalar r, KnownNat n)
       => PrimalOf target (TKR n r) -> target (TKR n r) -> target (TKR n r)
scale2 :: forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n) =>
PrimalOf target (TKR n r) -> target (TKR n r) -> target (TKR n r)
scale2 PrimalOf target (TKR n r)
a target (TKR n r)
d = forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownNat n, KnownSTK x) =>
PrimalOf target (TKR2 n x) -> target (TKR2 n x)
rfromPrimal @target PrimalOf target (TKR n r)
a target (TKR n r) -> target (TKR n r) -> target (TKR n r)
forall a. Num a => a -> a -> a
* target (TKR n r)
d

testReluPP :: Assertion
testReluPP :: Assertion
testReluPP = do
  Assertion
resetVarCounter Assertion -> Assertion -> Assertion
forall a b. IO a -> IO b -> IO b
forall (m :: Type -> Type) a b. Monad m => m a -> m b -> m b
>> Assertion
resetIdCounter
  let reluT :: AstTensor AstMethodLet FullSpan (TKR 2 Double) -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT :: AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
reluPrimal
      (AstVarName FullSpan (TKR 2 Double)
var3, AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3) = FullShapeTK (TKR 2 Double)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstVarName FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 2 Double)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (tfromPrimal (STKS [3,4] STKScalar) (sgather [] (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i4, i3] -> [ifH (sscalar -0.0 <=. negate (tprimalPart (sfromR m1) !$ [i4, i3])) 0 1])) * sfromR m1)"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double))) (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
deltas) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK (X (AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR 2 Double) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev (TKR 2 Double) (TKR 2 Double)
-> AstArtifactRev (TKR 2 Double) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 2 Double) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> rfromS (sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5, i6] -> [ifH (sscalar -0.0 <=. negate (sfromR m1 !$ [i5, i6])) 0 1]) * sfromR dret)"
  AstArtifactRev (TKR 2 Double) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev (TKR 2 Double) (TKR 2 Double)
-> AstArtifactRev (TKR 2 Double) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 2 Double) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5, i6] -> [ifH (sscalar -0.0 <=. negate (sfromR m1 !$ [i5, i6])) 0 1]) * sfromR m1)"
  Delta (AstRaw PrimalSpan) (TKR 2 Double) -> [Char]
forall a. Show a => a -> [Char]
show Delta (AstRaw PrimalSpan) (TKR 2 Double)
deltas
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"DeltaConvert (ConvCmp (ConvXR STKScalar) ConvSX) (DeltaShare 100000004 (DeltaScale <primal> (DeltaConvert (ConvCmp (ConvXS' (FTKS [3,4] FTKScalar)) ConvRX) (DeltaInput (InputId 0)))))"

testReluPP2 :: Assertion
testReluPP2 :: Assertion
testReluPP2 = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 1 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 1 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
reluPrimal (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall a. Num a => a -> a -> a
* Int
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
5 AstTensor AstMethodLet FullSpan (TKR 0 Double)
r)
      (AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3, AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3) = FullShapeTK (TKR2 1 (TKScalar Double))
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> (AstVarName FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
5] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t -> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t, Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR2 1 (TKScalar Double)) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (tfromPrimal (STKS [5] STKScalar) (sgather [] (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i2] -> [ifH (sscalar -0.0 <=. sscalar (-7.0) * tprimalPart (sfromR v1) !$ [i2]) 0 1])) * (sfromR v1 * tfromPrimal (STKS [5] STKScalar) (sconcrete (sreplicate [5] 7.0))))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR2 1 (TKScalar Double))
artifactRev, Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double))
_deltas) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR2 1 (TKScalar Double)),
    Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double)))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
5] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> AstArtifactRev
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
     (TKR2 1 (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [5] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) ConvSX)) (STKProduct (STKS [5] STKScalar) (STKS [] STKScalar)) (let v9 = sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i3] -> [ifH (sscalar -0.0 <=. negate (sfromR (tproject1 v1) !$ [i3]) * sfromR (tproject2 v1)) 0 1]) * sfromR dret in tpair (sreplicate @5 (sfromR (tproject2 v1)) * v9) (sdot0 (sfromR (tproject1 v1)) v9))"
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> AstArtifactRev
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
     (TKR2 1 (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i3] -> [ifH (sscalar -0.0 <=. negate (sfromR (tproject1 v1) !$ [i3]) * sfromR (tproject2 v1)) 0 1]) * (sfromR (tproject1 v1) * sreplicate @5 (sfromR (tproject2 v1))))"

testReluSimpler :: Assertion
testReluSimpler :: Assertion
testReluSimpler = do
  Rational
-> Concrete (TKR 2 Double)
-> ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double)),
    (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
1.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @2 f (TKR 2 Double) -> f (TKR 2 Double)
forall (f :: Target).
ADReady f =>
f (TKR 2 Double) -> f (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
1.1, -Double
2.2, Double
Item [Double]
0, Double
Item [Double]
4.4, Double
Item [Double]
5.5, Double
Item [Double]
6.6, Double
Item [Double]
7.7, Double
Item [Double]
8.8, -Double
9.9, -Double
10, Double
Item [Double]
11, Double
Item [Double]
12]))

testReluSimplerPP :: Assertion
testReluSimplerPP :: Assertion
testReluSimplerPP = do
  Assertion
resetVarCounter Assertion -> Assertion -> Assertion
forall a b. IO a -> IO b -> IO b
forall (m :: Type -> Type) a b. Monad m => m a -> m b -> m b
>> Assertion
resetIdCounter
  let reluT :: AstTensor AstMethodLet FullSpan (TKR 2 Double) -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT :: AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu
      (AstVarName FullSpan (TKR 2 Double)
var3, AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3) = FullShapeTK (TKR 2 Double)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstVarName FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 2 Double)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (tfromPrimal (STKS [3,4] STKScalar) (sgather [] (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i4, i3] -> [ifH (sscalar -0.0 <=. negate (tprimalPart (sfromR m1) !$ [i4, i3])) 0 1])) * sfromR m1)"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double))) (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
deltas) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK (X (AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR 2 Double) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev (TKR 2 Double) (TKR 2 Double)
-> AstArtifactRev (TKR 2 Double) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 2 Double) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> rfromS (sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5, i6] -> [ifH (sscalar -0.0 <=. negate (sfromR m1 !$ [i5, i6])) 0 1]) * sfromR dret)"
  AstArtifactRev (TKR 2 Double) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev (TKR 2 Double) (TKR 2 Double)
-> AstArtifactRev (TKR 2 Double) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 2 Double) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5, i6] -> [ifH (sscalar -0.0 <=. negate (sfromR m1 !$ [i5, i6])) 0 1]) * sfromR m1)"
  Delta (AstRaw PrimalSpan) (TKR 2 Double) -> [Char]
forall a. Show a => a -> [Char]
show Delta (AstRaw PrimalSpan) (TKR 2 Double)
deltas
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"DeltaConvert (ConvCmp (ConvXR STKScalar) ConvSX) (DeltaShare 100000004 (DeltaScale <primal> (DeltaConvert (ConvCmp (ConvXS' (FTKS [3,4] FTKScalar)) ConvRX) (DeltaInput (InputId 0)))))"

testReluSimplerPP2 :: Assertion
testReluSimplerPP2 :: Assertion
testReluSimplerPP2 = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 1 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 1 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall a. Num a => a -> a -> a
* Int
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
5 AstTensor AstMethodLet FullSpan (TKR 0 Double)
r)
      (AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3, AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3) = FullShapeTK (TKR2 1 (TKScalar Double))
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> (AstVarName FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
5] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t -> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t, Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR2 1 (TKScalar Double)) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (tlet (sfromR v1 * tfromPrimal (STKS [5] STKScalar) (sconcrete (sreplicate [5] 7.0))) (\\v2 -> tfromPrimal (STKS [5] STKScalar) (sgather [] (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i3] -> [ifH (sscalar -0.0 <=. negate (sfromR (tprimalPart (rfromS (v2 !$ [i3]))))) 0 1])) * v2))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR2 1 (TKScalar Double))
artifactRev, Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double))
_deltas) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR2 1 (TKScalar Double)),
    Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double)))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
5] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> AstArtifactRev
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
     (TKR2 1 (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [5] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) ConvSX)) (STKProduct (STKS [5] STKScalar) (STKS [] STKScalar)) (let v8 = sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5] -> [ifH (sscalar -0.0 <=. negate (sfromR (tproject1 v1) !$ [i5]) * sfromR (tproject2 v1)) 0 1]) * sfromR dret in tpair (sreplicate @5 (sfromR (tproject2 v1)) * v8) (sdot0 (sfromR (tproject1 v1)) v8))"
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> AstArtifactRev
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
     (TKR2 1 (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (let v4 = sfromR (tproject1 v1) * sreplicate @5 (sfromR (tproject2 v1)) in sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5] -> [ifH (sscalar -0.0 <=. negate (v4 !$ [i5])) 0 1]) * v4)"

testReluSimplerPP3 :: Assertion
testReluSimplerPP3 :: Assertion
testReluSimplerPP3 = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a. Num a => a -> a -> a
* Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 1) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
3 (Int
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
4 AstTensor AstMethodLet FullSpan (TKR 0 Double)
r))
      (AstVarName FullSpan (TKR 2 Double)
var3, AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3) = FullShapeTK (TKR 2 Double)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstVarName FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing (\AstTensor AstMethodLet FullSpan (TKR 2 Double)
t -> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t, Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 2 Double)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (tlet (sfromR m1 * tfromPrimal (STKS [3,4] STKScalar) (sconcrete (sreplicate [3,4] 7.0))) (\\m2 -> tfromPrimal (STKS [3,4] STKScalar) (sgather [] (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5, i4] -> [ifH (sscalar -0.0 <=. negate (tprimalPart m2 !$ [i5, i4])) 0 1])) * m2))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
_deltas) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [3,4] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) ConvSX)) (STKProduct (STKS [3,4] STKScalar) (STKS [] STKScalar)) (let m11 = sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (sfromR (tproject1 m1) !$ [i7, i8]) * sfromR (tproject2 m1)) 0 1]) * sfromR dret in tpair (sreplicate @3 (sreplicate @4 (sfromR (tproject2 m1))) * m11) (sdot0 (sfromR (tproject1 m1)) m11))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (let m6 = sfromR (tproject1 m1) * sreplicate @3 (sreplicate @4 (sfromR (tproject2 m1))) in sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (m6 !$ [i7, i8])) 0 1]) * m6)"

testReluSimpler3 :: Assertion
testReluSimpler3 :: Assertion
testReluSimpler3 = do
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a. Num a => a -> a -> a
* Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 1) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
3 (Int
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
4 AstTensor AstMethodLet FullSpan (TKR 0 Double)
r))
  Rational
-> (Concrete (TKR 2 Double), Concrete (TKR 0 Double))
-> (Concrete (TKR 2 Double), Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    ( IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0]
    , Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
57.1 )
    (((AstTensor AstMethodLet FullSpan (TKR 2 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKR 0 r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2) (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
1.1, -Double
2.2, Double
Item [Double]
0, Double
Item [Double]
4.4, Double
Item [Double]
5.5, Double
Item [Double]
6.6, Double
Item [Double]
7.7, Double
Item [Double]
8.8, -Double
9.9, -Double
10, Double
Item [Double]
11, Double
Item [Double]
12], Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))

testReluSimplerPP4 :: Assertion
testReluSimplerPP4 :: Assertion
testReluSimplerPP4 = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a. Num a => a -> a -> a
* IShR 2
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] AstTensor AstMethodLet FullSpan (TKR 0 Double)
r)
      (AstVarName FullSpan (TKR 2 Double)
var3, AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3) = FullShapeTK (TKR 2 Double)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstVarName FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing (\AstTensor AstMethodLet FullSpan (TKR 2 Double)
t -> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t, Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 2 Double)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (tlet (sfromR m1 * tfromPrimal (STKS [3,4] STKScalar) (sconcrete (sreplicate [3,4] 7.0))) (\\m2 -> tfromPrimal (STKS [3,4] STKScalar) (sgather [] (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5, i4] -> [ifH (sscalar -0.0 <=. negate (tprimalPart m2 !$ [i5, i4])) 0 1])) * m2))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
_deltas) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [3,4] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [] FTKScalar)) ConvSX))) (STKProduct (STKS [3,4] STKScalar) (STKS [] STKScalar)) (let m11 = sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (sfromR (tproject1 m1) !$ [i7, i8]) * sfromR (tproject2 m1)) 0 1]) * sfromR dret in tpair (sreplicate @3 (sreplicate @4 (sfromR (tproject2 m1))) * m11) (sdot0 (sfromR (tproject1 m1)) m11))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 0 Double)) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (let m6 = sfromR (tproject1 m1) * sreplicate @3 (sreplicate @4 (sfromR (tproject2 m1))) in sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (m6 !$ [i7, i8])) 0 1]) * m6)"

testReluSimpler4 :: Assertion
testReluSimpler4 :: Assertion
testReluSimpler4 = do
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a. Num a => a -> a -> a
* IShR 2
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] AstTensor AstMethodLet FullSpan (TKR 0 Double)
r)
  Rational
-> (Concrete (TKR 2 Double), Concrete (TKR 0 Double))
-> (Concrete (TKR 2 Double), Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    ( IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0]
    , Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
57.1 )
    (((AstTensor AstMethodLet FullSpan (TKR 2 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKR 0 r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2) (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
1.1, -Double
2.2, Double
Item [Double]
0, Double
Item [Double]
4.4, Double
Item [Double]
5.5, Double
Item [Double]
6.6, Double
Item [Double]
7.7, Double
Item [Double]
8.8, -Double
9.9, -Double
10, Double
Item [Double]
11, Double
Item [Double]
12], Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))

testReluSimplerPP4s :: Assertion
testReluSimplerPP4s :: Assertion
testReluSimplerPP4s = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKS '[3, 4] Float), AstTensor AstMethodLet FullSpan (TKS '[] Float))
             -> AstTensor AstMethodLet FullSpan (TKS '[3, 4] Float)
      reluT2 :: (AstTensor
   AstMethodLet
   FullSpan
   (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float),
 AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
reluT2 (AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
t, AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
r) = AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
forall (target :: Target) (sh :: [Natural]) r.
(KnownShS sh, ADReady target, GoodScalar r, Differentiable r) =>
target (TKS sh r) -> target (TKS sh r)
reluS (AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
t AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
forall a. Num a => a -> a -> a
* AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ('[] @Natural) x) -> target (TKS2 sh x)
sreplicate0N AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
r)
      (AstVarName
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
var3, AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
ast3) = FullShapeTK
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> Maybe (Int64, Int64)
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
-> (AstVarName
      FullSpan
      (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
-> FullShapeTK (TKScalar Float)
-> FullShapeTK
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS FullShapeTK (TKScalar Float)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing (\AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
t -> (AstTensor
   AstMethodLet
   FullSpan
   (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float),
 AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
reluT2 (AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
t, Float -> AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) Float)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Float
7))
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> tlet (m1 * tfromPrimal (STKS [3,4] STKScalar) (sconcrete (sreplicate [3,4] 7.0))) (\\m2 -> tfromPrimal (STKS [3,4] STKScalar) (sgather [] (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i5, i4] -> [ifH (sscalar -0.0 <=. negate (tprimalPart m2 !$ [i5, i4])) 0 1])) * m2)"

testReluSimplerPP4s2 :: Assertion
testReluSimplerPP4s2 :: Assertion
testReluSimplerPP4s2 = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double), AstTensor AstMethodLet FullSpan (TKS '[] Double))
             -> AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double)
      -- This is tweaked compared to above to avoid test artifacts coming
      -- from counter resets, which are inherently unsafe (cse, etc.).
      reluT2 :: (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2 (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t, AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r) = AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (target :: Target) (sh :: [Natural]) r.
(KnownShS sh, ADReady target, GoodScalar r, Differentiable r) =>
target (TKS sh r) -> target (TKS sh r)
reluS (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a. Num a => a -> a -> a
* AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ('[] @Natural) x) -> target (TKS2 sh x)
sreplicate0N AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r)
  let (AstArtifactRev
  (X (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev, Delta
  (AstRaw PrimalSpan)
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
_deltas) = IncomingCotangentHandling
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS2
            ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
            (TKScalar Double)))
-> FullShapeTK
     (X (AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor
            AstMethodLet
            FullSpan
            (TKS2
               ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
               (TKScalar Double)),
          AstTensor
            AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    Delta
      (AstRaw PrimalSpan)
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2 (FullShapeTK
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
-> FullShapeTK
     (TKProduct
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double))
        (TKS2 ('[] @Natural) (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
-> FullShapeTK (TKScalar Double)
-> FullShapeTK
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS [Int
Item (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))))
3, Int
Item (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))))
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (ShS ('[] @Natural)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m6 = tproject1 m1 * sreplicate @3 (sreplicate @4 (tproject2 m1)) ; m9 = sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (m6 !$ [i7, i8])) 0 1]) ; m11 = m9 * dret in tpair (sreplicate @3 (sreplicate @4 (tproject2 m1)) * m11) (ssum @4 (ssum @3 (tproject1 m1 * m11)))"
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> let m6 = tproject1 m1 * sreplicate @3 (sreplicate @4 (tproject2 m1)) ; m9 = sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (m6 !$ [i7, i8])) 0 1]) in m9 * m6"
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double))
        (TKS2 ('[] @Natural) (TKScalar Double)))
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m11 = sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (tproject1 m1 !$ [i7, i8]) * tproject2 m1) 0 1]) * dret in tpair (sreplicate @3 (sreplicate @4 (tproject2 m1)) * m11) (sdot0 (tproject1 m1) m11)"
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double))
        (TKS2 ('[] @Natural) (TKScalar Double)))
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> let m6 = tproject1 m1 * sreplicate @3 (sreplicate @4 (tproject2 m1)) in sgather (sconcrete (sfromListLinear [2] [0.0,1.0])) (\\[i7, i8] -> [ifH (sscalar -0.0 <=. negate (m6 !$ [i7, i8])) 0 1]) * m6"

testReluSimpler4s :: Assertion
testReluSimpler4s :: Assertion
testReluSimpler4s = do
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double), AstTensor AstMethodLet FullSpan (TKS '[] Double))
             -> AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double)
      reluT2 :: (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2 (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t, AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r) = AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (target :: Target) (sh :: [Natural]) r.
(KnownShS sh, ADReady target, GoodScalar r, Differentiable r) =>
target (TKS sh r) -> target (TKS sh r)
reluS (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a. Num a => a -> a -> a
* AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ('[] @Natural) x) -> target (TKS2 sh x)
sreplicate0N AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r)
  Rational
-> (Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    ( Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete
      (Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
 -> Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)))
-> Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[3, 4] ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0]
    , Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
57.1 )
    (((AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
       (TKScalar Double)),
  AstTensor
    AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS2
            ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
            (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2) (Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
 -> Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)))
-> Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[3, 4] ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
1.1, -Double
2.2, Double
Item [Double]
0, Double
Item [Double]
4.4, Double
Item [Double]
5.5, Double
Item [Double]
6.6, Double
Item [Double]
7.7, Double
Item [Double]
8.8, -Double
9.9, -Double
10, Double
Item [Double]
11, Double
Item [Double]
12], Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
7))

testReluSimplerPP7s2 :: Assertion
testReluSimplerPP7s2 :: Assertion
testReluSimplerPP7s2 = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double), AstTensor AstMethodLet FullSpan (TKS '[] Double))
             -> AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double)
      reluT2 :: (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2 (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t, AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r) = (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x1 :: TK) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x1, KnownSTK x, BaseTensor target) =>
(target (TKS2 ('[] @Natural) x1) -> target (TKS2 ('[] @Natural) x))
-> target (TKS2 sh x1) -> target (TKS2 sh x)
smap0N ((AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> (AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
     -> AstTensor
          AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall a b c. (a -> b -> c) -> b -> a -> c
flip AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet ((AstTensor
    AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
  -> AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ \AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
x -> BoolOf (AstTensor AstMethodLet FullSpan)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
x AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> BoolOf (AstTensor AstMethodLet FullSpan)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
<=. Double
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Double
0) (Double
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Double
0.0) AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
x) (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a. Num a => a -> a -> a
* AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ('[] @Natural) x) -> target (TKS2 sh x)
sreplicate0N AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r)
  let (AstArtifactRev
  (X (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev, Delta
  (AstRaw PrimalSpan)
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
_deltas) = IncomingCotangentHandling
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS2
            ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
            (TKScalar Double)))
-> FullShapeTK
     (X (AstTensor
           AstMethodLet
           FullSpan
           (TKS2
              ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
              (TKScalar Double)),
         AstTensor
           AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor
            AstMethodLet
            FullSpan
            (TKS2
               ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
               (TKScalar Double)),
          AstTensor
            AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))))
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    Delta
      (AstRaw PrimalSpan)
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2 (FullShapeTK
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
-> FullShapeTK
     (TKProduct
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double))
        (TKS2 ('[] @Natural) (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
-> FullShapeTK (TKScalar Double)
-> FullShapeTK
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS [Int
Item (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))))
3, Int
Item (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))))
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (ShS ('[] @Natural)
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m9 = tproject1 m1 * sreplicate @3 (sreplicate @4 (tproject2 m1)) ; t15 = sscatter dret (\\[i13, i14] -> [ifH (sscalar -0.0 <=. negate (m9 !$ [i13, i14])) 0 1, i13, i14]) ; m16 = t15 !$ [1] in tpair (sreplicate @3 (sreplicate @4 (tproject2 m1)) * m16) (ssum @4 (ssum @3 (tproject1 m1 * m16)))"
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> let m9 = tproject1 m1 * sreplicate @3 (sreplicate @4 (tproject2 m1)) in sgather (sfromVector (fromList [sconcrete (sreplicate [3,4] 0.0), m9])) (\\[i10, i11] -> [ifH (sscalar -0.0 <=. negate (m9 !$ [i10, i11])) 0 1, i10, i11])"
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double))
        (TKS2 ('[] @Natural) (TKScalar Double)))
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m16 = sscatter dret (\\[i13, i14] -> [ifH (sscalar -0.0 <=. negate (tproject1 m1 !$ [i13, i14]) * tproject2 m1) 0 1, i13, i14]) !$ [1] in tpair (sreplicate @3 (sreplicate @4 (tproject2 m1)) * m16) (sdot0 (tproject1 m1) m16)"
  AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstArtifactRev
     (TKProduct
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double))
        (TKS2 ('[] @Natural) (TKScalar Double)))
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
     (TKS2 ('[] @Natural) (TKScalar Double)))
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> let m9 = tproject1 m1 * sreplicate @3 (sreplicate @4 (tproject2 m1)) in sgather (sfromVector (fromList [sconcrete (sreplicate [3,4] 0.0), m9])) (\\[i10, i11] -> [ifH (sscalar -0.0 <=. negate (m9 !$ [i10, i11])) 0 1, i10, i11])"

testReluSimpler7s :: Assertion
testReluSimpler7s :: Assertion
testReluSimpler7s = do
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double), AstTensor AstMethodLet FullSpan (TKS '[] Double))
             -> AstTensor AstMethodLet FullSpan (TKS '[3, 4] Double)
      reluT2 :: (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2 (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t, AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r) = (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x1 :: TK) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x1, KnownSTK x, BaseTensor target) =>
(target (TKS2 ('[] @Natural) x1) -> target (TKS2 ('[] @Natural) x))
-> target (TKS2 sh x1) -> target (TKS2 sh x)
smap0N ((AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> (AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
     -> AstTensor
          AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall a b c. (a -> b -> c) -> b -> a -> c
flip AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet ((AstTensor
    AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
  -> AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ \AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
x -> BoolOf (AstTensor AstMethodLet FullSpan)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
x AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> BoolOf (AstTensor AstMethodLet FullSpan)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
<=. Double
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Double
0) (Double
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Double
0.0) AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
x) (AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
t AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a. Num a => a -> a -> a
* AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ('[] @Natural) x) -> target (TKS2 sh x)
sreplicate0N AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
r)
  Rational
-> (Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    ( Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete
      (Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
 -> Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)))
-> Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[3, 4] ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0]
    , Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
57.1 )
    (((AstTensor
    AstMethodLet
    FullSpan
    (TKS2
       ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
       (TKScalar Double)),
  AstTensor
    AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS2
           ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
           (TKScalar Double)),
      AstTensor
        AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS2
     ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
     (TKScalar Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double))
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS2
          ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
          (TKScalar Double)),
     AstTensor
       AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS2
            ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
            (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)),
    AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor
   AstMethodLet
   FullSpan
   (TKS2
      ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
      (TKScalar Double)),
 AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
reluT2) (Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
 -> Concrete
      (TKS2
         ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
         (TKScalar Double)))
-> Shaped ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Double
-> Concrete
     (TKS2
        ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
        (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[3, 4] ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
1.1, -Double
2.2, Double
Item [Double]
0, Double
Item [Double]
4.4, Double
Item [Double]
5.5, Double
Item [Double]
6.6, Double
Item [Double]
7.7, Double
Item [Double]
8.8, -Double
9.9, -Double
10, Double
Item [Double]
11, Double
Item [Double]
12], Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
7))

reluMax :: forall target n r. (ADReady target, GoodScalar r, KnownNat n)
        => target (TKR n r) -> target (TKR n r)
reluMax :: forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax = (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 n (TKScalar r)) -> target (TKR2 n (TKScalar r))
forall (n :: Natural) (x :: TK) (x1 :: TK) (target :: Target).
(KnownNat n, KnownSTK x, KnownSTK x1, BaseTensor target) =>
(target (TKR2 0 x1) -> target (TKR2 0 x))
-> target (TKR2 n x1) -> target (TKR2 n x)
rmap0N (target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
maxH (r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0))

testReluMax :: Assertion
testReluMax :: Assertion
testReluMax = do
  Rational
-> Concrete (TKR 2 Double)
-> ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double)),
    (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
1.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @2 f (TKR 2 Double) -> f (TKR 2 Double)
forall (f :: Target).
ADReady f =>
f (TKR 2 Double) -> f (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
1.1, -Double
2.2, Double
Item [Double]
0, Double
Item [Double]
4.4, Double
Item [Double]
5.5, Double
Item [Double]
6.6, Double
Item [Double]
7.7, Double
Item [Double]
8.8, -Double
9.9, -Double
10, Double
Item [Double]
11, Double
Item [Double]
12]))

testReluMaxPP :: Assertion
testReluMaxPP :: Assertion
testReluMaxPP = do
  Assertion
resetVarCounter Assertion -> Assertion -> Assertion
forall a b. IO a -> IO b -> IO b
forall (m :: Type -> Type) a b. Monad m => m a -> m b -> m b
>> Assertion
resetIdCounter
  let reluT :: AstTensor AstMethodLet FullSpan (TKR 2 Double) -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT :: AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax
      (AstVarName FullSpan (TKR 2 Double)
var3, AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3) = FullShapeTK (TKR 2 Double)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstVarName FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 2 Double)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 2 Double) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 2 Double)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (sgather [] (tfromVector (SNat @2) (STKS [3,4] STKScalar) (fromList [tfromPrimal (STKS [3,4] STKScalar) (sconcrete (sreplicate [3,4] 0.0)), sfromR m1])) (\\[i5, i4] -> [ifH (sscalar -0.0 <=. negate (tprimalPart (sfromR m1) !$ [i5, i4])) 0 1, i5, i4]))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double))) (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
deltas) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK (X (AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR 2 Double) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev (TKR 2 Double) (TKR 2 Double)
-> AstArtifactRev (TKR 2 Double) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 2 Double) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> rfromS (sscatter (sfromR dret) (\\[i9, i10] -> [ifH (sscalar -0.0 <=. negate (sfromR m1 !$ [i9, i10])) 0 1, i9, i10]) !$ [1])"
  AstArtifactRev (TKR 2 Double) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev (TKR 2 Double) (TKR 2 Double)
-> AstArtifactRev (TKR 2 Double) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR 2 Double) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (sgather (sfromVector (fromList [sconcrete (sreplicate [3,4] 0.0), sfromR m1])) (\\[i6, i7] -> [ifH (sscalar -0.0 <=. negate (sfromR m1 !$ [i6, i7])) 0 1, i6, i7]))"
  Delta (AstRaw PrimalSpan) (TKR 2 Double) -> [Char]
forall a. Show a => a -> [Char]
show Delta (AstRaw PrimalSpan) (TKR 2 Double)
deltas
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"DeltaConvert (ConvCmp (ConvXR STKScalar) ConvSX) (DeltaShare 100000004 (DeltaGatherS [3,4] [] [2,3,4] (DeltaShare 100000001 (DeltaFromVector (SNat @2) (STKS [3,4] STKScalar) [DeltaZero (FTKS [3,4] FTKScalar),DeltaConvert (ConvCmp (ConvXS' (FTKS [3,4] FTKScalar)) ConvRX) (DeltaInput (InputId 0))])) <function>))"

testReluMaxPP2 :: Assertion
testReluMaxPP2 :: Assertion
testReluMaxPP2 = do
  Assertion
resetVarCounter
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 1 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 1 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall a. Num a => a -> a -> a
* Int
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
5 AstTensor AstMethodLet FullSpan (TKR 0 Double)
r)
      (AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3, AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3) = FullShapeTK (TKR2 1 (TKScalar Double))
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> (AstVarName FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
5] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t -> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
t, Double -> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR2 1 (TKScalar Double)) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR2 1 (TKScalar Double))
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (sgather [] (tfromVector (SNat @2) (STKS [5] STKScalar) (fromList [tfromPrimal (STKS [5] STKScalar) (sconcrete (sreplicate [5] 0.0)), sfromR v1 * tfromPrimal (STKS [5] STKScalar) (sconcrete (sreplicate [5] 7.0))])) (\\[i3] -> [ifH (sscalar -0.0 <=. sscalar (-7.0) * tprimalPart (sfromR v1) !$ [i3]) 0 1, i3]))"
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
      AstTensor AstMethodLet FullSpan (TKR 0 Double)))
  (TKR2 1 (TKScalar Double))
artifactRev, Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double))
_deltas) = IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
         AstTensor AstMethodLet FullSpan (TKR 0 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
          AstTensor AstMethodLet FullSpan (TKR 0 Double)))
      (TKR2 1 (TKScalar Double)),
    Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double)))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
reluT2 (FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK (TKR 0 Double)
-> FullShapeTK
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
5] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 0
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 0 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> let m11 = sscatter (sfromR dret) (\\[i8] -> [let x9 = negate (sfromR (tproject1 v1) !$ [i8]) ; x10 = sfromR (rreplicate 5 (tproject2 v1)) !$ [i8] in ifH (sscalar -0.0 <=. x9 * x10) 0 1, i8]) ; v12 = m11 !$ [1] in tpair (rfromS (sfromR (rreplicate 5 (tproject2 v1)) * v12)) (rsum (rfromS (sfromR (tproject1 v1) * v12)))"
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (sgather (sfromVector (fromList [sconcrete (sreplicate [5] 0.0), sfromR (tproject1 v1) * sfromR (rreplicate 5 (tproject2 v1))])) (\\[i4] -> [let x5 = negate (sfromR (tproject1 v1) !$ [i4]) ; x6 = sfromR (rreplicate 5 (tproject2 v1)) !$ [i4] in ifH (sscalar -0.0 <=. x5 * x6) 0 1, i4]))"
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
-> AstArtifactRev
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
     (TKR2 1 (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR 0 Double))
  (TKR2 1 (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [5] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) ConvSX)) (STKProduct (STKS [5] STKScalar) (STKS [] STKScalar)) (let v12 = sscatter (sfromR dret) (\\[i8] -> [ifH (sscalar -0.0 <=. negate (sfromR (tproject1 v1) !$ [i8]) * sfromR (tproject2 v1)) 0 1, i8]) !$ [1] in tpair (sreplicate @5 (sfromR (tproject2 v1)) * v12) (sdot0 (sfromR (tproject1 v1)) v12))"

testReluMax3 :: Assertion
testReluMax3 :: Assertion
testReluMax3 = do
  let reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double), AstTensor AstMethodLet FullSpan (TKR 0 Double))
             -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
      reluT2 :: (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t, AstTensor AstMethodLet FullSpan (TKR 0 Double)
r) = AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax (AstTensor AstMethodLet FullSpan (TKR 2 Double)
t AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a. Num a => a -> a -> a
* Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 1) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
3 (Int
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
4 AstTensor AstMethodLet FullSpan (TKR 0 Double)
r))
  Rational
-> (Concrete (TKR 2 Double), Concrete (TKR 0 Double))
-> (Concrete (TKR 2 Double), Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    ( IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0,Double
Item [Double]
7.0,Double
Item [Double]
7.0]
    , Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
57.1 )
    (((AstTensor AstMethodLet FullSpan (TKR 2 Double),
  AstTensor AstMethodLet FullSpan (TKR 0 Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKR 0 r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 0 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AstTensor AstMethodLet FullSpan (TKR 2 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
reluT2) (IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] [Double
Item [Double]
1.1, -Double
2.2, Double
Item [Double]
0, Double
Item [Double]
4.4, Double
Item [Double]
5.5, Double
Item [Double]
6.6, Double
Item [Double]
7.7, Double
Item [Double]
8.8, -Double
9.9, -Double
10, Double
Item [Double]
11, Double
Item [Double]
12], Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7))

testDot1PP :: Assertion
testDot1PP :: Assertion
testDot1PP = do
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
      AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) =
        IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
         AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
          AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry (forall (n :: Natural) r (target :: Target).
(KnownNat n, GoodScalar r, BaseTensor target) =>
target (TKR n r) -> target (TKR n r) -> target (TKR 0 r)
rdot0 @1 @Double))
                 (FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK
     (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
  (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tpair (rfromS (sfromR (tproject2 v1) * sreplicate @3 (sfromR dret))) (rfromS (sfromR (tproject1 v1) * sreplicate @3 (sfromR dret)))"
  AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
  (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct (TKR2 1 (TKScalar Double)) (TKR2 1 (TKScalar Double)))
  (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (ssum @3 (sfromR (tproject1 v1) * sfromR (tproject2 v1)))"

testDot2PP :: Assertion
testDot2PP :: Assertion
testDot2PP = do
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 2 Double)))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_deltas) =
        IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
          AstTensor AstMethodLet FullSpan (TKR 2 Double)))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent ((AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry (forall (n :: Natural) r (target :: Target).
(KnownNat n, GoodScalar r, BaseTensor target) =>
target (TKR n r) -> target (TKR n r) -> target (TKR 0 r)
rdot0 @2 @Double))
                 (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
2, Int
Item (IShR 2)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
2, Int
Item (IShR 2)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> let m3 = sreshape @[2,3] (sreplicate @6 (sfromR dret)) in tpair (rfromS (sfromR (tproject2 m1) * m3)) (rfromS (sfromR (tproject1 m1) * m3))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (ssum @6 (sreshape @[6] (sfromR (tproject1 m1) * sfromR (tproject2 m1))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [2,3] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [2,3] FTKScalar)) ConvSX))) (STKProduct (STKS [2,3] STKScalar) (STKS [2,3] STKScalar)) (tpair (sfromR (tproject2 m1) * sreplicate @2 (sreplicate @3 (sfromR dret))) (sfromR (tproject1 m1) * sreplicate @2 (sreplicate @3 (sfromR dret))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (sdot0 (sfromR (tproject1 m1)) (sfromR (tproject2 m1)))"

testMatvecmulPP :: Assertion
testMatvecmulPP :: Assertion
testMatvecmulPP = do
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR2 1 (TKScalar Double))
artifactRev, Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double))
_) =
        IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
          AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR2 1 (TKScalar Double)),
    Delta (AstRaw PrimalSpan) (TKR2 1 (TKScalar Double)))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta
                 IncomingCotangentHandling
UseIncomingCotangent ((AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
target (TKR 2 r) -> target (TKR 1 r) -> target (TKR 1 r)
rmatvecmul)
                 (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
-> FullShapeTK
     (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
2, Int
Item (IShR 2)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty @_ @(TKR 1 Double) AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tpair (rfromS (str (str (sreplicate @2 (sfromR (tproject2 m1))) * sreplicate @3 (sfromR dret)))) (rfromS (ssum @2 (str (str (sfromR (tproject1 m1)) * sreplicate @3 (sfromR dret)))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (ssum @3 (str (sreplicate @2 (sfromR (tproject2 m1))) * str (sfromR (tproject1 m1))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [2,3] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [3] FTKScalar)) ConvSX))) (STKProduct (STKS [2,3] STKScalar) (STKS [3] STKScalar)) (tpair (sreplicate @2 (sfromR (tproject2 m1)) * str (sreplicate @3 (sfromR dret))) (sdot1In (str (sfromR (tproject1 m1))) (sreplicate @3 (sfromR dret))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
     (TKR2 1 (TKScalar Double))
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR2 1 (TKScalar Double)))
  (TKR2 1 (TKScalar Double))
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (sdot1In (sreplicate @2 (sfromR (tproject2 m1))) (sfromR (tproject1 m1)))"

testMatmul2PP :: Assertion
testMatmul2PP :: Assertion
testMatmul2PP = do
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 2 Double)))
  (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
_) =
        IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
          AstTensor AstMethodLet FullSpan (TKR 2 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta
                 IncomingCotangentHandling
UseIncomingCotangent ((AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
rmatmul2)
                 (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
2, Int
Item (IShR 2)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty @_ @(TKR 2 Double) AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tpair (rfromS (ssum @4 (stranspose @[2,1,0] (str (sreplicate @2 (sfromR (tproject2 m1))) * sreplicate @3 (sfromR dret))))) (rfromS (ssum @2 (str (stranspose @[2,1,0] (sreplicate @4 (sfromR (tproject1 m1))) * sreplicate @3 (sfromR dret)))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (ssum @3 (stranspose @[2,1,0] (sreplicate @4 (sfromR (tproject1 m1))) * str (sreplicate @2 (sfromR (tproject2 m1)))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tconvert (ConvT2 (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [2,3] FTKScalar)) ConvSX)) (ConvCmp (ConvXR STKScalar) (ConvCmp (ConvXX' (FTKX [3,4] FTKScalar)) ConvSX))) (STKProduct (STKS [2,3] STKScalar) (STKS [3,4] STKScalar)) (tpair (smatmul2 (sfromR dret) (str (sfromR (tproject2 m1)))) (smatmul2 (str (sfromR (tproject1 m1))) (sfromR dret)))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
-> AstArtifactRev
     (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (smatmul2 (sfromR (tproject1 m1)) (sfromR (tproject2 m1)))"

testMatmul2FromMatvecmulPP :: Assertion
testMatmul2FromMatvecmulPP :: Assertion
testMatmul2FromMatvecmulPP = do
  Assertion
resetVarCounter
  let rmatmul2F :: (BaseTensor target, GoodScalar r)
                => target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
      rmatmul2F :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
rmatmul2F target (TKR 2 r)
m1 target (TKR 2 r)
m2 =
        Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 (target (TKR2 (1 + 1) (TKScalar r)) -> Int
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 (1 + n) x) -> Int
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 (1 + n) x) -> Int
rwidth target (TKR 2 r)
target (TKR2 (1 + 1) (TKScalar r))
m1) (\PrimalOf target (TKScalar Int64)
i -> target (TKR 2 r)
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
target (TKR 2 r) -> target (TKR 1 r) -> target (TKR 1 r)
rmatvecmul (target (TKR2 (2 + 0) (TKScalar r))
-> target (TKR2 (2 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (2 + n) x) -> target (TKR2 (2 + n) x)
rtr target (TKR 2 r)
target (TKR2 (2 + 0) (TKScalar r))
m2) (target (TKR 2 r)
target (TKR2 (1 + 1) (TKScalar r))
m1 target (TKR2 (1 + 1) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 1 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
i]))
      (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 2 Double)))
  (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
_) =
        IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
          AstTensor AstMethodLet FullSpan (TKR 2 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta
                 IncomingCotangentHandling
UseIncomingCotangent ((AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
rmatmul2F)
                 (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
2, Int
Item (IShR 2)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty @_ @(TKR 2 Double) AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tpair (rfromS (ssum @4 (stranspose @[2,1,0] (str (sreplicate @2 (sfromR (tproject2 m1))) * sreplicate @3 (sfromR dret))))) (rfromS (ssum @2 (str (stranspose @[2,1,0] (sreplicate @4 (sfromR (tproject1 m1))) * sreplicate @3 (sfromR dret)))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (ssum @3 (stranspose @[2,1,0] (sreplicate @4 (sfromR (tproject1 m1))) * str (sreplicate @2 (sfromR (tproject2 m1)))))"

testMatmul2PaperPP :: Assertion
testMatmul2PaperPP :: Assertion
testMatmul2PaperPP = do
  Assertion
resetVarCounter
  let rmatmul2P :: (BaseTensor target, GoodScalar r)
                => target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
      rmatmul2P :: forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
rmatmul2P target (TKR 2 r)
a target (TKR 2 r)
b =
        let Int
k :$: Int
m :$: ShR n Int
_ = target (TKR 2 r) -> IShR 2
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 n x) -> IShR n
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> IShR n
rshape target (TKR 2 r)
a
            Int
_ :$: Int
n :$: ShR n Int
_ = target (TKR 2 r) -> IShR 2
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 n x) -> IShR n
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> IShR n
rshape target (TKR 2 r)
b
        in Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
k (\PrimalOf target (TKScalar Int64)
i ->
             Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
n (\PrimalOf target (TKScalar Int64)
j ->
               target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
m (\PrimalOf target (TKScalar Int64)
p -> target (TKR 2 r)
target (TKR2 (2 + 0) (TKScalar r))
a target (TKR2 (2 + 0) (TKScalar r))
-> IxR 2 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 2 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
i, Item (IxR 2 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
p] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR 2 r)
target (TKR2 (2 + 0) (TKScalar r))
b target (TKR2 (2 + 0) (TKScalar r))
-> IxR 2 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 2 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
p, Item (IxR 2 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
j]))))
      (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
      AstTensor AstMethodLet FullSpan (TKR 2 Double)))
  (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
_) =
        IncomingCotangentHandling
-> ((AstTensor AstMethodLet FullSpan (TKR 2 Double),
     AstTensor AstMethodLet FullSpan (TKR 2 Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
         AstTensor AstMethodLet FullSpan (TKR 2 Double)))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR 2 Double),
          AstTensor AstMethodLet FullSpan (TKR 2 Double)))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta
                 IncomingCotangentHandling
UseIncomingCotangent ((AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 2 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 2 Double),
    AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
forall (target :: Target) r.
(BaseTensor target, GoodScalar r) =>
target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
rmatmul2P)
                 (FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKR 2 Double)
-> FullShapeTK (TKProduct (TKR 2 Double) (TKR 2 Double))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
2, Int
Item (IShR 2)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) (IShR 2
-> FullShapeTK (TKScalar Double) -> FullShapeTK (TKR 2 Double)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 2)
3, Int
Item (IShR 2)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar))
  forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty @_ @(TKR 2 Double) AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tpair (rfromS (ssum @4 (stranspose @[2,1,0] (str (sreplicate @2 (sfromR (tproject2 m1))) * sreplicate @3 (sfromR dret))))) (rfromS (ssum @2 (str (stranspose @[2,1,0] (sreplicate @4 (sfromR (tproject1 m1))) * sreplicate @3 (sfromR dret)))))"
  AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct (TKR 2 Double) (TKR 2 Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> rfromS (ssum @3 (stranspose @[2,1,0] (sreplicate @4 (sfromR (tproject1 m1))) * str (sreplicate @2 (sfromR (tproject2 m1)))))"

testMatmul2PPS :: Assertion
testMatmul2PPS :: Assertion
testMatmul2PPS = do
  Assertion
resetVarCounter
  let (AstArtifactRev
  (X (AstTensor
        AstMethodLet
        FullSpan
        (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
artifactRev, Delta
  (AstRaw PrimalSpan)
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
_) =
        IncomingCotangentHandling
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float))
-> FullShapeTK
     (X (AstTensor
           AstMethodLet
           FullSpan
           (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float),
         AstTensor
           AstMethodLet
           FullSpan
           (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)))
-> (AstArtifactRev
      (X (AstTensor
            AstMethodLet
            FullSpan
            (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float),
          AstTensor
            AstMethodLet
            FullSpan
            (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)))
      (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float),
    Delta
      (AstRaw PrimalSpan)
      (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta
                 IncomingCotangentHandling
UseIncomingCotangent ((AstTensor
   AstMethodLet
   FullSpan
   (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry AstTensor
  AstMethodLet
  FullSpan
  (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
forall (m :: Natural) (n :: Natural) (p :: Natural) r
       (target :: Target).
(KnownNat m, KnownNat n, KnownNat p, GoodScalar r,
 BaseTensor target) =>
target (TKS ((':) @Natural m ((':) @Natural n ('[] @Natural))) r)
-> target
     (TKS ((':) @Natural n ((':) @Natural p ('[] @Natural))) r)
-> target
     (TKS ((':) @Natural m ((':) @Natural p ('[] @Natural))) r)
smatmul2)
                 (FullShapeTK
  (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
-> FullShapeTK
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
-> FullShapeTK
     (TKProduct
        (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
        (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
forall (y1 :: TK) (z :: TK).
FullShapeTK y1 -> FullShapeTK z -> FullShapeTK (TKProduct y1 z)
FTKProduct (ShS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural)))
-> FullShapeTK (TKScalar Float)
-> FullShapeTK
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS (forall (n :: Natural). KnownNat n => SNat n
SNat @2 SNat 2
-> ShS ((':) @Natural 3 ('[] @Natural))
-> ShS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural)))
forall {sh1 :: [Natural]} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
SNat n -> ShS sh -> ShS sh1
:$$ forall (n :: Natural). KnownNat n => SNat n
SNat @3 SNat 3
-> ShS ('[] @Natural) -> ShS ((':) @Natural 3 ('[] @Natural))
forall {sh1 :: [Natural]} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
SNat n -> ShS sh -> ShS sh1
:$$ ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS) (forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar @Float)) (ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
-> FullShapeTK (TKScalar Float)
-> FullShapeTK
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float)
forall (sh :: [Natural]) (x :: TK).
ShS sh -> FullShapeTK x -> FullShapeTK (TKS2 sh x)
FTKS (forall (n :: Natural). KnownNat n => SNat n
SNat @3 SNat 3
-> ShS ((':) @Natural 4 ('[] @Natural))
-> ShS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural)))
forall {sh1 :: [Natural]} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
SNat n -> ShS sh -> ShS sh1
:$$ forall (n :: Natural). KnownNat n => SNat n
SNat @4 SNat 4
-> ShS ('[] @Natural) -> ShS ((':) @Natural 4 ('[] @Natural))
forall {sh1 :: [Natural]} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
SNat n -> ShS sh -> ShS sh1
:$$ ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS) (forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar @Float)))
  AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tpair (ssum @4 (stranspose @[2,1,0] (str (sreplicate @2 (tproject2 m1)) * sreplicate @3 dret))) (ssum @2 (str (stranspose @[2,1,0] (sreplicate @4 (tproject1 m1)) * sreplicate @3 dret)))"
  AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> ssum @3 (stranspose @[2,1,0] (sreplicate @4 (tproject1 m1)) * str (sreplicate @2 (tproject2 m1)))"
  AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPretty (AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
-> AstArtifactRev
     (TKProduct
        (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
        (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
     (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret m1 -> tpair (smatmul2 dret (str (tproject2 m1))) (smatmul2 (str (tproject1 m1)) dret)"
  AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
-> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalPretty (AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
-> AstArtifactRev
     (TKProduct
        (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
        (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
     (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev
  (TKProduct
     (TKS ((':) @Natural 2 ((':) @Natural 3 ('[] @Natural))) Float)
     (TKS ((':) @Natural 3 ((':) @Natural 4 ('[] @Natural))) Float))
  (TKS ((':) @Natural 2 ((':) @Natural 4 ('[] @Natural))) Float)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\m1 -> smatmul2 (tproject1 m1) (tproject2 m1)"

testAddSpeedBig :: Assertion
testAddSpeedBig :: Assertion
testAddSpeedBig =
  let m1 :: Concrete (TKR 2 Double)
      m1 :: Concrete (TKR 2 Double)
m1 = IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
1000,Int
Item (IShR 2)
1000] [Double
Item [Double]
1 .. Double
Item [Double]
1000000]
      m2 :: Concrete (TKR 2 Double)
m2 = Concrete (TKR 2 Double)
m1 Concrete (TKR 2 Double)
-> Concrete (TKR 2 Double) -> Concrete (TKR 2 Double)
forall a. Num a => a -> a -> a
+ Concrete (TKR 2 Double)
m1
  in Rational
-> Concrete (TKR 2 Double) -> Concrete (TKR 2 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10 Concrete (TKR 2 Double)
m2 Concrete (TKR 2 Double)
m2

testMatmul2SpeedBig :: Assertion
testMatmul2SpeedBig :: Assertion
testMatmul2SpeedBig =
  let m1 :: Concrete (TKR 2 Double)
      m1 :: Concrete (TKR 2 Double)
m1 = IShR 2 -> [Double] -> Concrete (TKR 2 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 2)
1000,Int
Item (IShR 2)
1000] [Double
Item [Double]
1 .. Double
Item [Double]
1000000]
      m2 :: Concrete (TKR 2 Double)
m2 = Concrete (TKR 2 Double)
-> Concrete (TKR 2 Double) -> Concrete (TKR 2 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
target (TKR 2 r) -> target (TKR 2 r) -> target (TKR 2 r)
rmatmul2 Concrete (TKR 2 Double)
m1 Concrete (TKR 2 Double)
m1
  in Rational
-> Concrete (TKR 2 Double) -> Concrete (TKR 2 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10 Concrete (TKR 2 Double)
m2 Concrete (TKR 2 Double)
m2

bar :: forall a. RealFloatH a => (a, a) -> a
bar :: forall a. RealFloatH a => (a, a) -> a
bar (a
x, a
y) =
  let w :: a
w = (a, a, a) -> a
forall a. RealFloatH a => (a, a, a) -> a
foo2 (a
x, a
y, a
x) a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
y
  in a -> a -> a
forall a. RealFloatH a => a -> a -> a
atan2H a
x a
w a -> a -> a
forall a. Num a => a -> a -> a
+ a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
w

barF :: forall a. RealFloatH a => (a, a) -> a
barF :: forall a. RealFloatH a => (a, a) -> a
barF (a
x, a
y) =
  let w :: a
w = (a, a, a) -> a
forall a. RealFloatH a => (a, a, a) -> a
foo2 (a
x, a
y, a
x) a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
y
  in a -> a -> a
forall a. RealFloatH a => a -> a -> a
atan2H a
x a
w a -> a -> a
forall a. Num a => a -> a -> a
+ a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
w

testBar :: Assertion
testBar :: Assertion
testBar =
  Rational
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double))
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.1435239435581166,Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Double
1.1053869545195814))
    (((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double))
-> ((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
    -> ADVal Concrete (TKR 0 Double))
-> (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. RealFloatH a => (a, a) -> a
bar @(ADVal Concrete (TKR 0 Double))) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2))

testBarS :: Assertion
testBarS :: Assertion
testBarS =
  Rational
-> (Concrete (TKS2 ('[] @Natural) (TKScalar Double)),
    Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (Concrete (TKS2 ('[] @Natural) (TKScalar Double)),
    Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3.1435239435581166, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl (-Double
1.1053869545195814))
    (((ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)),
  ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)),
      ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> DValue
     (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)),
      ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKS ('[] @Natural) r)
-> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> ((ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)),
     ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
    -> ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> (ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)),
    ADVal Concrete (TKS2 ('[] @Natural) (TKScalar Double)))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. RealFloatH a => (a, a) -> a
barF @(ADVal Concrete (TKS '[] Double))) (Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1, Double -> Concrete (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.2))

testBar2S :: Assertion
testBar2S :: Assertion
testBar2S =
  Rational
-> (Concrete
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double))
-> (Concrete
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double),
    Concrete
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Double
-> Concrete
     (TKS
        ((':)
           @Natural
           52
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
3.1435239435581166, Double
-> Concrete
     (TKS
        ((':)
           @Natural
           52
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl (-Double
1.1053869545195814))
    (((AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural
          52
          ((':)
             @Natural
             2
             ((':)
                @Natural
                2
                ((':)
                   @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
       Double),
  AstTensor
    AstMethodLet
    FullSpan
    (TKS
       ((':)
          @Natural
          52
          ((':)
             @Natural
             2
             ((':)
                @Natural
                2
                ((':)
                   @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
       Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              52
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              52
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
           Double))
-> Value
     (AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              52
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
           Double),
      AstTensor
        AstMethodLet
        FullSpan
        (TKS
           ((':)
              @Natural
              52
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural
                    2
                    ((':)
                       @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
           Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (AstTensor
  AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall r.
GoodScalar r =>
AstTensor AstMethodLet FullSpan (TKS ('[] @Natural) r)
-> AstTensor AstMethodLet FullSpan (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (AstTensor
   AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural
             52
             ((':)
                @Natural
                2
                ((':)
                   @Natural
                   2
                   ((':)
                      @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural
             52
             ((':)
                @Natural
                2
                ((':)
                   @Natural
                   2
                   ((':)
                      @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
          Double))
    -> AstTensor
         AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural
        52
        ((':)
           @Natural
           2
           ((':)
              @Natural
              2
              ((':)
                 @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
     Double)
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ('[] @Natural) x)
ssum0 (AstTensor
   AstMethodLet
   FullSpan
   (TKS
      ((':)
         @Natural
         52
         ((':)
            @Natural
            2
            ((':)
               @Natural
               2
               ((':)
                  @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
      Double)
 -> AstTensor
      AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double)))
-> ((AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural
             52
             ((':)
                @Natural
                2
                ((':)
                   @Natural
                   2
                   ((':)
                      @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
          Double),
     AstTensor
       AstMethodLet
       FullSpan
       (TKS
          ((':)
             @Natural
             52
             ((':)
                @Natural
                2
                ((':)
                   @Natural
                   2
                   ((':)
                      @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
          Double))
    -> AstTensor
         AstMethodLet
         FullSpan
         (TKS
            ((':)
               @Natural
               52
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural
                     2
                     ((':)
                        @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
            Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double),
    AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural
            52
            ((':)
               @Natural
               2
               ((':)
                  @Natural
                  2
                  ((':)
                     @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
         Double))
-> AstTensor
     AstMethodLet FullSpan (TKS2 ('[] @Natural) (TKScalar Double))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. RealFloatH a => (a, a) -> a
barF @(AstTensor AstMethodLet FullSpan (TKS '[52, 2, 2, 1, 1, 3] Double))) (Double
-> Concrete
     (TKS
        ((':)
           @Natural
           52
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
1.1, Double
-> Concrete
     (TKS
        ((':)
           @Natural
           52
           ((':)
              @Natural
              2
              ((':)
                 @Natural
                 2
                 ((':)
                    @Natural 1 ((':) @Natural 1 ((':) @Natural 3 ('[] @Natural)))))))
        Double)
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl Double
2.2))

testBarCFwd :: Assertion
testBarCFwd :: Assertion
testBarCFwd =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
9.327500345189534e-2)
    (((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
 -> ADVal Concrete (TKR 0 Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double))
-> Concrete (ADTensorKind (TKR 0 Double))
forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp (forall a. RealFloatH a => (a, a) -> a
bar @(ADVal Concrete (TKR 0 Double))) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.2))

testBarFwd :: Assertion
testBarFwd :: Assertion
testBarFwd =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
9.327500345189534e-2)
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp @_ @(TKR 0 Double)
         (AstTensor AstMethodLet FullSpan (TKR 0 Double),
 AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall a. RealFloatH a => (a, a) -> a
bar (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.2))

barADVal2 :: forall a. RealFloatH a
          => (a, a, a) -> a
barADVal2 :: forall a. RealFloatH a => (a, a, a) -> a
barADVal2 (a
x,a
y,a
z) =
  let w :: a
w = (a, a, a) -> a
forall a. RealFloatH a => (a, a, a) -> a
foo2 (a
x,a
y,a
z) a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
y
  in a -> a -> a
forall a. RealFloatH a => a -> a -> a
atan2H a
z a
w a -> a -> a
forall a. Num a => a -> a -> a
+ a
z a -> a -> a
forall a. Num a => a -> a -> a
* a
w

-- A check if gradient computation is re-entrant.
-- This test fails (not on first run, but on repetition) if old terms,
-- from before current iteration of gradient descent, are not soundly
-- handled in new computations (due to naive impurity, TH, plugins,
-- or just following the papers that assume a single isolated run).
-- This example requires monomorphic types and is contrived,
-- but GHC does optimize and factor out some accidentally constant
-- subterms in real examples (presumably after it monomorphizes them)
-- causing exactly the same danger.
-- This example also tests unused parameters (x), another common cause
-- of crashes in naive gradient computing code.
baz :: ( ADVal Concrete (TKR 0 Double)
       , ADVal Concrete (TKR 0 Double)
       , ADVal Concrete (TKR 0 Double) )
    -> ADVal Concrete (TKR 0 Double)
baz :: (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
 ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR 0 Double)
baz (ADVal Concrete (TKR 0 Double)
_x,ADVal Concrete (TKR 0 Double)
y,ADVal Concrete (TKR 0 Double)
z) =
  let w :: ADVal Concrete (TKR 0 Double)
w = ADVal Concrete (TKR 0 Double)
fooFromPrimal ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall a. Num a => a -> a -> a
* (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
 ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR 0 Double)
forall a. RealFloatH a => (a, a, a) -> a
barADVal2 (ADVal Concrete (TKR 0 Double)
y,ADVal Concrete (TKR 0 Double)
y,ADVal Concrete (TKR 0 Double)
z) ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall a. Num a => a -> a -> a
* ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall a. Floating a => a -> a
sin ADVal Concrete (TKR 0 Double)
y
  in ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall a. RealFloatH a => a -> a -> a
atan2H ADVal Concrete (TKR 0 Double)
z ADVal Concrete (TKR 0 Double)
w ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall a. Num a => a -> a -> a
+ ADVal Concrete (TKR 0 Double)
z ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall a. Num a => a -> a -> a
* ADVal Concrete (TKR 0 Double)
w

-- An "old term", computed once, stored at top level.
fooFromPrimal :: ADVal Concrete (TKR 0 Double)
fooFromPrimal :: ADVal Concrete (TKR 0 Double)
fooFromPrimal = (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
 ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR 0 Double)
forall a. RealFloatH a => (a, a, a) -> a
foo2 (Double -> ADVal Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
7, Double -> ADVal Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
8, Double -> ADVal Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
9)

testBaz :: Assertion
testBaz :: Assertion
testBaz =
  Rational
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Double
5219.20995030263), Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2782.276274462047)
    (((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
  ADVal Concrete (TKR 0 Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
      ADVal Concrete (TKR 0 Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
      ADVal Concrete (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double))
-> ((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
     ADVal Concrete (TKR 0 Double))
    -> ADVal Concrete (TKR 0 Double))
-> (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
    ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
 ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR 0 Double)
baz) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.3))

-- If terms are numbered and @z@ is, wrongly, decorated with number 0,
-- here @fooFromPrimal@ is likely to clash with @z@, since it was numbered
-- starting from 0, too.
-- The test fails if term numbering is reset to 0 between gradient computation
-- runs (verified) as well as when delta-expression evaluation assumes
-- it can only encounter terms numbered in the current run and,
-- e.g., allocates an array with only that much space (not verified).
-- Actually, with term counter zeroed just before @cgrad@ application,
-- even a single @testBaz@ execution produces wrong results, but this test
-- is likely to fail in less naive implementations, as well.
testBazRenumbered :: Assertion
testBazRenumbered :: Assertion
testBazRenumbered =
  Rational
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
    Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-9
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Double
5219.20995030263), Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2783.276274462047)
    (((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
  ADVal Concrete (TKR 0 Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
      ADVal Concrete (TKR 0 Double))
-> DValue
     (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
      ADVal Concrete (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double))
-> ((ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
     ADVal Concrete (TKR 0 Double))
    -> ADVal Concrete (TKR 0 Double))
-> (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
    ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\(ADVal Concrete (TKR 0 Double)
x,ADVal Concrete (TKR 0 Double)
y,ADVal Concrete (TKR 0 Double)
z) -> ADVal Concrete (TKR 0 Double)
z ADVal Concrete (TKR 0 Double)
-> ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall a. Num a => a -> a -> a
+ (ADVal Concrete (TKR 0 Double), ADVal Concrete (TKR 0 Double),
 ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR 0 Double)
baz (ADVal Concrete (TKR 0 Double)
x,ADVal Concrete (TKR 0 Double)
y,ADVal Concrete (TKR 0 Double)
z))) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.3))

-- A dual-number and list-based version of a function that goes
-- from `R^3` to `R`.
fooD :: forall r. r ~ Double
     => ListR 3 (ADVal Concrete (TKR 0 r)) -> ADVal Concrete (TKR 0 r)
fooD :: forall r.
((r :: Type) ~ (Double :: Type)) =>
ListR 3 (ADVal Concrete (TKR 0 r)) -> ADVal Concrete (TKR 0 r)
fooD (ADVal Concrete (TKR 0 r)
x ::: ADVal Concrete (TKR 0 r)
y ::: ADVal Concrete (TKR 0 r)
z ::: ListR n1 (ADVal Concrete (TKR 0 r))
ZR) =
  let w :: ADVal Concrete (TKR 0 r)
w = ADVal Concrete (TKR 0 r)
x ADVal Concrete (TKR 0 r)
-> ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKR 0 r)
forall a. Num a => a -> a -> a
* ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKR 0 r)
forall a. Floating a => a -> a
sin ADVal Concrete (TKR 0 r)
y
  in ADVal Concrete (TKR 0 r)
-> ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKR 0 r)
forall a. RealFloatH a => a -> a -> a
atan2H ADVal Concrete (TKR 0 r)
z ADVal Concrete (TKR 0 r)
w ADVal Concrete (TKR 0 r)
-> ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKR 0 r)
forall a. Num a => a -> a -> a
+ ADVal Concrete (TKR 0 r)
z ADVal Concrete (TKR 0 r)
-> ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKR 0 r)
forall a. Num a => a -> a -> a
* ADVal Concrete (TKR 0 r)
w

testFooD :: Assertion
testFooD :: Assertion
testFooD =
  Rational
-> ListR 3 (Concrete (TKR 0 Double))
-> ListR 3 (Concrete (TKR 0 Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    ([Item (ListR 3 (Concrete (TKR 0 Double)))]
-> ListR 3 (Concrete (TKR 0 Double))
forall l. IsList l => [Item l] -> l
fromList [Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.4396285219055063, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-Double
1.953374825727421), Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.9654825811012627])
    ((ListR 3 (ADVal Concrete (TKR 0 Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue (ListR 3 (ADVal Concrete (TKR 0 Double)))
-> DValue (ListR 3 (ADVal Concrete (TKR 0 Double)))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double)
forall r.
GoodScalar r =>
ADVal Concrete (TKR 0 r) -> ADVal Concrete (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double))
-> (ListR 3 (ADVal Concrete (TKR 0 Double))
    -> ADVal Concrete (TKR 0 Double))
-> ListR 3 (ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ListR 3 (ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR 0 Double)
forall r.
((r :: Type) ~ (Double :: Type)) =>
ListR 3 (ADVal Concrete (TKR 0 r)) -> ADVal Concrete (TKR 0 r)
fooD) ([Item (ListR 3 (Concrete (TKR 0 Double)))]
-> ListR 3 (Concrete (TKR 0 Double))
forall l. IsList l => [Item l] -> l
fromList [Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.2, Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.3]))

fooBuild1 :: (ADReady target, GoodScalar r, Differentiable r)
          => target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 target (TKR 1 r)
v =
  let r :: target (TKR2 0 (TKScalar r))
r = target (TKR 1 r) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 target (TKR 1 r)
v
      v' :: target (TKR2 0 (TKScalar r))
v' = target (TKR 1 r) -> target (TKR2 0 (TKScalar r))
forall (target :: Target) (n :: Natural) r.
(BaseTensor target, ConvertTensor target, LetTensor target,
 GoodScalar r) =>
target (TKR n r) -> target (TKR 0 r)
rminimum target (TKR 1 r)
v
  in Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 ((PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \PrimalOf target (TKScalar Int64)
ix ->
       target (TKR2 0 (TKScalar r))
r target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* (target (TKR2 0 (TKScalar r)), target (TKR2 0 (TKScalar r)),
 target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a. RealFloatH a => (a, a, a) -> a
foo2 ( r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
3
               , r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
5 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
r
               , target (TKR2 0 (TKScalar r))
r target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR 1 r) -> target (TKR2 0 (TKScalar r))
forall (target :: Target) (n :: Natural) r.
(BaseTensor target, ConvertTensor target, LetTensor target,
 GoodScalar r) =>
target (TKR n r) -> target (TKR 0 r)
rminimum target (TKR 1 r)
v target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
v')
       target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ (target (TKR2 0 (TKScalar r)), target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a. RealFloatH a => (a, a) -> a
bar (target (TKR2 0 (TKScalar r))
r, target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v [PrimalOf target (TKScalar Int64)
ix PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
1])

testFooBuildDt :: Assertion
testFooBuildDt :: Assertion
testFooBuildDt =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-5
    (Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double))
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double)))
-> Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ IShR 1 -> [Double] -> Ranked 1 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear [Int
Item (IShR 1)
4] [-Double
189890.46351219364,-Double
233886.08744601303,-Double
222532.22669716467,-Double
206108.68889329425])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Concrete (ADTensorKind ztgt) -> Value src
vjp @_ @(TKR 1 Double)
           AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
4] [Double
Item [Double]
1.1, Double
Item [Double]
2.2, Double
Item [Double]
3.3, Double
Item [Double]
4]) (IShR 1
-> Concrete (TKR 0 Double) -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 1)
3] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42)))

testFooBuildCFwd :: Assertion
testFooBuildCFwd :: Assertion
testFooBuildCFwd =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-5
    (Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double))
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double)))
-> Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ IShR 1 -> [Double] -> Ranked 1 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear [Int
Item (IShR 1)
3] [-Double
296584.8166864211,-Double
290062.472288043,-Double
265770.1775742018])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp @_ @(TKR 1 Double)
          ADVal Concrete (TKR2 1 (TKScalar Double))
-> ADVal Concrete (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
4] [Double
Item [Double]
1.1, Double
Item [Double]
2.2, Double
Item [Double]
3.3, Double
Item [Double]
4]) (IShR 1
-> Concrete (TKR 0 Double) -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 1)
4] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42)))

testFooBuildFwd :: Assertion
testFooBuildFwd :: Assertion
testFooBuildFwd =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-5
    (Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double))
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double)))
-> Ranked 1 Double -> Concrete (TKR2 1 (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ IShR 1 -> [Double] -> Ranked 1 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear [Int
Item (IShR 1)
3] [-Double
296584.8166864211,-Double
290062.472288043,-Double
265770.1775742018])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp @_ @(TKR 1 Double)
         AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
4] [Double
Item [Double]
1.1, Double
Item [Double]
2.2, Double
Item [Double]
3.3, Double
Item [Double]
4]) (IShR 1
-> Concrete (TKR 0 Double) -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 1)
4] (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42)))

testFooBuild :: Assertion
testFooBuild :: Assertion
testFooBuild =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
4] [-Double
4521.201512195087,-Double
5568.7163677622175,-Double
5298.386349932494,-Double
4907.349735554627])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
4] [Double
Item [Double]
1.1, Double
Item [Double]
2.2, Double
Item [Double]
3.3, Double
Item [Double]
4]))

fooNoGo :: forall target r. (ADReady target, GoodScalar r, Differentiable r)
        => target (TKR 1 r) -> target (TKR 1 r)
fooNoGo :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooNoGo target (TKR 1 r)
v =
  let r :: target (TKR2 0 (TKScalar r))
r = target (TKR 1 r) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 target (TKR 1 r)
v
  in Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 (\PrimalOf target (TKScalar Int64)
ix' -> let ix :: PrimalOf target (TKS '[] Int64)
                            ix :: PrimalOf target (TKS ('[] @Natural) Int64)
ix = PrimalOf
  target (TKR2 (Rank @Natural ('[] @Natural)) (TKScalar Int64))
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall (sh :: [Natural]) (x :: TK).
(KnownShS sh, KnownSTK x) =>
PrimalOf target (TKR2 (Rank @Natural sh) x)
-> PrimalOf target (TKS2 sh x)
forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR (PrimalOf
   target (TKR2 (Rank @Natural ('[] @Natural)) (TKScalar Int64))
 -> PrimalOf target (TKS ('[] @Natural) Int64))
-> PrimalOf
     target (TKR2 (Rank @Natural ('[] @Natural)) (TKScalar Int64))
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall a b. (a -> b) -> a -> b
$ PrimalOf target (TKScalar Int64) -> PrimalOf target (TKR 0 Int64)
forall r.
GoodScalar r =>
PrimalOf target (TKScalar r) -> PrimalOf target (TKR 0 r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKScalar r) -> target (TKR 0 r)
rfromK PrimalOf target (TKScalar Int64)
ix' in
       (target (TKR2 0 (TKScalar r)), target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a. RealFloatH a => (a, a) -> a
bar (r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
3.14, (target (TKR2 0 (TKScalar r)), target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a. RealFloatH a => (a, a) -> a
bar (r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
3.14, target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v [PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKScalar Int64)
forall r.
GoodScalar r =>
PrimalOf target (TKS ('[] @Natural) r)
-> PrimalOf target (TKScalar r)
forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKS ('[] @Natural) r) -> target (TKScalar r)
kfromS (PrimalOf target (TKS ('[] @Natural) Int64)
 -> PrimalOf target (TKScalar Int64))
-> PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKScalar Int64)
forall a b. (a -> b) -> a -> b
$ (PrimalOf target (TKS ('[] @Natural) Int64)
ix PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall a. Num a => a -> a -> a
+ (target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall (target :: Target) (sh :: [Natural]) (x :: TK).
BaseTensor target =>
target (TKS2 sh x) -> PrimalOf target (TKS2 sh x)
sprimalPart (target (TKS ('[] @Natural) Int64)
 -> PrimalOf target (TKS ('[] @Natural) Int64))
-> (target (TKR2 0 (TKScalar r))
    -> target (TKS ('[] @Natural) Int64))
-> target (TKR2 0 (TKScalar r))
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. target (TKS ('[] @Natural) r) -> target (TKS ('[] @Natural) Int64)
forall r r2 (target :: Target) (sh :: [Natural]).
(GoodScalar r, RealFrac r, GoodScalar r2, Integral r2,
 BaseTensor target) =>
target (TKS sh r) -> target (TKS sh r2)
sfloor (target (TKS ('[] @Natural) r)
 -> target (TKS ('[] @Natural) Int64))
-> (target (TKR2 0 (TKScalar r)) -> target (TKS ('[] @Natural) r))
-> target (TKR2 0 (TKScalar r))
-> target (TKS ('[] @Natural) Int64)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. target (TKR2 0 (TKScalar r)) -> target (TKS ('[] @Natural) r)
target (TKR2 (Rank @Natural ('[] @Natural)) (TKScalar r))
-> target (TKS ('[] @Natural) r)
forall (sh :: [Natural]) (x :: TK).
(KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR) target (TKR2 0 (TKScalar r))
r) PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
`minH` Int64 -> PrimalOf target (TKS ('[] @Natural) Int64)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Int64
2 PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
`maxH` Int64 -> PrimalOf target (TKS ('[] @Natural) Int64)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Int64
0]))
       target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ BoolOf target
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (BoolOf target -> BoolOf target -> BoolOf target
forall b. Boolean b => b -> b -> b
(&&*) (forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex @1 target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v [PrimalOf target (TKScalar Int64)
ix' PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
* PrimalOf target (TKScalar Int64)
2] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> BoolOf target
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
<=. r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0)
                    (Int64 -> PrimalOf target (TKS ('[] @Natural) Int64)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar Int64
6 PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
-> BoolOf (PrimalOf target)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
>. PrimalOf target (TKS ('[] @Natural) Int64)
-> PrimalOf target (TKS ('[] @Natural) Int64)
forall a. Num a => a -> a
abs PrimalOf target (TKS ('[] @Natural) Int64)
ix))
               target (TKR2 0 (TKScalar r))
r (r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
5 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
r))
     target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Fractional a => a -> a -> a
/ Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
1 Int
3 ((target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR 1 r) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (x1 :: TK) (target :: Target).
(KnownNat n, KnownSTK x, KnownSTK x1, BaseTensor target) =>
(target (TKR2 0 x1) -> target (TKR2 0 x))
-> target (TKR2 n x1) -> target (TKR2 n x)
rmap0N (\target (TKR2 0 (TKScalar r))
x -> BoolOf target
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (target (TKR2 0 (TKScalar r))
x target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> BoolOf target
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
>. target (TKR2 0 (TKScalar r))
r) target (TKR2 0 (TKScalar r))
r target (TKR2 0 (TKScalar r))
x) target (TKR 1 r)
v)
     target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 (target (TKR2 0 (TKScalar r))
-> PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall a b. a -> b -> a
const (r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
1))

testFooNoGo0 :: Assertion
testFooNoGo0 :: Assertion
testFooNoGo0 =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-6
   (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [Double
Item [Double]
5.037878787878788,-Double
14.394255484765257,Double
Item [Double]
43.23648655081373,-Double
0.8403418295960368,Double
Item [Double]
5.037878787878788])
   (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooNoGo
         (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [Double
1.1 :: Double, Double
Item [Double]
2.2, Double
Item [Double]
3.3, Double
Item [Double]
4, Double
Item [Double]
5]))

nestedBuildMap :: forall target r.
                  (ADReady target, GoodScalar r, Differentiable r)
               => target (TKR 0 r) -> target (TKR 1 r)
nestedBuildMap :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 0 r) -> target (TKR 1 r)
nestedBuildMap target (TKR2 0 (TKScalar r))
r =
  let w :: target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
w = IShR 1
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 1)
4]
      v0' :: target (TKR2 1 (TKScalar r))
v0' = IShR 1
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 1)
177] target (TKR2 0 (TKScalar r))
r :: target (TKR 1 r)
  in target (TKR2 1 (TKScalar r))
-> (target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR2 1 (TKScalar r))
v0' ((target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
 -> target (TKR2 1 (TKScalar r)))
-> (target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 1 (TKScalar r))
v' ->
    let nestedMap :: target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
nestedMap target (TKR2 0 (TKScalar r))
x0 = target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR2 0 (TKScalar r))
x0 ((target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
 -> target (TKR2 1 (TKScalar r)))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 0 (TKScalar r))
x -> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (n :: Natural) (x :: TK) (x1 :: TK) (target :: Target).
(KnownNat n, KnownSTK x, KnownSTK x1, BaseTensor target) =>
(target (TKR2 0 x1) -> target (TKR2 0 x))
-> target (TKR2 n x1) -> target (TKR2 n x)
rmap0N (target (TKR2 0 (TKScalar r))
x target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Fractional a => a -> a -> a
/) (target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
w target (TKR2 0 (TKScalar r))
x)
        variableLengthBuild :: PrimalOf target (TKScalar Int64)
-> target (TKR2 (1 + 0) (TKScalar r))
variableLengthBuild PrimalOf target (TKScalar Int64)
iy = Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
7 (\PrimalOf target (TKScalar Int64)
ix -> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> IxROf target (0 + 1) -> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR2 1 (TKScalar r))
target (TKR2 ((0 + 1) + 0) (TKScalar r))
v' (PrimalOf target (TKScalar Int64)
ix PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
iy PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR))
        doublyBuild :: target (TKR2 (1 + 0) (TKScalar r))
doublyBuild = Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
5 (target (TKR2 1 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (target :: Target) (n :: Natural) r.
(BaseTensor target, ConvertTensor target, LetTensor target,
 GoodScalar r) =>
target (TKR n r) -> target (TKR 0 r)
rminimum (target (TKR2 1 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 1 (TKScalar r)))
-> PrimalOf target (TKScalar Int64)
-> target (TKR2 0 (TKScalar r))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrimalOf target (TKScalar Int64) -> target (TKR2 1 (TKScalar r))
PrimalOf target (TKScalar Int64)
-> target (TKR2 (1 + 0) (TKScalar r))
variableLengthBuild)
        fooMap1 :: target (TKR 0 r) -> target (TKR 1 r)
        fooMap1 :: target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
fooMap1 target (TKR2 0 (TKScalar r))
r2 =
          let v :: target (TKR2 1 (TKScalar r))
v = target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 (target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ IShR 1
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 1)
130] target (TKR2 0 (TKScalar r))
r2
          in (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (n :: Natural) (x :: TK) (x1 :: TK) (target :: Target).
(KnownNat n, KnownSTK x, KnownSTK x1, BaseTensor target) =>
(target (TKR2 0 x1) -> target (TKR2 0 x))
-> target (TKR2 n x1) -> target (TKR2 n x)
rmap0N (\target (TKR2 0 (TKScalar r))
x -> target (TKR2 0 (TKScalar r))
x target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
r2 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
5) target (TKR2 1 (TKScalar r))
v
    in (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (n :: Natural) (x :: TK) (x1 :: TK) (target :: Target).
(KnownNat n, KnownSTK x, KnownSTK x1, BaseTensor target) =>
(target (TKR2 0 x1) -> target (TKR2 0 x))
-> target (TKR2 n x1) -> target (TKR2 n x)
rmap0N (\target (TKR2 0 (TKScalar r))
x0 -> target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR2 0 (TKScalar r))
x0 ((target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 0 (TKScalar r)))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 0 (TKScalar r))
x -> target (TKR2 0 (TKScalar r))
x target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 1 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0
                           (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 (\PrimalOf target (TKScalar Int64)
ix -> (target (TKR2 0 (TKScalar r)), target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a. RealFloatH a => (a, a) -> a
bar (target (TKR2 0 (TKScalar r))
x, target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
v' [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
ix]))
                            target (TKR2 1 (TKScalar r))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall a. Num a => a -> a -> a
+ (target (TKR2 1 (TKScalar r))
-> (target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
nestedMap target (TKR2 0 (TKScalar r))
x) ((target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
 -> target (TKR2 1 (TKScalar r)))
-> (target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 1 (TKScalar r))
x3 -> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
fooBuild1 target (TKR2 1 (TKScalar r))
x3)
                            target (TKR2 1 (TKScalar r))
-> target (TKR2 1 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
forall a. Fractional a => a -> a -> a
/ (target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR2 0 (TKScalar r))
x ((target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
 -> target (TKR2 1 (TKScalar r)))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 1 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 0 (TKScalar r))
x4 -> target (TKR2 0 (TKScalar r)) -> target (TKR2 1 (TKScalar r))
fooMap1 target (TKR2 0 (TKScalar r))
x4))
              ) target (TKR2 1 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
doublyBuild

testNestedBuildMap1 :: Assertion
testNestedBuildMap1 :: Assertion
testNestedBuildMap1 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
107.25984443006627)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 0 r) -> target (TKR 1 r)
nestedBuildMap (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1))

nestedSumBuild :: (ADReady target, GoodScalar r, Differentiable r)
               => target (TKR 1 r) -> target (TKR 1 r)
nestedSumBuild :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
nestedSumBuild target (TKR 1 r)
v0 = target (TKR 1 r)
-> (target (TKR 1 r) -> target (TKR 1 r)) -> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR 1 r)
v0 ((target (TKR 1 r) -> target (TKR 1 r)) -> target (TKR 1 r))
-> (target (TKR 1 r) -> target (TKR 1 r)) -> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR 1 r)
v ->
 target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
9 PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0)) (\target (TKR2 0 (TKScalar r))
tbtf ->
  (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
13 (\PrimalOf target (TKScalar Int64)
ix ->
    target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
4 (\PrimalOf target (TKScalar Int64)
ix2 ->
      (target (TKR 1 r)
 -> IxR 1 (PrimalOf target (TKScalar Int64))
 -> target (TKR2 0 (TKScalar r)))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR 1 r)
-> target (TKR2 0 (TKScalar r))
forall a b c. (a -> b -> c) -> b -> a -> c
flip target (TKR 1 r)
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
ix2]
        (target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v) ((target (TKR2 0 (TKScalar r)) -> target (TKR 1 r))
 -> target (TKR 1 r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR2 0 (TKScalar r))
tsumv -> Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
5 (target (TKR2 0 (TKScalar r))
-> PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall a b. a -> b -> a
const target (TKR2 0 (TKScalar r))
tsumv)
         target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* NonEmpty (target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rfromList
             [ PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
ix
             , target (TKR2 0 (TKScalar r))
Item (NonEmpty (target (TKR2 0 (TKScalar r))))
tbtf
             , target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
6 (\PrimalOf target (TKScalar Int64)
_ -> target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v))
             , target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
v [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
ix2]
             , target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 (\PrimalOf target (TKScalar Int64)
ix7 ->
                 target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Int
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
5 (PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
ix7))))
             ]))))))
 target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
+ target (TKR 1 r)
-> (target (TKR 1 r) -> target (TKR 1 r)) -> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (target (TKR2 0 (TKScalar r)) -> target (TKR 1 r)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 0 r) -> target (TKR 1 r)
nestedBuildMap (target (TKR 1 r) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 target (TKR 1 r)
v)) (\target (TKR 1 r)
nbmt -> (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
13 (\PrimalOf target (TKScalar Int64)
ix ->
     target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
nbmt target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
`rindex` [PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
minH PrimalOf target (TKScalar Int64)
ix PrimalOf target (TKScalar Int64)
4])))

testNestedSumBuild :: Assertion
testNestedSumBuild :: Assertion
testNestedSumBuild =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-8
    (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [-Double
14084.715065313612,-Double
14084.715065313612,-Double
14084.715065313612,-Double
14014.775065313623,-Double
14084.715065313612])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
nestedSumBuild (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [Double
Item [Double]
1.1, Double
Item [Double]
2.2, Double
Item [Double]
3.3, Double
Item [Double]
4, -Double
5.22]))

nestedBuildIndex :: forall target r. (ADReady target, GoodScalar r)
                 => target (TKR 1 r) -> target (TKR 1 r)
nestedBuildIndex :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 1 r)
nestedBuildIndex target (TKR 1 r)
v =
  Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
2 ((PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \PrimalOf target (TKScalar Int64)
ix2 -> target (TKR2 ((1 + 0) + 0) (TKScalar r))
-> IxROf target (1 + 0) -> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 ((PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \PrimalOf target (TKScalar Int64)
ix3 -> target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex (Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
4 ((PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \PrimalOf target (TKScalar Int64)
ix4 -> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> IxROf target (0 + 1) -> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR 1 r)
target (TKR2 ((0 + 1) + 0) (TKScalar r))
v (PrimalOf target (TKScalar Int64)
ix4 PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
ix3]) (PrimalOf target (TKScalar Int64)
ix2 PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (1 + 0)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)

testNestedBuildIndex :: Assertion
testNestedBuildIndex :: Assertion
testNestedBuildIndex =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [Double
Item [Double]
1,Double
Item [Double]
1,Double
Item [Double]
0,Double
Item [Double]
0,Double
Item [Double]
0])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 1 r)
nestedBuildIndex (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [Double
Item [Double]
1.1, Double
Item [Double]
2.2, Double
Item [Double]
3.3, Double
Item [Double]
4, -Double
5.22]))

barRelu
  :: ( ADReady target, GoodScalar r, KnownNat n, Differentiable r )
  => target (TKR n r) -> target (TKR n r)
barRelu :: forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
barRelu target (TKR n r)
x = target (TKR n r) -> target (TKR n r)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu (target (TKR n r) -> target (TKR n r))
-> target (TKR n r) -> target (TKR n r)
forall a b. (a -> b) -> a -> b
$ (target (TKR n r), target (TKR n r)) -> target (TKR n r)
forall a. RealFloatH a => (a, a) -> a
bar (target (TKR n r)
x, target (TKR n r) -> target (TKR n r)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
relu target (TKR n r)
x)

testBarReluDt :: Assertion
testBarReluDt :: Assertion
testBarReluDt =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Ranked 0 Double -> Concrete (TKR 0 Double)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 0 Double -> Concrete (TKR 0 Double))
-> Ranked 0 Double -> Concrete (TKR 0 Double)
forall a b. (a -> b) -> a -> b
$ IShR 0 -> [Double] -> Ranked 0 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear [] [Double
Item [Double]
191.20462646925841])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Concrete (ADTensorKind ztgt) -> Value src
vjp @_ @(TKR 0 Double)
           AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
barRelu (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42.2))

testBarRelu :: Assertion
testBarRelu :: Assertion
testBarRelu =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 0 -> [Double] -> Concrete (TKR 0 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [] [Double
Item [Double]
4.5309153191767395])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
barRelu (IShR 0 -> [Double] -> Concrete (TKR 0 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [] [Double
Item [Double]
1.1]))

testBarRelu3 :: Assertion
testBarRelu3 :: Assertion
testBarRelu3 =
  Rational
-> Concrete (TKR 3 Double)
-> ((Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double)),
    (Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 3 -> [Double] -> Concrete (TKR 3 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
4.5309153191767395,Double
Item [Double]
4.5302138998556,-Double
9.39547533946234,Double
Item [Double]
95.29759282497125])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @3 f (TKR 3 Double) -> f (TKR 3 Double)
forall (f :: Target).
ADReady f =>
f (TKR 3 Double) -> f (TKR 3 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n, Differentiable r) =>
target (TKR n r) -> target (TKR n r)
barRelu (IShR 3 -> [Double] -> Concrete (TKR 3 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
1.1, Double
Item [Double]
2, Double
Item [Double]
3, Double
Item [Double]
4.2]))

barReluMax0
  :: ( ADReady target, GoodScalar r, KnownNat n, RealFloatH (target (TKR n r)) )
  => target (TKR n r) -> target (TKR n r)
barReluMax0 :: forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax0 target (TKR n r)
x = target (TKR n r) -> target (TKR n r)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax (target (TKR n r) -> target (TKR n r))
-> target (TKR n r) -> target (TKR n r)
forall a b. (a -> b) -> a -> b
$ (target (TKR n r), target (TKR n r)) -> target (TKR n r)
forall a. RealFloatH a => (a, a) -> a
bar (target (TKR n r)
x, target (TKR n r)
x)

barReluMax
  :: ( ADReady target, GoodScalar r, KnownNat n, RealFloatH (target (TKR n r)) )
  => target (TKR n r) -> target (TKR n r)
barReluMax :: forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax target (TKR n r)
x = target (TKR n r) -> target (TKR n r)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax (target (TKR n r) -> target (TKR n r))
-> target (TKR n r) -> target (TKR n r)
forall a b. (a -> b) -> a -> b
$ (target (TKR n r), target (TKR n r)) -> target (TKR n r)
forall a. RealFloatH a => (a, a) -> a
bar (target (TKR n r)
x, target (TKR n r) -> target (TKR n r)
forall (target :: Target) (n :: Natural) r.
(ADReady target, GoodScalar r, KnownNat n) =>
target (TKR n r) -> target (TKR n r)
reluMax target (TKR n r)
x)

testBarReluMaxDt :: Assertion
testBarReluMaxDt :: Assertion
testBarReluMaxDt =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Ranked 0 Double -> Concrete (TKR 0 Double)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 0 Double -> Concrete (TKR 0 Double))
-> Ranked 0 Double -> Concrete (TKR 0 Double)
forall a b. (a -> b) -> a -> b
$ IShR 0 -> [Double] -> Ranked 0 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear [] [Double
Item [Double]
191.20462646925841])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Concrete (ADTensorKind ztgt) -> Value src
vjp @_ @(TKR 0 Double)
           AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax (IShR 0 -> [Concrete (TKR 0 Double)] -> Concrete (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [] [Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1]) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
42.2))

testBarReluMax :: Assertion
testBarReluMax :: Assertion
testBarReluMax =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 0 -> [Double] -> Concrete (TKR 0 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [] [Double
Item [Double]
4.5309153191767395])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax (IShR 0 -> [Double] -> Concrete (TKR 0 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [] [Double
Item [Double]
1.1]))

testBarReluMax30 :: Assertion
testBarReluMax30 :: Assertion
testBarReluMax30 =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
1] [Double
Item [Double]
4.5309153191767395])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax0 (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
1] [Double
Item [Double]
1.1]))

testBarReluMax31 :: Assertion
testBarReluMax31 :: Assertion
testBarReluMax31 =
  Rational
-> Concrete (TKR 3 Double)
-> ((Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double)),
    (Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double), Concrete (TKR 3 Double),
     Concrete (TKR 3 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 3 -> [Double] -> Concrete (TKR 3 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
4.5309153191767395,Double
Item [Double]
4.5302138998556,-Double
9.39547533946234,Double
Item [Double]
95.29759282497125])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @3 f (TKR 3 Double) -> f (TKR 3 Double)
forall (f :: Target).
ADReady f =>
f (TKR 3 Double) -> f (TKR 3 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax (IShR 3 -> [Double] -> Concrete (TKR 3 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
1.1, Double
Item [Double]
2, Double
Item [Double]
3, Double
Item [Double]
4.2]))

testBarReluMax3CFwd :: Assertion
testBarReluMax3CFwd :: Assertion
testBarReluMax3CFwd =
  Rational
-> Concrete (TKR 3 Double) -> Concrete (TKR 3 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Ranked 3 Double -> Concrete (TKR 3 Double)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 3 Double -> Concrete (TKR 3 Double))
-> Ranked 3 Double -> Concrete (TKR 3 Double)
forall a b. (a -> b) -> a -> b
$ IShR 3 -> [Double] -> Ranked 3 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
0.45309153191767404,Double
Item [Double]
0.9060427799711201,-Double
2.8186426018387007,Double
Item [Double]
40.02498898648793])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp @_ @(TKR 3 Double)
          ADVal Concrete (TKR 3 Double) -> ADVal Concrete (TKR 3 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax
                     (Ranked 3 Double -> Concrete (TKR 3 Double)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 3 Double -> Concrete (TKR 3 Double))
-> Ranked 3 Double -> Concrete (TKR 3 Double)
forall a b. (a -> b) -> a -> b
$ IShR 3 -> [Double] -> Ranked 3 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear ([Item (IShR 3)] -> IShR 3
forall l. IsList l => [Item l] -> l
fromList [Int
Item [Int]
2, Int
Item [Int]
1, Int
Item [Int]
2]) [Double
Item [Double]
1.1, Double
Item [Double]
2, Double
Item [Double]
3, Double
Item [Double]
4.2])
                     (IShR 3 -> [Double] -> Concrete (TKR 3 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
0.1, Double
Item [Double]
0.2, Double
Item [Double]
0.3, Double
Item [Double]
0.42]))

reluMaxS :: forall target sh r. (ADReady target, GoodScalar r, KnownShS sh)
         => target (TKS sh r) -> target (TKS sh r)
reluMaxS :: forall (target :: Target) (sh :: [Natural]) r.
(ADReady target, GoodScalar r, KnownShS sh) =>
target (TKS sh r) -> target (TKS sh r)
reluMaxS = (target (TKS2 ('[] @Natural) (TKScalar r))
 -> target (TKS2 ('[] @Natural) (TKScalar r)))
-> target (TKS2 sh (TKScalar r)) -> target (TKS2 sh (TKScalar r))
forall (sh :: [Natural]) (x1 :: TK) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x1, KnownSTK x, BaseTensor target) =>
(target (TKS2 ('[] @Natural) x1) -> target (TKS2 ('[] @Natural) x))
-> target (TKS2 sh x1) -> target (TKS2 sh x)
smap0N (target (TKS2 ('[] @Natural) (TKScalar r))
-> target (TKS2 ('[] @Natural) (TKScalar r))
-> target (TKS2 ('[] @Natural) (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
maxH (r -> target (TKS2 ('[] @Natural) (TKScalar r))
forall (sh :: [Natural]) r (target :: Target).
(KnownShS sh, GoodScalar r, BaseTensor target) =>
r -> target (TKS sh r)
srepl r
0))

barReluMaxS
  :: ( ADReady target, GoodScalar r, KnownShS sh
     , RealFloatH (target (TKS sh r)) )
  => target (TKS sh r) -> target (TKS sh r)
barReluMaxS :: forall (target :: Target) r (sh :: [Natural]).
(ADReady target, GoodScalar r, KnownShS sh,
 RealFloatH (target (TKS sh r))) =>
target (TKS sh r) -> target (TKS sh r)
barReluMaxS target (TKS sh r)
x = target (TKS sh r) -> target (TKS sh r)
forall (target :: Target) (sh :: [Natural]) r.
(ADReady target, GoodScalar r, KnownShS sh) =>
target (TKS sh r) -> target (TKS sh r)
reluMaxS (target (TKS sh r) -> target (TKS sh r))
-> target (TKS sh r) -> target (TKS sh r)
forall a b. (a -> b) -> a -> b
$ (target (TKS sh r), target (TKS sh r)) -> target (TKS sh r)
forall a. RealFloatH a => (a, a) -> a
barF (target (TKS sh r)
x, target (TKS sh r) -> target (TKS sh r)
forall (target :: Target) (sh :: [Natural]) r.
(ADReady target, GoodScalar r, KnownShS sh) =>
target (TKS sh r) -> target (TKS sh r)
reluMaxS target (TKS sh r)
x)

-- Previously the shape of FromListR[DeltaZero] couldn't be determined
-- in buildDerivative, so this was needed. See below that it now works fine.
testBarReluMax3FwdS :: Assertion
testBarReluMax3FwdS :: Assertion
testBarReluMax3FwdS =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Shaped
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double))
-> Shaped
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[2, 1, 2] ShS
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
0.45309153191767404,Double
Item [Double]
0.9060427799711201,-Double
2.8186426018387007,Double
Item [Double]
40.02498898648793])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp @_ @(TKS '[2, 1, 2] Double)
         AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall (target :: Target) r (sh :: [Natural]).
(ADReady target, GoodScalar r, KnownShS sh,
 RealFloatH (target (TKS sh r))) =>
target (TKS sh r) -> target (TKS sh r)
barReluMaxS
         (Shaped
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double))
-> Shaped
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[2, 1, 2] ShS
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
1.1, Double
Item [Double]
2, Double
Item [Double]
3, Double
Item [Double]
4.2])
         (Shaped
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double))
-> Shaped
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[2, 1, 2] ShS
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
0.1, Double
Item [Double]
0.2, Double
Item [Double]
0.3, Double
Item [Double]
0.42]))

testBarReluMax3FwdFrom :: Assertion
testBarReluMax3FwdFrom :: Assertion
testBarReluMax3FwdFrom =
  Rational
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Shaped
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double))
-> Shaped
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[2, 1, 2] ShS
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
0.45309153191767404,Double
Item [Double]
0.9060427799711201,-Double
2.8186426018387007,Double
Item [Double]
40.02498898648793])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp @_ @(TKS '[2, 1, 2] Double)
         (AstTensor AstMethodLet FullSpan (TKR 3 Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
AstTensor
  AstMethodLet
  FullSpan
  (TKR2
     (Rank
        @Natural
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural)))))
     (TKScalar Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall (sh :: [Natural]) (x :: TK).
(KnownShS sh, KnownSTK x) =>
AstTensor AstMethodLet FullSpan (TKR2 (Rank @Natural sh) x)
-> AstTensor AstMethodLet FullSpan (TKS2 sh x)
forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR (AstTensor AstMethodLet FullSpan (TKR 3 Double)
 -> AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double)
    -> AstTensor AstMethodLet FullSpan (TKR 3 Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 3 Double)
-> AstTensor AstMethodLet FullSpan (TKR 3 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax (AstTensor AstMethodLet FullSpan (TKR 3 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 3 Double))
-> (AstTensor
      AstMethodLet
      FullSpan
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double)
    -> AstTensor AstMethodLet FullSpan (TKR 3 Double))
-> AstTensor
     AstMethodLet
     FullSpan
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
-> AstTensor AstMethodLet FullSpan (TKR 3 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double)
-> AstTensor AstMethodLet FullSpan (TKR 3 Double)
AstTensor
  AstMethodLet
  FullSpan
  (TKS
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double)
-> AstTensor
     AstMethodLet
     FullSpan
     (TKR2
        (Rank
           @Natural
           ((':)
              @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural)))))
        (TKScalar Double))
forall (sh :: [Natural]) (x :: TK).
(KnownShS sh, KnownSTK x) =>
AstTensor AstMethodLet FullSpan (TKS2 sh x)
-> AstTensor AstMethodLet FullSpan (TKR2 (Rank @Natural sh) x)
forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKS2 sh x) -> target (TKR2 (Rank @Natural sh) x)
rfromS)
         (Shaped
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double))
-> Shaped
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[2, 1, 2] ShS
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
1.1, Double
Item [Double]
2, Double
Item [Double]
3, Double
Item [Double]
4.2])
         (Shaped
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
  Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped
   ((':)
      @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
   Double
 -> Concrete
      (TKS
         ((':)
            @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
         Double))
-> Shaped
     ((':)
        @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
     Double
-> Concrete
     (TKS
        ((':)
           @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
        Double)
forall a b. (a -> b) -> a -> b
$ forall a (sh :: [Natural]).
PrimElt a =>
ShS sh -> [a] -> Shaped sh a
Nested.sfromListPrimLinear @_ @'[2, 1, 2] ShS
  ((':)
     @Natural 2 ((':) @Natural 1 ((':) @Natural 2 ('[] @Natural))))
forall (sh :: [Natural]). KnownShS sh => ShS sh
knownShS [Double
Item [Double]
0.1, Double
Item [Double]
0.2, Double
Item [Double]
0.3, Double
Item [Double]
0.42]))

testBarReluMax3FwdR :: Assertion
testBarReluMax3FwdR :: Assertion
testBarReluMax3FwdR =
  Rational
-> Concrete (TKR 3 Double) -> Concrete (TKR 3 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Ranked 3 Double -> Concrete (TKR 3 Double)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 3 Double -> Concrete (TKR 3 Double))
-> Ranked 3 Double -> Concrete (TKR 3 Double)
forall a b. (a -> b) -> a -> b
$ IShR 3 -> [Double] -> Ranked 3 Double
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
0.45309153191767404,Double
Item [Double]
0.9060427799711201,-Double
2.8186426018387007,Double
Item [Double]
40.02498898648793])
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp @_ @(TKR 3 Double)
         AstTensor AstMethodLet FullSpan (TKR 3 Double)
-> AstTensor AstMethodLet FullSpan (TKR 3 Double)
forall (target :: Target) r (n :: Natural).
(ADReady target, GoodScalar r, KnownNat n,
 RealFloatH (target (TKR n r))) =>
target (TKR n r) -> target (TKR n r)
barReluMax
         (IShR 3 -> [Double] -> Concrete (TKR 3 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
1.1, Double
Item [Double]
2, Double
Item [Double]
3, Double
Item [Double]
4.2])
         (IShR 3 -> [Double] -> Concrete (TKR 3 Double)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 3)
2, Int
Item (IShR 3)
1, Int
Item (IShR 3)
2] [Double
Item [Double]
0.1, Double
Item [Double]
0.2, Double
Item [Double]
0.3, Double
Item [Double]
0.42]))

f1 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 0 r)
f1 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f1 = \target (TKR2 0 (TKScalar r))
arg -> target (TKR2 1 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (Int
-> (IntOf target -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
10 (\IntOf target
i -> target (TKR2 0 (TKScalar r))
arg target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* IntOf target -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 IntOf target
i))

testF1 :: Assertion
testF1 :: Assertion
testF1 =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
45.0)
    ((AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f1) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1))

testF11 :: Assertion
testF11 :: Assertion
testF11 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
45.0)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f1 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1))

f2 :: forall target r. (ADReady target, GoodScalar r)
   => target (TKR 0 r) -> target (TKR 0 r)
f2 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f2 = \target (TKR 0 r)
arg ->
  let fun1 :: PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
fun1 PrimalOf target (TKScalar Int64)
i = target (TKR 0 r)
arg target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
i
      v1a :: target (TKR 0 r)
v1a = target (TKR2 1 (TKScalar r)) -> target (TKR 0 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
10 PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
fun1)
      v1b :: target (TKR 0 r)
v1b = target (TKR2 1 (TKScalar r)) -> target (TKR 0 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
20 PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
fun1)
      fun2 :: target (TKR 0 r)
-> PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
fun2 target (TKR 0 r)
y PrimalOf target (TKScalar Int64)
i = target (TKR 0 r)
y target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
* forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 @r PrimalOf target (TKScalar Int64)
i
      v2a :: target (TKR 0 r)
v2a = target (TKR2 1 (TKScalar r)) -> target (TKR 0 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
10 (target (TKR 0 r)
-> PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
fun2 target (TKR 0 r)
arg))
      v2b :: target (TKR 0 r)
v2b = target (TKR2 1 (TKScalar r)) -> target (TKR 0 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
20 (target (TKR 0 r)
-> PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
fun2 (target (TKR 0 r)
arg target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ r -> target (TKR 0 r)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
1)))
  in target (TKR 0 r)
v1a target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ target (TKR 0 r)
v1b target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ target (TKR 0 r)
v2a target (TKR 0 r) -> target (TKR 0 r) -> target (TKR 0 r)
forall a. Num a => a -> a -> a
+ target (TKR 0 r)
v2b

testF2 :: Assertion
testF2 :: Assertion
testF2 =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
470)
    ((AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f2) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1))

testF21 :: Assertion
testF21 :: Assertion
testF21 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
470)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f2 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1))

testF2CFwd :: Assertion
testF2CFwd :: Assertion
testF2CFwd =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
47)
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete ztgt :: Type)) =>
(src -> tgt)
-> DValue src -> DValue src -> Concrete (ADTensorKind ztgt)
cjvp @_ @(TKR 0 Double)
          ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f2 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.1))

testF2Fwd :: Assertion
testF2Fwd :: Assertion
testF2Fwd =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
47)
    (forall src (ztgt :: TK) tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
(src -> tgt)
-> Value src -> Value src -> Concrete (ADTensorKind ztgt)
jvp @_ @(TKR 0 Double)
         AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
f2 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1.1) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.1))

braidedBuilds :: forall target r.
                 (ADReady target, GoodScalar r, Differentiable r)
              => target (TKR 0 r) -> target (TKR 2 r)
braidedBuilds :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 0 r) -> target (TKR 2 r)
braidedBuilds target (TKR2 0 (TKScalar r))
r =
  Int
-> (IntOf target -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 (\IntOf target
ix1 ->
    Int
-> (IntOf target -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
4 (\IntOf target
ix2 -> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> IxROf target (0 + 1) -> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex (ShR (0 + 1) Int
-> [target (TKR2 0 (TKScalar r))]
-> target (TKR2 (0 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N [Int
Item (ShR (0 + 1) Int)
4]
      [IntOf target -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 IntOf target
ix2, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
7, target (TKR2 0 (TKScalar r))
Item [target (TKR2 0 (TKScalar r))]
r, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar (-r
0.2)]) (IntOf target
ix1 IntOf target -> IxR 0 (IntOf target) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (IntOf target)
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)))

testBraidedBuilds1 :: Assertion
testBraidedBuilds1 :: Assertion
testBraidedBuilds1 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
4.0)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @2 f (TKR 0 Double) -> f (TKR 2 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 2 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 0 r) -> target (TKR 2 r)
braidedBuilds (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

recycled :: (ADReady target, GoodScalar r, Differentiable r)
         => target (TKR 0 r) -> target (TKR 5 r)
recycled :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 0 r) -> target (TKR 5 r)
recycled target (TKR 0 r)
r =
  target (TKR 1 r)
-> (target (TKR 1 r) -> target (TKR 5 r)) -> target (TKR 5 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (target (TKR 1 r) -> target (TKR 1 r)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
nestedSumBuild (IShR 1 -> target (TKR 0 r) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
IShR n -> target (TKR2 0 x) -> target (TKR2 n x)
rreplicate0N [Int
Item (IShR 1)
7] target (TKR 0 r)
r)) ((target (TKR 1 r) -> target (TKR 5 r)) -> target (TKR 5 r))
-> (target (TKR 1 r) -> target (TKR 5 r)) -> target (TKR 5 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR 1 r)
nsb ->
    Int
-> (IntOf target -> target (TKR2 4 (TKScalar r)))
-> target (TKR2 (1 + 4) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
2 ((IntOf target -> target (TKR2 4 (TKScalar r)))
 -> target (TKR2 (1 + 4) (TKScalar r)))
-> (IntOf target -> target (TKR2 4 (TKScalar r)))
-> target (TKR2 (1 + 4) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \IntOf target
_ -> Int
-> (IntOf target -> target (TKR2 3 (TKScalar r)))
-> target (TKR2 (1 + 3) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
4 ((IntOf target -> target (TKR2 3 (TKScalar r)))
 -> target (TKR2 (1 + 3) (TKScalar r)))
-> (IntOf target -> target (TKR2 3 (TKScalar r)))
-> target (TKR2 (1 + 3) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \IntOf target
_ -> Int
-> (IntOf target -> target (TKR2 2 (TKScalar r)))
-> target (TKR2 (1 + 2) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
2 ((IntOf target -> target (TKR2 2 (TKScalar r)))
 -> target (TKR2 (1 + 2) (TKScalar r)))
-> (IntOf target -> target (TKR2 2 (TKScalar r)))
-> target (TKR2 (1 + 2) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \IntOf target
_ -> Int
-> (IntOf target -> target (TKR 1 r))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
3 ((IntOf target -> target (TKR 1 r))
 -> target (TKR2 (1 + 1) (TKScalar r)))
-> (IntOf target -> target (TKR 1 r))
-> target (TKR2 (1 + 1) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ target (TKR 1 r) -> IntOf target -> target (TKR 1 r)
forall a b. a -> b -> a
const target (TKR 1 r)
nsb

testRecycled1 :: Assertion
testRecycled1 :: Assertion
testRecycled1 =
  Rational
-> Concrete (TKR 0 Double) -> Concrete (TKR 0 Double) -> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-6
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
348356.9278600814)
    ((AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> Value (AstTensor AstMethodLet FullSpan (TKR 0 Double))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR 0 Double)
    -> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR2 5 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 0 r) -> target (TKR 5 r)
recycled) (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0.0000001))

concatBuild :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 2 r)
concatBuild :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
concatBuild target (TKR 0 r)
r =
  Int
-> (IntOf target -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
7 (\IntOf target
i ->
    target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (Int
-> (IntOf target -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
5 (target (TKR 0 r) -> IntOf target -> target (TKR 0 r)
forall a b. a -> b -> a
const target (TKR 0 r)
r))
                     (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 (IntOf target -> target (TKR 0 r)
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 IntOf target
i)))
            (Int
-> (IntOf target -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
13 (target (TKR 0 r) -> IntOf target -> target (TKR 0 r)
forall a b. a -> b -> a
const target (TKR 0 r)
r)))

testConcatBuild1 :: Assertion
testConcatBuild1 :: Assertion
testConcatBuild1 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
126.0)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @2 f (TKR 0 Double) -> f (TKR 2 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 2 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
concatBuild (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild2 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 1 r)
concatBuild2 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild2 target (TKR2 0 (TKScalar r))
r =
  target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (NonEmpty (target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rfromList [target (TKR2 0 (TKScalar r))
Item (NonEmpty (target (TKR2 0 (TKScalar r))))
r, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
1, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
3, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
4]) ((target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
 -> target (TKR 1 r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
    Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
10 (\PrimalOf target (TKScalar Int64)
i -> BoolOf target
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64) -> BoolOf (PrimalOf target)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
<. PrimalOf target (TKScalar Int64)
5) (target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR2 (1 + 0) (TKScalar r))
a [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
i]) (target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR2 (1 + 0) (TKScalar r))
a [PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
5]))

testConcatBuild2 :: Assertion
testConcatBuild2 :: Assertion
testConcatBuild2 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
2.0)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild2 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild3 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 1 r)
concatBuild3 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild3 target (TKR2 0 (TKScalar r))
r =
  target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (NonEmpty (target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rfromList [target (TKR2 0 (TKScalar r))
Item (NonEmpty (target (TKR2 0 (TKScalar r))))
r, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
1, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
2, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
3, r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
4]) ((target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
 -> target (TKR 1 r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
    Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
10 (\PrimalOf target (TKScalar Int64)
i -> BoolOf target
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r))
forall (y :: TK) (target :: Target).
(KnownSTK y, Boolean (BoolOf target), BaseTensor target) =>
BoolOf target -> target y -> target y -> target y
ifH (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64) -> BoolOf (PrimalOf target)
forall (f :: Target) (y :: TK). OrdH f y => f y -> f y -> BoolOf f
<. PrimalOf target (TKScalar Int64)
5) (target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR2 (1 + 0) (TKScalar r))
a [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
i]) (target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex target (TKR2 (1 + 0) (TKScalar r))
a [PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
5 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
maxH PrimalOf target (TKScalar Int64)
1 (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
5))]))

testConcatBuild3 :: Assertion
testConcatBuild3 :: Assertion
testConcatBuild3 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
1)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild3 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild4 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 1 r)
concatBuild4 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild4 target (TKR 0 r)
r =
  target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (Int
-> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target (0 + 1))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                   (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
4 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) ((target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
 -> target (TKR 1 r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
    target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend target (TKR2 (1 + 0) (TKScalar r))
a target (TKR2 (1 + 0) (TKScalar r))
a

testConcatBuild4 :: Assertion
testConcatBuild4 :: Assertion
testConcatBuild4 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
10)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild4 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild5 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 1 r)
concatBuild5 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild5 target (TKR 0 r)
r =
  target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (Int
-> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target (0 + 1))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                   (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
5 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) ((target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
 -> target (TKR 1 r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
    (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend target (TKR2 (1 + 0) (TKScalar r))
a (Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target 1)
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                           (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
5 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)))

testConcatBuild5 :: Assertion
testConcatBuild5 :: Assertion
testConcatBuild5 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
10)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild5 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild6 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 2 r)
concatBuild6 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
concatBuild6 target (TKR 0 r)
r =
  Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
7 (\PrimalOf target (TKScalar Int64)
j ->
    target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend
             (target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r))
    -> target (TKR2 (1 + 0) (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (Int
-> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target (0 + 1))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                   (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
4 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) ((target (TKR2 (1 + 0) (TKScalar r))
  -> target (TKR2 (1 + 0) (TKScalar r)))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (target (TKR2 (1 + 0) (TKScalar r))
    -> target (TKR2 (1 + 0) (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
    (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target 1)
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                         (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
100 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
* PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
maxH PrimalOf target (TKScalar Int64)
1 (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
j))) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) target (TKR2 (1 + 0) (TKScalar r))
a))
                     (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 (PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
j)))
            (Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
13 (target (TKR 0 r)
-> PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
forall a b. a -> b -> a
const target (TKR 0 r)
r)))

testConcatBuild6 :: Assertion
testConcatBuild6 :: Assertion
testConcatBuild6 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
161)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @2 f (TKR 0 Double) -> f (TKR 2 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 2 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
concatBuild6 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild7 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 1 r)
concatBuild7 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild7 target (TKR 0 r)
r =
  Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
10 ((PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \PrimalOf target (TKScalar Int64)
j ->
    (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
5 target (TKR 0 r)
r) (Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target 1)
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                                 (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
maxH PrimalOf target (TKScalar Int64)
1 (PrimalOf target (TKScalar Int64)
j PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)))
     target (TKR2 ((1 + 0) + 0) (TKScalar r))
-> IxROf target (1 + 0) -> target (TKR 0 r)
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! (PrimalOf target (TKScalar Int64)
j PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (1 + 0)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)

testConcatBuild7 :: Assertion
testConcatBuild7 :: Assertion
testConcatBuild7 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
10)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild7 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

-- These tests show that term rewriting changes the value
-- of out-of-bounds indexing, e.g., of gather(replicate)
-- that reduces to a non-gather. Vectorization is not needed for that.
_concatBuild8 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 1 r)
_concatBuild8 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
_concatBuild8 target (TKR 0 r)
r =
  target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (Int
-> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target (0 + 1))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                   (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
5 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) ((target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
 -> target (TKR 1 r))
-> (target (TKR2 (1 + 0) (TKScalar r)) -> target (TKR 1 r))
-> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
    (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend target (TKR2 (1 + 0) (TKScalar r))
a (Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target 1)
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                           (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
5 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)))

_testConcatBuild8 :: Assertion
_testConcatBuild8 :: Assertion
_testConcatBuild8 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
10)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
_concatBuild8 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

_concatBuild9 :: (ADReady target, GoodScalar r) => target (TKR 0 r) -> target (TKR 2 r)
_concatBuild9 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
_concatBuild9 target (TKR 0 r)
r =
  Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
7 (\PrimalOf target (TKScalar Int64)
j ->
    target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend
             (target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r))
    -> target (TKR2 (1 + 0) (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (Int
-> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target (0 + 1))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                   (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
4 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
i)) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) ((target (TKR2 (1 + 0) (TKScalar r))
  -> target (TKR2 (1 + 0) (TKScalar r)))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (target (TKR2 (1 + 0) (TKScalar r))
    -> target (TKR2 (1 + 0) (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
    (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target 1)
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                         (\PrimalOf target (TKScalar Int64)
i -> (PrimalOf target (TKScalar Int64)
1 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
100 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
* PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
maxH PrimalOf target (TKScalar Int64)
0 (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64)
j))) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) target (TKR2 (1 + 0) (TKScalar r))
a))
                     (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 (PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
j)))
            (Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
13 (target (TKR 0 r)
-> PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
forall a b. a -> b -> a
const target (TKR 0 r)
r)))

_testConcatBuild9 :: Assertion
_testConcatBuild9 :: Assertion
_testConcatBuild9 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
161)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @2 f (TKR 0 Double) -> f (TKR 2 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 2 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
_concatBuild9 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild10 :: (ADReady target, GoodScalar r)
              => target (TKR 0 r) -> target (TKR 2 r)
concatBuild10 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
concatBuild10 target (TKR 0 r)
r =
  Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 1 (TKScalar r)))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
7 (\PrimalOf target (TKScalar Int64)
j ->
    target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend
               (target (TKR2 (1 + 0) (TKScalar r))
-> (target (TKR2 (1 + 0) (TKScalar r))
    -> target (TKR2 (1 + 0) (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet (Int
-> target (TKR2 ((0 + 1) + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target (0 + 1))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                       (\PrimalOf target (TKScalar Int64)
_i -> PrimalOf target (TKScalar Int64)
10000 PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) ((target (TKR2 (1 + 0) (TKScalar r))
  -> target (TKR2 (1 + 0) (TKScalar r)))
 -> target (TKR2 (1 + 0) (TKScalar r)))
-> (target (TKR2 (1 + 0) (TKScalar r))
    -> target (TKR2 (1 + 0) (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 (1 + 0) (TKScalar r))
a ->
      (target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x)
-> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rappend (Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target 1)
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r)
                 (\PrimalOf target (TKScalar Int64)
_i -> (-PrimalOf target (TKScalar Int64)
1) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)) target (TKR2 (1 + 0) (TKScalar r))
a))
                   (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 (PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
j)))
            (Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 0 r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
13 (target (TKR 0 r)
-> PrimalOf target (TKScalar Int64) -> target (TKR 0 r)
forall a b. a -> b -> a
const target (TKR 0 r)
r)))

testConcatBuild10 :: Assertion
testConcatBuild10 :: Assertion
testConcatBuild10 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 2 Double),
     Concrete (TKR 2 Double), Concrete (TKR 2 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
91)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @2 f (TKR 0 Double) -> f (TKR 2 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 2 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 2 r)
concatBuild10 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild11 :: (ADReady target, GoodScalar r)
              => target (TKR 0 r) -> target (TKR 1 r)
concatBuild11 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild11 target (TKR 0 r)
r =
  Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> (PrimalOf target (TKScalar Int64) -> IxROf target 1)
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (p :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownNat p, KnownSTK x, BaseTensor target) =>
Int
-> target (TKR2 (p + n) x)
-> (IntOf target -> IxROf target p)
-> target (TKR2 (1 + n) x)
rgather1 Int
5 (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r) (\PrimalOf target (TKScalar Int64)
_i -> (-PrimalOf target (TKScalar Int64)
1) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)

testConcatBuild11 :: Assertion
testConcatBuild11 :: Assertion
testConcatBuild11 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 1 r)
concatBuild11 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

concatBuild12 :: (ADReady target, GoodScalar r)
              => target (TKR 0 r) -> target (TKR 0 r)
concatBuild12 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
concatBuild12 target (TKR 0 r)
r =
  target (TKR2 (1 + 0) (TKScalar r))
-> IxROf target 1 -> target (TKR 0 r)
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex (Int -> target (TKR 0 r) -> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 0 r)
r) ((-PrimalOf target (TKScalar Int64)
1) PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)

testConcatBuild12 :: Assertion
testConcatBuild12 :: Assertion
testConcatBuild12 =
  Rational
-> Concrete (TKR 0 Double)
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
0)
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 f (TKR 0 Double) -> f (TKR 0 Double)
forall (f :: Target).
ADReady f =>
f (TKR 0 Double) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 0 r) -> target (TKR 0 r)
concatBuild12 (Double -> Concrete (TKR 0 Double)
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar Double
3.4))

-- TODO: copy-paste a variant of emptyArgs with r not GoodScalar
-- or maybe generalize emptyArgs and then in half of the tests do TKScalar
emptyArgs :: forall target r. (ADReady target, GoodScalar r, Differentiable r)
          => target (TKR 1 r) -> target (TKR 1 r)
emptyArgs :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
emptyArgs target (TKR 1 r)
t =
  target (TKR 1 r)
emptyTensor
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
- IShR 1 -> [target (TKR2 0 (TKScalar r))] -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N (forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> IShR n
rshape @target @_ @(TKScalar r) target (TKR 1 r)
emptyTensor) []
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
+ Ranked 1 r -> target (TKR 1 r)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete Ranked 1 r
forall a. KnownElt a => Ranked 1 a
Nested.remptyArray
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
- target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (IShR 2
-> [target (TKR2 0 (TKScalar r))] -> target (TKR2 2 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N (Int
0 Int -> IShR 1 -> IShR 2
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> IShR n
rshape @target @_ @(TKScalar r) target (TKR 1 r)
emptyTensor) [])
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Ranked (1 + 1) r -> target (TKR2 (1 + 1) (TKScalar r))
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked (1 + 1) r -> target (TKR2 (1 + 1) (TKScalar r)))
-> Ranked (1 + 1) r -> target (TKR2 (1 + 1) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ IShR 2 -> Ranked 1 r -> Ranked 2 r
forall (n :: Natural) (n' :: Natural) a.
Elt a =>
IShR n' -> Ranked n a -> Ranked n' a
Nested.rreshape (Int
0 Int -> IShR 1 -> IShR 2
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: Int
0 Int -> IShR 0 -> IShR 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR) Ranked 1 r
forall a. KnownElt a => Ranked 1 a
Nested.remptyArray)
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* Ranked 1 r -> target (TKR 1 r)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked (1 + 1) r -> Ranked 1 r
forall (n :: Natural) a.
(NumElt a, PrimElt a) =>
Ranked (n + 1) a -> Ranked n a
Nested.rsumOuter1 (Ranked (1 + 1) r -> Ranked 1 r) -> Ranked (1 + 1) r -> Ranked 1 r
forall a b. (a -> b) -> a -> b
$ NonEmpty (Ranked 1 r) -> Ranked (1 + 1) r
forall (n :: Natural) a.
Elt a =>
NonEmpty (Ranked n a) -> Ranked (n + 1) a
Nested.rfromListOuter
               (NonEmpty (Ranked 1 r) -> Ranked (1 + 1) r)
-> NonEmpty (Ranked 1 r) -> Ranked (1 + 1) r
forall a b. (a -> b) -> a -> b
$ [Ranked 1 r] -> NonEmpty (Ranked 1 r)
forall a. HasCallStack => [a] -> NonEmpty a
NonEmpty.fromList [Item [Ranked 1 r]
Ranked 1 r
forall a. KnownElt a => Ranked 1 a
Nested.remptyArray])
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (Ranked (1 + 1) r -> target (TKR2 (1 + 1) (TKScalar r))
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked (1 + 1) r -> target (TKR2 (1 + 1) (TKScalar r)))
-> Ranked (1 + 1) r -> target (TKR2 (1 + 1) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ NonEmpty (Ranked 1 r) -> Ranked (1 + 1) r
forall (n :: Natural) a.
Elt a =>
NonEmpty (Ranked n a) -> Ranked (n + 1) a
Nested.rfromListOuter
          (NonEmpty (Ranked 1 r) -> Ranked (1 + 1) r)
-> NonEmpty (Ranked 1 r) -> Ranked (1 + 1) r
forall a b. (a -> b) -> a -> b
$ [Ranked 1 r] -> NonEmpty (Ranked 1 r)
forall a. HasCallStack => [a] -> NonEmpty a
NonEmpty.fromList [Item [Ranked 1 r]
Ranked 1 r
forall a. KnownElt a => Ranked 1 a
Nested.remptyArray])
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (NonEmpty (target (TKR 1 r)) -> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rfromList [Ranked 1 r -> target (TKR 1 r)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete Ranked 1 r
forall a. KnownElt a => Ranked 1 a
Nested.remptyArray])
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (NonEmpty (target (TKR 1 r)) -> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rfromList [target (TKR 1 r)
Item (NonEmpty (target (TKR 1 r)))
emptyTensor])
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
* target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (NonEmpty (target (TKR 1 r)) -> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rfromList [target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (IShR 2
-> [target (TKR2 0 (TKScalar r))] -> target (TKR2 2 (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N
                             (Int
0 Int -> IShR 1 -> IShR 2
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> IShR n
rshape @target @_ @(TKScalar r)
                                      target (TKR 1 r)
emptyTensor) [])])
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
- target (TKR2 ((0 + 1) + 1) (TKScalar r))
-> IxROf target (0 + 1) -> target (TKR 1 r)
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex (IShR ((0 + 1) + 1)
-> [target (TKR2 0 (TKScalar r))]
-> target (TKR2 ((0 + 1) + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N (Int
0 Int -> ShR (0 + 1) Int -> IShR ((0 + 1) + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: Int
0 Int -> IShR 0 -> ShR (0 + 1) Int
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR) []) (PrimalOf target (TKScalar Int64)
42 PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64)) -> IxROf target (0 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
- target (TKR2 (1 + 1) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64)) -> target (TKR 1 r)
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
rindex (IShR (1 + 1)
-> [target (TKR2 0 (TKScalar r))]
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR n -> [target (TKR2 0 x)] -> target (TKR2 n x)
rfromList0N (Int
0 Int -> IShR 1 -> IShR (1 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> IShR n
rshape @target @_ @(TKScalar r)
                                     target (TKR 1 r)
emptyTensor) []) (PrimalOf target (TKScalar Int64)
42 PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64))
-> IxR 1 (PrimalOf target (TKScalar Int64))
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR)
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
- forall (n :: Natural) (m :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR m -> target (TKR2 n x) -> target (TKR2 m x)
rreshape @1 [Int
Item (IShR 1)
0] target (TKR 1 r)
emptyTensor
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
- target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (forall (n :: Natural) (m :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShR m -> target (TKR2 n x) -> target (TKR2 m x)
rreshape @1 [Int
Item (IShR 2)
0, Int
Item (IShR 2)
0] target (TKR 1 r)
emptyTensor)
-- TODO:
--  - rgather1 0 emptyTensor (:.: ZIR)
--  - rsum (rgather1 0 emptyTensor (const ZIR))
--  - rsum (rgather @target @(TKScalar r) @2 (0 :$: 0 :$: ZSR) emptyTensor (const (0 :.: ZIR)))
--  - rsum (rgather @target @(TKScalar r) @2 @0 @1 [0, 0] emptyTensor (const [0]))
--  * rflatten (rtr (rgather1 0 t (const ZIR)))
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
+ Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
0 (\PrimalOf target (TKScalar Int64)
i -> target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
t target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> IxR 0 (PrimalOf target (TKScalar Int64))
-> IxR 1 (PrimalOf target (TKScalar Int64))
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> IxR n i -> IxR n1 i
:.: IxR 0 (PrimalOf target (TKScalar Int64))
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
IxR n i
ZIR))
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
+ Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
0 (\PrimalOf target (TKScalar Int64)
i -> target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
t target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral (target (TKR 1 r) -> Int
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 n x) -> Int
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> Int
rlength target (TKR 1 r)
t) PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` PrimalOf target (TKScalar Int64)
i] target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Fractional a => a -> a -> a
/ PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
i)
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
+ forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
IShR (m + n)
-> (IxROf target m -> target (TKR2 n x)) -> target (TKR2 (m + n) x)
rbuild @1 (Int
0 Int -> IShR 0 -> ShR (0 + 1) Int
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR) (target (TKR2 0 (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall a b. a -> b -> a
const (target (TKR2 0 (TKScalar r))
 -> IxR 1 (PrimalOf target (TKScalar Int64))
 -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
73)
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
- target (TKR2 (1 + 1) (TKScalar r)) -> target (TKR 1 r)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (1 + n) x) -> target (TKR2 n x)
rsum (forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
IShR (m + n)
-> (IxROf target m -> target (TKR2 n x)) -> target (TKR2 (m + n) x)
rbuild @0 (Int
0 Int -> IShR 1 -> IShR (1 + 1)
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: Int
0 Int -> IShR 0 -> IShR 1
forall {n1 :: Natural} {i} (n :: Natural).
((n + 1 :: Natural) ~ (n1 :: Natural)) =>
i -> ShR n i -> ShR n1 i
:$: IShR 0
forall (n :: Natural) i.
((n :: Natural) ~ (0 :: Natural)) =>
ShR n i
ZSR)
                 (target (TKR2 2 (TKScalar r))
-> IxR 0 (PrimalOf target (TKScalar Int64))
-> target (TKR2 2 (TKScalar r))
forall a b. a -> b -> a
const (Int -> target (TKR 1 r) -> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int -> target (TKR2 n x) -> target (TKR2 (1 + n) x)
rreplicate Int
1 target (TKR 1 r)
emptyTensor)))
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
+ target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target
     (TKR2
        (Rank @Natural ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (sh :: [Natural]) (x :: TK).
(KnownShS sh, KnownSTK x) =>
target (TKS2 sh x) -> target (TKR2 (Rank @Natural sh) x)
forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKS2 sh x) -> target (TKR2 (Rank @Natural sh) x)
rfromS
      ([target (TKS2 ('[] @Natural) (TKScalar r))]
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
[target (TKS2 ('[] @Natural) x)] -> target (TKS2 sh x)
sfromList0N []
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
+ Shaped ((':) @Natural 0 ('[] @Natural)) r
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (ShS ('[] @Natural) -> Shaped ((':) @Natural 0 ('[] @Natural)) r
forall a (sh :: [Natural]).
KnownElt a =>
ShS sh -> Shaped ((':) @Natural 0 sh) a
Nested.semptyArray ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS)
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
- forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum @0 ([target (TKS2 ('[] @Natural) (TKScalar r))]
-> target
     (TKS2
        ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
[target (TKS2 ('[] @Natural) x)] -> target (TKS2 sh x)
sfromList0N [])
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum @0 (Shaped ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) r
-> target
     (TKS2
        ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) r
 -> target
      (TKS2
         ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r)))
-> Shaped ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) r
-> target
     (TKS2
        ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ ShS ((':) @Natural 0 ('[] @Natural))
-> Shaped ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) r
forall a (sh :: [Natural]).
KnownElt a =>
ShS sh -> Shaped ((':) @Natural 0 sh) a
Nested.semptyArray (forall (n :: Natural). KnownNat n => SNat n
SNat @0 SNat 0
-> ShS ('[] @Natural) -> ShS ((':) @Natural 0 ('[] @Natural))
forall {sh1 :: [Natural]} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
SNat n -> ShS sh -> ShS sh1
:$$ ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS))
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
* Shaped ((':) @Natural 0 ('[] @Natural)) r
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
-> Shaped ((':) @Natural 0 ('[] @Natural)) r
forall (sh :: [Natural]) (n :: Natural) a.
(NumElt a, PrimElt a) =>
Shaped ((':) @Natural n sh) a -> Shaped sh a
Nested.ssumOuter1 (Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
 -> Shaped ((':) @Natural 0 ('[] @Natural)) r)
-> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
-> Shaped ((':) @Natural 0 ('[] @Natural)) r
forall a b. (a -> b) -> a -> b
$ SNat 1
-> NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
-> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
forall a (n :: Natural) (sh :: [Natural]).
Elt a =>
SNat n -> NonEmpty (Shaped sh a) -> Shaped ((':) @Natural n sh) a
Nested.sfromListOuter (forall (n :: Natural). KnownNat n => SNat n
SNat @1)
                    (NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
 -> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r)
-> NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
-> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
forall a b. (a -> b) -> a -> b
$ [Shaped ((':) @Natural 0 ('[] @Natural)) r]
-> NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
forall a. HasCallStack => [a] -> NonEmpty a
NonEmpty.fromList [ShS ('[] @Natural) -> Shaped ((':) @Natural 0 ('[] @Natural)) r
forall a (sh :: [Natural]).
KnownElt a =>
ShS sh -> Shaped ((':) @Natural 0 sh) a
Nested.semptyArray ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS])
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum @1 (Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
-> target
     (TKS2
        ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
 -> target
      (TKS2
         ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r)))
-> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
-> target
     (TKS2
        ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ SNat 1
-> NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
-> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
forall a (n :: Natural) (sh :: [Natural]).
Elt a =>
SNat n -> NonEmpty (Shaped sh a) -> Shaped ((':) @Natural n sh) a
Nested.sfromListOuter SNat 1
forall (n :: Natural). KnownNat n => SNat n
SNat
                        (NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
 -> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r)
-> NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
-> Shaped ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) r
forall a b. (a -> b) -> a -> b
$ [Shaped ((':) @Natural 0 ('[] @Natural)) r]
-> NonEmpty (Shaped ((':) @Natural 0 ('[] @Natural)) r)
forall a. HasCallStack => [a] -> NonEmpty a
NonEmpty.fromList [ShS ('[] @Natural) -> Shaped ((':) @Natural 0 ('[] @Natural)) r
forall a (sh :: [Natural]).
KnownElt a =>
ShS sh -> Shaped ((':) @Natural 0 sh) a
Nested.semptyArray ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS])
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum @1 (NonEmpty
  (target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r)))
-> target
     (TKS2
        ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKS2 sh x))
-> target (TKS2 ((':) @Natural n sh) x)
sfromList [Shaped ((':) @Natural 0 ('[] @Natural)) r
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall r (target :: Target) (sh :: [Natural]).
(GoodScalar r, BaseTensor target) =>
Shaped sh r -> target (TKS sh r)
sconcrete (Shaped ((':) @Natural 0 ('[] @Natural)) r
 -> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r)))
-> Shaped ((':) @Natural 0 ('[] @Natural)) r
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ ShS ('[] @Natural) -> Shaped ((':) @Natural 0 ('[] @Natural)) r
forall a (sh :: [Natural]).
KnownElt a =>
ShS sh -> Shaped ((':) @Natural 0 sh) a
Nested.semptyArray ShS ('[] @Natural)
forall (sh :: [Natural]).
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
ShS sh
ZSS])
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum @1 (NonEmpty
  (target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r)))
-> target
     (TKS2
        ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKS2 sh x))
-> target (TKS2 ((':) @Natural n sh) x)
sfromList [forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR @_ @'[0] target (TKR 1 r)
target
  (TKR2
     (Rank @Natural ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
emptyTensor])
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum @1 (NonEmpty
  (target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r)))
-> target
     (TKS2
        ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKS2 sh x))
-> target (TKS2 ((':) @Natural n sh) x)
sfromList [forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum @0 ([target (TKS2 ('[] @Natural) (TKScalar r))]
-> target
     (TKS2
        ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
[target (TKS2 ('[] @Natural) x)] -> target (TKS2 sh x)
sfromList0N [])])
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
- forall (shm :: [Natural]) (shn :: [Natural]) (x :: TK)
       (target :: Target).
(KnownShS shm, KnownShS shn, KnownSTK x, BaseTensor target) =>
target (TKS2 ((++) @Natural shm shn) x)
-> IxSOf target shm -> target (TKS2 shn x)
sindex @'[0] ([target (TKS2 ('[] @Natural) (TKScalar r))]
-> target
     (TKS2
        ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
[target (TKS2 ('[] @Natural) x)] -> target (TKS2 sh x)
sfromList0N []) (PrimalOf target (TKScalar Int64)
42 PrimalOf target (TKScalar Int64)
-> IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
-> IxSOf target ((':) @Natural 0 ('[] @Natural))
forall {sh1 :: [Natural]} {i} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
i -> IxS sh i -> IxS sh1 i
:.$ IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
forall (sh :: [Natural]) i.
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
IxS sh i
ZIS)
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
- forall (shm :: [Natural]) (shn :: [Natural]) (x :: TK)
       (target :: Target).
(KnownShS shm, KnownShS shn, KnownSTK x, BaseTensor target) =>
target (TKS2 ((++) @Natural shm shn) x)
-> IxSOf target shm -> target (TKS2 shn x)
sindex @'[0] ([target (TKS2 ('[] @Natural) (TKScalar r))]
-> target
     (TKS2
        ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall (sh :: [Natural]) (x :: TK) (target :: Target).
(KnownShS sh, KnownSTK x, BaseTensor target) =>
[target (TKS2 ('[] @Natural) x)] -> target (TKS2 sh x)
sfromList0N []) (PrimalOf target (TKScalar Int64)
42 PrimalOf target (TKScalar Int64)
-> IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
-> IxSOf target ((':) @Natural 0 ('[] @Natural))
forall {sh1 :: [Natural]} {i} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
i -> IxS sh i -> IxS sh1 i
:.$ IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
forall (sh :: [Natural]) i.
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
IxS sh i
ZIS)
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
- forall (sh :: [Natural]) (sh2 :: [Natural]) (x :: TK)
       (target :: Target).
((Product sh :: Natural) ~ (Product sh2 :: Natural), KnownShS sh2,
 KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 sh2 x)
sreshape @_ @'[0] (forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR @_ @'[0] target (TKR 1 r)
target
  (TKR2
     (Rank @Natural ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
emptyTensor)
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
- target
  (TKS2
     ((':) @Natural 0 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum (forall (sh :: [Natural]) (sh2 :: [Natural]) (x :: TK)
       (target :: Target).
((Product sh :: Natural) ~ (Product sh2 :: Natural), KnownShS sh2,
 KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 sh2 x)
sreshape @_ @'[0, 0] (forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR @_ @'[0] target (TKR 1 r)
target
  (TKR2
     (Rank @Natural ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
emptyTensor))
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
* forall (k :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat k, KnownShS sh, KnownSTK x, BaseTensor target) =>
(IntOf target -> target (TKS2 sh x))
-> target (TKS2 ((':) @Natural k sh) x)
sbuild1 @0 (\PrimalOf target (TKScalar Int64)
i -> forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR @_ @'[0] (Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
0 Int
0 target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
t) target
  (TKS2
     ((++) @Natural ((':) @Natural 0 ('[] @Natural)) ('[] @Natural))
     (TKScalar r))
-> IxSOf target ((':) @Natural 0 ('[] @Natural))
-> target (TKS2 ('[] @Natural) (TKScalar r))
forall (shm :: [Natural]) (shn :: [Natural]) (x :: TK)
       (target :: Target).
(KnownShS shm, KnownShS shn, KnownSTK x, BaseTensor target) =>
target (TKS2 ((++) @Natural shm shn) x)
-> IxSOf target shm -> target (TKS2 shn x)
!$ (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
-> IxSOf target ((':) @Natural 0 ('[] @Natural))
forall {sh1 :: [Natural]} {i} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
i -> IxS sh i -> IxS sh1 i
:.$ IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
forall (sh :: [Natural]) i.
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
IxS sh i
ZIS))
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
+ forall (k :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat k, KnownShS sh, KnownSTK x, BaseTensor target) =>
(IntOf target -> target (TKS2 sh x))
-> target (TKS2 ((':) @Natural k sh) x)
sbuild1 @0 (\PrimalOf target (TKScalar Int64)
i -> forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR @_ @'[0] (Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
0 Int
0 target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
t)
                              target
  (TKS2
     ((++) @Natural ((':) @Natural 0 ('[] @Natural)) ('[] @Natural))
     (TKScalar r))
-> IxSOf target ((':) @Natural 0 ('[] @Natural))
-> target (TKS2 ('[] @Natural) (TKScalar r))
forall (shm :: [Natural]) (shn :: [Natural]) (x :: TK)
       (target :: Target).
(KnownShS shm, KnownShS shn, KnownSTK x, BaseTensor target) =>
target (TKS2 ((++) @Natural shm shn) x)
-> IxSOf target shm -> target (TKS2 shn x)
!$ (Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral (target (TKR 1 r) -> Int
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 n x) -> Int
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> Int
rlength target (TKR 1 r)
t) PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
-> IxSOf target ((':) @Natural 0 ('[] @Natural))
forall {sh1 :: [Natural]} {i} (n :: Natural) (sh :: [Natural]).
(KnownNat n,
 ((':) @Natural n sh :: [Natural]) ~ (sh1 :: [Natural])) =>
i -> IxS sh i -> IxS sh1 i
:.$ IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
forall (sh :: [Natural]) i.
((sh :: [Natural]) ~ ('[] @Natural :: [Natural])) =>
IxS sh i
ZIS)
                              target (TKS2 ('[] @Natural) (TKScalar r))
-> target (TKS2 ('[] @Natural) (TKScalar r))
-> target (TKS2 ('[] @Natural) (TKScalar r))
forall a. Fractional a => a -> a -> a
/ PrimalOf target (TKScalar Int64)
-> target (TKS2 ('[] @Natural) (TKScalar r))
forall r (target :: Target).
(ADReady target, GoodScalar r) =>
IntOf target -> target (TKS ('[] @Natural) r)
sfromIndex0 PrimalOf target (TKScalar Int64)
i)
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
+ forall (m :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownShS (Take @Natural m sh), KnownShS sh, KnownSTK x,
 BaseTensor target) =>
(IxSOf target (Take @Natural m sh)
 -> target (TKS2 (Drop @Natural m sh) x))
-> target (TKS2 sh x)
sbuild @1 (target
  (TKS2
     (Drop @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
-> IxSOf target (Take @Natural 1 ((':) @Natural 0 ('[] @Natural)))
-> target
     (TKS2
        (Drop @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall a b. a -> b -> a
const (target
   (TKS2
      (Drop @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
 -> IxSOf target (Take @Natural 1 ((':) @Natural 0 ('[] @Natural)))
 -> target
      (TKS2
         (Drop @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r)))
-> target
     (TKS2
        (Drop @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
-> IxSOf target (Take @Natural 1 ((':) @Natural 0 ('[] @Natural)))
-> target
     (TKS2
        (Drop @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall a b. (a -> b) -> a -> b
$ r -> target (TKS2 ('[] @Natural) (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKS ('[] @Natural) r)
sscalar r
73)
       target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall a. Num a => a -> a -> a
- target
  (TKS2
     ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall (n :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 ((':) @Natural n sh) x) -> target (TKS2 sh x)
ssum (forall (m :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownShS (Take @Natural m sh), KnownShS sh, KnownSTK x,
 BaseTensor target) =>
(IxSOf target (Take @Natural m sh)
 -> target (TKS2 (Drop @Natural m sh) x))
-> target (TKS2 sh x)
sbuild @0
                      (target
  (TKS2
     ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
-> IxS ('[] @Natural) (PrimalOf target (TKScalar Int64))
-> target
     (TKS2
        ((':) @Natural 1 ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
forall a b. a -> b -> a
const (forall (k :: Natural) (sh :: [Natural]) (x :: TK)
       (target :: Target).
(KnownNat k, KnownShS sh, KnownSTK x, BaseTensor target) =>
target (TKS2 sh x) -> target (TKS2 ((':) @Natural k sh) x)
sreplicate @1 (target
  (TKR2
     (Rank @Natural ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
-> target (TKS2 ((':) @Natural 0 ('[] @Natural)) (TKScalar r))
forall (sh :: [Natural]) (x :: TK).
(KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
forall (target :: Target) (sh :: [Natural]) (x :: TK).
(ConvertTensor target, KnownShS sh, KnownSTK x) =>
target (TKR2 (Rank @Natural sh) x) -> target (TKS2 sh x)
sfromR target (TKR 1 r)
target
  (TKR2
     (Rank @Natural ((':) @Natural 0 ('[] @Natural))) (TKScalar r))
emptyTensor)))))
  target (TKR 1 r) -> target (TKR 1 r) -> target (TKR 1 r)
forall a. Num a => a -> a -> a
+ target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKR2
        (Rank
           @(Maybe Natural)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (x :: TK).
KnownSTK x =>
target (TKX2 sh x) -> target (TKR2 (Rank @(Maybe Natural) sh) x)
forall (target :: Target) (sh :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownSTK x) =>
target (TKX2 sh x) -> target (TKR2 (Rank @(Maybe Natural) sh) x)
rfromX
      (IShX
  ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> [target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))]
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShX sh
-> [target (TKX2 ('[] @(Maybe Natural)) x)] -> target (TKX2 sh x)
xfromList0N (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX) []
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
+ Mixed
  ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall r (target :: Target) (sh :: [Maybe Natural]).
(GoodScalar r, BaseTensor target) =>
Mixed sh r -> target (TKX sh r)
xconcrete (ShX ('[] @(Maybe Natural)) Int
-> Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
forall a (sh :: [Maybe Natural]).
KnownElt a =>
IShX sh -> Mixed ((':) @(Maybe Natural) ('Just @Natural 0) sh) a
Nested.memptyArray ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX)
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
- forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum @0 (IShX
  ((':)
     @(Maybe Natural)
     ('Just @Natural 0)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> [target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))]
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 0)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShX sh
-> [target (TKX2 ('[] @(Maybe Natural)) x)] -> target (TKX2 sh x)
xfromList0N
                          (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> IShX
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX) [])
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum @0 (Mixed
  ((':)
     @(Maybe Natural)
     ('Just @Natural 0)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
  r
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 0)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall r (target :: Target) (sh :: [Maybe Natural]).
(GoodScalar r, BaseTensor target) =>
Mixed sh r -> target (TKX sh r)
xconcrete
                        (Mixed
   ((':)
      @(Maybe Natural)
      ('Just @Natural 0)
      ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
   r
 -> target
      (TKX2
         ((':)
            @(Maybe Natural)
            ('Just @Natural 0)
            ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
         (TKScalar r)))
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 0)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall a b. (a -> b) -> a -> b
$ IShX
  ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
forall a (sh :: [Maybe Natural]).
KnownElt a =>
IShX sh -> Mixed ((':) @(Maybe Natural) ('Just @Natural 0) sh) a
Nested.memptyArray (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX))
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
* Mixed
  ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall r (target :: Target) (sh :: [Maybe Natural]).
(GoodScalar r, BaseTensor target) =>
Mixed sh r -> target (TKX sh r)
xconcrete (Mixed
  ((':)
     @(Maybe Natural)
     ('Nothing @Natural)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
  r
-> Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
forall (sh :: [Maybe Natural]) (n :: Maybe Natural) a.
(NumElt a, PrimElt a) =>
Mixed ((':) @(Maybe Natural) n sh) a -> Mixed sh a
Nested.msumOuter1 (Mixed
   ((':)
      @(Maybe Natural)
      ('Nothing @Natural)
      ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
   r
 -> Mixed
      ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
      r)
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Nothing @Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
-> Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
forall a b. (a -> b) -> a -> b
$ NonEmpty
  (Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     r)
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Nothing @Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
forall (sh :: [Maybe Natural]).
NonEmpty (Mixed sh r)
-> Mixed ((':) @(Maybe Natural) ('Nothing @Natural) sh) r
forall a (sh :: [Maybe Natural]).
Elt a =>
NonEmpty (Mixed sh a)
-> Mixed ((':) @(Maybe Natural) ('Nothing @Natural) sh) a
Nested.mfromListOuter
                    (NonEmpty
   (Mixed
      ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
      r)
 -> Mixed
      ((':)
         @(Maybe Natural)
         ('Nothing @Natural)
         ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
      r)
-> NonEmpty
     (Mixed
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        r)
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Nothing @Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
forall a b. (a -> b) -> a -> b
$ [Mixed
   ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
   r]
-> NonEmpty
     (Mixed
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        r)
forall a. HasCallStack => [a] -> NonEmpty a
NonEmpty.fromList [ShX ('[] @(Maybe Natural)) Int
-> Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
forall a (sh :: [Maybe Natural]).
KnownElt a =>
IShX sh -> Mixed ((':) @(Maybe Natural) ('Just @Natural 0) sh) a
Nested.memptyArray ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX])
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum @1 (Mixed
  ((':)
     @(Maybe Natural)
     ('Just @Natural 1)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
  r
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 1)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall r (target :: Target) (sh :: [Maybe Natural]).
(GoodScalar r, BaseTensor target) =>
Mixed sh r -> target (TKX sh r)
xconcrete
                        (Mixed
   ((':)
      @(Maybe Natural)
      ('Just @Natural 1)
      ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
   r
 -> target
      (TKX2
         ((':)
            @(Maybe Natural)
            ('Just @Natural 1)
            ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
         (TKScalar r)))
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Just @Natural 1)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 1)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall a b. (a -> b) -> a -> b
$ StaticShX
  ((':)
     @(Maybe Natural)
     ('Just @Natural 1)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Nothing @Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Just @Natural 1)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
forall (sh1 :: [Maybe Natural]) (sh2 :: [Maybe Natural]) a.
((Rank @(Maybe Natural) sh1 :: Natural)
 ~ (Rank @(Maybe Natural) sh2 :: Natural),
 Elt a) =>
StaticShX sh2 -> Mixed sh1 a -> Mixed sh2 a
Nested.mcast
                            (SNat 1 -> SMayNat @Natural () SNat ('Just @Natural 1)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @1) SMayNat @Natural () SNat ('Just @Natural 1)
-> StaticShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> StaticShX
     ((':)
        @(Maybe Natural)
        ('Just @Natural 1)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
forall {sh1 :: [Maybe Natural]} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural () SNat n -> StaticShX sh -> StaticShX sh1
:!% SNat 0 -> SMayNat @Natural () SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural () SNat ('Just @Natural 0)
-> StaticShX ('[] @(Maybe Natural))
-> StaticShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural () SNat n -> StaticShX sh -> StaticShX sh1
:!% StaticShX ('[] @(Maybe Natural))
forall (sh :: [Maybe Natural]).
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
StaticShX sh
ZKX)
                        (Mixed
   ((':)
      @(Maybe Natural)
      ('Nothing @Natural)
      ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
   r
 -> Mixed
      ((':)
         @(Maybe Natural)
         ('Just @Natural 1)
         ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
      r)
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Nothing @Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Just @Natural 1)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
forall a b. (a -> b) -> a -> b
$ NonEmpty
  (Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     r)
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Nothing @Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
forall (sh :: [Maybe Natural]).
NonEmpty (Mixed sh r)
-> Mixed ((':) @(Maybe Natural) ('Nothing @Natural) sh) r
forall a (sh :: [Maybe Natural]).
Elt a =>
NonEmpty (Mixed sh a)
-> Mixed ((':) @(Maybe Natural) ('Nothing @Natural) sh) a
Nested.mfromListOuter
                        (NonEmpty
   (Mixed
      ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
      r)
 -> Mixed
      ((':)
         @(Maybe Natural)
         ('Nothing @Natural)
         ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
      r)
-> NonEmpty
     (Mixed
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        r)
-> Mixed
     ((':)
        @(Maybe Natural)
        ('Nothing @Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     r
forall a b. (a -> b) -> a -> b
$ [Mixed
   ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
   r]
-> NonEmpty
     (Mixed
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        r)
forall a. HasCallStack => [a] -> NonEmpty a
NonEmpty.fromList [ShX ('[] @(Maybe Natural)) Int
-> Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
forall a (sh :: [Maybe Natural]).
KnownElt a =>
IShX sh -> Mixed ((':) @(Maybe Natural) ('Just @Natural 0) sh) a
Nested.memptyArray ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX])
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum @1 (NonEmpty
  (target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r)))
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 1)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKX2 sh x))
-> target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
xfromList [Mixed
  ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall r (target :: Target) (sh :: [Maybe Natural]).
(GoodScalar r, BaseTensor target) =>
Mixed sh r -> target (TKX sh r)
xconcrete (Mixed
   ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
 -> target
      (TKX2
         ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
         (TKScalar r)))
-> Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a b. (a -> b) -> a -> b
$ ShX ('[] @(Maybe Natural)) Int
-> Mixed
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))) r
forall a (sh :: [Maybe Natural]).
KnownElt a =>
IShX sh -> Mixed ((':) @(Maybe Natural) ('Just @Natural 0) sh) a
Nested.memptyArray ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX])
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum @1 (NonEmpty
  (target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r)))
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 1)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKX2 sh x))
-> target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
xfromList [forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR @_ @'[Just 0] target (TKR 1 r)
target
  (TKR2
     (Rank
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
emptyTensor])
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
* forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum @1 (NonEmpty
  (target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r)))
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 1)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKX2 sh x))
-> target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
xfromList [forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum @0
                                     (IShX
  ((':)
     @(Maybe Natural)
     ('Just @Natural 0)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> [target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))]
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 0)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShX sh
-> [target (TKX2 ('[] @(Maybe Natural)) x)] -> target (TKX2 sh x)
xfromList0N
                                        (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0)
                                         SMayNat @Natural Int SNat ('Just @Natural 0)
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> IShX
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% forall (target :: Target) (sh :: [Maybe Natural]) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKX2 sh x) -> IShX sh
xshape @target @_ @(TKScalar r)
                                               (forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR @_ @'[Just 0]
                                                  target (TKR 1 r)
target
  (TKR2
     (Rank
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
emptyTensor)) [])])
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
- forall (sh1 :: [Maybe Natural]) (sh2 :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownShX sh1, KnownShX sh2, KnownSTK x, BaseTensor target) =>
target (TKX2 ((++) @(Maybe Natural) sh1 sh2) x)
-> IxXOf target sh1 -> target (TKX2 sh2 x)
xindex @_ @'[Just 0] (IShX
  ((++)
     @(Maybe Natural)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> [target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))]
-> target
     (TKX2
        ((++)
           @(Maybe Natural)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShX sh
-> [target (TKX2 ('[] @(Maybe Natural)) x)] -> target (TKX2 sh x)
xfromList0N
                                    (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0)
                                     SMayNat @Natural Int SNat ('Just @Natural 0)
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> IShX
     ((++)
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0)
                                     SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX) []) (PrimalOf target (TKScalar Int64)
42 PrimalOf target (TKScalar Int64)
-> IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
-> IxXOf
     target
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
i -> IxX sh i -> IxX sh1 i
:.% IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
IxX sh i
ZIX)
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
- forall (sh1 :: [Maybe Natural]) (sh2 :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownShX sh1, KnownShX sh2, KnownSTK x, BaseTensor target) =>
target (TKX2 ((++) @(Maybe Natural) sh1 sh2) x)
-> IxXOf target sh1 -> target (TKX2 sh2 x)
xindex @_ @'[Just 0] (IShX
  ((++)
     @(Maybe Natural)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> [target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))]
-> target
     (TKX2
        ((++)
           @(Maybe Natural)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShX sh
-> [target (TKX2 ('[] @(Maybe Natural)) x)] -> target (TKX2 sh x)
xfromList0N
                                    (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0)
                                     SMayNat @Natural Int SNat ('Just @Natural 0)
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> IShX
     ((++)
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% forall (target :: Target) (sh :: [Maybe Natural]) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKX2 sh x) -> IShX sh
xshape @target @_ @(TKScalar r)
                                             (forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR @_ @'[Just 0]
                                                target (TKR 1 r)
target
  (TKR2
     (Rank
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
emptyTensor)) []) (PrimalOf target (TKScalar Int64)
42 PrimalOf target (TKScalar Int64)
-> IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
-> IxXOf
     target
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
i -> IxX sh i -> IxX sh1 i
:.% IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
IxX sh i
ZIX)
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
- IShX
  ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (sh2 :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShX sh2 -> target (TKX2 sh x) -> target (TKX2 sh2 x)
xreshape (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX) (forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR @_ @'[Just 0] target (TKR 1 r)
target
  (TKR2
     (Rank
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
emptyTensor)
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
- target
  (TKX2
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum (IShX
  ((':)
     @(Maybe Natural)
     ('Just @Natural 0)
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 0)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (sh :: [Maybe Natural]) (sh2 :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownSTK x, BaseTensor target) =>
IShX sh2 -> target (TKX2 sh x) -> target (TKX2 sh2 x)
xreshape (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> IShX
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX) (forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR @_ @'[Just 0] target (TKR 1 r)
target
  (TKR2
     (Rank
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
emptyTensor))
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
* forall (k :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat k, KnownShX sh, KnownSTK x, BaseTensor target) =>
(IntOf target -> target (TKX2 sh x))
-> target (TKX2 ((':) @(Maybe Natural) ('Just @Natural k) sh) x)
xbuild1 @0 (\PrimalOf target (TKScalar Int64)
i -> forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR @_ @'[Nothing] (Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
0 Int
0 target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
t)
                            target
  (TKX2
     ((++)
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Nothing @Natural) ('[] @(Maybe Natural)))
        ('[] @(Maybe Natural)))
     (TKScalar r))
-> IxXOf
     target
     ((':) @(Maybe Natural) ('Nothing @Natural) ('[] @(Maybe Natural)))
-> target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))
forall (sh1 :: [Maybe Natural]) (sh2 :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownShX sh1, KnownShX sh2, KnownSTK x, BaseTensor target) =>
target (TKX2 ((++) @(Maybe Natural) sh1 sh2) x)
-> IxXOf target sh1 -> target (TKX2 sh2 x)
`xindex` (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
-> IxXOf
     target
     ((':) @(Maybe Natural) ('Nothing @Natural) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
i -> IxX sh i -> IxX sh1 i
:.% IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
IxX sh i
ZIX))
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
+ forall (k :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat k, KnownShX sh, KnownSTK x, BaseTensor target) =>
(IntOf target -> target (TKX2 sh x))
-> target (TKX2 ((':) @(Maybe Natural) ('Just @Natural k) sh) x)
xbuild1 @0 (\PrimalOf target (TKScalar Int64)
i -> forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR @_ @'[Nothing] (Int
-> Int
-> target (TKR2 (1 + 0) (TKScalar r))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, BaseTensor target) =>
Int -> Int -> target (TKR2 (1 + n) x) -> target (TKR2 (1 + n) x)
rslice Int
0 Int
0 target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
t)
                              target
  (TKX2
     ((++)
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Nothing @Natural) ('[] @(Maybe Natural)))
        ('[] @(Maybe Natural)))
     (TKScalar r))
-> IxXOf
     target
     ((':) @(Maybe Natural) ('Nothing @Natural) ('[] @(Maybe Natural)))
-> target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))
forall (sh1 :: [Maybe Natural]) (sh2 :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownShX sh1, KnownShX sh2, KnownSTK x, BaseTensor target) =>
target (TKX2 ((++) @(Maybe Natural) sh1 sh2) x)
-> IxXOf target sh1 -> target (TKX2 sh2 x)
`xindex`
                              (Int -> PrimalOf target (TKScalar Int64)
forall a b. (Integral a, Num b) => a -> b
fromIntegral (target (TKR 1 r) -> Int
forall (n :: Natural) (x :: TK).
KnownSTK x =>
target (TKR2 n x) -> Int
forall (target :: Target) (n :: Natural) (x :: TK).
(BaseTensor target, KnownSTK x) =>
target (TKR2 n x) -> Int
rlength target (TKR 1 r)
t) PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
-> IxXOf
     target
     ((':) @(Maybe Natural) ('Nothing @Natural) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
i -> IxX sh i -> IxX sh1 i
:.% IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
IxX sh i
ZIX)
                              target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))
-> target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))
-> target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))
forall a. Fractional a => a -> a -> a
/ PrimalOf target (TKScalar Int64)
-> target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKX ('[] @(Maybe Natural)) r)
xfromIndex0 PrimalOf target (TKScalar Int64)
i)
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
+ forall (m :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownShX (Take @(Maybe Natural) m sh), KnownSTK x,
 BaseTensor target, ConvertTensor target) =>
IShX sh
-> (IxXOf target (Take @(Maybe Natural) m sh)
    -> target (TKX2 (Drop @(Maybe Natural) m sh) x))
-> target (TKX2 sh x)
xbuild @1 (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0) SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX)
                (target
  (TKX2
     (Drop
        @(Maybe Natural)
        1
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
-> IxXOf
     target
     (Take
        @(Maybe Natural)
        1
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> target
     (TKX2
        (Drop
           @(Maybe Natural)
           1
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall a b. a -> b -> a
const (target
   (TKX2
      (Drop
         @(Maybe Natural)
         1
         ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
      (TKScalar r))
 -> IxXOf
      target
      (Take
         @(Maybe Natural)
         1
         ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
 -> target
      (TKX2
         (Drop
            @(Maybe Natural)
            1
            ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
         (TKScalar r)))
-> target
     (TKX2
        (Drop
           @(Maybe Natural)
           1
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
-> IxXOf
     target
     (Take
        @(Maybe Natural)
        1
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
-> target
     (TKX2
        (Drop
           @(Maybe Natural)
           1
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall a b. (a -> b) -> a -> b
$ r -> target (TKX2 ('[] @(Maybe Natural)) (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKX ('[] @(Maybe Natural)) r)
xscalar r
73)
       target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall a. Num a => a -> a -> a
- target
  (TKX2
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall (n :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat n, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 ((':) @(Maybe Natural) ('Just @Natural n) sh) x)
-> target (TKX2 sh x)
xsum (forall (m :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownShX (Take @(Maybe Natural) m sh), KnownSTK x,
 BaseTensor target, ConvertTensor target) =>
IShX sh
-> (IxXOf target (Take @(Maybe Natural) m sh)
    -> target (TKX2 (Drop @(Maybe Natural) m sh) x))
-> target (TKX2 sh x)
xbuild @0 (SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0)
                                                SMayNat @Natural Int SNat ('Just @Natural 0)
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
-> IShX
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% SNat 0 -> SMayNat @Natural Int SNat ('Just @Natural 0)
forall {k} (f :: k -> Type) (n1 :: k) i.
f n1 -> SMayNat @k i f ('Just @k n1)
SKnown (forall (n :: Natural). KnownNat n => SNat n
SNat @0)
                                                SMayNat @Natural Int SNat ('Just @Natural 0)
-> ShX ('[] @(Maybe Natural)) Int
-> IShX
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
forall {sh1 :: [Maybe Natural]} {i} (n :: Maybe Natural)
       (sh :: [Maybe Natural]).
(((':) @(Maybe Natural) n sh :: [Maybe Natural])
 ~ (sh1 :: [Maybe Natural])) =>
SMayNat @Natural i SNat n -> ShX sh i -> ShX sh1 i
:$% ShX ('[] @(Maybe Natural)) Int
forall (sh :: [Maybe Natural]) i.
((sh :: [Maybe Natural])
 ~ ('[] @(Maybe Natural) :: [Maybe Natural])) =>
ShX sh i
ZSX)
                      (target
  (TKX2
     ((':)
        @(Maybe Natural)
        ('Just @Natural 0)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
-> IxX ('[] @(Maybe Natural)) (PrimalOf target (TKScalar Int64))
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 0)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall a b. a -> b -> a
const (target
  (TKX2
     ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
     (TKScalar r))
-> target
     (TKX2
        ((':)
           @(Maybe Natural)
           ('Just @Natural 0)
           ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
        (TKScalar r))
forall (k :: Natural) (sh :: [Maybe Natural]) (x :: TK)
       (target :: Target).
(KnownNat k, KnownShX sh, KnownSTK x, BaseTensor target) =>
target (TKX2 sh x)
-> target (TKX2 ((':) @(Maybe Natural) ('Just @Natural k) sh) x)
xreplicate (target
  (TKR2
     (Rank
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
-> target
     (TKX2
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural)))
        (TKScalar r))
forall (sh' :: [Maybe Natural]) (x :: TK).
(KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
forall (target :: Target) (sh' :: [Maybe Natural]) (x :: TK).
(ConvertTensor target, KnownShX sh', KnownSTK x) =>
target (TKR2 (Rank @(Maybe Natural) sh') x) -> target (TKX2 sh' x)
xfromR target (TKR 1 r)
target
  (TKR2
     (Rank
        @(Maybe Natural)
        ((':) @(Maybe Natural) ('Just @Natural 0) ('[] @(Maybe Natural))))
     (TKScalar r))
emptyTensor)))))
  -- - rsum (rbuild @2 (0 :$: 0 :$: ZSR) (const 73))
  -- - rsum (rbuild @1 (0 :$: 0 :$: ZSR) (const emptyTensor))
       -- these two fail and rightly so; TODO: make them fail earlier
 where
  emptyTensor :: target (TKR 1 r)
  emptyTensor :: target (TKR 1 r)
emptyTensor = Ranked 1 r -> target (TKR 1 r)
forall r (target :: Target) (n :: Natural).
(GoodScalar r, BaseTensor target) =>
Ranked n r -> target (TKR n r)
rconcrete (Ranked 1 r -> target (TKR 1 r)) -> Ranked 1 r -> target (TKR 1 r)
forall a b. (a -> b) -> a -> b
$ IShR 1 -> [r] -> Ranked 1 r
forall a (n :: Natural). PrimElt a => IShR n -> [a] -> Ranked n a
Nested.rfromListPrimLinear ([Item (IShR 1)] -> IShR 1
forall l. IsList l => [Item l] -> l
fromList [Int
Item [Int]
0]) []

testEmptyArgs0 :: Assertion
testEmptyArgs0 :: Assertion
testEmptyArgs0 =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
0] [])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1 f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
emptyArgs (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
0] []))

testEmptyArgs1 :: Assertion
testEmptyArgs1 :: Assertion
testEmptyArgs1 =
  Rational
-> Concrete (TKR 1 Float)
-> ((Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 1 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float)),
    (Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 1 Float),
     AstTensor AstMethodLet PrimalSpan (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float), Concrete (TKR 1 Float),
     Concrete (TKR 1 Float)))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 1 -> [Float] -> Concrete (TKR 1 Float)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
1] [Float
Item [Float]
0])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Float @1 f (TKR 1 Float) -> f (TKR 1 Float)
forall (f :: Target).
ADReady f =>
f (TKR 1 Float) -> f (TKR 1 Float)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
emptyArgs (IShR 1 -> [Float] -> Concrete (TKR 1 Float)
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
1] [Float
Item [Float]
0.24]))

testEmptyArgs4 :: Assertion
testEmptyArgs4 :: Assertion
testEmptyArgs4 =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
1] [Double
Item [Double]
0])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1
          (\f (TKR2 1 (TKScalar Double))
t -> ShR (0 + 1) Int
-> (IxROf f 0 -> f (TKR2 1 (TKScalar Double)))
-> f (TKR2 (0 + 1) (TKScalar Double))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
IShR (m + n)
-> (IxROf target m -> target (TKR2 n x)) -> target (TKR2 (m + n) x)
rbuild [Int
Item (IShR 1)
2, Int
Item (IShR 1)
5, Int
Item (IShR 1)
11, Int
Item (IShR 1)
0] (f (TKR2 1 (TKScalar Double))
-> IxROf f 0 -> f (TKR2 1 (TKScalar Double))
forall a b. a -> b -> a
const (f (TKR2 1 (TKScalar Double))
 -> IxROf f 0 -> f (TKR2 1 (TKScalar Double)))
-> f (TKR2 1 (TKScalar Double))
-> IxROf f 0
-> f (TKR2 1 (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
target (TKR 1 r) -> target (TKR 1 r)
emptyArgs f (TKR2 1 (TKScalar Double))
t))
          (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
1] [Double
Item [Double]
0.24]))

filterPositiveFail :: ADReady target
                   => target (TKR 1 Double) -> target (TKR 1 Double)
filterPositiveFail :: forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
filterPositiveFail target (TKR2 1 (TKScalar Double))
v =
  let l :: [target (TKR 0 Double)]
l = target (TKR2 (1 + 0) (TKScalar Double)) -> [target (TKR 0 Double)]
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownSTK x, KnownNat n, BaseTensor target) =>
target (TKR2 (1 + n) x) -> [target (TKR2 n x)]
runravelToList target (TKR2 1 (TKScalar Double))
target (TKR2 (1 + 0) (TKScalar Double))
v
      -- l2 = filter (\x -> x >= 0) l
      -- Could not deduce ‘Ord (target Double 0)’
      -- l2 = filter (\x -> x >=. 0) l
      -- Could not deduce ‘BoolOf target ~ Bool’
      l2 :: [target (TKR 0 Double)]
l2 = Int -> [target (TKR 0 Double)] -> [target (TKR 0 Double)]
forall a. Int -> [a] -> [a]
take Int
3 [target (TKR 0 Double)]
l  -- the most I can do
  in NonEmpty (target (TKR 0 Double))
-> target (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
NonEmpty (target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rfromList (NonEmpty (target (TKR 0 Double))
 -> target (TKR2 (1 + 0) (TKScalar Double)))
-> NonEmpty (target (TKR 0 Double))
-> target (TKR2 (1 + 0) (TKScalar Double))
forall a b. (a -> b) -> a -> b
$ [target (TKR 0 Double)] -> NonEmpty (target (TKR 0 Double))
forall a. HasCallStack => [a] -> NonEmpty a
NonEmpty.fromList [target (TKR 0 Double)]
l2

testFilterPositiveFail :: Assertion
testFilterPositiveFail :: Assertion
testFilterPositiveFail =
  Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
    (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
1.0,Double
Item [Double]
0.0,Double
Item [Double]
0.0])
    (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @1
          f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
forall (f :: Target).
ADReady f =>
f (TKR2 1 (TKScalar Double)) -> f (TKR2 1 (TKScalar Double))
filterPositiveFail
          (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
5] [Double
Item [Double]
0.24, Double
Item [Double]
52, -Double
0.5, Double
Item [Double]
0.33, Double
Item [Double]
0.1]))

-- Catastrophic loss of sharing prevented.
fblowup :: forall target r. (ADReady target, GoodScalar r, Differentiable r)
        => Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowup :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowup Int
k target (TKR 1 r)
inputs =
  let blowup :: Int -> target (TKR 0 r) -> target (TKR 0 r)
      blowup :: Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
0 target (TKR2 0 (TKScalar r))
y = target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
0
      blowup Int
n target (TKR2 0 (TKScalar r))
y =
        let ysum :: target (TKR2 0 (TKScalar r))
ysum = target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
0
            yscaled :: target (TKR2 0 (TKScalar r))
yscaled = r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.499999985 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
ysum
              -- without the scaling we'd get NaN at once
        in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup (Int -> Int
forall a. Enum a => a -> a
pred Int
n) target (TKR2 0 (TKScalar r))
yscaled
      y0 :: target (TKR2 0 (TKScalar r))
y0 = (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
0]) target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Fractional a => a -> a -> a
/ (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
1])
  in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
k target (TKR2 0 (TKScalar r))
y0

fblowupLet :: forall target r. (ADReady target, GoodScalar r, Differentiable r)
           => IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet PrimalOf target (TKScalar Int64)
i Int
k target (TKR 1 r)
inputs =
  let blowup :: Int -> target (TKR 0 r) -> target (TKR 0 r)
      blowup :: Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
0 target (TKR2 0 (TKScalar r))
y = target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
i
      blowup Int
n target (TKR2 0 (TKScalar r))
y1 = target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR2 0 (TKScalar r))
y1 ((target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 0 (TKScalar r)))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 0 (TKScalar r))
y ->
        let ysum :: target (TKR2 0 (TKScalar r))
ysum = target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
i
            yscaled :: target (TKR2 0 (TKScalar r))
yscaled = r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.499999985 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
ysum
              -- without the scaling we'd get NaN at once
        in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup (Int -> Int
forall a. Enum a => a -> a
pred Int
n) target (TKR2 0 (TKScalar r))
yscaled
      y0 :: target (TKR2 0 (TKScalar r))
y0 = (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
0]) target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Fractional a => a -> a -> a
/ (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
1])
  in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
k target (TKR2 0 (TKScalar r))
y0

-- Catastrophic loss of sharing prevented also with non-trivial multiplication.
fblowupMult :: forall target r. (ADReady target, GoodScalar r, Differentiable r)
            => Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMult :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMult Int
k target (TKR 1 r)
inputs =
  let blowup :: Int -> target (TKR 0 r) -> target (TKR 0 r)
      blowup :: Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
0 target (TKR2 0 (TKScalar r))
y = target (TKR2 0 (TKScalar r))
y
      blowup Int
n target (TKR2 0 (TKScalar r))
y =
        let ysum :: target (TKR2 0 (TKScalar r))
ysum = target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Fractional a => a -> a -> a
/ (target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.000000001)
            yscaled :: target (TKR2 0 (TKScalar r))
yscaled = target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Floating a => a -> a
sqrt (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.499999985 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.499999985 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
ysum target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
ysum
              -- without the scaling we'd get NaN at once
        in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup (Int -> Int
forall a. Enum a => a -> a
pred Int
n) target (TKR2 0 (TKScalar r))
yscaled target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
0
      y0 :: target (TKR2 0 (TKScalar r))
y0 = (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [PrimalOf target (TKScalar Int64)
0 PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`remH` PrimalOf target (TKScalar Int64)
2]) target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
1])
  in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
k target (TKR2 0 (TKScalar r))
y0

fblowupMultLet :: forall target r.
                  (ADReady target, GoodScalar r, Differentiable r)
               => IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMultLet :: forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMultLet PrimalOf target (TKScalar Int64)
i Int
k target (TKR 1 r)
inputs =
  let blowup :: Int -> target (TKR 0 r) -> target (TKR 0 r)
      blowup :: Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
0 target (TKR2 0 (TKScalar r))
y = target (TKR2 0 (TKScalar r))
y
      blowup Int
n target (TKR2 0 (TKScalar r))
y1 = target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR2 0 (TKScalar r))
y1 ((target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 0 (TKScalar r)))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 0 (TKScalar r))
y ->
        let ysum0 :: target (TKR2 0 (TKScalar r))
ysum0 = target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
+ target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Fractional a => a -> a -> a
/ (target (TKR2 0 (TKScalar r))
y target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.000001)
            yscaled :: target (TKR2 0 (TKScalar r))
yscaled = target (TKR2 0 (TKScalar r))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall (x :: TK) (z :: TK) (target :: Target).
LetTensor target =>
target x -> (target x -> target z) -> target z
tlet target (TKR2 0 (TKScalar r))
ysum0 ((target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
 -> target (TKR2 0 (TKScalar r)))
-> (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ \target (TKR2 0 (TKScalar r))
ysum ->
                        target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Floating a => a -> a
sqrt (target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a b. (a -> b) -> a -> b
$ r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.499999985 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* r -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(GoodScalar r, BaseTensor target) =>
r -> target (TKR 0 r)
rscalar r
0.499999985 target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
ysum target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* target (TKR2 0 (TKScalar r))
ysum
              -- without the scaling we'd get NaN at once
        in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup (Int -> Int
forall a. Enum a => a -> a
pred Int
n) target (TKR2 0 (TKScalar r))
yscaled target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
- PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 PrimalOf target (TKScalar Int64)
i
      y0 :: target (TKR2 0 (TKScalar r))
y0 = (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`remH` PrimalOf target (TKScalar Int64)
2]) target (TKR2 0 (TKScalar r))
-> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
forall a. Num a => a -> a -> a
* (target (TKR 1 r)
target (TKR2 (1 + 0) (TKScalar r))
inputs target (TKR2 (1 + 0) (TKScalar r))
-> IxR 1 (PrimalOf target (TKScalar Int64))
-> target (TKR2 0 (TKScalar r))
forall (m :: Natural) (n :: Natural) (x :: TK) (target :: Target).
(KnownNat m, KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 (m + n) x) -> IxROf target m -> target (TKR2 n x)
! [Item (IxR 1 (PrimalOf target (TKScalar Int64)))
PrimalOf target (TKScalar Int64)
1])
  in Int -> target (TKR2 0 (TKScalar r)) -> target (TKR2 0 (TKScalar r))
blowup Int
k target (TKR2 0 (TKScalar r))
y0

fblowupPP :: Assertion
fblowupPP :: Assertion
fblowupPP = do
  Assertion
resetVarCounter
  let fblowupT :: AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupT = forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowup @(AstTensor AstMethodLet FullSpan) @Double Int
1
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupT (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tlet (sfromR v1 !$ [0]) (\\x2 -> tlet (sfromR v1 !$ [1]) (\\x3 -> tlet (sfromR v1 !$ [0]) (\\x4 -> tlet (sfromR v1 !$ [1]) (\\x5 -> tlet (sscalar 0.499999985 * sfromR dret) (\\x8 -> rfromS (soneHot (recip x3 * x8) [0] + (soneHot ((negate x2 / (x3 * x3)) * x8) [1] + (soneHot (recip x5 * x8) [0] + soneHot ((negate x4 / (x5 * x5)) * x8) [1]))))))))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> tlet (sfromR v1 !$ [0]) (\\x2 -> tlet (sfromR v1 !$ [1]) (\\x3 -> tlet (sfromR v1 !$ [0]) (\\x4 -> tlet (sfromR v1 !$ [1]) (\\x5 -> tlet ((x2 / x3 + x4 / x5) + negate (sfromIntegral (sscalar 0))) (\\x6 -> rfromS (sscalar 0.499999985 * x6 + negate (sfromIntegral (sscalar 0))))))))"

fblowupLetPP :: Assertion
fblowupLetPP :: Assertion
fblowupLetPP = do
  Assertion
resetVarCounter
  let fblowupLetT :: AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupLetT = forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet @(AstTensor AstMethodLet FullSpan) @Double AstTensor AstMethodLet PrimalSpan (TKScalar Int64)
PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
0 Int
1
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupLetT (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tlet (sfromR v1 !$ [0]) (\\x3 -> tlet (sfromR v1 !$ [1]) (\\x4 -> tlet (sscalar 0.499999985 * sfromR dret) (\\x8 -> tlet (x8 + x8) (\\x9 -> rfromS (soneHot (recip x4 * x9) [0] + soneHot ((negate x3 / (x4 * x4)) * x9) [1])))))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> tlet (sfromR v1 !$ [0]) (\\x3 -> tlet (sfromR v1 !$ [1]) (\\x4 -> tlet (x3 / x4) (\\x5 -> tlet ((x5 + x5) + negate (sfromIntegral (sscalar 0))) (\\x6 -> rfromS (sscalar 0.499999985 * x6 + negate (sfromIntegral (sscalar 0)))))))"

fblowupLetPP23 :: Assertion
fblowupLetPP23 :: Assertion
fblowupLetPP23 = do
  Assertion
resetVarCounter
  let fblowupLetT :: AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupLetT = forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet @(AstTensor AstMethodLet FullSpan) @Double AstTensor AstMethodLet PrimalSpan (TKScalar Int64)
PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
2 Int
3
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupLetT (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
4] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tlet (sfromR v1 !$ [0]) (\\x5 -> tlet (sfromR v1 !$ [1]) (\\x6 -> tlet (sscalar 0.499999985 * sfromR dret) (\\x14 -> tlet (sscalar 0.499999985 * x14 + sscalar 0.499999985 * x14) (\\x15 -> tlet (sscalar 0.499999985 * x15 + sscalar 0.499999985 * x15) (\\x16 -> tlet (x16 + x16) (\\x17 -> rfromS (soneHot (recip x6 * x17) [0] + soneHot ((negate x5 / (x6 * x6)) * x17) [1])))))))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> tlet (sfromR v1 !$ [0]) (\\x5 -> tlet (sfromR v1 !$ [1]) (\\x6 -> tlet (x5 / x6) (\\x7 -> tlet ((x7 + x7) + negate (sfromIntegral (sscalar 2))) (\\x8 -> tlet (sscalar 0.499999985 * x8) (\\x9 -> tlet ((x9 + x9) + negate (sfromIntegral (sscalar 2))) (\\x10 -> tlet (sscalar 0.499999985 * x10) (\\x11 -> tlet ((x11 + x11) + negate (sfromIntegral (sscalar 2))) (\\x12 -> rfromS (sscalar 0.499999985 * x12 + negate (sfromIntegral (sscalar 2)))))))))))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple (AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
-> AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> rfromS (tlet (sfromR v1 !$ [1]) (\\x6 -> tlet (sscalar 0.499999985 * sfromR dret) (\\x14 -> tlet (sscalar 0.499999985 * x14 + sscalar 0.499999985 * x14) (\\x15 -> tlet (sscalar 0.499999985 * x15 + sscalar 0.499999985 * x15) (\\x16 -> tlet (x16 + x16) (\\x17 -> soneHot (recip x6 * x17) [0] + soneHot ((negate (sfromR v1 !$ [0]) / (x6 * x6)) * x17) [1]))))))"

fblowupLetPP10 :: Assertion
fblowupLetPP10 :: Assertion
fblowupLetPP10 = do
  Assertion
resetVarCounter
  let fblowupLetT :: AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupLetT = forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet @(AstTensor AstMethodLet FullSpan) @Double AstTensor AstMethodLet PrimalSpan (TKScalar Int64)
PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
0 Int
6
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR 0 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 0 Double)
_) = IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR 0 Double),
    Delta (AstRaw PrimalSpan) (TKR 0 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
fblowupLetT (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
2] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> tlet (sfromR v1 !$ [0]) (\\x8 -> tlet (sfromR v1 !$ [1]) (\\x9 -> tlet (sscalar 0.499999985 * sfromR dret) (\\x23 -> tlet (sscalar 0.499999985 * x23 + sscalar 0.499999985 * x23) (\\x24 -> tlet (sscalar 0.499999985 * x24 + sscalar 0.499999985 * x24) (\\x25 -> tlet (sscalar 0.499999985 * x25 + sscalar 0.499999985 * x25) (\\x26 -> tlet (sscalar 0.499999985 * x26 + sscalar 0.499999985 * x26) (\\x27 -> tlet (sscalar 0.499999985 * x27 + sscalar 0.499999985 * x27) (\\x28 -> tlet (x28 + x28) (\\x29 -> rfromS (soneHot (recip x9 * x29) [0] + soneHot ((negate x8 / (x9 * x9)) * x29) [1]))))))))))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> tlet (sfromR v1 !$ [0]) (\\x8 -> tlet (sfromR v1 !$ [1]) (\\x9 -> tlet (x8 / x9) (\\x10 -> tlet ((x10 + x10) + negate (sfromIntegral (sscalar 0))) (\\x11 -> tlet (sscalar 0.499999985 * x11) (\\x12 -> tlet ((x12 + x12) + negate (sfromIntegral (sscalar 0))) (\\x13 -> tlet (sscalar 0.499999985 * x13) (\\x14 -> tlet ((x14 + x14) + negate (sfromIntegral (sscalar 0))) (\\x15 -> tlet (sscalar 0.499999985 * x15) (\\x16 -> tlet ((x16 + x16) + negate (sfromIntegral (sscalar 0))) (\\x17 -> tlet (sscalar 0.499999985 * x17) (\\x18 -> tlet ((x18 + x18) + negate (sfromIntegral (sscalar 0))) (\\x19 -> tlet (sscalar 0.499999985 * x19) (\\x20 -> tlet ((x20 + x20) + negate (sfromIntegral (sscalar 0))) (\\x21 -> rfromS (sscalar 0.499999985 * x21 + negate (sfromIntegral (sscalar 0)))))))))))))))))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple (AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
-> AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 0 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> rfromS (tlet (sfromR v1 !$ [1]) (\\x9 -> tlet (sscalar 0.499999985 * sfromR dret) (\\x23 -> tlet (sscalar 0.499999985 * x23 + sscalar 0.499999985 * x23) (\\x24 -> tlet (sscalar 0.499999985 * x24 + sscalar 0.499999985 * x24) (\\x25 -> tlet (sscalar 0.499999985 * x25 + sscalar 0.499999985 * x25) (\\x26 -> tlet (sscalar 0.499999985 * x26 + sscalar 0.499999985 * x26) (\\x27 -> tlet (sscalar 0.499999985 * x27 + sscalar 0.499999985 * x27) (\\x28 -> tlet (x28 + x28) (\\x29 -> soneHot (recip x9 * x29) [0] + soneHot ((negate (sfromR v1 !$ [0]) / (x9 * x9)) * x29) [1])))))))))"

-- TODO: should do 1000000 in a few seconds
blowupTests :: TestTree
blowupTests :: TestTree
blowupTests = [Char] -> [TestTree] -> TestTree
testGroup [Char]
"Catastrophic blowup avoidance tests"
  [ [Char] -> Assertion -> TestTree
testCase [Char]
"blowup prim 7" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-5
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
0.3333332333333467,-Double
0.22222215555556446])
        (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 (Int -> f (TKR2 1 (TKScalar Double)) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowup Int
7) (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupLet prim 2000" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
0.3333133339329949,-Double
0.22220888928866325])
        (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 (PrimalOf f (TKScalar Int64)
-> Int -> f (TKR2 1 (TKScalar Double)) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet PrimalOf f (TKScalar Int64)
1 Int
2000) (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupLet 7000" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
0.3332633406816766,-Double
0.22217556045445108])
        ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR 0 Double)
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
-> Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet AstTensor AstMethodLet PrimalSpan (TKScalar Int64)
PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
0 Int
7000) (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupLet tbuild0" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
333.2633406816765,-Double
222.175560454451])
        ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs -> Int
-> (PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
1000 (\PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
_ -> PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
-> Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet AstTensor AstMethodLet PrimalSpan (TKScalar Int64)
PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
0 Int
7000 AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs)))
              (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupLet tbuild2" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
333.2633406816765,-Double
222.175560454451])
        ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0 (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs -> Int
-> (PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
1000 (\PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
_ -> PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
-> Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet AstTensor AstMethodLet PrimalSpan (TKScalar Int64)
PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
2 Int
7000 AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs)))
              (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupLet tbuildi" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
333.2983351701977,-Double
222.19889011346513])
        ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0
               (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs -> Int
-> (PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
1000 (\PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
i -> PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
-> Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
i Int
3500 AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs)))
              (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupLet tbuildc" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-7
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
333.326333406717,-Double
222.21755560448116])
        ((ADVal Concrete (TKR2 1 (TKScalar Double))
 -> ADVal Concrete (TKScalar Double))
-> DValue (ADVal Concrete (TKR2 1 (TKScalar Double)))
-> DValue (ADVal Concrete (TKR2 1 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (DValue src) :: TK), KnownSTK (X src),
 AdaptableTarget (ADVal Concrete) src,
 AdaptableTarget Concrete (DValue src),
 (tgt :: Type) ~ (ADVal Concrete (TKScalar r) :: Type)) =>
(src -> tgt) -> DValue src -> DValue src
cgrad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (ADVal Concrete (TKR 0 Double) -> ADVal Concrete (TKScalar Double))
-> (ADVal Concrete (TKR2 1 (TKScalar Double))
    -> ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR2 1 (TKScalar Double))
-> ADVal Concrete (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADVal Concrete (TKR2 1 (TKScalar Double))
-> ADVal Concrete (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0
                (ADVal Concrete (TKR2 1 (TKScalar Double))
 -> ADVal Concrete (TKR 0 Double))
-> (ADVal Concrete (TKR2 1 (TKScalar Double))
    -> ADVal Concrete (TKR2 1 (TKScalar Double)))
-> ADVal Concrete (TKR2 1 (TKScalar Double))
-> ADVal Concrete (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\ADVal Concrete (TKR2 1 (TKScalar Double))
intputs -> Int
-> (PrimalOf (ADVal Concrete) (TKScalar Int64)
    -> ADVal Concrete (TKR 0 Double))
-> ADVal Concrete (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
1000 (\PrimalOf (ADVal Concrete) (TKScalar Int64)
i -> PrimalOf (ADVal Concrete) (TKScalar Int64)
-> Int
-> ADVal Concrete (TKR2 1 (TKScalar Double))
-> ADVal Concrete (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet PrimalOf (ADVal Concrete) (TKScalar Int64)
i Int
700 ADVal Concrete (TKR2 1 (TKScalar Double))
intputs)))
              (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupLet prim tbuild" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-7
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
33.33263334067178,-Double
22.221755560447928])
        ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0
               (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs -> Int
-> (PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
100 (\PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
i -> PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
-> Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupLet PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
i Int
700 AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs)))
              (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupMult 3" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-5
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2.999999730000007,Double
Item [Double]
1.9999998200000046])
        (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 (Int -> f (TKR2 1 (TKScalar Double)) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMult Int
3) (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupMultLet 5" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2.9999995500000267,Double
Item [Double]
1.9999997000000178])
        (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 (PrimalOf f (TKScalar Int64)
-> Int -> f (TKR2 1 (TKScalar Double)) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMultLet PrimalOf f (TKScalar Int64)
0 Int
5)
                                   (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupMultLet 50" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> ((Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))),
    (Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     AstTensor AstMethodLet PrimalSpan (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)), Concrete (TKR 0 Double),
     Concrete (TKR 0 Double), Concrete (TKR 0 Double),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double)),
     Concrete (TKR2 1 (TKScalar Double))))
-> Assertion
forall (n :: Natural) (m :: Natural) v r w a.
(KnownNat n, KnownNat m,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type),
 AssertEqualUpToEpsilon a, AssertEqualUpToEpsilon v,
 AssertEqualUpToEpsilon (ADTensorScalar r), GoodScalar r,
 GoodScalar (ADTensorScalar r), HasCallStack) =>
Rational
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
-> Assertion
assertEqualUpToEpsilon' Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2.999995500001215,Double
Item [Double]
1.99999700000081])
        (forall r (m :: Natural) (n :: Natural) v a w.
(KnownNat m, KnownNat n, GoodScalar r,
 (v :: Type) ~ (Concrete (TKR m r) :: Type),
 (w :: Type) ~ (Concrete (ADTensorKind (TKR m r)) :: Type),
 (a :: Type) ~ (Concrete (ADTensorKind (TKR n r)) :: Type)) =>
(forall (f :: Target). ADReady f => f (TKR n r) -> f (TKR m r))
-> Concrete (TKR n r)
-> ((v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a),
    (v, v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a,
     AstTensor AstMethodLet PrimalSpan (TKR m r),
     AstTensor AstMethodLet PrimalSpan (TKR m r), v, v, v, v, v, v, v,
     v, v, v, v, v, v, v, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
     Concrete (TKR n r), w, w, w, a, a, a, a, a))
rev' @Double @0 (PrimalOf f (TKScalar Int64)
-> Int -> f (TKR2 1 (TKScalar Double)) -> f (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMultLet PrimalOf f (TKScalar Int64)
0 Int
50)
                                   (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
2, Double
Item [Double]
3]))
  , [Char] -> Assertion -> TestTree
testCase [Char]
"blowupMultLet tbuild1" (Assertion -> TestTree) -> Assertion -> TestTree
forall a b. (a -> b) -> a -> b
$ do
      Rational
-> Concrete (TKR2 1 (TKScalar Double))
-> Concrete (TKR2 1 (TKScalar Double))
-> Assertion
forall a.
(AssertEqualUpToEpsilon a, HasCallStack) =>
Rational -> a -> a -> Assertion
assertEqualUpToEpsilon Rational
1e-10
        (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
14.9999773958889,Double
Item [Double]
39.9999398380561])
        ((AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> Value
     (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
forall src r tgt.
((X src :: TK) ~ (X (Value src) :: TK), KnownSTK (X src),
 AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 AdaptableTarget Concrete (Value src),
 (tgt :: Type)
 ~ (AstTensor AstMethodLet FullSpan (TKScalar r) :: Type)) =>
(src -> tgt) -> Value src -> Value src
grad (forall (target :: Target) r.
(ConvertTensor target, GoodScalar r) =>
target (TKR 0 r) -> target (TKScalar r)
kfromR @_ @Double (AstTensor AstMethodLet FullSpan (TKR 0 Double)
 -> AstTensor AstMethodLet FullSpan (TKScalar Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKScalar Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
target (TKR2 n x) -> target (TKR2 0 x)
rsum0
               (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
 -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double)))
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs -> Int
-> (PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
    -> AstTensor AstMethodLet FullSpan (TKR 0 Double))
-> AstTensor AstMethodLet FullSpan (TKR2 (1 + 0) (TKScalar Double))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
100 (\PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
i -> PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
-> Int
-> AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 0 Double)
forall (target :: Target) r.
(ADReady target, GoodScalar r, Differentiable r) =>
IntOf target -> Int -> target (TKR 1 r) -> target (TKR 0 r)
fblowupMultLet PrimalOf (AstTensor AstMethodLet FullSpan) (TKScalar Int64)
i Int
50 AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
intputs)))
              (IShR 1 -> [Double] -> Concrete (TKR2 1 (TKScalar Double))
forall (n :: Natural) r (target :: Target).
(GoodScalar r, BaseTensor target) =>
IShR n -> [r] -> target (TKR n r)
ringestData [Int
Item (IShR 1)
2] [Double
Item [Double]
0.2, Double
Item [Double]
0.3]))
  ]

concatBuild33 :: (ADReady target, GoodScalar r)
             => target (TKR 1 r) -> target (TKR 2 r)
concatBuild33 :: forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 2 r)
concatBuild33 target (TKR 1 r)
_r =
  Int
-> (PrimalOf target (TKScalar Int64) -> target (TKR 1 r))
-> target (TKR2 (1 + 1) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
5 (\PrimalOf target (TKScalar Int64)
i ->
    Int
-> (PrimalOf target (TKScalar Int64)
    -> target (TKR2 0 (TKScalar r)))
-> target (TKR2 (1 + 0) (TKScalar r))
forall (n :: Natural) (x :: TK) (target :: Target).
(KnownNat n, KnownSTK x, BaseTensor target) =>
Int
-> (IntOf target -> target (TKR2 n x)) -> target (TKR2 (1 + n) x)
rbuild1 Int
2 (\PrimalOf target (TKScalar Int64)
j -> PrimalOf target (TKScalar Int64) -> target (TKR2 0 (TKScalar r))
forall r (target :: Target).
(BaseTensor target, ConvertTensor target, GoodScalar r) =>
IntOf target -> target (TKR 0 r)
rfromIndex0 (PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall (y :: TK) (target :: Target).
(KnownSTK y, OrdH target y, BaseTensor target) =>
target y -> target y -> target y
maxH PrimalOf target (TKScalar Int64)
j (PrimalOf target (TKScalar Int64)
i PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. IntegralH a => a -> a -> a
`quotH` (PrimalOf target (TKScalar Int64)
j PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
-> PrimalOf target (TKScalar Int64)
forall a. Num a => a -> a -> a
+ PrimalOf target (TKScalar Int64)
1)))))

testConcatBuild3PP :: Assertion
testConcatBuild3PP :: Assertion
testConcatBuild3PP = do
  Assertion
resetVarCounter
  let t :: AstTensor AstMethodLet FullSpan (TKR 1 Float)
-> AstTensor AstMethodLet FullSpan (TKR 2 Float)
t = forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 2 r)
concatBuild33 @(AstTensor AstMethodLet FullSpan) @Float
      (AstVarName FullSpan (TKR 1 Float)
var3, AstTensor AstMethodLet FullSpan (TKR 2 Float)
ast3) = FullShapeTK (TKR 1 Float)
-> Maybe (Int64, Int64)
-> (AstTensor AstMethodLet FullSpan (TKR 1 Float)
    -> AstTensor AstMethodLet FullSpan (TKR 2 Float))
-> (AstVarName FullSpan (TKR 1 Float),
    AstTensor AstMethodLet FullSpan (TKR 2 Float))
forall (s :: AstSpanType) (y :: TK) (ms :: AstMethodOfSharing)
       (z :: TK).
AstSpan s =>
FullShapeTK y
-> Maybe (Int64, Int64)
-> (AstTensor ms s y -> AstTensor ms s z)
-> (AstVarName s y, AstTensor ms s z)
funToAst (IShR 1 -> FullShapeTK (TKScalar Float) -> FullShapeTK (TKR 1 Float)
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
3] FullShapeTK (TKScalar Float)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar) Maybe (Int64, Int64)
forall a. Maybe a
Nothing AstTensor AstMethodLet FullSpan (TKR 1 Float)
-> AstTensor AstMethodLet FullSpan (TKR 2 Float)
t
  [Char]
"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstVarName FullSpan (TKR 1 Float) -> [Char]
forall (s :: AstSpanType) (y :: TK).
AstSpan s =>
AstVarName s y -> [Char]
printAstVarName AstVarName FullSpan (TKR 1 Float)
var3
       [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -> " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ AstTensor AstMethodLet FullSpan (TKR 2 Float) -> [Char]
forall (s :: AstSpanType) (ms :: AstMethodOfSharing) (y :: TK).
AstSpan s =>
AstTensor ms s y -> [Char]
printAstSimple AstTensor AstMethodLet FullSpan (TKR 2 Float)
ast3
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> tfromPrimal (STKR (SNat @2) STKScalar) (rfromS (sgather [] (sfromIntegral (tfromVector (SNat @2) (STKS [5,2] STKScalar) (fromList [sreplicate @5 (siota (SNat @2)), quotH (str (sreplicate @2 (siota (SNat @5)))) (sreplicate @5 (sconcrete (sreplicate [2] 1) + siota (SNat @2)))]))) (\\[i5, i4] -> [ifH (0 <=. i4 + quotH (negate i5) (1 + i4)) 0 1, i5, i4])))"

testConcatBuild3PP2 :: Assertion
testConcatBuild3PP2 :: Assertion
testConcatBuild3PP2 = do
  Assertion
resetVarCounter
  let t :: AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
t = forall (target :: Target) r.
(ADReady target, GoodScalar r) =>
target (TKR 1 r) -> target (TKR 2 r)
concatBuild33 @(AstTensor AstMethodLet FullSpan) @Double
  let (AstArtifactRev
  (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
  (TKR 2 Double)
artifactRev, Delta (AstRaw PrimalSpan) (TKR 2 Double)
_) =
        IncomingCotangentHandling
-> (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
    -> AstTensor AstMethodLet FullSpan (TKR 2 Double))
-> FullShapeTK
     (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
-> (AstArtifactRev
      (X (AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))))
      (TKR 2 Double),
    Delta (AstRaw PrimalSpan) (TKR 2 Double))
forall src (ztgt :: TK) tgt.
(AdaptableTarget (AstTensor AstMethodLet FullSpan) src,
 (tgt :: Type) ~ (AstTensor AstMethodLet FullSpan ztgt :: Type)) =>
IncomingCotangentHandling
-> (src -> tgt)
-> FullShapeTK (X src)
-> (AstArtifactRev (X src) ztgt, Delta (AstRaw PrimalSpan) ztgt)
revArtifactDelta IncomingCotangentHandling
UseIncomingCotangent AstTensor AstMethodLet FullSpan (TKR2 1 (TKScalar Double))
-> AstTensor AstMethodLet FullSpan (TKR 2 Double)
t (IShR 1
-> FullShapeTK (TKScalar Double)
-> FullShapeTK (TKR2 1 (TKScalar Double))
forall (n :: Natural) (x :: TK).
IShR n -> FullShapeTK x -> FullShapeTK (TKR2 n x)
FTKR [Int
Item (IShR 1)
3] FullShapeTK (TKScalar Double)
forall r. GoodScalar r => FullShapeTK (TKScalar r)
FTKScalar)
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\dret v1 -> rfromS (sconcrete (sreplicate [3] 0.0))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double)
artifactRev
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (sgather [] (sfromIntegral (tfromVector (SNat @2) (STKS [5,2] STKScalar) (fromList [sreplicate @5 (siota (SNat @2)), quotH (str (sreplicate @2 (siota (SNat @5)))) (sreplicate @5 (sconcrete (sreplicate [2] 1) + siota (SNat @2)))]))) (\\[i6, i7] -> [ifH (0 <=. i7 + quotH (negate i6) (1 + i7)) 0 1, i6, i7]))"
  AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double) -> [Char]
forall (x :: TK) (z :: TK). AstArtifactRev x z -> [Char]
printArtifactPrimalSimple (AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double)
-> AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double)
forall (x :: TK) (z :: TK).
AstArtifactRev x z -> AstArtifactRev x z
simplifyArtifact AstArtifactRev (TKR2 1 (TKScalar Double)) (TKR 2 Double)
artifactRev)
    [Char] -> [Char] -> Assertion
forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion
@?= [Char]
"\\v1 -> rfromS (sgather [] (sconcrete (sfromListLinear [2,5,2] [0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,2.0,1.0,3.0,1.0,4.0,2.0])) (\\[i6, i7] -> [ifH (0 <=. i7 + quotH (negate i6) (1 + i7)) 0 1, i6, i7]))"