{-# LANGUAGE OverloadedLists #-}
{-# OPTIONS_GHC -fno-cse #-}
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
, [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
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
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 ))
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
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))
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]))))"
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]))))"
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)))))))))"
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)))))))"
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)))"
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)
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
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
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))
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))
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)
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))
_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))
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)
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)))))
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 :: [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
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]))
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
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
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
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
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
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])))))))))"
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]))"