{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ViewPatterns #-}
module Data.Array.Nested.Mixed where
import Prelude hiding (mconcat)
import Control.DeepSeq (NFData(..))
import Control.Monad (forM_, when)
import Control.Monad.ST
import Data.Array.RankedS qualified as S
import Data.Bifunctor (bimap)
import Data.Coerce
import Data.Foldable (toList)
import Data.Int
import Data.Kind (Type)
import Data.List.NonEmpty (NonEmpty(..))
import Data.List.NonEmpty qualified as NE
import Data.Proxy
import Data.Type.Equality
import Data.Vector.Storable qualified as VS
import Data.Vector.Storable.Mutable qualified as VSM
import Foreign.C.Types (CInt)
import Foreign.Storable (Storable)
import GHC.Float qualified (expm1, log1mexp, log1p, log1pexp)
import GHC.Generics (Generic)
import GHC.TypeLits
import Data.Array.Nested.Lemmas
import Data.Array.Nested.Mixed.Shape
import Data.Array.Nested.Permutation
import Data.Array.Nested.Types
import Data.Array.Strided.Orthotope
import Data.Array.XArray (XArray(..))
import Data.Array.XArray qualified as X
import Data.Bag
newtype Primitive a = Primitive a
deriving (Int -> Primitive a -> ShowS
[Primitive a] -> ShowS
Primitive a -> String
(Int -> Primitive a -> ShowS)
-> (Primitive a -> String)
-> ([Primitive a] -> ShowS)
-> Show (Primitive a)
forall a. Show a => Int -> Primitive a -> ShowS
forall a. Show a => [Primitive a] -> ShowS
forall a. Show a => Primitive a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Primitive a -> ShowS
showsPrec :: Int -> Primitive a -> ShowS
$cshow :: forall a. Show a => Primitive a -> String
show :: Primitive a -> String
$cshowList :: forall a. Show a => [Primitive a] -> ShowS
showList :: [Primitive a] -> ShowS
Show)
class (Storable a, Elt a) => PrimElt a where
fromPrimitive :: Mixed sh (Primitive a) -> Mixed sh a
toPrimitive :: Mixed sh a -> Mixed sh (Primitive a)
default fromPrimitive :: Coercible (Mixed sh a) (Mixed sh (Primitive a)) => Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive = Mixed sh (Primitive a) -> Mixed sh a
forall a b. Coercible a b => a -> b
coerce
default toPrimitive :: Coercible (Mixed sh (Primitive a)) (Mixed sh a) => Mixed sh a -> Mixed sh (Primitive a)
toPrimitive = Mixed sh a -> Mixed sh (Primitive a)
forall a b. Coercible a b => a -> b
coerce
instance PrimElt Bool
instance PrimElt Int
instance PrimElt Int64
instance PrimElt Int32
instance PrimElt CInt
instance PrimElt Float
instance PrimElt Double
instance PrimElt ()
type Mixed :: [Maybe Nat] -> Type -> Type
data family Mixed sh a
#ifdef OXAR_DEFAULT_SHOW_INSTANCES
#define ANDSHOW , Show
#else
#define ANDSHOW
#endif
data instance Mixed sh (Primitive a) = M_Primitive !(IShX sh) !(XArray sh a)
deriving (Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
(Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool)
-> (Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool)
-> Eq (Mixed sh (Primitive a))
forall (sh :: [Maybe Nat]) a.
(Eq a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]) a.
(Eq a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
== :: Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
$c/= :: forall (sh :: [Maybe Nat]) a.
(Eq a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
/= :: Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
Eq, Eq (Mixed sh (Primitive a))
Eq (Mixed sh (Primitive a)) =>
(Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Ordering)
-> (Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool)
-> (Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool)
-> (Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool)
-> (Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool)
-> (Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a))
-> (Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a))
-> Ord (Mixed sh (Primitive a))
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Ordering
Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Eq (Mixed sh (Primitive a))
forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Ordering
forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a)
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Ordering
compare :: Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Ordering
$c< :: forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
< :: Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
$c<= :: forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
<= :: Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
$c> :: forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
> :: Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
$c>= :: forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
>= :: Mixed sh (Primitive a) -> Mixed sh (Primitive a) -> Bool
$cmax :: forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a)
max :: Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a)
$cmin :: forall (sh :: [Maybe Nat]) a.
(Ord a, Storable a) =>
Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a)
min :: Mixed sh (Primitive a)
-> Mixed sh (Primitive a) -> Mixed sh (Primitive a)
Ord, (forall x.
Mixed sh (Primitive a) -> Rep (Mixed sh (Primitive a)) x)
-> (forall x.
Rep (Mixed sh (Primitive a)) x -> Mixed sh (Primitive a))
-> Generic (Mixed sh (Primitive a))
forall (sh :: [Maybe Nat]) a x.
Rep (Mixed sh (Primitive a)) x -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a x.
Mixed sh (Primitive a) -> Rep (Mixed sh (Primitive a)) x
forall x. Rep (Mixed sh (Primitive a)) x -> Mixed sh (Primitive a)
forall x. Mixed sh (Primitive a) -> Rep (Mixed sh (Primitive a)) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) a x.
Mixed sh (Primitive a) -> Rep (Mixed sh (Primitive a)) x
from :: forall x. Mixed sh (Primitive a) -> Rep (Mixed sh (Primitive a)) x
$cto :: forall (sh :: [Maybe Nat]) a x.
Rep (Mixed sh (Primitive a)) x -> Mixed sh (Primitive a)
to :: forall x. Rep (Mixed sh (Primitive a)) x -> Mixed sh (Primitive a)
Generic ANDSHOW)
newtype instance Mixed sh Bool = M_Bool (Mixed sh (Primitive Bool)) deriving (Mixed sh Bool -> Mixed sh Bool -> Bool
(Mixed sh Bool -> Mixed sh Bool -> Bool)
-> (Mixed sh Bool -> Mixed sh Bool -> Bool) -> Eq (Mixed sh Bool)
forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
== :: Mixed sh Bool -> Mixed sh Bool -> Bool
$c/= :: forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
/= :: Mixed sh Bool -> Mixed sh Bool -> Bool
Eq, Eq (Mixed sh Bool)
Eq (Mixed sh Bool) =>
(Mixed sh Bool -> Mixed sh Bool -> Ordering)
-> (Mixed sh Bool -> Mixed sh Bool -> Bool)
-> (Mixed sh Bool -> Mixed sh Bool -> Bool)
-> (Mixed sh Bool -> Mixed sh Bool -> Bool)
-> (Mixed sh Bool -> Mixed sh Bool -> Bool)
-> (Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool)
-> (Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool)
-> Ord (Mixed sh Bool)
Mixed sh Bool -> Mixed sh Bool -> Bool
Mixed sh Bool -> Mixed sh Bool -> Ordering
Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool
forall (sh :: [Maybe Nat]). Eq (Mixed sh Bool)
forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
forall (sh :: [Maybe Nat]).
Mixed sh Bool -> Mixed sh Bool -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]).
Mixed sh Bool -> Mixed sh Bool -> Ordering
compare :: Mixed sh Bool -> Mixed sh Bool -> Ordering
$c< :: forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
< :: Mixed sh Bool -> Mixed sh Bool -> Bool
$c<= :: forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
<= :: Mixed sh Bool -> Mixed sh Bool -> Bool
$c> :: forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
> :: Mixed sh Bool -> Mixed sh Bool -> Bool
$c>= :: forall (sh :: [Maybe Nat]). Mixed sh Bool -> Mixed sh Bool -> Bool
>= :: Mixed sh Bool -> Mixed sh Bool -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool
max :: Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool
min :: Mixed sh Bool -> Mixed sh Bool -> Mixed sh Bool
Ord, (forall x. Mixed sh Bool -> Rep (Mixed sh Bool) x)
-> (forall x. Rep (Mixed sh Bool) x -> Mixed sh Bool)
-> Generic (Mixed sh Bool)
forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Bool) x -> Mixed sh Bool
forall (sh :: [Maybe Nat]) x.
Mixed sh Bool -> Rep (Mixed sh Bool) x
forall x. Rep (Mixed sh Bool) x -> Mixed sh Bool
forall x. Mixed sh Bool -> Rep (Mixed sh Bool) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x.
Mixed sh Bool -> Rep (Mixed sh Bool) x
from :: forall x. Mixed sh Bool -> Rep (Mixed sh Bool) x
$cto :: forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Bool) x -> Mixed sh Bool
to :: forall x. Rep (Mixed sh Bool) x -> Mixed sh Bool
Generic ANDSHOW)
newtype instance Mixed sh Int = M_Int (Mixed sh (Primitive Int)) deriving (Mixed sh Int -> Mixed sh Int -> Bool
(Mixed sh Int -> Mixed sh Int -> Bool)
-> (Mixed sh Int -> Mixed sh Int -> Bool) -> Eq (Mixed sh Int)
forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
== :: Mixed sh Int -> Mixed sh Int -> Bool
$c/= :: forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
/= :: Mixed sh Int -> Mixed sh Int -> Bool
Eq, Eq (Mixed sh Int)
Eq (Mixed sh Int) =>
(Mixed sh Int -> Mixed sh Int -> Ordering)
-> (Mixed sh Int -> Mixed sh Int -> Bool)
-> (Mixed sh Int -> Mixed sh Int -> Bool)
-> (Mixed sh Int -> Mixed sh Int -> Bool)
-> (Mixed sh Int -> Mixed sh Int -> Bool)
-> (Mixed sh Int -> Mixed sh Int -> Mixed sh Int)
-> (Mixed sh Int -> Mixed sh Int -> Mixed sh Int)
-> Ord (Mixed sh Int)
Mixed sh Int -> Mixed sh Int -> Bool
Mixed sh Int -> Mixed sh Int -> Ordering
Mixed sh Int -> Mixed sh Int -> Mixed sh Int
forall (sh :: [Maybe Nat]). Eq (Mixed sh Int)
forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
forall (sh :: [Maybe Nat]).
Mixed sh Int -> Mixed sh Int -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh Int -> Mixed sh Int -> Mixed sh Int
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]).
Mixed sh Int -> Mixed sh Int -> Ordering
compare :: Mixed sh Int -> Mixed sh Int -> Ordering
$c< :: forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
< :: Mixed sh Int -> Mixed sh Int -> Bool
$c<= :: forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
<= :: Mixed sh Int -> Mixed sh Int -> Bool
$c> :: forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
> :: Mixed sh Int -> Mixed sh Int -> Bool
$c>= :: forall (sh :: [Maybe Nat]). Mixed sh Int -> Mixed sh Int -> Bool
>= :: Mixed sh Int -> Mixed sh Int -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh Int -> Mixed sh Int -> Mixed sh Int
max :: Mixed sh Int -> Mixed sh Int -> Mixed sh Int
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh Int -> Mixed sh Int -> Mixed sh Int
min :: Mixed sh Int -> Mixed sh Int -> Mixed sh Int
Ord, (forall x. Mixed sh Int -> Rep (Mixed sh Int) x)
-> (forall x. Rep (Mixed sh Int) x -> Mixed sh Int)
-> Generic (Mixed sh Int)
forall (sh :: [Maybe Nat]) x. Rep (Mixed sh Int) x -> Mixed sh Int
forall (sh :: [Maybe Nat]) x. Mixed sh Int -> Rep (Mixed sh Int) x
forall x. Rep (Mixed sh Int) x -> Mixed sh Int
forall x. Mixed sh Int -> Rep (Mixed sh Int) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x. Mixed sh Int -> Rep (Mixed sh Int) x
from :: forall x. Mixed sh Int -> Rep (Mixed sh Int) x
$cto :: forall (sh :: [Maybe Nat]) x. Rep (Mixed sh Int) x -> Mixed sh Int
to :: forall x. Rep (Mixed sh Int) x -> Mixed sh Int
Generic ANDSHOW)
newtype instance Mixed sh Int64 = M_Int64 (Mixed sh (Primitive Int64)) deriving (Mixed sh Int64 -> Mixed sh Int64 -> Bool
(Mixed sh Int64 -> Mixed sh Int64 -> Bool)
-> (Mixed sh Int64 -> Mixed sh Int64 -> Bool)
-> Eq (Mixed sh Int64)
forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
== :: Mixed sh Int64 -> Mixed sh Int64 -> Bool
$c/= :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
/= :: Mixed sh Int64 -> Mixed sh Int64 -> Bool
Eq, Eq (Mixed sh Int64)
Eq (Mixed sh Int64) =>
(Mixed sh Int64 -> Mixed sh Int64 -> Ordering)
-> (Mixed sh Int64 -> Mixed sh Int64 -> Bool)
-> (Mixed sh Int64 -> Mixed sh Int64 -> Bool)
-> (Mixed sh Int64 -> Mixed sh Int64 -> Bool)
-> (Mixed sh Int64 -> Mixed sh Int64 -> Bool)
-> (Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64)
-> (Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64)
-> Ord (Mixed sh Int64)
Mixed sh Int64 -> Mixed sh Int64 -> Bool
Mixed sh Int64 -> Mixed sh Int64 -> Ordering
Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64
forall (sh :: [Maybe Nat]). Eq (Mixed sh Int64)
forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Ordering
compare :: Mixed sh Int64 -> Mixed sh Int64 -> Ordering
$c< :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
< :: Mixed sh Int64 -> Mixed sh Int64 -> Bool
$c<= :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
<= :: Mixed sh Int64 -> Mixed sh Int64 -> Bool
$c> :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
> :: Mixed sh Int64 -> Mixed sh Int64 -> Bool
$c>= :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Bool
>= :: Mixed sh Int64 -> Mixed sh Int64 -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64
max :: Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64
min :: Mixed sh Int64 -> Mixed sh Int64 -> Mixed sh Int64
Ord, (forall x. Mixed sh Int64 -> Rep (Mixed sh Int64) x)
-> (forall x. Rep (Mixed sh Int64) x -> Mixed sh Int64)
-> Generic (Mixed sh Int64)
forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Int64) x -> Mixed sh Int64
forall (sh :: [Maybe Nat]) x.
Mixed sh Int64 -> Rep (Mixed sh Int64) x
forall x. Rep (Mixed sh Int64) x -> Mixed sh Int64
forall x. Mixed sh Int64 -> Rep (Mixed sh Int64) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x.
Mixed sh Int64 -> Rep (Mixed sh Int64) x
from :: forall x. Mixed sh Int64 -> Rep (Mixed sh Int64) x
$cto :: forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Int64) x -> Mixed sh Int64
to :: forall x. Rep (Mixed sh Int64) x -> Mixed sh Int64
Generic ANDSHOW)
newtype instance Mixed sh Int32 = M_Int32 (Mixed sh (Primitive Int32)) deriving (Mixed sh Int32 -> Mixed sh Int32 -> Bool
(Mixed sh Int32 -> Mixed sh Int32 -> Bool)
-> (Mixed sh Int32 -> Mixed sh Int32 -> Bool)
-> Eq (Mixed sh Int32)
forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
== :: Mixed sh Int32 -> Mixed sh Int32 -> Bool
$c/= :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
/= :: Mixed sh Int32 -> Mixed sh Int32 -> Bool
Eq, Eq (Mixed sh Int32)
Eq (Mixed sh Int32) =>
(Mixed sh Int32 -> Mixed sh Int32 -> Ordering)
-> (Mixed sh Int32 -> Mixed sh Int32 -> Bool)
-> (Mixed sh Int32 -> Mixed sh Int32 -> Bool)
-> (Mixed sh Int32 -> Mixed sh Int32 -> Bool)
-> (Mixed sh Int32 -> Mixed sh Int32 -> Bool)
-> (Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32)
-> (Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32)
-> Ord (Mixed sh Int32)
Mixed sh Int32 -> Mixed sh Int32 -> Bool
Mixed sh Int32 -> Mixed sh Int32 -> Ordering
Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32
forall (sh :: [Maybe Nat]). Eq (Mixed sh Int32)
forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Ordering
compare :: Mixed sh Int32 -> Mixed sh Int32 -> Ordering
$c< :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
< :: Mixed sh Int32 -> Mixed sh Int32 -> Bool
$c<= :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
<= :: Mixed sh Int32 -> Mixed sh Int32 -> Bool
$c> :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
> :: Mixed sh Int32 -> Mixed sh Int32 -> Bool
$c>= :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Bool
>= :: Mixed sh Int32 -> Mixed sh Int32 -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32
max :: Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32
min :: Mixed sh Int32 -> Mixed sh Int32 -> Mixed sh Int32
Ord, (forall x. Mixed sh Int32 -> Rep (Mixed sh Int32) x)
-> (forall x. Rep (Mixed sh Int32) x -> Mixed sh Int32)
-> Generic (Mixed sh Int32)
forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Int32) x -> Mixed sh Int32
forall (sh :: [Maybe Nat]) x.
Mixed sh Int32 -> Rep (Mixed sh Int32) x
forall x. Rep (Mixed sh Int32) x -> Mixed sh Int32
forall x. Mixed sh Int32 -> Rep (Mixed sh Int32) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x.
Mixed sh Int32 -> Rep (Mixed sh Int32) x
from :: forall x. Mixed sh Int32 -> Rep (Mixed sh Int32) x
$cto :: forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Int32) x -> Mixed sh Int32
to :: forall x. Rep (Mixed sh Int32) x -> Mixed sh Int32
Generic ANDSHOW)
newtype instance Mixed sh CInt = M_CInt (Mixed sh (Primitive CInt)) deriving (Mixed sh CInt -> Mixed sh CInt -> Bool
(Mixed sh CInt -> Mixed sh CInt -> Bool)
-> (Mixed sh CInt -> Mixed sh CInt -> Bool) -> Eq (Mixed sh CInt)
forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
== :: Mixed sh CInt -> Mixed sh CInt -> Bool
$c/= :: forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
/= :: Mixed sh CInt -> Mixed sh CInt -> Bool
Eq, Eq (Mixed sh CInt)
Eq (Mixed sh CInt) =>
(Mixed sh CInt -> Mixed sh CInt -> Ordering)
-> (Mixed sh CInt -> Mixed sh CInt -> Bool)
-> (Mixed sh CInt -> Mixed sh CInt -> Bool)
-> (Mixed sh CInt -> Mixed sh CInt -> Bool)
-> (Mixed sh CInt -> Mixed sh CInt -> Bool)
-> (Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt)
-> (Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt)
-> Ord (Mixed sh CInt)
Mixed sh CInt -> Mixed sh CInt -> Bool
Mixed sh CInt -> Mixed sh CInt -> Ordering
Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt
forall (sh :: [Maybe Nat]). Eq (Mixed sh CInt)
forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
forall (sh :: [Maybe Nat]).
Mixed sh CInt -> Mixed sh CInt -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]).
Mixed sh CInt -> Mixed sh CInt -> Ordering
compare :: Mixed sh CInt -> Mixed sh CInt -> Ordering
$c< :: forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
< :: Mixed sh CInt -> Mixed sh CInt -> Bool
$c<= :: forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
<= :: Mixed sh CInt -> Mixed sh CInt -> Bool
$c> :: forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
> :: Mixed sh CInt -> Mixed sh CInt -> Bool
$c>= :: forall (sh :: [Maybe Nat]). Mixed sh CInt -> Mixed sh CInt -> Bool
>= :: Mixed sh CInt -> Mixed sh CInt -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt
max :: Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt
min :: Mixed sh CInt -> Mixed sh CInt -> Mixed sh CInt
Ord, (forall x. Mixed sh CInt -> Rep (Mixed sh CInt) x)
-> (forall x. Rep (Mixed sh CInt) x -> Mixed sh CInt)
-> Generic (Mixed sh CInt)
forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh CInt) x -> Mixed sh CInt
forall (sh :: [Maybe Nat]) x.
Mixed sh CInt -> Rep (Mixed sh CInt) x
forall x. Rep (Mixed sh CInt) x -> Mixed sh CInt
forall x. Mixed sh CInt -> Rep (Mixed sh CInt) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x.
Mixed sh CInt -> Rep (Mixed sh CInt) x
from :: forall x. Mixed sh CInt -> Rep (Mixed sh CInt) x
$cto :: forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh CInt) x -> Mixed sh CInt
to :: forall x. Rep (Mixed sh CInt) x -> Mixed sh CInt
Generic ANDSHOW)
newtype instance Mixed sh Float = M_Float (Mixed sh (Primitive Float)) deriving (Mixed sh Float -> Mixed sh Float -> Bool
(Mixed sh Float -> Mixed sh Float -> Bool)
-> (Mixed sh Float -> Mixed sh Float -> Bool)
-> Eq (Mixed sh Float)
forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
== :: Mixed sh Float -> Mixed sh Float -> Bool
$c/= :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
/= :: Mixed sh Float -> Mixed sh Float -> Bool
Eq, Eq (Mixed sh Float)
Eq (Mixed sh Float) =>
(Mixed sh Float -> Mixed sh Float -> Ordering)
-> (Mixed sh Float -> Mixed sh Float -> Bool)
-> (Mixed sh Float -> Mixed sh Float -> Bool)
-> (Mixed sh Float -> Mixed sh Float -> Bool)
-> (Mixed sh Float -> Mixed sh Float -> Bool)
-> (Mixed sh Float -> Mixed sh Float -> Mixed sh Float)
-> (Mixed sh Float -> Mixed sh Float -> Mixed sh Float)
-> Ord (Mixed sh Float)
Mixed sh Float -> Mixed sh Float -> Bool
Mixed sh Float -> Mixed sh Float -> Ordering
Mixed sh Float -> Mixed sh Float -> Mixed sh Float
forall (sh :: [Maybe Nat]). Eq (Mixed sh Float)
forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Mixed sh Float
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Ordering
compare :: Mixed sh Float -> Mixed sh Float -> Ordering
$c< :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
< :: Mixed sh Float -> Mixed sh Float -> Bool
$c<= :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
<= :: Mixed sh Float -> Mixed sh Float -> Bool
$c> :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
> :: Mixed sh Float -> Mixed sh Float -> Bool
$c>= :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Bool
>= :: Mixed sh Float -> Mixed sh Float -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Mixed sh Float
max :: Mixed sh Float -> Mixed sh Float -> Mixed sh Float
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh Float -> Mixed sh Float -> Mixed sh Float
min :: Mixed sh Float -> Mixed sh Float -> Mixed sh Float
Ord, (forall x. Mixed sh Float -> Rep (Mixed sh Float) x)
-> (forall x. Rep (Mixed sh Float) x -> Mixed sh Float)
-> Generic (Mixed sh Float)
forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Float) x -> Mixed sh Float
forall (sh :: [Maybe Nat]) x.
Mixed sh Float -> Rep (Mixed sh Float) x
forall x. Rep (Mixed sh Float) x -> Mixed sh Float
forall x. Mixed sh Float -> Rep (Mixed sh Float) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x.
Mixed sh Float -> Rep (Mixed sh Float) x
from :: forall x. Mixed sh Float -> Rep (Mixed sh Float) x
$cto :: forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Float) x -> Mixed sh Float
to :: forall x. Rep (Mixed sh Float) x -> Mixed sh Float
Generic ANDSHOW)
newtype instance Mixed sh Double = M_Double (Mixed sh (Primitive Double)) deriving (Mixed sh Double -> Mixed sh Double -> Bool
(Mixed sh Double -> Mixed sh Double -> Bool)
-> (Mixed sh Double -> Mixed sh Double -> Bool)
-> Eq (Mixed sh Double)
forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
== :: Mixed sh Double -> Mixed sh Double -> Bool
$c/= :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
/= :: Mixed sh Double -> Mixed sh Double -> Bool
Eq, Eq (Mixed sh Double)
Eq (Mixed sh Double) =>
(Mixed sh Double -> Mixed sh Double -> Ordering)
-> (Mixed sh Double -> Mixed sh Double -> Bool)
-> (Mixed sh Double -> Mixed sh Double -> Bool)
-> (Mixed sh Double -> Mixed sh Double -> Bool)
-> (Mixed sh Double -> Mixed sh Double -> Bool)
-> (Mixed sh Double -> Mixed sh Double -> Mixed sh Double)
-> (Mixed sh Double -> Mixed sh Double -> Mixed sh Double)
-> Ord (Mixed sh Double)
Mixed sh Double -> Mixed sh Double -> Bool
Mixed sh Double -> Mixed sh Double -> Ordering
Mixed sh Double -> Mixed sh Double -> Mixed sh Double
forall (sh :: [Maybe Nat]). Eq (Mixed sh Double)
forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Mixed sh Double
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Ordering
compare :: Mixed sh Double -> Mixed sh Double -> Ordering
$c< :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
< :: Mixed sh Double -> Mixed sh Double -> Bool
$c<= :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
<= :: Mixed sh Double -> Mixed sh Double -> Bool
$c> :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
> :: Mixed sh Double -> Mixed sh Double -> Bool
$c>= :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Bool
>= :: Mixed sh Double -> Mixed sh Double -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Mixed sh Double
max :: Mixed sh Double -> Mixed sh Double -> Mixed sh Double
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh Double -> Mixed sh Double -> Mixed sh Double
min :: Mixed sh Double -> Mixed sh Double -> Mixed sh Double
Ord, (forall x. Mixed sh Double -> Rep (Mixed sh Double) x)
-> (forall x. Rep (Mixed sh Double) x -> Mixed sh Double)
-> Generic (Mixed sh Double)
forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Double) x -> Mixed sh Double
forall (sh :: [Maybe Nat]) x.
Mixed sh Double -> Rep (Mixed sh Double) x
forall x. Rep (Mixed sh Double) x -> Mixed sh Double
forall x. Mixed sh Double -> Rep (Mixed sh Double) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x.
Mixed sh Double -> Rep (Mixed sh Double) x
from :: forall x. Mixed sh Double -> Rep (Mixed sh Double) x
$cto :: forall (sh :: [Maybe Nat]) x.
Rep (Mixed sh Double) x -> Mixed sh Double
to :: forall x. Rep (Mixed sh Double) x -> Mixed sh Double
Generic ANDSHOW)
newtype instance Mixed sh () = M_Nil (Mixed sh (Primitive ())) deriving (Mixed sh () -> Mixed sh () -> Bool
(Mixed sh () -> Mixed sh () -> Bool)
-> (Mixed sh () -> Mixed sh () -> Bool) -> Eq (Mixed sh ())
forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
== :: Mixed sh () -> Mixed sh () -> Bool
$c/= :: forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
/= :: Mixed sh () -> Mixed sh () -> Bool
Eq, Eq (Mixed sh ())
Eq (Mixed sh ()) =>
(Mixed sh () -> Mixed sh () -> Ordering)
-> (Mixed sh () -> Mixed sh () -> Bool)
-> (Mixed sh () -> Mixed sh () -> Bool)
-> (Mixed sh () -> Mixed sh () -> Bool)
-> (Mixed sh () -> Mixed sh () -> Bool)
-> (Mixed sh () -> Mixed sh () -> Mixed sh ())
-> (Mixed sh () -> Mixed sh () -> Mixed sh ())
-> Ord (Mixed sh ())
Mixed sh () -> Mixed sh () -> Bool
Mixed sh () -> Mixed sh () -> Ordering
Mixed sh () -> Mixed sh () -> Mixed sh ()
forall (sh :: [Maybe Nat]). Eq (Mixed sh ())
forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Ordering
forall (sh :: [Maybe Nat]).
Mixed sh () -> Mixed sh () -> Mixed sh ()
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Ordering
compare :: Mixed sh () -> Mixed sh () -> Ordering
$c< :: forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
< :: Mixed sh () -> Mixed sh () -> Bool
$c<= :: forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
<= :: Mixed sh () -> Mixed sh () -> Bool
$c> :: forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
> :: Mixed sh () -> Mixed sh () -> Bool
$c>= :: forall (sh :: [Maybe Nat]). Mixed sh () -> Mixed sh () -> Bool
>= :: Mixed sh () -> Mixed sh () -> Bool
$cmax :: forall (sh :: [Maybe Nat]).
Mixed sh () -> Mixed sh () -> Mixed sh ()
max :: Mixed sh () -> Mixed sh () -> Mixed sh ()
$cmin :: forall (sh :: [Maybe Nat]).
Mixed sh () -> Mixed sh () -> Mixed sh ()
min :: Mixed sh () -> Mixed sh () -> Mixed sh ()
Ord, (forall x. Mixed sh () -> Rep (Mixed sh ()) x)
-> (forall x. Rep (Mixed sh ()) x -> Mixed sh ())
-> Generic (Mixed sh ())
forall (sh :: [Maybe Nat]) x. Rep (Mixed sh ()) x -> Mixed sh ()
forall (sh :: [Maybe Nat]) x. Mixed sh () -> Rep (Mixed sh ()) x
forall x. Rep (Mixed sh ()) x -> Mixed sh ()
forall x. Mixed sh () -> Rep (Mixed sh ()) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) x. Mixed sh () -> Rep (Mixed sh ()) x
from :: forall x. Mixed sh () -> Rep (Mixed sh ()) x
$cto :: forall (sh :: [Maybe Nat]) x. Rep (Mixed sh ()) x -> Mixed sh ()
to :: forall x. Rep (Mixed sh ()) x -> Mixed sh ()
Generic ANDSHOW)
data instance Mixed sh (a, b) = M_Tup2 !(Mixed sh a) !(Mixed sh b) deriving ((forall x. Mixed sh (a, b) -> Rep (Mixed sh (a, b)) x)
-> (forall x. Rep (Mixed sh (a, b)) x -> Mixed sh (a, b))
-> Generic (Mixed sh (a, b))
forall (sh :: [Maybe Nat]) a b x.
Rep (Mixed sh (a, b)) x -> Mixed sh (a, b)
forall (sh :: [Maybe Nat]) a b x.
Mixed sh (a, b) -> Rep (Mixed sh (a, b)) x
forall x. Rep (Mixed sh (a, b)) x -> Mixed sh (a, b)
forall x. Mixed sh (a, b) -> Rep (Mixed sh (a, b)) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh :: [Maybe Nat]) a b x.
Mixed sh (a, b) -> Rep (Mixed sh (a, b)) x
from :: forall x. Mixed sh (a, b) -> Rep (Mixed sh (a, b)) x
$cto :: forall (sh :: [Maybe Nat]) a b x.
Rep (Mixed sh (a, b)) x -> Mixed sh (a, b)
to :: forall x. Rep (Mixed sh (a, b)) x -> Mixed sh (a, b)
Generic)
#ifdef OXAR_DEFAULT_SHOW_INSTANCES
deriving instance (Show (Mixed sh a), Show (Mixed sh b)) => Show (Mixed sh (a, b))
#endif
deriving instance (Eq (Mixed sh a), Eq (Mixed sh b)) => Eq (Mixed sh (a, b))
deriving instance (Ord (Mixed sh a), Ord (Mixed sh b)) => Ord (Mixed sh (a, b))
data instance Mixed sh1 (Mixed sh2 a) = M_Nest !(IShX sh1) !(Mixed (sh1 ++ sh2) a) deriving ((forall x.
Mixed sh1 (Mixed sh2 a) -> Rep (Mixed sh1 (Mixed sh2 a)) x)
-> (forall x.
Rep (Mixed sh1 (Mixed sh2 a)) x -> Mixed sh1 (Mixed sh2 a))
-> Generic (Mixed sh1 (Mixed sh2 a))
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a x.
Rep (Mixed sh1 (Mixed sh2 a)) x -> Mixed sh1 (Mixed sh2 a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a x.
Mixed sh1 (Mixed sh2 a) -> Rep (Mixed sh1 (Mixed sh2 a)) x
forall x.
Rep (Mixed sh1 (Mixed sh2 a)) x -> Mixed sh1 (Mixed sh2 a)
forall x.
Mixed sh1 (Mixed sh2 a) -> Rep (Mixed sh1 (Mixed sh2 a)) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a x.
Mixed sh1 (Mixed sh2 a) -> Rep (Mixed sh1 (Mixed sh2 a)) x
from :: forall x.
Mixed sh1 (Mixed sh2 a) -> Rep (Mixed sh1 (Mixed sh2 a)) x
$cto :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a x.
Rep (Mixed sh1 (Mixed sh2 a)) x -> Mixed sh1 (Mixed sh2 a)
to :: forall x.
Rep (Mixed sh1 (Mixed sh2 a)) x -> Mixed sh1 (Mixed sh2 a)
Generic)
#ifdef OXAR_DEFAULT_SHOW_INSTANCES
deriving instance (Show (Mixed (sh1 ++ sh2) a)) => Show (Mixed sh1 (Mixed sh2 a))
#endif
deriving instance Eq (Mixed (sh1 ++ sh2) a) => Eq (Mixed sh1 (Mixed sh2 a))
deriving instance Ord (Mixed (sh1 ++ sh2) a) => Ord (Mixed sh1 (Mixed sh2 a))
type MixedVecs :: Type -> [Maybe Nat] -> Type -> Type
data family MixedVecs s sh a
newtype instance MixedVecs s sh (Primitive a) = MV_Primitive (VS.MVector s a)
newtype instance MixedVecs s sh Bool = MV_Bool (VS.MVector s Bool)
newtype instance MixedVecs s sh Int = MV_Int (VS.MVector s Int)
newtype instance MixedVecs s sh Int64 = MV_Int64 (VS.MVector s Int64)
newtype instance MixedVecs s sh Int32 = MV_Int32 (VS.MVector s Int32)
newtype instance MixedVecs s sh CInt = MV_CInt (VS.MVector s CInt)
newtype instance MixedVecs s sh Double = MV_Double (VS.MVector s Double)
newtype instance MixedVecs s sh Float = MV_Float (VS.MVector s Float)
newtype instance MixedVecs s sh () = MV_Nil (VS.MVector s ())
data instance MixedVecs s sh (a, b) = MV_Tup2 !(MixedVecs s sh a) !(MixedVecs s sh b)
data instance MixedVecs s sh1 (Mixed sh2 a) = MV_Nest !(IShX sh2) !(MixedVecs s (sh1 ++ sh2) a)
showsMixedArray :: (Show a, Elt a)
=> String
-> String
-> Int -> Mixed sh a -> ShowS
showsMixedArray :: forall a (sh :: [Maybe Nat]).
(Show a, Elt a) =>
String -> String -> Int -> Mixed sh a -> ShowS
showsMixedArray String
fromlistPrefix String
replicatePrefix Int
d Mixed sh a
arr =
Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
10) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
case Mixed sh a -> [a]
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> [a]
mtoListLinear Mixed sh a
arr of
a
hd : a
_ : [a]
_
| ([Int] -> Bool) -> Bag [Int] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all ((Int -> Bool) -> [Int] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0) ([Int] -> Bool) -> ([Int] -> [Int]) -> [Int] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [Int] -> [Int]
forall a. Int -> [a] -> [a]
take (ShX sh Int -> Int
forall (sh :: [Maybe Nat]) i. ShX sh i -> Int
shxLength (Mixed sh a -> ShX sh Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh a
arr))) (Mixed sh a -> Bag [Int]
forall (sh :: [Maybe Nat]). Mixed sh a -> Bag [Int]
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> Bag [Int]
marrayStrides Mixed sh a
arr) ->
String -> ShowS
showString String
replicatePrefix ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
" " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11 a
hd
[a]
_ ->
String -> ShowS
showString String
fromlistPrefix ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
" " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> ShowS
forall a. Show a => a -> ShowS
shows (Mixed sh a -> [a]
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> [a]
mtoListLinear Mixed sh a
arr)
#ifndef OXAR_DEFAULT_SHOW_INSTANCES
instance (Show a, Elt a) => Show (Mixed sh a) where
showsPrec :: Int -> Mixed sh a -> ShowS
showsPrec Int
d Mixed sh a
arr =
let sh :: String
sh = [Int] -> String
forall a. Show a => a -> String
show (IShX sh -> [Int]
forall (sh :: [Maybe Nat]). IShX sh -> [Int]
shxToList (Mixed sh a -> IShX sh
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh a
arr))
in String -> String -> Int -> Mixed sh a -> ShowS
forall a (sh :: [Maybe Nat]).
(Show a, Elt a) =>
String -> String -> Int -> Mixed sh a -> ShowS
showsMixedArray (String
"mfromListLinear " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
sh) (String
"mreplicate " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
sh) Int
d Mixed sh a
arr
#endif
instance Elt a => NFData (Mixed sh a) where
rnf :: Mixed sh a -> ()
rnf = Mixed sh a -> ()
forall (sh :: [Maybe Nat]). Mixed sh a -> ()
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> ()
mrnf
mliftNumElt1 :: (PrimElt a, PrimElt b)
=> (SNat (Rank sh) -> S.Array (Rank sh) a -> S.Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 :: forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b
f (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh (XArray Array (Rank sh) a
arr)) = Mixed sh (Primitive b) -> Mixed sh b
forall (sh :: [Maybe Nat]). Mixed sh (Primitive b) -> Mixed sh b
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive b) -> Mixed sh b)
-> Mixed sh (Primitive b) -> Mixed sh b
forall a b. (a -> b) -> a -> b
$ IShX sh -> XArray sh b -> Mixed sh (Primitive b)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (Array (Rank sh) b -> XArray sh b
forall (sh :: [Maybe Nat]) a. Array (Rank sh) a -> XArray sh a
XArray (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b
f (IShX sh -> SNat (Rank sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> SNat (Rank sh)
shxRank IShX sh
sh) Array (Rank sh) a
arr))
mliftNumElt2 :: (PrimElt a, PrimElt b, PrimElt c)
=> (SNat (Rank sh) -> S.Array (Rank sh) a -> S.Array (Rank sh) b -> S.Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 :: forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c
f (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh1 (XArray Array (Rank sh) a
arr1)) (Mixed sh b -> Mixed sh (Primitive b)
forall (sh :: [Maybe Nat]). Mixed sh b -> Mixed sh (Primitive b)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh2 (XArray Array (Rank sh) b
arr2))
| IShX sh
sh1 IShX sh -> IShX sh -> Bool
forall a. Eq a => a -> a -> Bool
== IShX sh
sh2 = Mixed sh (Primitive c) -> Mixed sh c
forall (sh :: [Maybe Nat]). Mixed sh (Primitive c) -> Mixed sh c
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive c) -> Mixed sh c)
-> Mixed sh (Primitive c) -> Mixed sh c
forall a b. (a -> b) -> a -> b
$ IShX sh -> XArray sh c -> Mixed sh (Primitive c)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh1 (Array (Rank sh) c -> XArray sh c
forall (sh :: [Maybe Nat]) a. Array (Rank sh) a -> XArray sh a
XArray (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c
f (IShX sh -> SNat (Rank sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> SNat (Rank sh)
shxRank IShX sh
sh1) Array (Rank sh) a
arr1 Array (Rank sh) b
arr2))
| Bool
otherwise = String -> Mixed sh c
forall a. HasCallStack => String -> a
error (String -> Mixed sh c) -> String -> Mixed sh c
forall a b. (a -> b) -> a -> b
$ String
"Data.Array.Nested: Shapes unequal in elementwise Num operation: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ IShX sh -> String
forall a. Show a => a -> String
show IShX sh
sh1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" vs " String -> ShowS
forall a. [a] -> [a] -> [a]
++ IShX sh -> String
forall a. Show a => a -> String
show IShX sh
sh2
instance (NumElt a, PrimElt a) => Num (Mixed sh a) where
+ :: Mixed sh a -> Mixed sh a -> Mixed sh a
(+) = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
NumElt a =>
SNat n -> Array n a -> Array n a -> Array n a
numEltAdd)
(-) = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
NumElt a =>
SNat n -> Array n a -> Array n a -> Array n a
numEltSub)
* :: Mixed sh a -> Mixed sh a -> Mixed sh a
(*) = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
NumElt a =>
SNat n -> Array n a -> Array n a -> Array n a
numEltMul)
negate :: Mixed sh a -> Mixed sh a
negate = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). NumElt a => SNat n -> Array n a -> Array n a
numEltNeg)
abs :: Mixed sh a -> Mixed sh a
abs = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). NumElt a => SNat n -> Array n a -> Array n a
numEltAbs)
signum :: Mixed sh a -> Mixed sh a
signum = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). NumElt a => SNat n -> Array n a -> Array n a
numEltSignum)
fromInteger :: Integer -> Mixed sh a
fromInteger = String -> Integer -> Mixed sh a
forall a. HasCallStack => String -> a
error String
"Data.Array.Nested.fromInteger: Cannot implement fromInteger, use mreplicateScal"
instance (FloatElt a, PrimElt a) => Fractional (Mixed sh a) where
fromRational :: Rational -> Mixed sh a
fromRational Rational
_ = String -> Mixed sh a
forall a. HasCallStack => String -> a
error String
"Data.Array.Nested.fromRational: No singletons available, use explicit mreplicate"
recip :: Mixed sh a -> Mixed sh a
recip = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltRecip)
/ :: Mixed sh a -> Mixed sh a -> Mixed sh a
(/) = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
FloatElt a =>
SNat n -> Array n a -> Array n a -> Array n a
floatEltDiv)
instance (FloatElt a, PrimElt a) => Floating (Mixed sh a) where
pi :: Mixed sh a
pi = String -> Mixed sh a
forall a. HasCallStack => String -> a
error String
"Data.Array.Nested.pi: No singletons available, use explicit mreplicate"
exp :: Mixed sh a -> Mixed sh a
exp = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltExp)
log :: Mixed sh a -> Mixed sh a
log = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltLog)
sqrt :: Mixed sh a -> Mixed sh a
sqrt = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltSqrt)
** :: Mixed sh a -> Mixed sh a -> Mixed sh a
(**) = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
FloatElt a =>
SNat n -> Array n a -> Array n a -> Array n a
floatEltPow)
logBase :: Mixed sh a -> Mixed sh a -> Mixed sh a
logBase = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
FloatElt a =>
SNat n -> Array n a -> Array n a -> Array n a
floatEltLogbase)
sin :: Mixed sh a -> Mixed sh a
sin = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltSin)
cos :: Mixed sh a -> Mixed sh a
cos = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltCos)
tan :: Mixed sh a -> Mixed sh a
tan = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltTan)
asin :: Mixed sh a -> Mixed sh a
asin = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltAsin)
acos :: Mixed sh a -> Mixed sh a
acos = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltAcos)
atan :: Mixed sh a -> Mixed sh a
atan = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltAtan)
sinh :: Mixed sh a -> Mixed sh a
sinh = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltSinh)
cosh :: Mixed sh a -> Mixed sh a
cosh = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltCosh)
tanh :: Mixed sh a -> Mixed sh a
tanh = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltTanh)
asinh :: Mixed sh a -> Mixed sh a
asinh = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltAsinh)
acosh :: Mixed sh a -> Mixed sh a
acosh = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltAcosh)
atanh :: Mixed sh a -> Mixed sh a
atanh = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltAtanh)
log1p :: Mixed sh a -> Mixed sh a
log1p = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltLog1p)
expm1 :: Mixed sh a -> Mixed sh a
expm1 = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltExpm1)
log1pexp :: Mixed sh a -> Mixed sh a
log1pexp = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltLog1pexp)
log1mexp :: Mixed sh a -> Mixed sh a
log1mexp = (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a
forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) b)
-> Mixed sh a -> Mixed sh b
mliftNumElt1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n' :: Nat) b.
(Array n a -> Array n' b) -> Array n a -> Array n' b
liftO1 ((Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh) -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a
forall a (n :: Nat). FloatElt a => SNat n -> Array n a -> Array n a
floatEltLog1mexp)
mquotArray, mremArray :: (IntElt a, PrimElt a) => Mixed sh a -> Mixed sh a -> Mixed sh a
mquotArray :: forall a (sh :: [Maybe Nat]).
(IntElt a, PrimElt a) =>
Mixed sh a -> Mixed sh a -> Mixed sh a
mquotArray = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
IntElt a =>
SNat n -> Array n a -> Array n a -> Array n a
intEltQuot)
mremArray :: forall a (sh :: [Maybe Nat]).
(IntElt a, PrimElt a) =>
Mixed sh a -> Mixed sh a -> Mixed sh a
mremArray = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
IntElt a =>
SNat n -> Array n a -> Array n a -> Array n a
intEltRem)
matan2Array :: (FloatElt a, PrimElt a) => Mixed sh a -> Mixed sh a -> Mixed sh a
matan2Array :: forall a (sh :: [Maybe Nat]).
(FloatElt a, PrimElt a) =>
Mixed sh a -> Mixed sh a -> Mixed sh a
matan2Array = (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Mixed sh a -> Mixed sh a -> Mixed sh a
forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftNumElt2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 ((Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> (SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a)
-> SNat (Rank sh)
-> Array (Rank sh) a
-> Array (Rank sh) a
-> Array (Rank sh) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNat (Rank sh)
-> Array (Rank sh) a -> Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat). SNat n -> Array n a -> Array n a -> Array n a
forall a (n :: Nat).
FloatElt a =>
SNat n -> Array n a -> Array n a -> Array n a
floatEltAtan2)
class Elt a where
mshape :: Mixed sh a -> IShX sh
mindex :: Mixed sh a -> IIxX sh -> a
mindexPartial :: forall sh sh'. Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
mscalar :: a -> Mixed '[] a
mfromListOuter :: forall sh. NonEmpty (Mixed sh a) -> Mixed (Nothing : sh) a
mtoListOuter :: Mixed (n : sh) a -> [Mixed sh a]
mlift :: forall sh1 sh2.
StaticShX sh2
-> (forall sh' b. Storable b => StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a -> Mixed sh2 a
mlift2 :: forall sh1 sh2 sh3.
StaticShX sh3
-> (forall sh' b. Storable b => StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b -> XArray (sh3 ++ sh') b)
-> Mixed sh1 a -> Mixed sh2 a -> Mixed sh3 a
mliftL :: forall sh1 sh2.
StaticShX sh2
-> (forall sh' b. Storable b => StaticShX sh' -> NonEmpty (XArray (sh1 ++ sh') b) -> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 a) -> NonEmpty (Mixed sh2 a)
mcastPartial :: forall sh1 sh2 sh'. Rank sh1 ~ Rank sh2
=> StaticShX sh1 -> StaticShX sh2 -> Proxy sh' -> Mixed (sh1 ++ sh') a -> Mixed (sh2 ++ sh') a
mtranspose :: forall is sh. (IsPermutation is, Rank is <= Rank sh)
=> Perm is -> Mixed sh a -> Mixed (PermutePrefix is sh) a
mconcat :: NonEmpty (Mixed (Nothing : sh) a) -> Mixed (Nothing : sh) a
mrnf :: Mixed sh a -> ()
type ShapeTree a
mshapeTree :: a -> ShapeTree a
mshapeTreeEq :: Proxy a -> ShapeTree a -> ShapeTree a -> Bool
mshapeTreeEmpty :: Proxy a -> ShapeTree a -> Bool
mshowShapeTree :: Proxy a -> ShapeTree a -> String
marrayStrides :: Mixed sh a -> Bag [Int]
mvecsWrite :: IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
mvecsWritePartial :: IShX (sh ++ sh') -> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
mvecsFreeze :: IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
class Elt a => KnownElt a where
memptyArrayUnsafe :: IShX sh -> Mixed sh a
mvecsUnsafeNew :: IShX sh -> a -> ST s (MixedVecs s sh a)
mvecsNewEmpty :: Proxy a -> ST s (MixedVecs s sh a)
instance Storable a => Elt (Primitive a) where
mshape :: forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> IShX sh
mshape (M_Primitive IShX sh
sh XArray sh a
_) = IShX sh
sh
mindex :: forall (sh :: [Maybe Nat]).
Mixed sh (Primitive a) -> IIxX sh -> Primitive a
mindex (M_Primitive IShX sh
_ XArray sh a
a) IIxX sh
i = a -> Primitive a
forall a. a -> Primitive a
Primitive (XArray sh a -> IIxX sh -> a
forall (sh :: [Maybe Nat]) a.
Storable a =>
XArray sh a -> IIxX sh -> a
X.index XArray sh a
a IIxX sh
i)
mindexPartial :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Mixed (sh ++ sh') (Primitive a)
-> IIxX sh -> Mixed sh' (Primitive a)
mindexPartial (M_Primitive IShX (sh ++ sh')
sh XArray (sh ++ sh') a
a) IIxX sh
i = IShX sh' -> XArray sh' a -> Mixed sh' (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (IIxX sh -> IShX (sh ++ sh') -> IShX sh'
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i j.
IxX sh j -> ShX (sh ++ sh') i -> ShX sh' i
shxDropIx IIxX sh
i IShX (sh ++ sh')
sh) (XArray (sh ++ sh') a -> IIxX sh -> XArray sh' a
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Storable a =>
XArray (sh ++ sh') a -> IIxX sh -> XArray sh' a
X.indexPartial XArray (sh ++ sh') a
a IIxX sh
i)
mscalar :: Primitive a -> Mixed '[] (Primitive a)
mscalar (Primitive a
x) = IShX '[] -> XArray '[] a -> Mixed '[] (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX '[]
forall (sh :: [Maybe Nat]) i. (sh ~ '[]) => ShX sh i
ZSX (a -> XArray '[] a
forall a. Storable a => a -> XArray '[] a
X.scalar a
x)
mfromListOuter :: forall (sh :: [Maybe Nat]).
NonEmpty (Mixed sh (Primitive a))
-> Mixed ('Nothing : sh) (Primitive a)
mfromListOuter l :: NonEmpty (Mixed sh (Primitive a))
l@(Mixed sh (Primitive a)
arr1 :| [Mixed sh (Primitive a)]
_) =
let sh :: ShX ('Nothing : sh) Int
sh = Int -> SMayNat Int SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown (NonEmpty (Mixed sh (Primitive a)) -> Int
forall a. NonEmpty a -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length NonEmpty (Mixed sh (Primitive a))
l) SMayNat Int SNat 'Nothing -> ShX sh Int -> ShX ('Nothing : sh) Int
forall {sh1 :: [Maybe Nat]} {i} (n :: Maybe Nat)
(sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat i SNat n -> ShX sh i -> ShX sh1 i
:$% Mixed sh (Primitive a) -> ShX sh Int
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh (Primitive a)
arr1
in ShX ('Nothing : sh) Int
-> XArray ('Nothing : sh) a -> Mixed ('Nothing : sh) (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive ShX ('Nothing : sh) Int
sh (StaticShX ('Nothing : sh)
-> [XArray sh a] -> XArray ('Nothing : sh) a
forall (n :: Maybe Nat) (sh :: [Maybe Nat]) a.
Storable a =>
StaticShX (n : sh) -> [XArray sh a] -> XArray (n : sh) a
X.fromListOuter (ShX ('Nothing : sh) Int -> StaticShX ('Nothing : sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX ('Nothing : sh) Int
sh) ((Mixed sh (Primitive a) -> XArray sh a)
-> [Mixed sh (Primitive a)] -> [XArray sh a]
forall a b. (a -> b) -> [a] -> [b]
map (\(M_Primitive ShX sh Int
_ XArray sh a
a) -> XArray sh a
a) (NonEmpty (Mixed sh (Primitive a)) -> [Mixed sh (Primitive a)]
forall a. NonEmpty a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList NonEmpty (Mixed sh (Primitive a))
l)))
mtoListOuter :: forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
Mixed (n : sh) (Primitive a) -> [Mixed sh (Primitive a)]
mtoListOuter (M_Primitive IShX (n : sh)
sh XArray (n : sh) a
arr) = (XArray sh a -> Mixed sh (Primitive a))
-> [XArray sh a] -> [Mixed sh (Primitive a)]
forall a b. (a -> b) -> [a] -> [b]
map (IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (IShX (n : sh) -> IShX sh
forall (n :: Maybe Nat) (sh :: [Maybe Nat]) i.
ShX (n : sh) i -> ShX sh i
shxTail IShX (n : sh)
sh)) (XArray (n : sh) a -> [XArray sh a]
forall a (n :: Maybe Nat) (sh :: [Maybe Nat]).
Storable a =>
XArray (n : sh) a -> [XArray sh a]
X.toListOuter XArray (n : sh) a
arr)
mlift :: forall sh1 sh2.
StaticShX sh2
-> (StaticShX '[] -> XArray (sh1 ++ '[]) a -> XArray (sh2 ++ '[]) a)
-> Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive a)
mlift :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (StaticShX '[]
-> XArray (sh1 ++ '[]) a -> XArray (sh2 ++ '[]) a)
-> Mixed sh1 (Primitive a)
-> Mixed sh2 (Primitive a)
mlift StaticShX sh2
ssh2 StaticShX '[] -> XArray (sh1 ++ '[]) a -> XArray (sh2 ++ '[]) a
f (M_Primitive IShX sh1
_ XArray sh1 a
a)
| (sh1 ++ '[]) :~: sh1
Refl <- forall (l :: [Maybe Nat]). (l ++ '[]) :~: l
forall {a} (l :: [a]). (l ++ '[]) :~: l
lemAppNil @sh1
, (sh2 ++ '[]) :~: sh2
Refl <- forall (l :: [Maybe Nat]). (l ++ '[]) :~: l
forall {a} (l :: [a]). (l ++ '[]) :~: l
lemAppNil @sh2
, let result :: XArray (sh2 ++ '[]) a
result = StaticShX '[] -> XArray (sh1 ++ '[]) a -> XArray (sh2 ++ '[]) a
f StaticShX '[]
forall (sh :: [Maybe Nat]). (sh ~ '[]) => StaticShX sh
ZKX XArray sh1 a
XArray (sh1 ++ '[]) a
a
= IShX sh2 -> XArray sh2 a -> Mixed sh2 (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (StaticShX sh2 -> XArray sh2 a -> IShX sh2
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> IShX sh
X.shape StaticShX sh2
ssh2 XArray sh2 a
XArray (sh2 ++ '[]) a
result) XArray sh2 a
XArray (sh2 ++ '[]) a
result
mlift2 :: forall sh1 sh2 sh3.
StaticShX sh3
-> (StaticShX '[] -> XArray (sh1 ++ '[]) a -> XArray (sh2 ++ '[]) a -> XArray (sh3 ++ '[]) a)
-> Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive a) -> Mixed sh3 (Primitive a)
mlift2 :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
StaticShX sh3
-> (StaticShX '[]
-> XArray (sh1 ++ '[]) a
-> XArray (sh2 ++ '[]) a
-> XArray (sh3 ++ '[]) a)
-> Mixed sh1 (Primitive a)
-> Mixed sh2 (Primitive a)
-> Mixed sh3 (Primitive a)
mlift2 StaticShX sh3
ssh3 StaticShX '[]
-> XArray (sh1 ++ '[]) a
-> XArray (sh2 ++ '[]) a
-> XArray (sh3 ++ '[]) a
f (M_Primitive IShX sh1
_ XArray sh1 a
a) (M_Primitive IShX sh2
_ XArray sh2 a
b)
| (sh1 ++ '[]) :~: sh1
Refl <- forall (l :: [Maybe Nat]). (l ++ '[]) :~: l
forall {a} (l :: [a]). (l ++ '[]) :~: l
lemAppNil @sh1
, (sh2 ++ '[]) :~: sh2
Refl <- forall (l :: [Maybe Nat]). (l ++ '[]) :~: l
forall {a} (l :: [a]). (l ++ '[]) :~: l
lemAppNil @sh2
, (sh3 ++ '[]) :~: sh3
Refl <- forall (l :: [Maybe Nat]). (l ++ '[]) :~: l
forall {a} (l :: [a]). (l ++ '[]) :~: l
lemAppNil @sh3
, let result :: XArray (sh3 ++ '[]) a
result = StaticShX '[]
-> XArray (sh1 ++ '[]) a
-> XArray (sh2 ++ '[]) a
-> XArray (sh3 ++ '[]) a
f StaticShX '[]
forall (sh :: [Maybe Nat]). (sh ~ '[]) => StaticShX sh
ZKX XArray sh1 a
XArray (sh1 ++ '[]) a
a XArray sh2 a
XArray (sh2 ++ '[]) a
b
= IShX sh3 -> XArray sh3 a -> Mixed sh3 (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (StaticShX sh3 -> XArray sh3 a -> IShX sh3
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> IShX sh
X.shape StaticShX sh3
ssh3 XArray sh3 a
XArray (sh3 ++ '[]) a
result) XArray sh3 a
XArray (sh3 ++ '[]) a
result
mliftL :: forall sh1 sh2.
StaticShX sh2
-> (forall sh' b. Storable b => StaticShX sh' -> NonEmpty (XArray (sh1 ++ sh') b) -> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 (Primitive a)) -> NonEmpty (Mixed sh2 (Primitive a))
mliftL :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 (Primitive a))
-> NonEmpty (Mixed sh2 (Primitive a))
mliftL StaticShX sh2
ssh2 forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b)
f NonEmpty (Mixed sh1 (Primitive a))
l
| (sh1 ++ '[]) :~: sh1
Refl <- forall (l :: [Maybe Nat]). (l ++ '[]) :~: l
forall {a} (l :: [a]). (l ++ '[]) :~: l
lemAppNil @sh1
, (sh2 ++ '[]) :~: sh2
Refl <- forall (l :: [Maybe Nat]). (l ++ '[]) :~: l
forall {a} (l :: [a]). (l ++ '[]) :~: l
lemAppNil @sh2
= (XArray sh2 a -> Mixed sh2 (Primitive a))
-> NonEmpty (XArray sh2 a) -> NonEmpty (Mixed sh2 (Primitive a))
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\XArray sh2 a
arr -> IShX sh2 -> XArray sh2 a -> Mixed sh2 (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (StaticShX sh2 -> XArray sh2 a -> IShX sh2
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> IShX sh
X.shape StaticShX sh2
ssh2 XArray sh2 a
arr) XArray sh2 a
arr) (NonEmpty (XArray sh2 a) -> NonEmpty (Mixed sh2 (Primitive a)))
-> NonEmpty (XArray sh2 a) -> NonEmpty (Mixed sh2 (Primitive a))
forall a b. (a -> b) -> a -> b
$
StaticShX '[]
-> NonEmpty (XArray (sh1 ++ '[]) a)
-> NonEmpty (XArray (sh2 ++ '[]) a)
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b)
f StaticShX '[]
forall (sh :: [Maybe Nat]). (sh ~ '[]) => StaticShX sh
ZKX ((Mixed sh1 (Primitive a) -> XArray sh1 a)
-> NonEmpty (Mixed sh1 (Primitive a)) -> NonEmpty (XArray sh1 a)
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(M_Primitive IShX sh1
_ XArray sh1 a
arr) -> XArray sh1 a
arr) NonEmpty (Mixed sh1 (Primitive a))
l)
mcastPartial :: forall sh1 sh2 sh'. Rank sh1 ~ Rank sh2
=> StaticShX sh1 -> StaticShX sh2 -> Proxy sh' -> Mixed (sh1 ++ sh') (Primitive a) -> Mixed (sh2 ++ sh') (Primitive a)
mcastPartial :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') (Primitive a)
-> Mixed (sh2 ++ sh') (Primitive a)
mcastPartial StaticShX sh1
ssh1 StaticShX sh2
ssh2 Proxy sh'
_ (M_Primitive IShX (sh1 ++ sh')
sh1' XArray (sh1 ++ sh') a
arr) =
let (ShX sh1 Int
sh1, ShX sh' Int
sh') = Proxy sh'
-> StaticShX sh1 -> IShX (sh1 ++ sh') -> (ShX sh1 Int, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') StaticShX sh1
ssh1 IShX (sh1 ++ sh')
sh1'
sh2 :: IShX sh2
sh2 = StaticShX sh2 -> ShX sh1 Int -> IShX sh2
forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]).
StaticShX sh' -> IShX sh -> IShX sh'
shxCast' StaticShX sh2
ssh2 ShX sh1 Int
sh1
in IShX (sh2 ++ sh')
-> XArray (sh2 ++ sh') a -> Mixed (sh2 ++ sh') (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (IShX sh2 -> ShX sh' Int -> IShX (sh2 ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend IShX sh2
sh2 ShX sh' Int
sh') (StaticShX sh1
-> IShX sh2
-> StaticShX sh'
-> XArray (sh1 ++ sh') a
-> XArray (sh2 ++ sh') a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]) a.
(Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> IShX sh2
-> StaticShX sh'
-> XArray (sh1 ++ sh') a
-> XArray (sh2 ++ sh') a
X.cast StaticShX sh1
ssh1 IShX sh2
sh2 (ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh' Int
sh') XArray (sh1 ++ sh') a
arr)
mtranspose :: forall (is :: [Nat]) (sh :: [Maybe Nat]).
(IsPermutation is, Rank is <= Rank sh) =>
Perm is
-> Mixed sh (Primitive a)
-> Mixed (PermutePrefix is sh) (Primitive a)
mtranspose Perm is
perm (M_Primitive IShX sh
sh XArray sh a
arr) =
IShX (Permute is (TakeLen is sh) ++ DropLen is sh)
-> XArray (Permute is (TakeLen is sh) ++ DropLen is sh) a
-> Mixed
(Permute is (TakeLen is sh) ++ DropLen is sh) (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (Perm is
-> IShX sh -> IShX (Permute is (TakeLen is sh) ++ DropLen is sh)
forall (is :: [Nat]) (sh :: [Maybe Nat]).
Perm is -> IShX sh -> IShX (PermutePrefix is sh)
shxPermutePrefix Perm is
perm IShX sh
sh)
(StaticShX sh
-> Perm is
-> XArray sh a
-> XArray (Permute is (TakeLen is sh) ++ DropLen is sh) a
forall (is :: [Nat]) (sh :: [Maybe Nat]) a.
(IsPermutation is, Rank is <= Rank sh) =>
StaticShX sh
-> Perm is -> XArray sh a -> XArray (PermutePrefix is sh) a
X.transpose (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
sh) Perm is
perm XArray sh a
arr)
mconcat :: forall sh. NonEmpty (Mixed (Nothing : sh) (Primitive a)) -> Mixed (Nothing : sh) (Primitive a)
mconcat :: forall (sh :: [Maybe Nat]).
NonEmpty (Mixed ('Nothing : sh) (Primitive a))
-> Mixed ('Nothing : sh) (Primitive a)
mconcat l :: NonEmpty (Mixed ('Nothing : sh) (Primitive a))
l@(M_Primitive (SMayNat Int SNat n
_ :$% ShX sh Int
sh) XArray ('Nothing : sh) a
_ :| [Mixed ('Nothing : sh) (Primitive a)]
_) =
let result :: XArray ('Nothing : sh) a
result = StaticShX sh
-> NonEmpty (XArray ('Nothing : sh) a) -> XArray ('Nothing : sh) a
forall a (sh :: [Maybe Nat]).
Storable a =>
StaticShX sh
-> NonEmpty (XArray ('Nothing : sh) a) -> XArray ('Nothing : sh) a
X.concat (ShX sh Int -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh Int
sh) ((Mixed ('Nothing : sh) (Primitive a) -> XArray ('Nothing : sh) a)
-> NonEmpty (Mixed ('Nothing : sh) (Primitive a))
-> NonEmpty (XArray ('Nothing : sh) a)
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(M_Primitive IShX ('Nothing : sh)
_ XArray ('Nothing : sh) a
arr) -> XArray ('Nothing : sh) a
arr) NonEmpty (Mixed ('Nothing : sh) (Primitive a))
NonEmpty (Mixed ('Nothing : sh) (Primitive a))
l)
in ShX ('Nothing : sh) Int
-> XArray ('Nothing : sh) a -> Mixed ('Nothing : sh) (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (StaticShX ('Nothing : sh)
-> XArray ('Nothing : sh) a -> ShX ('Nothing : sh) Int
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> IShX sh
X.shape (() -> SMayNat () SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown () SMayNat () SNat 'Nothing
-> StaticShX sh -> StaticShX ('Nothing : sh)
forall {sh1 :: [Maybe Nat]} (n :: Maybe Nat) (sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat () SNat n -> StaticShX sh -> StaticShX sh1
:!% ShX sh Int -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh Int
sh) XArray ('Nothing : sh) a
XArray ('Nothing : sh) a
result) XArray ('Nothing : sh) a
XArray ('Nothing : sh) a
result
mrnf :: forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> ()
mrnf (M_Primitive IShX sh
sh XArray sh a
a) = IShX sh -> ()
forall a. NFData a => a -> ()
rnf IShX sh
sh () -> () -> ()
forall a b. a -> b -> b
`seq` XArray sh a -> ()
forall a. NFData a => a -> ()
rnf XArray sh a
a
type ShapeTree (Primitive a) = ()
mshapeTree :: Primitive a -> ShapeTree (Primitive a)
mshapeTree Primitive a
_ = ()
mshapeTreeEq :: Proxy (Primitive a)
-> ShapeTree (Primitive a) -> ShapeTree (Primitive a) -> Bool
mshapeTreeEq Proxy (Primitive a)
_ () () = Bool
True
mshapeTreeEmpty :: Proxy (Primitive a) -> ShapeTree (Primitive a) -> Bool
mshapeTreeEmpty Proxy (Primitive a)
_ () = Bool
False
mshowShapeTree :: Proxy (Primitive a) -> ShapeTree (Primitive a) -> String
mshowShapeTree Proxy (Primitive a)
_ () = String
"()"
marrayStrides :: forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Bag [Int]
marrayStrides (M_Primitive IShX sh
_ XArray sh a
arr) = [Int] -> Bag [Int]
forall a. a -> Bag a
BOne (XArray sh a -> [Int]
forall (sh :: [Maybe Nat]) a. XArray sh a -> [Int]
X.arrayStrides XArray sh a
arr)
mvecsWrite :: forall (sh :: [Maybe Nat]) s.
IShX sh
-> IIxX sh
-> Primitive a
-> MixedVecs s sh (Primitive a)
-> ST s ()
mvecsWrite IShX sh
sh IIxX sh
i (Primitive a
x) (MV_Primitive MVector s a
v) = MVector (PrimState (ST s)) a -> Int -> a -> ST s ()
forall (m :: * -> *) a.
(PrimMonad m, Storable a) =>
MVector (PrimState m) a -> Int -> a -> m ()
VSM.write MVector s a
MVector (PrimState (ST s)) a
v (IShX sh -> IIxX sh -> Int
forall (sh :: [Maybe Nat]). IShX sh -> IIxX sh -> Int
ixxToLinear IShX sh
sh IIxX sh
i) a
x
mvecsWritePartial
:: forall sh' sh s.
IShX (sh ++ sh') -> IIxX sh -> Mixed sh' (Primitive a) -> MixedVecs s (sh ++ sh') (Primitive a) -> ST s ()
mvecsWritePartial :: forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]) s.
IShX (sh ++ sh')
-> IIxX sh
-> Mixed sh' (Primitive a)
-> MixedVecs s (sh ++ sh') (Primitive a)
-> ST s ()
mvecsWritePartial IShX (sh ++ sh')
sh IIxX sh
i (M_Primitive IShX sh'
sh' XArray sh' a
arr) (MV_Primitive MVector s a
v) = do
let arrsh :: IShX sh'
arrsh = StaticShX sh' -> XArray sh' a -> IShX sh'
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> IShX sh
X.shape (IShX sh' -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh'
sh') XArray sh' a
arr
offset :: Int
offset = IShX (sh ++ sh') -> IIxX (sh ++ sh') -> Int
forall (sh :: [Maybe Nat]). IShX sh -> IIxX sh -> Int
ixxToLinear IShX (sh ++ sh')
sh (IIxX sh -> IxX sh' Int -> IIxX (sh ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
IxX sh i -> IxX sh' i -> IxX (sh ++ sh') i
ixxAppend IIxX sh
i (IShX sh' -> IxX sh' Int
forall (sh :: [Maybe Nat]). IShX sh -> IIxX sh
ixxZero' IShX sh'
arrsh))
MVector (PrimState (ST s)) a -> Vector a -> ST s ()
forall a (m :: * -> *).
(Storable a, PrimMonad m) =>
MVector (PrimState m) a -> Vector a -> m ()
VS.copy (Int -> Int -> MVector s a -> MVector s a
forall a s. Storable a => Int -> Int -> MVector s a -> MVector s a
VSM.slice Int
offset (IShX sh' -> Int
forall (sh :: [Maybe Nat]). IShX sh -> Int
shxSize IShX sh'
arrsh) MVector s a
v) (XArray sh' a -> Vector a
forall a (sh :: [Maybe Nat]). Storable a => XArray sh a -> Vector a
X.toVector XArray sh' a
arr)
mvecsFreeze :: forall (sh :: [Maybe Nat]) s.
IShX sh
-> MixedVecs s sh (Primitive a) -> ST s (Mixed sh (Primitive a))
mvecsFreeze IShX sh
sh (MV_Primitive MVector s a
v) = IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (XArray sh a -> Mixed sh (Primitive a))
-> (Vector a -> XArray sh a) -> Vector a -> Mixed sh (Primitive a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IShX sh -> Vector a -> XArray sh a
forall (sh :: [Maybe Nat]) a.
Storable a =>
IShX sh -> Vector a -> XArray sh a
X.fromVector IShX sh
sh (Vector a -> Mixed sh (Primitive a))
-> ST s (Vector a) -> ST s (Mixed sh (Primitive a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> MVector (PrimState (ST s)) a -> ST s (Vector a)
forall a (m :: * -> *).
(Storable a, PrimMonad m) =>
MVector (PrimState m) a -> m (Vector a)
VS.freeze MVector s a
MVector (PrimState (ST s)) a
v
deriving via Primitive Bool instance Elt Bool
deriving via Primitive Int instance Elt Int
deriving via Primitive Int64 instance Elt Int64
deriving via Primitive Int32 instance Elt Int32
deriving via Primitive CInt instance Elt CInt
deriving via Primitive Double instance Elt Double
deriving via Primitive Float instance Elt Float
deriving via Primitive () instance Elt ()
instance Storable a => KnownElt (Primitive a) where
memptyArrayUnsafe :: forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh (Primitive a)
memptyArrayUnsafe IShX sh
sh = IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (IShX sh -> XArray sh a
forall (sh :: [Maybe Nat]) a. Storable a => IShX sh -> XArray sh a
X.empty IShX sh
sh)
mvecsUnsafeNew :: forall (sh :: [Maybe Nat]) s.
IShX sh -> Primitive a -> ST s (MixedVecs s sh (Primitive a))
mvecsUnsafeNew IShX sh
sh Primitive a
_ = MVector s a -> MixedVecs s sh (Primitive a)
forall s (sh :: [Maybe Nat]) a.
MVector s a -> MixedVecs s sh (Primitive a)
MV_Primitive (MVector s a -> MixedVecs s sh (Primitive a))
-> ST s (MVector s a) -> ST s (MixedVecs s sh (Primitive a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> ST s (MVector (PrimState (ST s)) a)
forall (m :: * -> *) a.
(PrimMonad m, Storable a) =>
Int -> m (MVector (PrimState m) a)
VSM.unsafeNew (IShX sh -> Int
forall (sh :: [Maybe Nat]). IShX sh -> Int
shxSize IShX sh
sh)
mvecsNewEmpty :: forall s (sh :: [Maybe Nat]).
Proxy (Primitive a) -> ST s (MixedVecs s sh (Primitive a))
mvecsNewEmpty Proxy (Primitive a)
_ = MVector s a -> MixedVecs s sh (Primitive a)
forall s (sh :: [Maybe Nat]) a.
MVector s a -> MixedVecs s sh (Primitive a)
MV_Primitive (MVector s a -> MixedVecs s sh (Primitive a))
-> ST s (MVector s a) -> ST s (MixedVecs s sh (Primitive a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> ST s (MVector (PrimState (ST s)) a)
forall (m :: * -> *) a.
(PrimMonad m, Storable a) =>
Int -> m (MVector (PrimState m) a)
VSM.unsafeNew Int
0
deriving via Primitive Bool instance KnownElt Bool
deriving via Primitive Int instance KnownElt Int
deriving via Primitive Int64 instance KnownElt Int64
deriving via Primitive Int32 instance KnownElt Int32
deriving via Primitive CInt instance KnownElt CInt
deriving via Primitive Double instance KnownElt Double
deriving via Primitive Float instance KnownElt Float
deriving via Primitive () instance KnownElt ()
instance (Elt a, Elt b) => Elt (a, b) where
mshape :: forall (sh :: [Maybe Nat]). Mixed sh (a, b) -> IShX sh
mshape (M_Tup2 Mixed sh a
a Mixed sh b
_) = Mixed sh a -> IShX sh
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh a
a
mindex :: forall (sh :: [Maybe Nat]). Mixed sh (a, b) -> IIxX sh -> (a, b)
mindex (M_Tup2 Mixed sh a
a Mixed sh b
b) IIxX sh
i = (Mixed sh a -> IIxX sh -> a
forall (sh :: [Maybe Nat]). Mixed sh a -> IIxX sh -> a
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IIxX sh -> a
mindex Mixed sh a
a IIxX sh
i, Mixed sh b -> IIxX sh -> b
forall (sh :: [Maybe Nat]). Mixed sh b -> IIxX sh -> b
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IIxX sh -> a
mindex Mixed sh b
b IIxX sh
i)
mindexPartial :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Mixed (sh ++ sh') (a, b) -> IIxX sh -> Mixed sh' (a, b)
mindexPartial (M_Tup2 Mixed (sh ++ sh') a
a Mixed (sh ++ sh') b
b) IIxX sh
i = Mixed sh' a -> Mixed sh' b -> Mixed sh' (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Elt a =>
Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
mindexPartial Mixed (sh ++ sh') a
a IIxX sh
i) (Mixed (sh ++ sh') b -> IIxX sh -> Mixed sh' b
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Mixed (sh ++ sh') b -> IIxX sh -> Mixed sh' b
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Elt a =>
Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
mindexPartial Mixed (sh ++ sh') b
b IIxX sh
i)
mscalar :: (a, b) -> Mixed '[] (a, b)
mscalar (a
x, b
y) = Mixed '[] a -> Mixed '[] b -> Mixed '[] (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (a -> Mixed '[] a
forall a. Elt a => a -> Mixed '[] a
mscalar a
x) (b -> Mixed '[] b
forall a. Elt a => a -> Mixed '[] a
mscalar b
y)
mfromListOuter :: forall (sh :: [Maybe Nat]).
NonEmpty (Mixed sh (a, b)) -> Mixed ('Nothing : sh) (a, b)
mfromListOuter NonEmpty (Mixed sh (a, b))
l =
Mixed ('Nothing : sh) a
-> Mixed ('Nothing : sh) b -> Mixed ('Nothing : sh) (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
forall (sh :: [Maybe Nat]).
NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
forall a (sh :: [Maybe Nat]).
Elt a =>
NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
mfromListOuter ((\(M_Tup2 Mixed sh a
x Mixed sh b
_) -> Mixed sh a
x) (Mixed sh (a, b) -> Mixed sh a)
-> NonEmpty (Mixed sh (a, b)) -> NonEmpty (Mixed sh a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty (Mixed sh (a, b))
l))
(NonEmpty (Mixed sh b) -> Mixed ('Nothing : sh) b
forall (sh :: [Maybe Nat]).
NonEmpty (Mixed sh b) -> Mixed ('Nothing : sh) b
forall a (sh :: [Maybe Nat]).
Elt a =>
NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
mfromListOuter ((\(M_Tup2 Mixed sh a
_ Mixed sh b
y) -> Mixed sh b
y) (Mixed sh (a, b) -> Mixed sh b)
-> NonEmpty (Mixed sh (a, b)) -> NonEmpty (Mixed sh b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty (Mixed sh (a, b))
l))
mtoListOuter :: forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
Mixed (n : sh) (a, b) -> [Mixed sh (a, b)]
mtoListOuter (M_Tup2 Mixed (n : sh) a
a Mixed (n : sh) b
b) = (Mixed sh a -> Mixed sh b -> Mixed sh (a, b))
-> [Mixed sh a] -> [Mixed sh b] -> [Mixed sh (a, b)]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (Mixed (n : sh) a -> [Mixed sh a]
forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
Mixed (n : sh) a -> [Mixed sh a]
forall a (n :: Maybe Nat) (sh :: [Maybe Nat]).
Elt a =>
Mixed (n : sh) a -> [Mixed sh a]
mtoListOuter Mixed (n : sh) a
a) (Mixed (n : sh) b -> [Mixed sh b]
forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
Mixed (n : sh) b -> [Mixed sh b]
forall a (n :: Maybe Nat) (sh :: [Maybe Nat]).
Elt a =>
Mixed (n : sh) a -> [Mixed sh a]
mtoListOuter Mixed (n : sh) b
b)
mlift :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 (a, b)
-> Mixed sh2 (a, b)
mlift StaticShX sh2
ssh2 forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b
f (M_Tup2 Mixed sh1 a
a Mixed sh1 b
b) = Mixed sh2 a -> Mixed sh2 b -> Mixed sh2 (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift StaticShX sh2
ssh2 StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b
f Mixed sh1 a
a) (StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 b
-> Mixed sh2 b
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 b
-> Mixed sh2 b
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift StaticShX sh2
ssh2 StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b
f Mixed sh1 b
b)
mlift2 :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 (a, b)
-> Mixed sh2 (a, b)
-> Mixed sh3 (a, b)
mlift2 StaticShX sh3
ssh3 forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b
f (M_Tup2 Mixed sh1 a
a Mixed sh1 b
b) (M_Tup2 Mixed sh2 a
x Mixed sh2 b
y) = Mixed sh3 a -> Mixed sh3 b -> Mixed sh3 (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
Elt a =>
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
mlift2 StaticShX sh3
ssh3 StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b
f Mixed sh1 a
a Mixed sh2 a
x) (StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 b
-> Mixed sh2 b
-> Mixed sh3 b
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 b
-> Mixed sh2 b
-> Mixed sh3 b
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
Elt a =>
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
mlift2 StaticShX sh3
ssh3 StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b
f Mixed sh1 b
b Mixed sh2 b
y)
mliftL :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 (a, b))
-> NonEmpty (Mixed sh2 (a, b))
mliftL StaticShX sh2
ssh2 forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b)
f =
let unzipT2l :: [Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
unzipT2l [] = ([], [])
unzipT2l (M_Tup2 Mixed sh a
a Mixed sh b
b : [Mixed sh (a, b)]
l) = let ([Mixed sh a]
l1, [Mixed sh b]
l2) = [Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
unzipT2l [Mixed sh (a, b)]
l in (Mixed sh a
a Mixed sh a -> [Mixed sh a] -> [Mixed sh a]
forall a. a -> [a] -> [a]
: [Mixed sh a]
l1, Mixed sh b
b Mixed sh b -> [Mixed sh b] -> [Mixed sh b]
forall a. a -> [a] -> [a]
: [Mixed sh b]
l2)
unzipT2 :: NonEmpty (Mixed sh (a, b))
-> (NonEmpty (Mixed sh a), NonEmpty (Mixed sh b))
unzipT2 (M_Tup2 Mixed sh a
a Mixed sh b
b :| [Mixed sh (a, b)]
l) = let ([Mixed sh a]
l1, [Mixed sh b]
l2) = [Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
forall {sh :: [Maybe Nat]} {a} {b}.
[Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
unzipT2l [Mixed sh (a, b)]
l in (Mixed sh a
a Mixed sh a -> [Mixed sh a] -> NonEmpty (Mixed sh a)
forall a. a -> [a] -> NonEmpty a
:| [Mixed sh a]
l1, Mixed sh b
b Mixed sh b -> [Mixed sh b] -> NonEmpty (Mixed sh b)
forall a. a -> [a] -> NonEmpty a
:| [Mixed sh b]
l2)
in (NonEmpty (Mixed sh2 a)
-> NonEmpty (Mixed sh2 b) -> NonEmpty (Mixed sh2 (a, b)))
-> (NonEmpty (Mixed sh2 a), NonEmpty (Mixed sh2 b))
-> NonEmpty (Mixed sh2 (a, b))
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((Mixed sh2 a -> Mixed sh2 b -> Mixed sh2 (a, b))
-> NonEmpty (Mixed sh2 a)
-> NonEmpty (Mixed sh2 b)
-> NonEmpty (Mixed sh2 (a, b))
forall a b c.
(a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c
NE.zipWith Mixed sh2 a -> Mixed sh2 b -> Mixed sh2 (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2) ((NonEmpty (Mixed sh2 a), NonEmpty (Mixed sh2 b))
-> NonEmpty (Mixed sh2 (a, b)))
-> (NonEmpty (Mixed sh1 (a, b))
-> (NonEmpty (Mixed sh2 a), NonEmpty (Mixed sh2 b)))
-> NonEmpty (Mixed sh1 (a, b))
-> NonEmpty (Mixed sh2 (a, b))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (NonEmpty (Mixed sh1 a) -> NonEmpty (Mixed sh2 a))
-> (NonEmpty (Mixed sh1 b) -> NonEmpty (Mixed sh2 b))
-> (NonEmpty (Mixed sh1 a), NonEmpty (Mixed sh1 b))
-> (NonEmpty (Mixed sh2 a), NonEmpty (Mixed sh2 b))
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap (StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 a)
-> NonEmpty (Mixed sh2 a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 a)
-> NonEmpty (Mixed sh2 a)
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 a)
-> NonEmpty (Mixed sh2 a)
mliftL StaticShX sh2
ssh2 StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b)
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b)
f) (StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 b)
-> NonEmpty (Mixed sh2 b)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 b)
-> NonEmpty (Mixed sh2 b)
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 a)
-> NonEmpty (Mixed sh2 a)
mliftL StaticShX sh2
ssh2 StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b)
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b)
f) ((NonEmpty (Mixed sh1 a), NonEmpty (Mixed sh1 b))
-> (NonEmpty (Mixed sh2 a), NonEmpty (Mixed sh2 b)))
-> (NonEmpty (Mixed sh1 (a, b))
-> (NonEmpty (Mixed sh1 a), NonEmpty (Mixed sh1 b)))
-> NonEmpty (Mixed sh1 (a, b))
-> (NonEmpty (Mixed sh2 a), NonEmpty (Mixed sh2 b))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NonEmpty (Mixed sh1 (a, b))
-> (NonEmpty (Mixed sh1 a), NonEmpty (Mixed sh1 b))
forall {sh :: [Maybe Nat]} {a} {b}.
NonEmpty (Mixed sh (a, b))
-> (NonEmpty (Mixed sh a), NonEmpty (Mixed sh b))
unzipT2
mcastPartial :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') (a, b)
-> Mixed (sh2 ++ sh') (a, b)
mcastPartial StaticShX sh1
ssh1 StaticShX sh2
sh2 Proxy sh'
psh' (M_Tup2 Mixed (sh1 ++ sh') a
a Mixed (sh1 ++ sh') b
b) =
Mixed (sh2 ++ sh') a
-> Mixed (sh2 ++ sh') b -> Mixed (sh2 ++ sh') (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Elt a, Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
mcastPartial StaticShX sh1
ssh1 StaticShX sh2
sh2 Proxy sh'
psh' Mixed (sh1 ++ sh') a
a) (StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') b
-> Mixed (sh2 ++ sh') b
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') b
-> Mixed (sh2 ++ sh') b
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Elt a, Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
mcastPartial StaticShX sh1
ssh1 StaticShX sh2
sh2 Proxy sh'
psh' Mixed (sh1 ++ sh') b
b)
mtranspose :: forall (is :: [Nat]) (sh :: [Maybe Nat]).
(IsPermutation is, Rank is <= Rank sh) =>
Perm is -> Mixed sh (a, b) -> Mixed (PermutePrefix is sh) (a, b)
mtranspose Perm is
perm (M_Tup2 Mixed sh a
a Mixed sh b
b) = Mixed (Permute is (TakeLen is sh) ++ DropLen is sh) a
-> Mixed (Permute is (TakeLen is sh) ++ DropLen is sh) b
-> Mixed (Permute is (TakeLen is sh) ++ DropLen is sh) (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (Perm is
-> Mixed sh a
-> Mixed (Permute is (TakeLen is sh) ++ DropLen is sh) a
forall (is :: [Nat]) (sh :: [Maybe Nat]).
(IsPermutation is, Rank is <= Rank sh) =>
Perm is -> Mixed sh a -> Mixed (PermutePrefix is sh) a
forall a (is :: [Nat]) (sh :: [Maybe Nat]).
(Elt a, IsPermutation is, Rank is <= Rank sh) =>
Perm is -> Mixed sh a -> Mixed (PermutePrefix is sh) a
mtranspose Perm is
perm Mixed sh a
a) (Perm is
-> Mixed sh b
-> Mixed (Permute is (TakeLen is sh) ++ DropLen is sh) b
forall (is :: [Nat]) (sh :: [Maybe Nat]).
(IsPermutation is, Rank is <= Rank sh) =>
Perm is -> Mixed sh b -> Mixed (PermutePrefix is sh) b
forall a (is :: [Nat]) (sh :: [Maybe Nat]).
(Elt a, IsPermutation is, Rank is <= Rank sh) =>
Perm is -> Mixed sh a -> Mixed (PermutePrefix is sh) a
mtranspose Perm is
perm Mixed sh b
b)
mconcat :: forall (sh :: [Maybe Nat]).
NonEmpty (Mixed ('Nothing : sh) (a, b))
-> Mixed ('Nothing : sh) (a, b)
mconcat =
let unzipT2l :: [Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
unzipT2l [] = ([], [])
unzipT2l (M_Tup2 Mixed sh a
a Mixed sh b
b : [Mixed sh (a, b)]
l) = let ([Mixed sh a]
l1, [Mixed sh b]
l2) = [Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
unzipT2l [Mixed sh (a, b)]
l in (Mixed sh a
a Mixed sh a -> [Mixed sh a] -> [Mixed sh a]
forall a. a -> [a] -> [a]
: [Mixed sh a]
l1, Mixed sh b
b Mixed sh b -> [Mixed sh b] -> [Mixed sh b]
forall a. a -> [a] -> [a]
: [Mixed sh b]
l2)
unzipT2 :: NonEmpty (Mixed sh (a, b))
-> (NonEmpty (Mixed sh a), NonEmpty (Mixed sh b))
unzipT2 (M_Tup2 Mixed sh a
a Mixed sh b
b :| [Mixed sh (a, b)]
l) = let ([Mixed sh a]
l1, [Mixed sh b]
l2) = [Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
forall {sh :: [Maybe Nat]} {a} {b}.
[Mixed sh (a, b)] -> ([Mixed sh a], [Mixed sh b])
unzipT2l [Mixed sh (a, b)]
l in (Mixed sh a
a Mixed sh a -> [Mixed sh a] -> NonEmpty (Mixed sh a)
forall a. a -> [a] -> NonEmpty a
:| [Mixed sh a]
l1, Mixed sh b
b Mixed sh b -> [Mixed sh b] -> NonEmpty (Mixed sh b)
forall a. a -> [a] -> NonEmpty a
:| [Mixed sh b]
l2)
in (Mixed ('Nothing : sh) a
-> Mixed ('Nothing : sh) b -> Mixed ('Nothing : sh) (a, b))
-> (Mixed ('Nothing : sh) a, Mixed ('Nothing : sh) b)
-> Mixed ('Nothing : sh) (a, b)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Mixed ('Nothing : sh) a
-> Mixed ('Nothing : sh) b -> Mixed ('Nothing : sh) (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 ((Mixed ('Nothing : sh) a, Mixed ('Nothing : sh) b)
-> Mixed ('Nothing : sh) (a, b))
-> (NonEmpty (Mixed ('Nothing : sh) (a, b))
-> (Mixed ('Nothing : sh) a, Mixed ('Nothing : sh) b))
-> NonEmpty (Mixed ('Nothing : sh) (a, b))
-> Mixed ('Nothing : sh) (a, b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (NonEmpty (Mixed ('Nothing : sh) a) -> Mixed ('Nothing : sh) a)
-> (NonEmpty (Mixed ('Nothing : sh) b) -> Mixed ('Nothing : sh) b)
-> (NonEmpty (Mixed ('Nothing : sh) a),
NonEmpty (Mixed ('Nothing : sh) b))
-> (Mixed ('Nothing : sh) a, Mixed ('Nothing : sh) b)
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap NonEmpty (Mixed ('Nothing : sh) a) -> Mixed ('Nothing : sh) a
forall (sh :: [Maybe Nat]).
NonEmpty (Mixed ('Nothing : sh) a) -> Mixed ('Nothing : sh) a
forall a (sh :: [Maybe Nat]).
Elt a =>
NonEmpty (Mixed ('Nothing : sh) a) -> Mixed ('Nothing : sh) a
mconcat NonEmpty (Mixed ('Nothing : sh) b) -> Mixed ('Nothing : sh) b
forall (sh :: [Maybe Nat]).
NonEmpty (Mixed ('Nothing : sh) b) -> Mixed ('Nothing : sh) b
forall a (sh :: [Maybe Nat]).
Elt a =>
NonEmpty (Mixed ('Nothing : sh) a) -> Mixed ('Nothing : sh) a
mconcat ((NonEmpty (Mixed ('Nothing : sh) a),
NonEmpty (Mixed ('Nothing : sh) b))
-> (Mixed ('Nothing : sh) a, Mixed ('Nothing : sh) b))
-> (NonEmpty (Mixed ('Nothing : sh) (a, b))
-> (NonEmpty (Mixed ('Nothing : sh) a),
NonEmpty (Mixed ('Nothing : sh) b)))
-> NonEmpty (Mixed ('Nothing : sh) (a, b))
-> (Mixed ('Nothing : sh) a, Mixed ('Nothing : sh) b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NonEmpty (Mixed ('Nothing : sh) (a, b))
-> (NonEmpty (Mixed ('Nothing : sh) a),
NonEmpty (Mixed ('Nothing : sh) b))
forall {sh :: [Maybe Nat]} {a} {b}.
NonEmpty (Mixed sh (a, b))
-> (NonEmpty (Mixed sh a), NonEmpty (Mixed sh b))
unzipT2
mrnf :: forall (sh :: [Maybe Nat]). Mixed sh (a, b) -> ()
mrnf (M_Tup2 Mixed sh a
a Mixed sh b
b) = Mixed sh a -> ()
forall (sh :: [Maybe Nat]). Mixed sh a -> ()
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> ()
mrnf Mixed sh a
a () -> () -> ()
forall a b. a -> b -> b
`seq` Mixed sh b -> ()
forall (sh :: [Maybe Nat]). Mixed sh b -> ()
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> ()
mrnf Mixed sh b
b
type ShapeTree (a, b) = (ShapeTree a, ShapeTree b)
mshapeTree :: (a, b) -> ShapeTree (a, b)
mshapeTree (a
x, b
y) = (a -> ShapeTree a
forall a. Elt a => a -> ShapeTree a
mshapeTree a
x, b -> ShapeTree b
forall a. Elt a => a -> ShapeTree a
mshapeTree b
y)
mshapeTreeEq :: Proxy (a, b) -> ShapeTree (a, b) -> ShapeTree (a, b) -> Bool
mshapeTreeEq Proxy (a, b)
_ (ShapeTree a
t1, ShapeTree b
t2) (ShapeTree a
t1', ShapeTree b
t2') = Proxy a -> ShapeTree a -> ShapeTree a -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> ShapeTree a -> Bool
mshapeTreeEq (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ShapeTree a
t1 ShapeTree a
t1' Bool -> Bool -> Bool
&& Proxy b -> ShapeTree b -> ShapeTree b -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> ShapeTree a -> Bool
mshapeTreeEq (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b) ShapeTree b
t2 ShapeTree b
t2'
mshapeTreeEmpty :: Proxy (a, b) -> ShapeTree (a, b) -> Bool
mshapeTreeEmpty Proxy (a, b)
_ (ShapeTree a
t1, ShapeTree b
t2) = Proxy a -> ShapeTree a -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> Bool
mshapeTreeEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ShapeTree a
t1 Bool -> Bool -> Bool
&& Proxy b -> ShapeTree b -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> Bool
mshapeTreeEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b) ShapeTree b
t2
mshowShapeTree :: Proxy (a, b) -> ShapeTree (a, b) -> String
mshowShapeTree Proxy (a, b)
_ (ShapeTree a
t1, ShapeTree b
t2) = String
"(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proxy a -> ShapeTree a -> String
forall a. Elt a => Proxy a -> ShapeTree a -> String
mshowShapeTree (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ShapeTree a
t1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proxy b -> ShapeTree b -> String
forall a. Elt a => Proxy a -> ShapeTree a -> String
mshowShapeTree (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b) ShapeTree b
t2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
marrayStrides :: forall (sh :: [Maybe Nat]). Mixed sh (a, b) -> Bag [Int]
marrayStrides (M_Tup2 Mixed sh a
a Mixed sh b
b) = Mixed sh a -> Bag [Int]
forall (sh :: [Maybe Nat]). Mixed sh a -> Bag [Int]
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> Bag [Int]
marrayStrides Mixed sh a
a Bag [Int] -> Bag [Int] -> Bag [Int]
forall a. Semigroup a => a -> a -> a
<> Mixed sh b -> Bag [Int]
forall (sh :: [Maybe Nat]). Mixed sh b -> Bag [Int]
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> Bag [Int]
marrayStrides Mixed sh b
b
mvecsWrite :: forall (sh :: [Maybe Nat]) s.
IShX sh -> IIxX sh -> (a, b) -> MixedVecs s sh (a, b) -> ST s ()
mvecsWrite IShX sh
sh IIxX sh
i (a
x, b
y) (MV_Tup2 MixedVecs s sh a
a MixedVecs s sh b
b) = do
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
forall (sh :: [Maybe Nat]) s.
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
mvecsWrite IShX sh
sh IIxX sh
i a
x MixedVecs s sh a
a
IShX sh -> IIxX sh -> b -> MixedVecs s sh b -> ST s ()
forall (sh :: [Maybe Nat]) s.
IShX sh -> IIxX sh -> b -> MixedVecs s sh b -> ST s ()
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
mvecsWrite IShX sh
sh IIxX sh
i b
y MixedVecs s sh b
b
mvecsWritePartial :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
IShX (sh ++ sh')
-> IIxX sh
-> Mixed sh' (a, b)
-> MixedVecs s (sh ++ sh') (a, b)
-> ST s ()
mvecsWritePartial IShX (sh ++ sh')
sh IIxX sh
i (M_Tup2 Mixed sh' a
x Mixed sh' b
y) (MV_Tup2 MixedVecs s (sh ++ sh') a
a MixedVecs s (sh ++ sh') b
b) = do
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
Elt a =>
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
mvecsWritePartial IShX (sh ++ sh')
sh IIxX sh
i Mixed sh' a
x MixedVecs s (sh ++ sh') a
a
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' b -> MixedVecs s (sh ++ sh') b -> ST s ()
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' b -> MixedVecs s (sh ++ sh') b -> ST s ()
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
Elt a =>
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
mvecsWritePartial IShX (sh ++ sh')
sh IIxX sh
i Mixed sh' b
y MixedVecs s (sh ++ sh') b
b
mvecsFreeze :: forall (sh :: [Maybe Nat]) s.
IShX sh -> MixedVecs s sh (a, b) -> ST s (Mixed sh (a, b))
mvecsFreeze IShX sh
sh (MV_Tup2 MixedVecs s sh a
a MixedVecs s sh b
b) = Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (Mixed sh a -> Mixed sh b -> Mixed sh (a, b))
-> ST s (Mixed sh a) -> ST s (Mixed sh b -> Mixed sh (a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
forall (sh :: [Maybe Nat]) s.
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
mvecsFreeze IShX sh
sh MixedVecs s sh a
a ST s (Mixed sh b -> Mixed sh (a, b))
-> ST s (Mixed sh b) -> ST s (Mixed sh (a, b))
forall a b. ST s (a -> b) -> ST s a -> ST s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IShX sh -> MixedVecs s sh b -> ST s (Mixed sh b)
forall (sh :: [Maybe Nat]) s.
IShX sh -> MixedVecs s sh b -> ST s (Mixed sh b)
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
mvecsFreeze IShX sh
sh MixedVecs s sh b
b
instance (KnownElt a, KnownElt b) => KnownElt (a, b) where
memptyArrayUnsafe :: forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh (a, b)
memptyArrayUnsafe IShX sh
sh = Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 (IShX sh -> Mixed sh a
forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh a
forall a (sh :: [Maybe Nat]). KnownElt a => IShX sh -> Mixed sh a
memptyArrayUnsafe IShX sh
sh) (IShX sh -> Mixed sh b
forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh b
forall a (sh :: [Maybe Nat]). KnownElt a => IShX sh -> Mixed sh a
memptyArrayUnsafe IShX sh
sh)
mvecsUnsafeNew :: forall (sh :: [Maybe Nat]) s.
IShX sh -> (a, b) -> ST s (MixedVecs s sh (a, b))
mvecsUnsafeNew IShX sh
sh (a
x, b
y) = MixedVecs s sh a -> MixedVecs s sh b -> MixedVecs s sh (a, b)
forall s (sh :: [Maybe Nat]) a b.
MixedVecs s sh a -> MixedVecs s sh b -> MixedVecs s sh (a, b)
MV_Tup2 (MixedVecs s sh a -> MixedVecs s sh b -> MixedVecs s sh (a, b))
-> ST s (MixedVecs s sh a)
-> ST s (MixedVecs s sh b -> MixedVecs s sh (a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IShX sh -> a -> ST s (MixedVecs s sh a)
forall (sh :: [Maybe Nat]) s.
IShX sh -> a -> ST s (MixedVecs s sh a)
forall a (sh :: [Maybe Nat]) s.
KnownElt a =>
IShX sh -> a -> ST s (MixedVecs s sh a)
mvecsUnsafeNew IShX sh
sh a
x ST s (MixedVecs s sh b -> MixedVecs s sh (a, b))
-> ST s (MixedVecs s sh b) -> ST s (MixedVecs s sh (a, b))
forall a b. ST s (a -> b) -> ST s a -> ST s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IShX sh -> b -> ST s (MixedVecs s sh b)
forall (sh :: [Maybe Nat]) s.
IShX sh -> b -> ST s (MixedVecs s sh b)
forall a (sh :: [Maybe Nat]) s.
KnownElt a =>
IShX sh -> a -> ST s (MixedVecs s sh a)
mvecsUnsafeNew IShX sh
sh b
y
mvecsNewEmpty :: forall s (sh :: [Maybe Nat]).
Proxy (a, b) -> ST s (MixedVecs s sh (a, b))
mvecsNewEmpty Proxy (a, b)
_ = MixedVecs s sh a -> MixedVecs s sh b -> MixedVecs s sh (a, b)
forall s (sh :: [Maybe Nat]) a b.
MixedVecs s sh a -> MixedVecs s sh b -> MixedVecs s sh (a, b)
MV_Tup2 (MixedVecs s sh a -> MixedVecs s sh b -> MixedVecs s sh (a, b))
-> ST s (MixedVecs s sh a)
-> ST s (MixedVecs s sh b -> MixedVecs s sh (a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy a -> ST s (MixedVecs s sh a)
forall a s (sh :: [Maybe Nat]).
KnownElt a =>
Proxy a -> ST s (MixedVecs s sh a)
forall s (sh :: [Maybe Nat]). Proxy a -> ST s (MixedVecs s sh a)
mvecsNewEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ST s (MixedVecs s sh b -> MixedVecs s sh (a, b))
-> ST s (MixedVecs s sh b) -> ST s (MixedVecs s sh (a, b))
forall a b. ST s (a -> b) -> ST s a -> ST s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy b -> ST s (MixedVecs s sh b)
forall a s (sh :: [Maybe Nat]).
KnownElt a =>
Proxy a -> ST s (MixedVecs s sh a)
forall s (sh :: [Maybe Nat]). Proxy b -> ST s (MixedVecs s sh b)
mvecsNewEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @b)
instance Elt a => Elt (Mixed sh' a) where
mshape :: forall sh. Mixed sh (Mixed sh' a) -> IShX sh
mshape :: forall (sh :: [Maybe Nat]). Mixed sh (Mixed sh' a) -> IShX sh
mshape (M_Nest IShX sh
sh Mixed (sh ++ sh') a
arr)
= (IShX sh, ShX sh' Int) -> IShX sh
forall a b. (a, b) -> a
fst (Proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') Int -> (IShX sh, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
sh) (Mixed (sh ++ sh') a -> ShX (sh ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh ++ sh') a
arr))
mindex :: Mixed sh (Mixed sh' a) -> IIxX sh -> Mixed sh' a
mindex :: forall (sh :: [Maybe Nat]).
Mixed sh (Mixed sh' a) -> IIxX sh -> Mixed sh' a
mindex (M_Nest IShX sh
_ Mixed (sh ++ sh') a
arr) = Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Elt a =>
Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
mindexPartial Mixed (sh ++ sh') a
arr
mindexPartial :: forall sh1 sh2.
Mixed (sh1 ++ sh2) (Mixed sh' a) -> IIxX sh1 -> Mixed sh2 (Mixed sh' a)
mindexPartial :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Mixed (sh ++ sh') (Mixed sh' a)
-> IIxX sh -> Mixed sh' (Mixed sh' a)
mindexPartial (M_Nest IShX (sh1 ++ sh2)
sh Mixed ((sh1 ++ sh2) ++ sh') a
arr) IIxX sh1
i
| ((sh1 ++ sh2) ++ sh') :~: (sh1 ++ (sh2 ++ sh'))
Refl <- Proxy sh1
-> Proxy sh2
-> Proxy sh'
-> ((sh1 ++ sh2) ++ sh') :~: (sh1 ++ (sh2 ++ sh'))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh1) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh2) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh')
= IShX sh2 -> Mixed (sh2 ++ sh') a -> Mixed sh2 (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest (IIxX sh1 -> IShX (sh1 ++ sh2) -> IShX sh2
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i j.
IxX sh j -> ShX (sh ++ sh') i -> ShX sh' i
shxDropIx IIxX sh1
i IShX (sh1 ++ sh2)
sh) (forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Elt a =>
Mixed (sh ++ sh') a -> IIxX sh -> Mixed sh' a
mindexPartial @a @sh1 @(sh2 ++ sh') Mixed (sh1 ++ (sh2 ++ sh')) a
Mixed ((sh1 ++ sh2) ++ sh') a
arr IIxX sh1
i)
mscalar :: Mixed sh' a -> Mixed '[] (Mixed sh' a)
mscalar = IShX '[] -> Mixed ('[] ++ sh') a -> Mixed '[] (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest IShX '[]
forall (sh :: [Maybe Nat]) i. (sh ~ '[]) => ShX sh i
ZSX
mfromListOuter :: forall sh. NonEmpty (Mixed sh (Mixed sh' a)) -> Mixed (Nothing : sh) (Mixed sh' a)
mfromListOuter :: forall (sh :: [Maybe Nat]).
NonEmpty (Mixed sh (Mixed sh' a))
-> Mixed ('Nothing : sh) (Mixed sh' a)
mfromListOuter l :: NonEmpty (Mixed sh (Mixed sh' a))
l@(Mixed sh (Mixed sh' a)
arr :| [Mixed sh (Mixed sh' a)]
_) =
IShX ('Nothing : sh)
-> Mixed (('Nothing : sh) ++ sh') a
-> Mixed ('Nothing : sh) (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest (Int -> SMayNat Int SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown (NonEmpty (Mixed sh (Mixed sh' a)) -> Int
forall a. NonEmpty a -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length NonEmpty (Mixed sh (Mixed sh' a))
l) SMayNat Int SNat 'Nothing -> ShX sh Int -> IShX ('Nothing : sh)
forall {sh1 :: [Maybe Nat]} {i} (n :: Maybe Nat)
(sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat i SNat n -> ShX sh i -> ShX sh1 i
:$% Mixed sh (Mixed sh' a) -> ShX sh Int
forall (sh :: [Maybe Nat]). Mixed sh (Mixed sh' a) -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh (Mixed sh' a)
arr)
(NonEmpty (Mixed (sh ++ sh') a) -> Mixed ('Nothing : (sh ++ sh')) a
forall (sh :: [Maybe Nat]).
NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
forall a (sh :: [Maybe Nat]).
Elt a =>
NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
mfromListOuter ((\(M_Nest ShX sh Int
_ Mixed (sh ++ sh') a
a) -> Mixed (sh ++ sh') a
a) (Mixed sh (Mixed sh' a) -> Mixed (sh ++ sh') a)
-> NonEmpty (Mixed sh (Mixed sh' a))
-> NonEmpty (Mixed (sh ++ sh') a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty (Mixed sh (Mixed sh' a))
l))
mtoListOuter :: forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
Mixed (n : sh) (Mixed sh' a) -> [Mixed sh (Mixed sh' a)]
mtoListOuter (M_Nest IShX (n : sh)
sh Mixed ((n : sh) ++ sh') a
arr) = (Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a))
-> [Mixed (sh ++ sh') a] -> [Mixed sh (Mixed sh' a)]
forall a b. (a -> b) -> [a] -> [b]
map (IShX sh -> Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest (IShX (n : sh) -> IShX sh
forall (n :: Maybe Nat) (sh :: [Maybe Nat]) i.
ShX (n : sh) i -> ShX sh i
shxTail IShX (n : sh)
sh)) (Mixed (n : (sh ++ sh')) a -> [Mixed (sh ++ sh') a]
forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
Mixed (n : sh) a -> [Mixed sh a]
forall a (n :: Maybe Nat) (sh :: [Maybe Nat]).
Elt a =>
Mixed (n : sh) a -> [Mixed sh a]
mtoListOuter Mixed (n : (sh ++ sh')) a
Mixed ((n : sh) ++ sh') a
arr)
mlift :: forall sh1 sh2.
StaticShX sh2
-> (forall shT b. Storable b => StaticShX shT -> XArray (sh1 ++ shT) b -> XArray (sh2 ++ shT) b)
-> Mixed sh1 (Mixed sh' a) -> Mixed sh2 (Mixed sh' a)
mlift :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 (Mixed sh' a)
-> Mixed sh2 (Mixed sh' a)
mlift StaticShX sh2
ssh2 forall (shT :: [Maybe Nat]) b.
Storable b =>
StaticShX shT -> XArray (sh1 ++ shT) b -> XArray (sh2 ++ shT) b
f (M_Nest IShX sh1
sh1 Mixed (sh1 ++ sh') a
arr) =
let result :: Mixed (sh2 ++ sh') a
result = StaticShX (sh2 ++ sh')
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b
-> XArray ((sh2 ++ sh') ++ sh') b)
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift (StaticShX sh2 -> StaticShX sh' -> StaticShX (sh2 ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh2
ssh2 StaticShX sh'
ssh') StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b -> XArray ((sh2 ++ sh') ++ sh') b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b -> XArray ((sh2 ++ sh') ++ sh') b
f' Mixed (sh1 ++ sh') a
arr
(ShX sh2 Int
sh2, ShX sh' Int
_) = Proxy sh'
-> StaticShX sh2
-> ShX (sh2 ++ sh') Int
-> (ShX sh2 Int, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') StaticShX sh2
ssh2 (Mixed (sh2 ++ sh') a -> ShX (sh2 ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh2 ++ sh') a
result)
in ShX sh2 Int -> Mixed (sh2 ++ sh') a -> Mixed sh2 (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest ShX sh2 Int
sh2 Mixed (sh2 ++ sh') a
result
where
ssh' :: StaticShX sh'
ssh' = ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ((IShX sh1, ShX sh' Int) -> ShX sh' Int
forall a b. (a, b) -> b
snd (Proxy sh'
-> StaticShX sh1 -> ShX (sh1 ++ sh') Int -> (IShX sh1, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (IShX sh1 -> StaticShX sh1
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh1
sh1) (Mixed (sh1 ++ sh') a -> ShX (sh1 ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh1 ++ sh') a
arr)))
f' :: forall shT b. Storable b => StaticShX shT -> XArray ((sh1 ++ sh') ++ shT) b -> XArray ((sh2 ++ sh') ++ shT) b
f' :: forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b -> XArray ((sh2 ++ sh') ++ sh') b
f' StaticShX shT
sshT
| ((sh1 ++ sh') ++ shT) :~: (sh1 ++ (sh' ++ shT))
Refl <- Proxy sh1
-> Proxy sh'
-> Proxy shT
-> ((sh1 ++ sh') ++ shT) :~: (sh1 ++ (sh' ++ shT))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh1) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT)
, ((sh2 ++ sh') ++ shT) :~: (sh2 ++ (sh' ++ shT))
Refl <- Proxy sh2
-> Proxy sh'
-> Proxy shT
-> ((sh2 ++ sh') ++ shT) :~: (sh2 ++ (sh' ++ shT))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh2) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT)
= StaticShX (sh' ++ shT)
-> XArray (sh1 ++ (sh' ++ shT)) b -> XArray (sh2 ++ (sh' ++ shT)) b
forall (shT :: [Maybe Nat]) b.
Storable b =>
StaticShX shT -> XArray (sh1 ++ shT) b -> XArray (sh2 ++ shT) b
f (StaticShX sh' -> StaticShX shT -> StaticShX (sh' ++ shT)
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh'
ssh' StaticShX shT
sshT)
mlift2 :: forall sh1 sh2 sh3.
StaticShX sh3
-> (forall shT b. Storable b => StaticShX shT -> XArray (sh1 ++ shT) b -> XArray (sh2 ++ shT) b -> XArray (sh3 ++ shT) b)
-> Mixed sh1 (Mixed sh' a) -> Mixed sh2 (Mixed sh' a) -> Mixed sh3 (Mixed sh' a)
mlift2 :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 (Mixed sh' a)
-> Mixed sh2 (Mixed sh' a)
-> Mixed sh3 (Mixed sh' a)
mlift2 StaticShX sh3
ssh3 forall (shT :: [Maybe Nat]) b.
Storable b =>
StaticShX shT
-> XArray (sh1 ++ shT) b
-> XArray (sh2 ++ shT) b
-> XArray (sh3 ++ shT) b
f (M_Nest IShX sh1
sh1 Mixed (sh1 ++ sh') a
arr1) (M_Nest IShX sh2
_ Mixed (sh2 ++ sh') a
arr2) =
let result :: Mixed (sh3 ++ sh') a
result = StaticShX (sh3 ++ sh')
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b
-> XArray ((sh2 ++ sh') ++ sh') b
-> XArray ((sh3 ++ sh') ++ sh') b)
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
-> Mixed (sh3 ++ sh') a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
Elt a =>
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
mlift2 (StaticShX sh3 -> StaticShX sh' -> StaticShX (sh3 ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh3
ssh3 StaticShX sh'
ssh') StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b
-> XArray ((sh2 ++ sh') ++ sh') b
-> XArray ((sh3 ++ sh') ++ sh') b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b
-> XArray ((sh2 ++ sh') ++ sh') b
-> XArray ((sh3 ++ sh') ++ sh') b
f' Mixed (sh1 ++ sh') a
arr1 Mixed (sh2 ++ sh') a
arr2
(ShX sh3 Int
sh3, ShX sh' Int
_) = Proxy sh'
-> StaticShX sh3
-> ShX (sh3 ++ sh') Int
-> (ShX sh3 Int, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') StaticShX sh3
ssh3 (Mixed (sh3 ++ sh') a -> ShX (sh3 ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh3 ++ sh') a
result)
in ShX sh3 Int -> Mixed (sh3 ++ sh') a -> Mixed sh3 (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest ShX sh3 Int
sh3 Mixed (sh3 ++ sh') a
result
where
ssh' :: StaticShX sh'
ssh' = ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ((IShX sh1, ShX sh' Int) -> ShX sh' Int
forall a b. (a, b) -> b
snd (Proxy sh'
-> StaticShX sh1 -> ShX (sh1 ++ sh') Int -> (IShX sh1, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (IShX sh1 -> StaticShX sh1
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh1
sh1) (Mixed (sh1 ++ sh') a -> ShX (sh1 ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh1 ++ sh') a
arr1)))
f' :: forall shT b. Storable b => StaticShX shT -> XArray ((sh1 ++ sh') ++ shT) b -> XArray ((sh2 ++ sh') ++ shT) b -> XArray ((sh3 ++ sh') ++ shT) b
f' :: forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((sh1 ++ sh') ++ sh') b
-> XArray ((sh2 ++ sh') ++ sh') b
-> XArray ((sh3 ++ sh') ++ sh') b
f' StaticShX shT
sshT
| ((sh1 ++ sh') ++ shT) :~: (sh1 ++ (sh' ++ shT))
Refl <- Proxy sh1
-> Proxy sh'
-> Proxy shT
-> ((sh1 ++ sh') ++ shT) :~: (sh1 ++ (sh' ++ shT))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh1) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT)
, ((sh2 ++ sh') ++ shT) :~: (sh2 ++ (sh' ++ shT))
Refl <- Proxy sh2
-> Proxy sh'
-> Proxy shT
-> ((sh2 ++ sh') ++ shT) :~: (sh2 ++ (sh' ++ shT))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh2) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT)
, ((sh3 ++ sh') ++ shT) :~: (sh3 ++ (sh' ++ shT))
Refl <- Proxy sh3
-> Proxy sh'
-> Proxy shT
-> ((sh3 ++ sh') ++ shT) :~: (sh3 ++ (sh' ++ shT))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh3) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT)
= StaticShX (sh' ++ shT)
-> XArray (sh1 ++ (sh' ++ shT)) b
-> XArray (sh2 ++ (sh' ++ shT)) b
-> XArray (sh3 ++ (sh' ++ shT)) b
forall (shT :: [Maybe Nat]) b.
Storable b =>
StaticShX shT
-> XArray (sh1 ++ shT) b
-> XArray (sh2 ++ shT) b
-> XArray (sh3 ++ shT) b
f (StaticShX sh' -> StaticShX shT -> StaticShX (sh' ++ shT)
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh'
ssh' StaticShX shT
sshT)
mliftL :: forall sh1 sh2.
StaticShX sh2
-> (forall shT b. Storable b => StaticShX shT -> NonEmpty (XArray (sh1 ++ shT) b) -> NonEmpty (XArray (sh2 ++ shT) b))
-> NonEmpty (Mixed sh1 (Mixed sh' a)) -> NonEmpty (Mixed sh2 (Mixed sh' a))
mliftL :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 (Mixed sh' a))
-> NonEmpty (Mixed sh2 (Mixed sh' a))
mliftL StaticShX sh2
ssh2 forall (shT :: [Maybe Nat]) b.
Storable b =>
StaticShX shT
-> NonEmpty (XArray (sh1 ++ shT) b)
-> NonEmpty (XArray (sh2 ++ shT) b)
f l :: NonEmpty (Mixed sh1 (Mixed sh' a))
l@(M_Nest IShX sh1
sh1 Mixed (sh1 ++ sh') a
arr1 :| [Mixed sh1 (Mixed sh' a)]
_) =
let result :: NonEmpty (Mixed (sh2 ++ sh') a)
result = StaticShX (sh2 ++ sh')
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray ((sh1 ++ sh') ++ sh') b)
-> NonEmpty (XArray ((sh2 ++ sh') ++ sh') b))
-> NonEmpty (Mixed (sh1 ++ sh') a)
-> NonEmpty (Mixed (sh2 ++ sh') a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 a)
-> NonEmpty (Mixed sh2 a)
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray (sh1 ++ sh') b)
-> NonEmpty (XArray (sh2 ++ sh') b))
-> NonEmpty (Mixed sh1 a)
-> NonEmpty (Mixed sh2 a)
mliftL (StaticShX sh2 -> StaticShX sh' -> StaticShX (sh2 ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh2
ssh2 StaticShX sh'
ssh') StaticShX sh'
-> NonEmpty (XArray ((sh1 ++ sh') ++ sh') b)
-> NonEmpty (XArray ((sh2 ++ sh') ++ sh') b)
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray ((sh1 ++ sh') ++ sh') b)
-> NonEmpty (XArray ((sh2 ++ sh') ++ sh') b)
f' ((Mixed sh1 (Mixed sh' a) -> Mixed (sh1 ++ sh') a)
-> NonEmpty (Mixed sh1 (Mixed sh' a))
-> NonEmpty (Mixed (sh1 ++ sh') a)
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(M_Nest IShX sh1
_ Mixed (sh1 ++ sh') a
arr) -> Mixed (sh1 ++ sh') a
arr) NonEmpty (Mixed sh1 (Mixed sh' a))
l)
(ShX sh2 Int
sh2, ShX sh' Int
_) = Proxy sh'
-> StaticShX sh2
-> ShX (sh2 ++ sh') Int
-> (ShX sh2 Int, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') StaticShX sh2
ssh2 (Mixed (sh2 ++ sh') a -> ShX (sh2 ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape (NonEmpty (Mixed (sh2 ++ sh') a) -> Mixed (sh2 ++ sh') a
forall a. NonEmpty a -> a
NE.head NonEmpty (Mixed (sh2 ++ sh') a)
result))
in (Mixed (sh2 ++ sh') a -> Mixed sh2 (Mixed sh' a))
-> NonEmpty (Mixed (sh2 ++ sh') a)
-> NonEmpty (Mixed sh2 (Mixed sh' a))
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (ShX sh2 Int -> Mixed (sh2 ++ sh') a -> Mixed sh2 (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest ShX sh2 Int
sh2) NonEmpty (Mixed (sh2 ++ sh') a)
result
where
ssh' :: StaticShX sh'
ssh' = ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ((IShX sh1, ShX sh' Int) -> ShX sh' Int
forall a b. (a, b) -> b
snd (Proxy sh'
-> StaticShX sh1 -> ShX (sh1 ++ sh') Int -> (IShX sh1, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (IShX sh1 -> StaticShX sh1
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh1
sh1) (Mixed (sh1 ++ sh') a -> ShX (sh1 ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh1 ++ sh') a
arr1)))
f' :: forall shT b. Storable b => StaticShX shT -> NonEmpty (XArray ((sh1 ++ sh') ++ shT) b) -> NonEmpty (XArray ((sh2 ++ sh') ++ shT) b)
f' :: forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> NonEmpty (XArray ((sh1 ++ sh') ++ sh') b)
-> NonEmpty (XArray ((sh2 ++ sh') ++ sh') b)
f' StaticShX shT
sshT
| ((sh1 ++ sh') ++ shT) :~: (sh1 ++ (sh' ++ shT))
Refl <- Proxy sh1
-> Proxy sh'
-> Proxy shT
-> ((sh1 ++ sh') ++ shT) :~: (sh1 ++ (sh' ++ shT))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh1) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT)
, ((sh2 ++ sh') ++ shT) :~: (sh2 ++ (sh' ++ shT))
Refl <- Proxy sh2
-> Proxy sh'
-> Proxy shT
-> ((sh2 ++ sh') ++ shT) :~: (sh2 ++ (sh' ++ shT))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh2) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT)
= StaticShX (sh' ++ shT)
-> NonEmpty (XArray (sh1 ++ (sh' ++ shT)) b)
-> NonEmpty (XArray (sh2 ++ (sh' ++ shT)) b)
forall (shT :: [Maybe Nat]) b.
Storable b =>
StaticShX shT
-> NonEmpty (XArray (sh1 ++ shT) b)
-> NonEmpty (XArray (sh2 ++ shT) b)
f (StaticShX sh' -> StaticShX shT -> StaticShX (sh' ++ shT)
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh'
ssh' StaticShX shT
sshT)
mcastPartial :: forall sh1 sh2 shT. Rank sh1 ~ Rank sh2
=> StaticShX sh1 -> StaticShX sh2 -> Proxy shT -> Mixed (sh1 ++ shT) (Mixed sh' a) -> Mixed (sh2 ++ shT) (Mixed sh' a)
mcastPartial :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') (Mixed sh' a)
-> Mixed (sh2 ++ sh') (Mixed sh' a)
mcastPartial StaticShX sh1
ssh1 StaticShX sh2
ssh2 Proxy shT
_ (M_Nest IShX (sh1 ++ shT)
sh1T Mixed ((sh1 ++ shT) ++ sh') a
arr)
| ((sh1 ++ shT) ++ sh') :~: (sh1 ++ (shT ++ sh'))
Refl <- Proxy sh1
-> Proxy shT
-> Proxy sh'
-> ((sh1 ++ shT) ++ sh') :~: (sh1 ++ (shT ++ sh'))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh1) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh')
, ((sh2 ++ shT) ++ sh') :~: (sh2 ++ (shT ++ sh'))
Refl <- Proxy sh2
-> Proxy shT
-> Proxy sh'
-> ((sh2 ++ shT) ++ sh') :~: (sh2 ++ (shT ++ sh'))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh2) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh')
= let (ShX sh1 Int
sh1, ShX shT Int
shT) = Proxy shT
-> StaticShX sh1 -> IShX (sh1 ++ shT) -> (ShX sh1 Int, ShX shT Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT) StaticShX sh1
ssh1 IShX (sh1 ++ shT)
sh1T
sh2 :: IShX sh2
sh2 = StaticShX sh2 -> ShX sh1 Int -> IShX sh2
forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]).
StaticShX sh' -> IShX sh -> IShX sh'
shxCast' StaticShX sh2
ssh2 ShX sh1 Int
sh1
in IShX (sh2 ++ shT)
-> Mixed ((sh2 ++ shT) ++ sh') a
-> Mixed (sh2 ++ shT) (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest (IShX sh2 -> ShX shT Int -> IShX (sh2 ++ shT)
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend IShX sh2
sh2 ShX shT Int
shT) (StaticShX sh1
-> StaticShX sh2
-> Proxy (shT ++ sh')
-> Mixed (sh1 ++ (shT ++ sh')) a
-> Mixed (sh2 ++ (shT ++ sh')) a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]).
(Elt a, Rank sh1 ~ Rank sh2) =>
StaticShX sh1
-> StaticShX sh2
-> Proxy sh'
-> Mixed (sh1 ++ sh') a
-> Mixed (sh2 ++ sh') a
mcastPartial StaticShX sh1
ssh1 StaticShX sh2
ssh2 (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @(shT ++ sh')) Mixed (sh1 ++ (shT ++ sh')) a
Mixed ((sh1 ++ shT) ++ sh') a
arr)
mtranspose :: forall is sh. (IsPermutation is, Rank is <= Rank sh)
=> Perm is -> Mixed sh (Mixed sh' a)
-> Mixed (PermutePrefix is sh) (Mixed sh' a)
mtranspose :: forall (is :: [Nat]) (sh :: [Maybe Nat]).
(IsPermutation is, Rank is <= Rank sh) =>
Perm is
-> Mixed sh (Mixed sh' a)
-> Mixed (PermutePrefix is sh) (Mixed sh' a)
mtranspose Perm is
perm (M_Nest IShX sh
sh Mixed (sh ++ sh') a
arr)
| let sh' :: ShX sh' Int
sh' = forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX (sh ++ sh') i -> ShX sh' i
shxDropSh @sh @sh' IShX sh
sh (Mixed (sh ++ sh') a -> ShX (sh ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh ++ sh') a
arr)
, Rank (sh ++ sh') :~: (Rank sh + Rank sh')
Refl <- StaticShX sh
-> StaticShX sh' -> Rank (sh ++ sh') :~: (Rank sh + Rank sh')
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh1
-> StaticShX sh2 -> Rank (sh1 ++ sh2) :~: (Rank sh1 + Rank sh2)
lemRankApp (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
sh) (ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh' Int
sh')
, (Rank is <=? (Rank sh + Rank sh')) :~: 'True
Refl <- Proxy (Rank is)
-> Proxy (Rank sh)
-> Proxy (Rank sh')
-> (Rank is <=? (Rank sh + Rank sh')) :~: 'True
forall (n :: Nat) (m :: Nat) (k :: Nat).
(n <= m) =>
Proxy n -> Proxy m -> Proxy k -> (n <=? (m + k)) :~: 'True
lemLeqPlus (forall (t :: Nat). Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Rank is)) (forall (t :: Nat). Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Rank sh)) (forall (t :: Nat). Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Rank sh'))
, ((Permute is (TakeLen is (sh ++ sh')) ++ DropLen is sh) ++ sh')
:~: (Permute is (TakeLen is (sh ++ sh')) ++ (DropLen is sh ++ sh'))
Refl <- Proxy (Permute is (TakeLen is (sh ++ sh')))
-> Proxy (DropLen is sh)
-> Proxy sh'
-> ((Permute is (TakeLen is (sh ++ sh')) ++ DropLen is sh) ++ sh')
:~: (Permute is (TakeLen is (sh ++ sh')) ++ (DropLen is sh ++ sh'))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Permute is (TakeLen is (sh ++ sh')))) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @(DropLen is sh)) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh')
, (DropLen is sh ++ sh') :~: DropLen is (sh ++ sh')
Refl <- Proxy is
-> Proxy sh
-> Proxy sh'
-> (DropLen is sh ++ sh') :~: DropLen is (sh ++ sh')
forall {a1} {a} (l1 :: [a1]) (l2 :: [a]) (rest :: [a]).
(Rank l1 <= Rank l2) =>
Proxy l1
-> Proxy l2
-> Proxy rest
-> (DropLen l1 l2 ++ rest) :~: DropLen l1 (l2 ++ rest)
lemDropLenApp (forall (t :: [Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @is) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh')
, TakeLen is sh :~: TakeLen is (sh ++ sh')
Refl <- Proxy is
-> Proxy sh
-> Proxy sh'
-> TakeLen is sh :~: TakeLen is (sh ++ sh')
forall {a1} {a} (l1 :: [a1]) (l2 :: [a]) (rest :: [a]).
(Rank l1 <= Rank l2) =>
Proxy l1
-> Proxy l2
-> Proxy rest
-> TakeLen l1 l2 :~: TakeLen l1 (l2 ++ rest)
lemTakeLenApp (forall (t :: [Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @is) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh')
= IShX (Permute is (TakeLen is sh) ++ DropLen is sh)
-> Mixed ((Permute is (TakeLen is sh) ++ DropLen is sh) ++ sh') a
-> Mixed
(Permute is (TakeLen is sh) ++ DropLen is sh) (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest (Perm is
-> IShX sh -> IShX (Permute is (TakeLen is sh) ++ DropLen is sh)
forall (is :: [Nat]) (sh :: [Maybe Nat]).
Perm is -> IShX sh -> IShX (PermutePrefix is sh)
shxPermutePrefix Perm is
perm IShX sh
sh)
(Perm is
-> Mixed (sh ++ sh') a -> Mixed (PermutePrefix is (sh ++ sh')) a
forall (is :: [Nat]) (sh :: [Maybe Nat]).
(IsPermutation is, Rank is <= Rank sh) =>
Perm is -> Mixed sh a -> Mixed (PermutePrefix is sh) a
forall a (is :: [Nat]) (sh :: [Maybe Nat]).
(Elt a, IsPermutation is, Rank is <= Rank sh) =>
Perm is -> Mixed sh a -> Mixed (PermutePrefix is sh) a
mtranspose Perm is
perm Mixed (sh ++ sh') a
arr)
mconcat :: NonEmpty (Mixed (Nothing : sh) (Mixed sh' a)) -> Mixed (Nothing : sh) (Mixed sh' a)
mconcat :: forall (sh :: [Maybe Nat]).
NonEmpty (Mixed ('Nothing : sh) (Mixed sh' a))
-> Mixed ('Nothing : sh) (Mixed sh' a)
mconcat l :: NonEmpty (Mixed ('Nothing : sh) (Mixed sh' a))
l@(M_Nest IShX ('Nothing : sh)
sh1 Mixed (('Nothing : sh) ++ sh') a
_ :| [Mixed ('Nothing : sh) (Mixed sh' a)]
_) =
let result :: Mixed ('Nothing : (sh ++ sh')) a
result = NonEmpty (Mixed ('Nothing : (sh ++ sh')) a)
-> Mixed ('Nothing : (sh ++ sh')) a
forall (sh :: [Maybe Nat]).
NonEmpty (Mixed ('Nothing : sh) a) -> Mixed ('Nothing : sh) a
forall a (sh :: [Maybe Nat]).
Elt a =>
NonEmpty (Mixed ('Nothing : sh) a) -> Mixed ('Nothing : sh) a
mconcat ((Mixed ('Nothing : sh) (Mixed sh' a)
-> Mixed ('Nothing : (sh ++ sh')) a)
-> NonEmpty (Mixed ('Nothing : sh) (Mixed sh' a))
-> NonEmpty (Mixed ('Nothing : (sh ++ sh')) a)
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(M_Nest IShX ('Nothing : sh)
_ Mixed (('Nothing : sh) ++ sh') a
arr) -> Mixed ('Nothing : (sh ++ sh')) a
Mixed (('Nothing : sh) ++ sh') a
arr) NonEmpty (Mixed ('Nothing : sh) (Mixed sh' a))
l)
in IShX ('Nothing : sh)
-> Mixed (('Nothing : sh) ++ sh') a
-> Mixed ('Nothing : sh) (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest ((IShX ('Nothing : sh), ShX sh' Int) -> IShX ('Nothing : sh)
forall a b. (a, b) -> a
fst (Proxy sh'
-> StaticShX ('Nothing : sh)
-> ShX (('Nothing : sh) ++ sh') Int
-> (IShX ('Nothing : sh), ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (IShX ('Nothing : sh) -> StaticShX ('Nothing : sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX ('Nothing : sh)
sh1) (Mixed ('Nothing : (sh ++ sh')) a -> IShX ('Nothing : (sh ++ sh'))
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed ('Nothing : (sh ++ sh')) a
result))) Mixed ('Nothing : (sh ++ sh')) a
Mixed (('Nothing : sh) ++ sh') a
result
mrnf :: forall (sh :: [Maybe Nat]). Mixed sh (Mixed sh' a) -> ()
mrnf (M_Nest IShX sh
sh Mixed (sh ++ sh') a
arr) = IShX sh -> ()
forall a. NFData a => a -> ()
rnf IShX sh
sh () -> () -> ()
forall a b. a -> b -> b
`seq` Mixed (sh ++ sh') a -> ()
forall (sh :: [Maybe Nat]). Mixed sh a -> ()
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> ()
mrnf Mixed (sh ++ sh') a
arr
type ShapeTree (Mixed sh' a) = (IShX sh', ShapeTree a)
mshapeTree :: Mixed sh' a -> ShapeTree (Mixed sh' a)
mshapeTree :: Mixed sh' a -> ShapeTree (Mixed sh' a)
mshapeTree Mixed sh' a
arr = (Mixed sh' a -> ShX sh' Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh' a
arr, a -> ShapeTree a
forall a. Elt a => a -> ShapeTree a
mshapeTree (Mixed sh' a -> IIxX sh' -> a
forall (sh :: [Maybe Nat]). Mixed sh a -> IIxX sh -> a
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IIxX sh -> a
mindex Mixed sh' a
arr (StaticShX sh' -> IIxX sh'
forall (sh :: [Maybe Nat]). StaticShX sh -> IIxX sh
ixxZero (ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX (Mixed sh' a -> ShX sh' Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh' a
arr)))))
mshapeTreeEq :: Proxy (Mixed sh' a)
-> ShapeTree (Mixed sh' a) -> ShapeTree (Mixed sh' a) -> Bool
mshapeTreeEq Proxy (Mixed sh' a)
_ (ShX sh' Int
sh1, ShapeTree a
t1) (ShX sh' Int
sh2, ShapeTree a
t2) = ShX sh' Int
sh1 ShX sh' Int -> ShX sh' Int -> Bool
forall a. Eq a => a -> a -> Bool
== ShX sh' Int
sh2 Bool -> Bool -> Bool
&& Proxy a -> ShapeTree a -> ShapeTree a -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> ShapeTree a -> Bool
mshapeTreeEq (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ShapeTree a
t1 ShapeTree a
t2
mshapeTreeEmpty :: Proxy (Mixed sh' a) -> ShapeTree (Mixed sh' a) -> Bool
mshapeTreeEmpty Proxy (Mixed sh' a)
_ (ShX sh' Int
sh, ShapeTree a
t) = ShX sh' Int -> Int
forall (sh :: [Maybe Nat]). IShX sh -> Int
shxSize ShX sh' Int
sh Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 Bool -> Bool -> Bool
&& Proxy a -> ShapeTree a -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> Bool
mshapeTreeEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ShapeTree a
t
mshowShapeTree :: Proxy (Mixed sh' a) -> ShapeTree (Mixed sh' a) -> String
mshowShapeTree Proxy (Mixed sh' a)
_ (ShX sh' Int
sh, ShapeTree a
t) = String
"(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShX sh' Int -> String
forall a. Show a => a -> String
show ShX sh' Int
sh String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proxy a -> ShapeTree a -> String
forall a. Elt a => Proxy a -> ShapeTree a -> String
mshowShapeTree (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ShapeTree a
t String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
marrayStrides :: forall (sh :: [Maybe Nat]). Mixed sh (Mixed sh' a) -> Bag [Int]
marrayStrides (M_Nest IShX sh
_ Mixed (sh ++ sh') a
arr) = Mixed (sh ++ sh') a -> Bag [Int]
forall (sh :: [Maybe Nat]). Mixed sh a -> Bag [Int]
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> Bag [Int]
marrayStrides Mixed (sh ++ sh') a
arr
mvecsWrite :: forall (sh :: [Maybe Nat]) s.
IShX sh
-> IIxX sh
-> Mixed sh' a
-> MixedVecs s sh (Mixed sh' a)
-> ST s ()
mvecsWrite IShX sh
sh IIxX sh
idx Mixed sh' a
val (MV_Nest ShX sh' Int
sh' MixedVecs s (sh ++ sh') a
vecs) = IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
Elt a =>
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
mvecsWritePartial (IShX sh -> ShX sh' Int -> IShX (sh ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend IShX sh
sh ShX sh' Int
sh') IIxX sh
idx Mixed sh' a
val MixedVecs s (sh ++ sh') a
vecs
mvecsWritePartial :: forall sh1 sh2 s.
IShX (sh1 ++ sh2) -> IIxX sh1 -> Mixed sh2 (Mixed sh' a)
-> MixedVecs s (sh1 ++ sh2) (Mixed sh' a)
-> ST s ()
mvecsWritePartial :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
IShX (sh ++ sh')
-> IIxX sh
-> Mixed sh' (Mixed sh' a)
-> MixedVecs s (sh ++ sh') (Mixed sh' a)
-> ST s ()
mvecsWritePartial IShX (sh1 ++ sh2)
sh12 IIxX sh1
idx (M_Nest IShX sh2
_ Mixed (sh2 ++ sh') a
arr) (MV_Nest ShX sh' Int
sh' MixedVecs s ((sh1 ++ sh2) ++ sh') a
vecs)
| ((sh1 ++ sh2) ++ sh') :~: (sh1 ++ (sh2 ++ sh'))
Refl <- Proxy sh1
-> Proxy sh2
-> Proxy sh'
-> ((sh1 ++ sh2) ++ sh') :~: (sh1 ++ (sh2 ++ sh'))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh1) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh2) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh')
= IShX (sh1 ++ (sh2 ++ sh'))
-> IIxX sh1
-> Mixed (sh2 ++ sh') a
-> MixedVecs s (sh1 ++ (sh2 ++ sh')) a
-> ST s ()
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
forall a (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) s.
Elt a =>
IShX (sh ++ sh')
-> IIxX sh -> Mixed sh' a -> MixedVecs s (sh ++ sh') a -> ST s ()
mvecsWritePartial (IShX (sh1 ++ sh2) -> ShX sh' Int -> ShX ((sh1 ++ sh2) ++ sh') Int
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend IShX (sh1 ++ sh2)
sh12 ShX sh' Int
sh') IIxX sh1
idx Mixed (sh2 ++ sh') a
arr MixedVecs s (sh1 ++ (sh2 ++ sh')) a
MixedVecs s ((sh1 ++ sh2) ++ sh') a
vecs
mvecsFreeze :: forall (sh :: [Maybe Nat]) s.
IShX sh
-> MixedVecs s sh (Mixed sh' a) -> ST s (Mixed sh (Mixed sh' a))
mvecsFreeze IShX sh
sh (MV_Nest ShX sh' Int
sh' MixedVecs s (sh ++ sh') a
vecs) = IShX sh -> Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest IShX sh
sh (Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a))
-> ST s (Mixed (sh ++ sh') a) -> ST s (Mixed sh (Mixed sh' a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IShX (sh ++ sh')
-> MixedVecs s (sh ++ sh') a -> ST s (Mixed (sh ++ sh') a)
forall (sh :: [Maybe Nat]) s.
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
mvecsFreeze (IShX sh -> ShX sh' Int -> IShX (sh ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend IShX sh
sh ShX sh' Int
sh') MixedVecs s (sh ++ sh') a
vecs
instance (KnownShX sh', KnownElt a) => KnownElt (Mixed sh' a) where
memptyArrayUnsafe :: forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh (Mixed sh' a)
memptyArrayUnsafe IShX sh
sh = IShX sh -> Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest IShX sh
sh (IShX (sh ++ sh') -> Mixed (sh ++ sh') a
forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh a
forall a (sh :: [Maybe Nat]). KnownElt a => IShX sh -> Mixed sh a
memptyArrayUnsafe (IShX sh -> ShX sh' Int -> IShX (sh ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend IShX sh
sh (StaticShX sh' -> ShX sh' Int
forall (sh :: [Maybe Nat]). StaticShX sh -> IShX sh
shxCompleteZeros (forall (sh :: [Maybe Nat]). KnownShX sh => StaticShX sh
knownShX @sh'))))
mvecsUnsafeNew :: forall (sh :: [Maybe Nat]) s.
IShX sh -> Mixed sh' a -> ST s (MixedVecs s sh (Mixed sh' a))
mvecsUnsafeNew IShX sh
sh Mixed sh' a
example
| ShX sh' Int -> Int
forall (sh :: [Maybe Nat]). IShX sh -> Int
shxSize ShX sh' Int
sh' Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 = Proxy (Mixed sh' a) -> ST s (MixedVecs s sh (Mixed sh' a))
forall a s (sh :: [Maybe Nat]).
KnownElt a =>
Proxy a -> ST s (MixedVecs s sh a)
forall s (sh :: [Maybe Nat]).
Proxy (Mixed sh' a) -> ST s (MixedVecs s sh (Mixed sh' a))
mvecsNewEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Mixed sh' a))
| Bool
otherwise = ShX sh' Int
-> MixedVecs s (sh ++ sh') a -> MixedVecs s sh (Mixed sh' a)
forall s (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh2
-> MixedVecs s (sh1 ++ sh2) a -> MixedVecs s sh1 (Mixed sh2 a)
MV_Nest ShX sh' Int
sh' (MixedVecs s (sh ++ sh') a -> MixedVecs s sh (Mixed sh' a))
-> ST s (MixedVecs s (sh ++ sh') a)
-> ST s (MixedVecs s sh (Mixed sh' a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IShX (sh ++ sh') -> a -> ST s (MixedVecs s (sh ++ sh') a)
forall (sh :: [Maybe Nat]) s.
IShX sh -> a -> ST s (MixedVecs s sh a)
forall a (sh :: [Maybe Nat]) s.
KnownElt a =>
IShX sh -> a -> ST s (MixedVecs s sh a)
mvecsUnsafeNew (IShX sh -> ShX sh' Int -> IShX (sh ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend IShX sh
sh ShX sh' Int
sh') (Mixed sh' a -> IIxX sh' -> a
forall (sh :: [Maybe Nat]). Mixed sh a -> IIxX sh -> a
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IIxX sh -> a
mindex Mixed sh' a
example (StaticShX sh' -> IIxX sh'
forall (sh :: [Maybe Nat]). StaticShX sh -> IIxX sh
ixxZero (ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh' Int
sh')))
where
sh' :: ShX sh' Int
sh' = Mixed sh' a -> ShX sh' Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh' a
example
mvecsNewEmpty :: forall s (sh :: [Maybe Nat]).
Proxy (Mixed sh' a) -> ST s (MixedVecs s sh (Mixed sh' a))
mvecsNewEmpty Proxy (Mixed sh' a)
_ = ShX sh' Int
-> MixedVecs s (sh ++ sh') a -> MixedVecs s sh (Mixed sh' a)
forall s (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh2
-> MixedVecs s (sh1 ++ sh2) a -> MixedVecs s sh1 (Mixed sh2 a)
MV_Nest (StaticShX sh' -> ShX sh' Int
forall (sh :: [Maybe Nat]). StaticShX sh -> IShX sh
shxCompleteZeros (forall (sh :: [Maybe Nat]). KnownShX sh => StaticShX sh
knownShX @sh')) (MixedVecs s (sh ++ sh') a -> MixedVecs s sh (Mixed sh' a))
-> ST s (MixedVecs s (sh ++ sh') a)
-> ST s (MixedVecs s sh (Mixed sh' a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy a -> ST s (MixedVecs s (sh ++ sh') a)
forall a s (sh :: [Maybe Nat]).
KnownElt a =>
Proxy a -> ST s (MixedVecs s sh a)
forall s (sh :: [Maybe Nat]). Proxy a -> ST s (MixedVecs s sh a)
mvecsNewEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a)
memptyArray :: KnownElt a => IShX sh -> Mixed (Just 0 : sh) a
memptyArray :: forall a (sh :: [Maybe Nat]).
KnownElt a =>
IShX sh -> Mixed ('Just 0 : sh) a
memptyArray IShX sh
sh = IShX ('Just 0 : sh) -> Mixed ('Just 0 : sh) a
forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh a
forall a (sh :: [Maybe Nat]). KnownElt a => IShX sh -> Mixed sh a
memptyArrayUnsafe (SNat 0 -> SMayNat Int SNat ('Just 0)
forall {k} (f :: k -> *) (n1 :: k) i.
f n1 -> SMayNat i f ('Just n1)
SKnown SNat 0
forall (n :: Nat). KnownNat n => SNat n
SNat SMayNat Int SNat ('Just 0) -> IShX sh -> IShX ('Just 0 : sh)
forall {sh1 :: [Maybe Nat]} {i} (n :: Maybe Nat)
(sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat i SNat n -> ShX sh i -> ShX sh1 i
:$% IShX sh
sh)
mrank :: Elt a => Mixed sh a -> SNat (Rank sh)
mrank :: forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> SNat (Rank sh)
mrank = ShX sh Int -> SNat (Rank sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> SNat (Rank sh)
shxRank (ShX sh Int -> SNat (Rank sh))
-> (Mixed sh a -> ShX sh Int) -> Mixed sh a -> SNat (Rank sh)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mixed sh a -> ShX sh Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape
msize :: Elt a => Mixed sh a -> Int
msize :: forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> Int
msize = IShX sh -> Int
forall (sh :: [Maybe Nat]). IShX sh -> Int
shxSize (IShX sh -> Int) -> (Mixed sh a -> IShX sh) -> Mixed sh a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mixed sh a -> IShX sh
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape
mgenerate :: forall sh a. KnownElt a => IShX sh -> (IIxX sh -> a) -> Mixed sh a
mgenerate :: forall (sh :: [Maybe Nat]) a.
KnownElt a =>
IShX sh -> (IIxX sh -> a) -> Mixed sh a
mgenerate IShX sh
sh IIxX sh -> a
f = case IShX sh -> [IIxX sh]
forall (sh :: [Maybe Nat]). IShX sh -> [IIxX sh]
shxEnum IShX sh
sh of
[] -> IShX sh -> Mixed sh a
forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh a
forall a (sh :: [Maybe Nat]). KnownElt a => IShX sh -> Mixed sh a
memptyArrayUnsafe IShX sh
sh
IIxX sh
firstidx : [IIxX sh]
restidxs ->
let firstelem :: a
firstelem = IIxX sh -> a
f (IShX sh -> IIxX sh
forall (sh :: [Maybe Nat]). IShX sh -> IIxX sh
ixxZero' IShX sh
sh)
shapetree :: ShapeTree a
shapetree = a -> ShapeTree a
forall a. Elt a => a -> ShapeTree a
mshapeTree a
firstelem
in if Proxy a -> ShapeTree a -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> Bool
mshapeTreeEmpty (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) ShapeTree a
shapetree
then IShX sh -> Mixed sh a
forall (sh :: [Maybe Nat]). IShX sh -> Mixed sh a
forall a (sh :: [Maybe Nat]). KnownElt a => IShX sh -> Mixed sh a
memptyArrayUnsafe IShX sh
sh
else (forall s. ST s (Mixed sh a)) -> Mixed sh a
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s (Mixed sh a)) -> Mixed sh a)
-> (forall s. ST s (Mixed sh a)) -> Mixed sh a
forall a b. (a -> b) -> a -> b
$ do
MixedVecs s sh a
vecs <- IShX sh -> a -> ST s (MixedVecs s sh a)
forall (sh :: [Maybe Nat]) s.
IShX sh -> a -> ST s (MixedVecs s sh a)
forall a (sh :: [Maybe Nat]) s.
KnownElt a =>
IShX sh -> a -> ST s (MixedVecs s sh a)
mvecsUnsafeNew IShX sh
sh a
firstelem
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
forall (sh :: [Maybe Nat]) s.
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
mvecsWrite IShX sh
sh IIxX sh
firstidx a
firstelem MixedVecs s sh a
vecs
[IIxX sh] -> (IIxX sh -> ST s ()) -> ST s ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [IIxX sh]
restidxs ((IIxX sh -> ST s ()) -> ST s ())
-> (IIxX sh -> ST s ()) -> ST s ()
forall a b. (a -> b) -> a -> b
$ \IIxX sh
idx -> do
let val :: a
val = IIxX sh -> a
f IIxX sh
idx
Bool -> ST s () -> ST s ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Bool -> Bool
not (Proxy a -> ShapeTree a -> ShapeTree a -> Bool
forall a. Elt a => Proxy a -> ShapeTree a -> ShapeTree a -> Bool
mshapeTreeEq (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a) (a -> ShapeTree a
forall a. Elt a => a -> ShapeTree a
mshapeTree a
val) ShapeTree a
shapetree)) (ST s () -> ST s ()) -> ST s () -> ST s ()
forall a b. (a -> b) -> a -> b
$
String -> ST s ()
forall a. HasCallStack => String -> a
error String
"Data.Array.Nested mgenerate: generated values do not have equal shapes"
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
forall (sh :: [Maybe Nat]) s.
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> IIxX sh -> a -> MixedVecs s sh a -> ST s ()
mvecsWrite IShX sh
sh IIxX sh
idx a
val MixedVecs s sh a
vecs
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
forall (sh :: [Maybe Nat]) s.
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
forall a (sh :: [Maybe Nat]) s.
Elt a =>
IShX sh -> MixedVecs s sh a -> ST s (Mixed sh a)
mvecsFreeze IShX sh
sh MixedVecs s sh a
vecs
msumOuter1P :: forall sh n a. (Storable a, NumElt a)
=> Mixed (n : sh) (Primitive a) -> Mixed sh (Primitive a)
msumOuter1P :: forall (sh :: [Maybe Nat]) (n :: Maybe Nat) a.
(Storable a, NumElt a) =>
Mixed (n : sh) (Primitive a) -> Mixed sh (Primitive a)
msumOuter1P (M_Primitive (SMayNat Int SNat n
n :$% ShX sh Int
sh) XArray (n : sh) a
arr) =
let nssh :: StaticShX '[n]
nssh = ((n ~ 'Nothing) => Int -> SMayNat () SNat n)
-> (forall (m :: Nat).
(n ~ 'Just m) =>
SNat m -> SMayNat () SNat n)
-> SMayNat Int SNat n
-> SMayNat () SNat n
forall {k} (n :: Maybe k) i r (f :: k -> *).
((n ~ 'Nothing) => i -> r)
-> (forall (m :: k). (n ~ 'Just m) => f m -> r)
-> SMayNat i f n
-> r
fromSMayNat (\Int
_ -> () -> SMayNat () SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown ()) SNat m -> SMayNat () SNat n
SNat m -> SMayNat () SNat ('Just m)
forall (m :: Nat). (n ~ 'Just m) => SNat m -> SMayNat () SNat n
forall {k} (f :: k -> *) (n1 :: k) i.
f n1 -> SMayNat i f ('Just n1)
SKnown SMayNat Int SNat n
n SMayNat () SNat n -> StaticShX '[] -> StaticShX '[n]
forall {sh1 :: [Maybe Nat]} (n :: Maybe Nat) (sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat () SNat n -> StaticShX sh -> StaticShX sh1
:!% StaticShX '[]
forall (sh :: [Maybe Nat]). (sh ~ '[]) => StaticShX sh
ZKX
in IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
ShX sh Int
sh (StaticShX '[n]
-> StaticShX sh -> XArray ('[n] ++ sh) a -> XArray sh a
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
(Storable a, NumElt a) =>
StaticShX sh
-> StaticShX sh' -> XArray (sh ++ sh') a -> XArray sh' a
X.sumOuter StaticShX '[n]
nssh (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
ShX sh Int
sh) XArray (n : sh) a
XArray ('[n] ++ sh) a
arr)
msumOuter1 :: forall sh n a. (NumElt a, PrimElt a)
=> Mixed (n : sh) a -> Mixed sh a
msumOuter1 :: forall (sh :: [Maybe Nat]) (n :: Maybe Nat) a.
(NumElt a, PrimElt a) =>
Mixed (n : sh) a -> Mixed sh a
msumOuter1 = Mixed sh (Primitive a) -> Mixed sh a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive a) -> Mixed sh a)
-> (Mixed (n : sh) a -> Mixed sh (Primitive a))
-> Mixed (n : sh) a
-> Mixed sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (sh :: [Maybe Nat]) (n :: Maybe Nat) a.
(Storable a, NumElt a) =>
Mixed (n : sh) (Primitive a) -> Mixed sh (Primitive a)
msumOuter1P @sh @n @a (Mixed (n : sh) (Primitive a) -> Mixed sh (Primitive a))
-> (Mixed (n : sh) a -> Mixed (n : sh) (Primitive a))
-> Mixed (n : sh) a
-> Mixed sh (Primitive a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mixed (n : sh) a -> Mixed (n : sh) (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive
msumAllPrim :: (PrimElt a, NumElt a) => Mixed sh a -> a
msumAllPrim :: forall a (sh :: [Maybe Nat]).
(PrimElt a, NumElt a) =>
Mixed sh a -> a
msumAllPrim (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh XArray sh a
arr) = StaticShX sh -> XArray sh a -> a
forall a (sh :: [Maybe Nat]).
(Storable a, NumElt a) =>
StaticShX sh -> XArray sh a -> a
X.sumFull (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
sh) XArray sh a
arr
mappend :: forall n m sh a. Elt a
=> Mixed (n : sh) a -> Mixed (m : sh) a -> Mixed (AddMaybe n m : sh) a
mappend :: forall (n :: Maybe Nat) (m :: Maybe Nat) (sh :: [Maybe Nat]) a.
Elt a =>
Mixed (n : sh) a -> Mixed (m : sh) a -> Mixed (AddMaybe n m : sh) a
mappend Mixed (n : sh) a
arr1 Mixed (m : sh) a
arr2 = StaticShX (AddMaybe n m : sh)
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((n : sh) ++ sh') b
-> XArray ((m : sh) ++ sh') b
-> XArray ((AddMaybe n m : sh) ++ sh') b)
-> Mixed (n : sh) a
-> Mixed (m : sh) a
-> Mixed (AddMaybe n m : sh) a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh3 :: [Maybe Nat]).
Elt a =>
StaticShX sh3
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh1 ++ sh') b
-> XArray (sh2 ++ sh') b
-> XArray (sh3 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
-> Mixed sh3 a
mlift2 (SMayNat () SNat (AddMaybe n m)
snm SMayNat () SNat (AddMaybe n m)
-> StaticShX sh -> StaticShX (AddMaybe n m : sh)
forall {sh1 :: [Maybe Nat]} (n :: Maybe Nat) (sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat () SNat n -> StaticShX sh -> StaticShX sh1
:!% StaticShX sh
ssh) StaticShX sh'
-> XArray (n : (sh ++ sh')) b
-> XArray (m : (sh ++ sh')) b
-> XArray (AddMaybe n m : (sh ++ sh')) b
StaticShX sh'
-> XArray ((n : sh) ++ sh') b
-> XArray ((m : sh) ++ sh') b
-> XArray ((AddMaybe n m : sh) ++ sh') b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (n : (sh ++ sh')) b
-> XArray (m : (sh ++ sh')) b
-> XArray (AddMaybe n m : (sh ++ sh')) b
forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((n : sh) ++ sh') b
-> XArray ((m : sh) ++ sh') b
-> XArray ((AddMaybe n m : sh) ++ sh') b
f Mixed (n : sh) a
arr1 Mixed (m : sh) a
arr2
where
SMayNat Int SNat n
SMayNat Int SNat n
sn :$% ShX sh Int
ShX sh Int
sh = Mixed (n : sh) a -> ShX (n : sh) Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (n : sh) a
arr1
SMayNat Int SNat m
SMayNat Int SNat n
sm :$% ShX sh Int
_ = Mixed (m : sh) a -> ShX (m : sh) Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (m : sh) a
arr2
ssh :: StaticShX sh
ssh = ShX sh Int -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh Int
sh
snm :: SMayNat () SNat (AddMaybe n m)
snm :: SMayNat () SNat (AddMaybe n m)
snm = case (SMayNat Int SNat n
sn, SMayNat Int SNat m
sm) of
(SUnknown{}, SMayNat Int SNat m
_) -> () -> SMayNat () SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown ()
(SKnown{}, SUnknown{}) -> () -> SMayNat () SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown ()
(SKnown SNat n1
n, SKnown SNat n1
m) -> SNat (n1 + n1) -> SMayNat () SNat ('Just (n1 + n1))
forall {k} (f :: k -> *) (n1 :: k) i.
f n1 -> SMayNat i f ('Just n1)
SKnown (SNat n1 -> SNat n1 -> SNat (n1 + n1)
forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (n + m)
snatPlus SNat n1
n SNat n1
m)
f :: forall sh' b. Storable b
=> StaticShX sh' -> XArray (n : sh ++ sh') b -> XArray (m : sh ++ sh') b -> XArray (AddMaybe n m : sh ++ sh') b
f :: forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (n : (sh ++ sh')) b
-> XArray (m : (sh ++ sh')) b
-> XArray (AddMaybe n m : (sh ++ sh')) b
f StaticShX sh'
ssh' = StaticShX (sh ++ sh')
-> XArray (n : (sh ++ sh')) b
-> XArray (m : (sh ++ sh')) b
-> XArray (AddMaybe n m : (sh ++ sh')) b
forall (n :: Maybe Nat) (m :: Maybe Nat) (sh :: [Maybe Nat]) a.
Storable a =>
StaticShX sh
-> XArray (n : sh) a
-> XArray (m : sh) a
-> XArray (AddMaybe n m : sh) a
X.append (StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh
ssh StaticShX sh'
ssh')
mfromVectorP :: forall sh a. Storable a => IShX sh -> VS.Vector a -> Mixed sh (Primitive a)
mfromVectorP :: forall (sh :: [Maybe Nat]) a.
Storable a =>
IShX sh -> Vector a -> Mixed sh (Primitive a)
mfromVectorP IShX sh
sh Vector a
v = IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (IShX sh -> Vector a -> XArray sh a
forall (sh :: [Maybe Nat]) a.
Storable a =>
IShX sh -> Vector a -> XArray sh a
X.fromVector IShX sh
sh Vector a
v)
mfromVector :: forall sh a. PrimElt a => IShX sh -> VS.Vector a -> Mixed sh a
mfromVector :: forall (sh :: [Maybe Nat]) a.
PrimElt a =>
IShX sh -> Vector a -> Mixed sh a
mfromVector IShX sh
sh Vector a
v = Mixed sh (Primitive a) -> Mixed sh a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (IShX sh -> Vector a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
Storable a =>
IShX sh -> Vector a -> Mixed sh (Primitive a)
mfromVectorP IShX sh
sh Vector a
v)
mtoVectorP :: Storable a => Mixed sh (Primitive a) -> VS.Vector a
mtoVectorP :: forall a (sh :: [Maybe Nat]).
Storable a =>
Mixed sh (Primitive a) -> Vector a
mtoVectorP (M_Primitive IShX sh
_ XArray sh a
v) = XArray sh a -> Vector a
forall a (sh :: [Maybe Nat]). Storable a => XArray sh a -> Vector a
X.toVector XArray sh a
v
mtoVector :: PrimElt a => Mixed sh a -> VS.Vector a
mtoVector :: forall a (sh :: [Maybe Nat]). PrimElt a => Mixed sh a -> Vector a
mtoVector Mixed sh a
arr = Mixed sh (Primitive a) -> Vector a
forall a (sh :: [Maybe Nat]).
Storable a =>
Mixed sh (Primitive a) -> Vector a
mtoVectorP (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive Mixed sh a
arr)
mfromList1 :: Elt a => NonEmpty a -> Mixed '[Nothing] a
mfromList1 :: forall a. Elt a => NonEmpty a -> Mixed '[ 'Nothing] a
mfromList1 = NonEmpty (Mixed '[] a) -> Mixed '[ 'Nothing] a
forall (sh :: [Maybe Nat]).
NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
forall a (sh :: [Maybe Nat]).
Elt a =>
NonEmpty (Mixed sh a) -> Mixed ('Nothing : sh) a
mfromListOuter (NonEmpty (Mixed '[] a) -> Mixed '[ 'Nothing] a)
-> (NonEmpty a -> NonEmpty (Mixed '[] a))
-> NonEmpty a
-> Mixed '[ 'Nothing] a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Mixed '[] a) -> NonEmpty a -> NonEmpty (Mixed '[] a)
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Mixed '[] a
forall a. Elt a => a -> Mixed '[] a
mscalar
mfromListLinear :: forall sh a. Elt a => IShX sh -> NonEmpty a -> Mixed sh a
mfromListLinear :: forall (sh :: [Maybe Nat]) a.
Elt a =>
IShX sh -> NonEmpty a -> Mixed sh a
mfromListLinear IShX sh
sh NonEmpty a
l = IShX sh -> Mixed '[ 'Nothing] a -> Mixed sh a
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
Elt a =>
IShX sh' -> Mixed sh a -> Mixed sh' a
mreshape IShX sh
sh (NonEmpty a -> Mixed '[ 'Nothing] a
forall a. Elt a => NonEmpty a -> Mixed '[ 'Nothing] a
mfromList1 NonEmpty a
l)
mfromListPrim :: PrimElt a => [a] -> Mixed '[Nothing] a
mfromListPrim :: forall a. PrimElt a => [a] -> Mixed '[ 'Nothing] a
mfromListPrim [a]
l =
let ssh :: StaticShX '[ 'Nothing]
ssh = () -> SMayNat () SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown () SMayNat () SNat 'Nothing -> StaticShX '[] -> StaticShX '[ 'Nothing]
forall {sh1 :: [Maybe Nat]} (n :: Maybe Nat) (sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat () SNat n -> StaticShX sh -> StaticShX sh1
:!% StaticShX '[]
forall (sh :: [Maybe Nat]). (sh ~ '[]) => StaticShX sh
ZKX
xarr :: XArray '[ 'Nothing] a
xarr = StaticShX '[ 'Nothing] -> [a] -> XArray '[ 'Nothing] a
forall a (n :: Maybe Nat).
Storable a =>
StaticShX '[n] -> [a] -> XArray '[n] a
X.fromList1 StaticShX '[ 'Nothing]
ssh [a]
l
in Mixed '[ 'Nothing] (Primitive a) -> Mixed '[ 'Nothing] a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed '[ 'Nothing] (Primitive a) -> Mixed '[ 'Nothing] a)
-> Mixed '[ 'Nothing] (Primitive a) -> Mixed '[ 'Nothing] a
forall a b. (a -> b) -> a -> b
$ IShX '[ 'Nothing]
-> XArray '[ 'Nothing] a -> Mixed '[ 'Nothing] (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (StaticShX '[ 'Nothing]
-> XArray '[ 'Nothing] a -> IShX '[ 'Nothing]
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> IShX sh
X.shape StaticShX '[ 'Nothing]
ssh XArray '[ 'Nothing] a
xarr) XArray '[ 'Nothing] a
xarr
mfromListPrimLinear :: PrimElt a => IShX sh -> [a] -> Mixed sh a
mfromListPrimLinear :: forall a (sh :: [Maybe Nat]).
PrimElt a =>
IShX sh -> [a] -> Mixed sh a
mfromListPrimLinear IShX sh
sh [a]
l =
let M_Primitive IShX '[ 'Nothing]
_ XArray '[ 'Nothing] a
xarr = Mixed '[ 'Nothing] a -> Mixed '[ 'Nothing] (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive ([a] -> Mixed '[ 'Nothing] a
forall a. PrimElt a => [a] -> Mixed '[ 'Nothing] a
mfromListPrim [a]
l)
in Mixed sh (Primitive a) -> Mixed sh a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive a) -> Mixed sh a)
-> Mixed sh (Primitive a) -> Mixed sh a
forall a b. (a -> b) -> a -> b
$ IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (StaticShX '[ 'Nothing]
-> IShX sh -> XArray '[ 'Nothing] a -> XArray sh a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
Storable a =>
StaticShX sh1 -> IShX sh2 -> XArray sh1 a -> XArray sh2 a
X.reshape (() -> SMayNat () SNat 'Nothing
forall {k} i (f :: k -> *). i -> SMayNat i f 'Nothing
SUnknown () SMayNat () SNat 'Nothing -> StaticShX '[] -> StaticShX '[ 'Nothing]
forall {sh1 :: [Maybe Nat]} (n :: Maybe Nat) (sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat () SNat n -> StaticShX sh -> StaticShX sh1
:!% StaticShX '[]
forall (sh :: [Maybe Nat]). (sh ~ '[]) => StaticShX sh
ZKX) IShX sh
sh XArray '[ 'Nothing] a
xarr)
mtoList :: Elt a => Mixed '[n] a -> [a]
mtoList :: forall a (n :: Maybe Nat). Elt a => Mixed '[n] a -> [a]
mtoList = (Mixed '[] a -> a) -> [Mixed '[] a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map Mixed '[] a -> a
forall a. Elt a => Mixed '[] a -> a
munScalar ([Mixed '[] a] -> [a])
-> (Mixed '[n] a -> [Mixed '[] a]) -> Mixed '[n] a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mixed '[n] a -> [Mixed '[] a]
forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
Mixed (n : sh) a -> [Mixed sh a]
forall a (n :: Maybe Nat) (sh :: [Maybe Nat]).
Elt a =>
Mixed (n : sh) a -> [Mixed sh a]
mtoListOuter
mtoListLinear :: Elt a => Mixed sh a -> [a]
mtoListLinear :: forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> [a]
mtoListLinear Mixed sh a
arr = (IIxX sh -> a) -> [IIxX sh] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (Mixed sh a -> IIxX sh -> a
forall (sh :: [Maybe Nat]). Mixed sh a -> IIxX sh -> a
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IIxX sh -> a
mindex Mixed sh a
arr) (IShX sh -> [IIxX sh]
forall (sh :: [Maybe Nat]). IShX sh -> [IIxX sh]
shxEnum (Mixed sh a -> IShX sh
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh a
arr))
munScalar :: Elt a => Mixed '[] a -> a
munScalar :: forall a. Elt a => Mixed '[] a -> a
munScalar Mixed '[] a
arr = Mixed '[] a -> IIxX '[] -> a
forall (sh :: [Maybe Nat]). Mixed sh a -> IIxX sh -> a
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IIxX sh -> a
mindex Mixed '[] a
arr IIxX '[]
forall (sh :: [Maybe Nat]) i. (sh ~ '[]) => IxX sh i
ZIX
mnest :: forall sh sh' a. Elt a => StaticShX sh -> Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a)
mnest :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
Elt a =>
StaticShX sh -> Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a)
mnest StaticShX sh
ssh Mixed (sh ++ sh') a
arr = IShX sh -> Mixed (sh ++ sh') a -> Mixed sh (Mixed sh' a)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a.
IShX sh1 -> Mixed (sh1 ++ sh2) a -> Mixed sh1 (Mixed sh2 a)
M_Nest ((IShX sh, ShX sh' Int) -> IShX sh
forall a b. (a, b) -> a
fst (Proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') Int -> (IShX sh, ShX sh' Int)
forall (proxy :: [Maybe Nat] -> *) (sh' :: [Maybe Nat])
(sh :: [Maybe Nat]) i.
proxy sh'
-> StaticShX sh -> ShX (sh ++ sh') i -> (ShX sh i, ShX sh' i)
shxSplitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') StaticShX sh
ssh (Mixed (sh ++ sh') a -> ShX (sh ++ sh') Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (sh ++ sh') a
arr))) Mixed (sh ++ sh') a
arr
munNest :: Mixed sh (Mixed sh' a) -> Mixed (sh ++ sh') a
munNest :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
Mixed sh (Mixed sh' a) -> Mixed (sh ++ sh') a
munNest (M_Nest IShX sh
_ Mixed (sh ++ sh') a
arr) = Mixed (sh ++ sh') a
arr
mzip :: (Elt a, Elt b) => Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
mzip :: forall a b (sh :: [Maybe Nat]).
(Elt a, Elt b) =>
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
mzip Mixed sh a
a Mixed sh b
b
| Just sh :~: sh
Refl <- ShX sh Int -> ShX sh Int -> Maybe (sh :~: sh)
forall i (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
Eq i =>
ShX sh i -> ShX sh' i -> Maybe (sh :~: sh')
shxEqual (Mixed sh a -> ShX sh Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh a
a) (Mixed sh b -> ShX sh Int
forall (sh :: [Maybe Nat]). Mixed sh b -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh b
b) = Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
forall (sh :: [Maybe Nat]) a b.
Mixed sh a -> Mixed sh b -> Mixed sh (a, b)
M_Tup2 Mixed sh a
a Mixed sh b
b
| Bool
otherwise = String -> Mixed sh (a, b)
forall a. HasCallStack => String -> a
error String
"mzip: unequal shapes"
munzip :: Mixed sh (a, b) -> (Mixed sh a, Mixed sh b)
munzip :: forall (sh :: [Maybe Nat]) a b.
Mixed sh (a, b) -> (Mixed sh a, Mixed sh b)
munzip (M_Tup2 Mixed sh a
a Mixed sh b
b) = (Mixed sh a
a, Mixed sh b
b)
mrerankP :: forall sh1 sh2 sh a b. (Storable a, Storable b)
=> StaticShX sh -> IShX sh2
-> (Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive b))
-> Mixed (sh ++ sh1) (Primitive a) -> Mixed (sh ++ sh2) (Primitive b)
mrerankP :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh :: [Maybe Nat]) a b.
(Storable a, Storable b) =>
StaticShX sh
-> IShX sh2
-> (Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive b))
-> Mixed (sh ++ sh1) (Primitive a)
-> Mixed (sh ++ sh2) (Primitive b)
mrerankP StaticShX sh
ssh IShX sh2
sh2 Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive b)
f (M_Primitive IShX (sh ++ sh1)
sh XArray (sh ++ sh1) a
arr) =
let sh1 :: ShX sh1 Int
sh1 = StaticShX sh -> IShX (sh ++ sh1) -> ShX sh1 Int
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
StaticShX sh -> ShX (sh ++ sh') i -> ShX sh' i
shxDropSSX StaticShX sh
ssh IShX (sh ++ sh1)
sh
in IShX (sh ++ sh2)
-> XArray (sh ++ sh2) b -> Mixed (sh ++ sh2) (Primitive b)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (ShX sh Int -> IShX sh2 -> IShX (sh ++ sh2)
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i.
ShX sh i -> ShX sh' i -> ShX (sh ++ sh') i
shxAppend (Proxy sh1 -> StaticShX sh -> IShX (sh ++ sh1) -> ShX sh Int
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) i
(proxy :: [Maybe Nat] -> *).
proxy sh' -> StaticShX sh -> ShX (sh ++ sh') i -> ShX sh i
shxTakeSSX (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh1) StaticShX sh
ssh IShX (sh ++ sh1)
sh) IShX sh2
sh2)
(StaticShX sh
-> StaticShX sh1
-> StaticShX sh2
-> (XArray sh1 a -> XArray sh2 b)
-> XArray (sh ++ sh1) a
-> XArray (sh ++ sh2) b
forall (sh :: [Maybe Nat]) (sh1 :: [Maybe Nat])
(sh2 :: [Maybe Nat]) a b.
(Storable a, Storable b) =>
StaticShX sh
-> StaticShX sh1
-> StaticShX sh2
-> (XArray sh1 a -> XArray sh2 b)
-> XArray (sh ++ sh1) a
-> XArray (sh ++ sh2) b
X.rerank StaticShX sh
ssh (ShX sh1 Int -> StaticShX sh1
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh1 Int
sh1) (IShX sh2 -> StaticShX sh2
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh2
sh2)
(\XArray sh1 a
a -> let M_Primitive IShX sh2
_ XArray sh2 b
r = Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive b)
f (ShX sh1 Int -> XArray sh1 a -> Mixed sh1 (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive ShX sh1 Int
sh1 XArray sh1 a
a) in XArray sh2 b
r)
XArray (sh ++ sh1) a
arr)
mrerank :: forall sh1 sh2 sh a b. (PrimElt a, PrimElt b)
=> StaticShX sh -> IShX sh2
-> (Mixed sh1 a -> Mixed sh2 b)
-> Mixed (sh ++ sh1) a -> Mixed (sh ++ sh2) b
mrerank :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh :: [Maybe Nat]) a b.
(PrimElt a, PrimElt b) =>
StaticShX sh
-> IShX sh2
-> (Mixed sh1 a -> Mixed sh2 b)
-> Mixed (sh ++ sh1) a
-> Mixed (sh ++ sh2) b
mrerank StaticShX sh
ssh IShX sh2
sh2 Mixed sh1 a -> Mixed sh2 b
f (Mixed (sh ++ sh1) a -> Mixed (sh ++ sh1) (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> Mixed (sh ++ sh1) (Primitive a)
arr) =
Mixed (sh ++ sh2) (Primitive b) -> Mixed (sh ++ sh2) b
forall (sh :: [Maybe Nat]). Mixed sh (Primitive b) -> Mixed sh b
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed (sh ++ sh2) (Primitive b) -> Mixed (sh ++ sh2) b)
-> Mixed (sh ++ sh2) (Primitive b) -> Mixed (sh ++ sh2) b
forall a b. (a -> b) -> a -> b
$ StaticShX sh
-> IShX sh2
-> (Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive b))
-> Mixed (sh ++ sh1) (Primitive a)
-> Mixed (sh ++ sh2) (Primitive b)
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh :: [Maybe Nat]) a b.
(Storable a, Storable b) =>
StaticShX sh
-> IShX sh2
-> (Mixed sh1 (Primitive a) -> Mixed sh2 (Primitive b))
-> Mixed (sh ++ sh1) (Primitive a)
-> Mixed (sh ++ sh2) (Primitive b)
mrerankP StaticShX sh
ssh IShX sh2
sh2 (Mixed sh2 b -> Mixed sh2 (Primitive b)
forall (sh :: [Maybe Nat]). Mixed sh b -> Mixed sh (Primitive b)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive (Mixed sh2 b -> Mixed sh2 (Primitive b))
-> (Mixed sh1 (Primitive a) -> Mixed sh2 b)
-> Mixed sh1 (Primitive a)
-> Mixed sh2 (Primitive b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mixed sh1 a -> Mixed sh2 b
f (Mixed sh1 a -> Mixed sh2 b)
-> (Mixed sh1 (Primitive a) -> Mixed sh1 a)
-> Mixed sh1 (Primitive a)
-> Mixed sh2 b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mixed sh1 (Primitive a) -> Mixed sh1 a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive) Mixed (sh ++ sh1) (Primitive a)
arr
mreplicate :: forall sh sh' a. Elt a
=> IShX sh -> Mixed sh' a -> Mixed (sh ++ sh') a
mreplicate :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
Elt a =>
IShX sh -> Mixed sh' a -> Mixed (sh ++ sh') a
mreplicate IShX sh
sh Mixed sh' a
arr =
let ssh' :: StaticShX sh'
ssh' = ShX sh' Int -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX (Mixed sh' a -> ShX sh' Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh' a
arr)
in StaticShX (sh ++ sh')
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (sh' ++ sh') b -> XArray ((sh ++ sh') ++ sh') b)
-> Mixed sh' a
-> Mixed (sh ++ sh') a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift (StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
sh) StaticShX sh'
ssh')
(\(StaticShX sh'
sshT :: StaticShX shT) ->
case Proxy sh
-> Proxy sh'
-> Proxy sh'
-> ((sh ++ sh') ++ sh') :~: (sh ++ (sh' ++ sh'))
forall {a1} (a2 :: [a1]) (b :: [a1]) (c :: [a1]).
Proxy a2
-> Proxy b -> Proxy c -> ((a2 ++ b) ++ c) :~: (a2 ++ (b ++ c))
lemAppAssoc (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh) (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh') (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @shT) of
((sh ++ sh') ++ sh') :~: (sh ++ (sh' ++ sh'))
Refl -> IShX sh
-> StaticShX (sh' ++ sh')
-> XArray (sh' ++ sh') b
-> XArray (sh ++ (sh' ++ sh')) b
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
Storable a =>
IShX sh -> StaticShX sh' -> XArray sh' a -> XArray (sh ++ sh') a
X.replicate IShX sh
sh (StaticShX sh' -> StaticShX sh' -> StaticShX (sh' ++ sh')
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]).
StaticShX sh -> StaticShX sh' -> StaticShX (sh ++ sh')
ssxAppend StaticShX sh'
ssh' StaticShX sh'
sshT))
Mixed sh' a
arr
mreplicateScalP :: forall sh a. Storable a => IShX sh -> a -> Mixed sh (Primitive a)
mreplicateScalP :: forall (sh :: [Maybe Nat]) a.
Storable a =>
IShX sh -> a -> Mixed sh (Primitive a)
mreplicateScalP IShX sh
sh a
x = IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (IShX sh -> a -> XArray sh a
forall (sh :: [Maybe Nat]) a.
Storable a =>
IShX sh -> a -> XArray sh a
X.replicateScal IShX sh
sh a
x)
mreplicateScal :: forall sh a. PrimElt a
=> IShX sh -> a -> Mixed sh a
mreplicateScal :: forall (sh :: [Maybe Nat]) a.
PrimElt a =>
IShX sh -> a -> Mixed sh a
mreplicateScal IShX sh
sh a
x = Mixed sh (Primitive a) -> Mixed sh a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (IShX sh -> a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
Storable a =>
IShX sh -> a -> Mixed sh (Primitive a)
mreplicateScalP IShX sh
sh a
x)
mslice :: Elt a => SNat i -> SNat n -> Mixed (Just (i + n + k) : sh) a -> Mixed (Just n : sh) a
mslice :: forall a (i :: Nat) (n :: Nat) (k :: Nat) (sh :: [Maybe Nat]).
Elt a =>
SNat i
-> SNat n
-> Mixed ('Just ((i + n) + k) : sh) a
-> Mixed ('Just n : sh) a
mslice SNat i
i SNat n
n Mixed ('Just ((i + n) + k) : sh) a
arr =
let SMayNat Int SNat n
_ :$% ShX sh Int
ShX sh Int
sh = Mixed ('Just ((i + n) + k) : sh) a
-> ShX ('Just ((i + n) + k) : sh) Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed ('Just ((i + n) + k) : sh) a
arr
in StaticShX ('Just n : sh)
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (('Just ((i + n) + k) : sh) ++ sh') b
-> XArray (('Just n : sh) ++ sh') b)
-> Mixed ('Just ((i + n) + k) : sh) a
-> Mixed ('Just n : sh) a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift (SNat n -> SMayNat () SNat ('Just n)
forall {k} (f :: k -> *) (n1 :: k) i.
f n1 -> SMayNat i f ('Just n1)
SKnown SNat n
n SMayNat () SNat ('Just n)
-> StaticShX sh -> StaticShX ('Just n : sh)
forall {sh1 :: [Maybe Nat]} (n :: Maybe Nat) (sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat () SNat n -> StaticShX sh -> StaticShX sh1
:!% ShX sh Int -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX ShX sh Int
sh) (\StaticShX sh'
_ -> SNat i
-> SNat n
-> XArray ('Just ((i + n) + k) : (sh ++ sh')) b
-> XArray ('Just n : (sh ++ sh')) b
forall (i :: Nat) (n :: Nat) (k :: Nat) (sh :: [Maybe Nat]) a.
SNat i
-> SNat n
-> XArray ('Just ((i + n) + k) : sh) a
-> XArray ('Just n : sh) a
X.slice SNat i
i SNat n
n) Mixed ('Just ((i + n) + k) : sh) a
arr
msliceU :: Elt a => Int -> Int -> Mixed (Nothing : sh) a -> Mixed (Nothing : sh) a
msliceU :: forall a (sh :: [Maybe Nat]).
Elt a =>
Int -> Int -> Mixed ('Nothing : sh) a -> Mixed ('Nothing : sh) a
msliceU Int
i Int
n Mixed ('Nothing : sh) a
arr = StaticShX ('Nothing : sh)
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray (('Nothing : sh) ++ sh') b
-> XArray (('Nothing : sh) ++ sh') b)
-> Mixed ('Nothing : sh) a
-> Mixed ('Nothing : sh) a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift (ShX ('Nothing : sh) Int -> StaticShX ('Nothing : sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX (Mixed ('Nothing : sh) a -> ShX ('Nothing : sh) Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed ('Nothing : sh) a
arr)) (\StaticShX sh'
_ -> Int
-> Int
-> XArray ('Nothing : (sh ++ sh')) b
-> XArray ('Nothing : (sh ++ sh')) b
forall (sh :: [Maybe Nat]) a.
Int -> Int -> XArray ('Nothing : sh) a -> XArray ('Nothing : sh) a
X.sliceU Int
i Int
n) Mixed ('Nothing : sh) a
arr
mrev1 :: Elt a => Mixed (n : sh) a -> Mixed (n : sh) a
mrev1 :: forall a (n :: Maybe Nat) (sh :: [Maybe Nat]).
Elt a =>
Mixed (n : sh) a -> Mixed (n : sh) a
mrev1 Mixed (n : sh) a
arr = StaticShX (n : sh)
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh'
-> XArray ((n : sh) ++ sh') b -> XArray ((n : sh) ++ sh') b)
-> Mixed (n : sh) a
-> Mixed (n : sh) a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift (ShX (n : sh) Int -> StaticShX (n : sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX (Mixed (n : sh) a -> ShX (n : sh) Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed (n : sh) a
arr)) (\StaticShX sh'
_ -> XArray (n : (sh ++ sh')) b -> XArray (n : (sh ++ sh')) b
XArray ((n : sh) ++ sh') b -> XArray ((n : sh) ++ sh') b
forall (n :: Maybe Nat) (sh :: [Maybe Nat]) a.
XArray (n : sh) a -> XArray (n : sh) a
X.rev1) Mixed (n : sh) a
arr
mreshape :: forall sh sh' a. Elt a => IShX sh' -> Mixed sh a -> Mixed sh' a
mreshape :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
Elt a =>
IShX sh' -> Mixed sh a -> Mixed sh' a
mreshape IShX sh'
sh' Mixed sh a
arr =
StaticShX sh'
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh ++ sh') b -> XArray (sh' ++ sh') b)
-> Mixed sh a
-> Mixed sh' a
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
forall a (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
Elt a =>
StaticShX sh2
-> (forall (sh' :: [Maybe Nat]) b.
Storable b =>
StaticShX sh' -> XArray (sh1 ++ sh') b -> XArray (sh2 ++ sh') b)
-> Mixed sh1 a
-> Mixed sh2 a
mlift (IShX sh' -> StaticShX sh'
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh'
sh')
(\StaticShX sh'
sshIn -> StaticShX sh
-> StaticShX sh'
-> IShX sh'
-> XArray (sh ++ sh') b
-> XArray (sh' ++ sh') b
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat])
(sh' :: [Maybe Nat]) a.
Storable a =>
StaticShX sh1
-> StaticShX sh'
-> IShX sh2
-> XArray (sh1 ++ sh') a
-> XArray (sh2 ++ sh') a
X.reshapePartial (ShX sh Int -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX (Mixed sh a -> ShX sh Int
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh a
arr)) StaticShX sh'
sshIn IShX sh'
sh')
Mixed sh a
arr
mflatten :: Elt a => Mixed sh a -> Mixed '[Flatten sh] a
mflatten :: forall a (sh :: [Maybe Nat]).
Elt a =>
Mixed sh a -> Mixed '[Flatten sh] a
mflatten Mixed sh a
arr = IShX '[Flatten' 1 sh] -> Mixed sh a -> Mixed '[Flatten' 1 sh] a
forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a.
Elt a =>
IShX sh' -> Mixed sh a -> Mixed sh' a
mreshape (IShX sh -> SMayNat Int SNat (Flatten' 1 sh)
forall (sh :: [Maybe Nat]).
IShX sh -> SMayNat Int SNat (Flatten sh)
shxFlatten (Mixed sh a -> IShX sh
forall (sh :: [Maybe Nat]). Mixed sh a -> IShX sh
forall a (sh :: [Maybe Nat]). Elt a => Mixed sh a -> IShX sh
mshape Mixed sh a
arr) SMayNat Int SNat (Flatten' 1 sh)
-> IShX '[] -> IShX '[Flatten' 1 sh]
forall {sh1 :: [Maybe Nat]} {i} (n :: Maybe Nat)
(sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat i SNat n -> ShX sh i -> ShX sh1 i
:$% IShX '[]
forall (sh :: [Maybe Nat]) i. (sh ~ '[]) => ShX sh i
ZSX) Mixed sh a
arr
miota :: (Enum a, PrimElt a) => SNat n -> Mixed '[Just n] a
miota :: forall a (n :: Nat).
(Enum a, PrimElt a) =>
SNat n -> Mixed '[ 'Just n] a
miota SNat n
sn = Mixed '[ 'Just n] (Primitive a) -> Mixed '[ 'Just n] a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed '[ 'Just n] (Primitive a) -> Mixed '[ 'Just n] a)
-> Mixed '[ 'Just n] (Primitive a) -> Mixed '[ 'Just n] a
forall a b. (a -> b) -> a -> b
$ IShX '[ 'Just n]
-> XArray '[ 'Just n] a -> Mixed '[ 'Just n] (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (SNat n -> SMayNat Int SNat ('Just n)
forall {k} (f :: k -> *) (n1 :: k) i.
f n1 -> SMayNat i f ('Just n1)
SKnown SNat n
sn SMayNat Int SNat ('Just n) -> IShX '[] -> IShX '[ 'Just n]
forall {sh1 :: [Maybe Nat]} {i} (n :: Maybe Nat)
(sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat i SNat n -> ShX sh i -> ShX sh1 i
:$% IShX '[]
forall (sh :: [Maybe Nat]) i. (sh ~ '[]) => ShX sh i
ZSX) (SNat n -> XArray '[ 'Just n] a
forall a (n :: Nat).
(Enum a, Storable a) =>
SNat n -> XArray '[ 'Just n] a
X.iota SNat n
sn)
mminIndexPrim :: (PrimElt a, NumElt a) => Mixed sh a -> IIxX sh
mminIndexPrim :: forall a (sh :: [Maybe Nat]).
(PrimElt a, NumElt a) =>
Mixed sh a -> IIxX sh
mminIndexPrim (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh (XArray Array (Rank sh) a
arr)) =
StaticShX sh -> [Int] -> IxX sh Int
forall (sh :: [Maybe Nat]) i. StaticShX sh -> [i] -> IxX sh i
ixxFromList (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
sh) (SNat (Rank sh) -> Array (Rank sh) a -> [Int]
forall (n :: Nat). SNat n -> Array n a -> [Int]
forall a (n :: Nat). NumElt a => SNat n -> Array n a -> [Int]
numEltMinIndex (IShX sh -> SNat (Rank sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> SNat (Rank sh)
shxRank IShX sh
sh) (Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a. Array n a -> Array n a
fromO Array (Rank sh) a
arr))
mmaxIndexPrim :: (PrimElt a, NumElt a) => Mixed sh a -> IIxX sh
mmaxIndexPrim :: forall a (sh :: [Maybe Nat]).
(PrimElt a, NumElt a) =>
Mixed sh a -> IIxX sh
mmaxIndexPrim (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh (XArray Array (Rank sh) a
arr)) =
StaticShX sh -> [Int] -> IxX sh Int
forall (sh :: [Maybe Nat]) i. StaticShX sh -> [i] -> IxX sh i
ixxFromList (IShX sh -> StaticShX sh
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX sh
sh) (SNat (Rank sh) -> Array (Rank sh) a -> [Int]
forall (n :: Nat). SNat n -> Array n a -> [Int]
forall a (n :: Nat). NumElt a => SNat n -> Array n a -> [Int]
numEltMaxIndex (IShX sh -> SNat (Rank sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> SNat (Rank sh)
shxRank IShX sh
sh) (Array (Rank sh) a -> Array (Rank sh) a
forall (n :: Nat) a. Array n a -> Array n a
fromO Array (Rank sh) a
arr))
mdot1Inner :: forall sh n a. (PrimElt a, NumElt a)
=> Proxy n -> Mixed (sh ++ '[n]) a -> Mixed (sh ++ '[n]) a -> Mixed sh a
mdot1Inner :: forall (sh :: [Maybe Nat]) (n :: Maybe Nat) a.
(PrimElt a, NumElt a) =>
Proxy n
-> Mixed (sh ++ '[n]) a -> Mixed (sh ++ '[n]) a -> Mixed sh a
mdot1Inner Proxy n
_ (Mixed (sh ++ '[n]) a -> Mixed (sh ++ '[n]) (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX (sh ++ '[n])
sh1 (XArray Array (Rank (sh ++ '[n])) a
a)) (Mixed (sh ++ '[n]) a -> Mixed (sh ++ '[n]) (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX (sh ++ '[n])
sh2 (XArray Array (Rank (sh ++ '[n])) a
b))
| Init (sh ++ '[n]) :~: sh
Refl <- Proxy sh -> Proxy n -> Init (sh ++ '[n]) :~: sh
forall {a} (l :: [a]) (x :: a).
Proxy l -> Proxy x -> Init (l ++ '[x]) :~: l
lemInitApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh) (forall (t :: Maybe Nat). Proxy t
forall {k} (t :: k). Proxy t
Proxy @n)
, Last (sh ++ '[n]) :~: n
Refl <- Proxy sh -> Proxy n -> Last (sh ++ '[n]) :~: n
forall {k} (l :: [k]) (x :: k).
Proxy l -> Proxy x -> Last (l ++ '[x]) :~: x
lemLastApp (forall (t :: [Maybe Nat]). Proxy t
forall {k} (t :: k). Proxy t
Proxy @sh) (forall (t :: Maybe Nat). Proxy t
forall {k} (t :: k). Proxy t
Proxy @n)
= case IShX (sh ++ '[n])
sh1 of
SMayNat Int SNat n
_ :$% ShX sh Int
_
| IShX (sh ++ '[n])
sh1 IShX (sh ++ '[n]) -> IShX (sh ++ '[n]) -> Bool
forall a. Eq a => a -> a -> Bool
== IShX (sh ++ '[n])
sh2
, Rank (Init (n : sh) ++ '[Last (n : sh)])
:~: (Rank (Init (n : sh)) + Rank '[Last (n : sh)])
Refl <- StaticShX (Init (n : sh))
-> StaticShX '[Last (n : sh)]
-> Rank (Init (n : sh) ++ '[Last (n : sh)])
:~: (Rank (Init (n : sh)) + Rank '[Last (n : sh)])
forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]).
StaticShX sh1
-> StaticShX sh2 -> Rank (sh1 ++ sh2) :~: (Rank sh1 + Rank sh2)
lemRankApp (StaticShX (n : sh) -> StaticShX (Init (n : sh))
forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
StaticShX (n : sh) -> StaticShX (Init (n : sh))
ssxInit (IShX (n : sh) -> StaticShX (n : sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX (n : sh)
IShX (sh ++ '[n])
sh1)) (StaticShX (n : sh) -> SMayNat () SNat (Last (n : sh))
forall (n :: Maybe Nat) (sh :: [Maybe Nat]).
StaticShX (n : sh) -> SMayNat () SNat (Last (n : sh))
ssxLast (IShX (n : sh) -> StaticShX (n : sh)
forall (sh :: [Maybe Nat]) i. ShX sh i -> StaticShX sh
ssxFromShX IShX (n : sh)
IShX (sh ++ '[n])
sh1) SMayNat () SNat (Last (n : sh))
-> StaticShX '[] -> StaticShX '[Last (n : sh)]
forall {sh1 :: [Maybe Nat]} (n :: Maybe Nat) (sh :: [Maybe Nat]).
((n : sh) ~ sh1) =>
SMayNat () SNat n -> StaticShX sh -> StaticShX sh1
:!% StaticShX '[]
forall (sh :: [Maybe Nat]). (sh ~ '[]) => StaticShX sh
ZKX) ->
Mixed sh (Primitive a) -> Mixed sh a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive a) -> Mixed sh a)
-> Mixed sh (Primitive a) -> Mixed sh a
forall a b. (a -> b) -> a -> b
$ IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (IShX (n : sh) -> ShX (Init (n : sh)) Int
forall (n :: Maybe Nat) (sh :: [Maybe Nat]) i.
ShX (n : sh) i -> ShX (Init (n : sh)) i
shxInit IShX (n : sh)
IShX (sh ++ '[n])
sh1) (Array (Rank sh) a -> XArray sh a
forall (sh :: [Maybe Nat]) a. Array (Rank sh) a -> XArray sh a
XArray ((Array (Rank sh + 1) a
-> Array (Rank sh + 1) a -> Array (Rank sh) a)
-> Array (Rank sh + 1) a
-> Array (Rank sh + 1) a
-> Array (Rank sh) a
forall (n :: Nat) a (n1 :: Nat) b (n2 :: Nat) c.
(Array n a -> Array n1 b -> Array n2 c)
-> Array n a -> Array n1 b -> Array n2 c
liftO2 (SNat (Rank sh)
-> Array (Rank sh + 1) a
-> Array (Rank sh + 1) a
-> Array (Rank sh) a
forall (n :: Nat).
SNat n -> Array (n + 1) a -> Array (n + 1) a -> Array n a
forall a (n :: Nat).
NumElt a =>
SNat n -> Array (n + 1) a -> Array (n + 1) a -> Array n a
numEltDotprodInner (ShX (Init (n : sh)) Int -> SNat (Rank (Init (n : sh)))
forall (sh :: [Maybe Nat]) i. ShX sh i -> SNat (Rank sh)
shxRank (IShX (n : sh) -> ShX (Init (n : sh)) Int
forall (n :: Maybe Nat) (sh :: [Maybe Nat]) i.
ShX (n : sh) i -> ShX (Init (n : sh)) i
shxInit IShX (n : sh)
IShX (sh ++ '[n])
sh1))) Array (Rank sh + 1) a
Array (Rank (sh ++ '[n])) a
a Array (Rank sh + 1) a
Array (Rank (sh ++ '[n])) a
b))
| Bool
otherwise -> String -> Mixed sh a
forall a. HasCallStack => String -> a
error (String -> Mixed sh a) -> String -> Mixed sh a
forall a b. (a -> b) -> a -> b
$ String
"mdot1Inner: Unequal shapes (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ IShX (sh ++ '[n]) -> String
forall a. Show a => a -> String
show IShX (sh ++ '[n])
sh1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" and " String -> ShowS
forall a. [a] -> [a] -> [a]
++ IShX (sh ++ '[n]) -> String
forall a. Show a => a -> String
show IShX (sh ++ '[n])
sh2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
IShX (sh ++ '[n])
ZSX -> String -> Mixed sh a
forall a. HasCallStack => String -> a
error String
"unreachable"
mdot :: (PrimElt a, NumElt a) => Mixed sh a -> Mixed sh a -> a
mdot :: forall a (sh :: [Maybe Nat]).
(PrimElt a, NumElt a) =>
Mixed sh a -> Mixed sh a -> a
mdot Mixed sh a
a Mixed sh a
b =
Mixed '[] a -> a
forall a. Elt a => Mixed '[] a -> a
munScalar (Mixed '[] a -> a) -> Mixed '[] a -> a
forall a b. (a -> b) -> a -> b
$
Proxy (Flatten' 1 sh)
-> Mixed ('[] ++ '[Flatten' 1 sh]) a
-> Mixed ('[] ++ '[Flatten' 1 sh]) a
-> Mixed '[] a
forall (sh :: [Maybe Nat]) (n :: Maybe Nat) a.
(PrimElt a, NumElt a) =>
Proxy n
-> Mixed (sh ++ '[n]) a -> Mixed (sh ++ '[n]) a -> Mixed sh a
mdot1Inner Proxy (Flatten' 1 sh)
forall {k} (t :: k). Proxy t
Proxy (Mixed '[Flatten' 1 sh] (Primitive a) -> Mixed '[Flatten' 1 sh] a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive a) -> Mixed '[Flatten' 1 sh] (Primitive a)
forall a (sh :: [Maybe Nat]).
Elt a =>
Mixed sh a -> Mixed '[Flatten sh] a
mflatten (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive Mixed sh a
a)))
(Mixed '[Flatten' 1 sh] (Primitive a) -> Mixed '[Flatten' 1 sh] a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive a) -> Mixed '[Flatten' 1 sh] (Primitive a)
forall a (sh :: [Maybe Nat]).
Elt a =>
Mixed sh a -> Mixed '[Flatten sh] a
mflatten (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive Mixed sh a
b)))
mtoXArrayPrimP :: Mixed sh (Primitive a) -> (IShX sh, XArray sh a)
mtoXArrayPrimP :: forall (sh :: [Maybe Nat]) a.
Mixed sh (Primitive a) -> (IShX sh, XArray sh a)
mtoXArrayPrimP (M_Primitive IShX sh
sh XArray sh a
arr) = (IShX sh
sh, XArray sh a
arr)
mtoXArrayPrim :: PrimElt a => Mixed sh a -> (IShX sh, XArray sh a)
mtoXArrayPrim :: forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> (IShX sh, XArray sh a)
mtoXArrayPrim = Mixed sh (Primitive a) -> (IShX sh, XArray sh a)
forall (sh :: [Maybe Nat]) a.
Mixed sh (Primitive a) -> (IShX sh, XArray sh a)
mtoXArrayPrimP (Mixed sh (Primitive a) -> (IShX sh, XArray sh a))
-> (Mixed sh a -> Mixed sh (Primitive a))
-> Mixed sh a
-> (IShX sh, XArray sh a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive
mfromXArrayPrimP :: StaticShX sh -> XArray sh a -> Mixed sh (Primitive a)
mfromXArrayPrimP :: forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> Mixed sh (Primitive a)
mfromXArrayPrimP StaticShX sh
ssh XArray sh a
arr = IShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive (StaticShX sh -> XArray sh a -> IShX sh
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> IShX sh
X.shape StaticShX sh
ssh XArray sh a
arr) XArray sh a
arr
mfromXArrayPrim :: PrimElt a => StaticShX sh -> XArray sh a -> Mixed sh a
mfromXArrayPrim :: forall a (sh :: [Maybe Nat]).
PrimElt a =>
StaticShX sh -> XArray sh a -> Mixed sh a
mfromXArrayPrim = (Mixed sh (Primitive a) -> Mixed sh a
forall (sh :: [Maybe Nat]). Mixed sh (Primitive a) -> Mixed sh a
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive a) -> Mixed sh a)
-> (XArray sh a -> Mixed sh (Primitive a))
-> XArray sh a
-> Mixed sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((XArray sh a -> Mixed sh (Primitive a))
-> XArray sh a -> Mixed sh a)
-> (StaticShX sh -> XArray sh a -> Mixed sh (Primitive a))
-> StaticShX sh
-> XArray sh a
-> Mixed sh a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StaticShX sh -> XArray sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]) a.
StaticShX sh -> XArray sh a -> Mixed sh (Primitive a)
mfromXArrayPrimP
mliftPrim :: (PrimElt a, PrimElt b)
=> (a -> b)
-> Mixed sh a -> Mixed sh b
mliftPrim :: forall a b (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b) =>
(a -> b) -> Mixed sh a -> Mixed sh b
mliftPrim a -> b
f (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh (X.XArray Array (Rank sh) a
arr)) = Mixed sh (Primitive b) -> Mixed sh b
forall (sh :: [Maybe Nat]). Mixed sh (Primitive b) -> Mixed sh b
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive b) -> Mixed sh b)
-> Mixed sh (Primitive b) -> Mixed sh b
forall a b. (a -> b) -> a -> b
$ IShX sh -> XArray sh b -> Mixed sh (Primitive b)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (Array (Rank sh) b -> XArray sh b
forall (sh :: [Maybe Nat]) a. Array (Rank sh) a -> XArray sh a
X.XArray ((a -> b) -> Array (Rank sh) a -> Array (Rank sh) b
forall a b (n :: Nat).
(Unbox a, Unbox b) =>
(a -> b) -> Array n a -> Array n b
S.mapA a -> b
f Array (Rank sh) a
arr))
mliftPrim2 :: (PrimElt a, PrimElt b, PrimElt c)
=> (a -> b -> c)
-> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftPrim2 :: forall a b c (sh :: [Maybe Nat]).
(PrimElt a, PrimElt b, PrimElt c) =>
(a -> b -> c) -> Mixed sh a -> Mixed sh b -> Mixed sh c
mliftPrim2 a -> b -> c
f (Mixed sh a -> Mixed sh (Primitive a)
forall (sh :: [Maybe Nat]). Mixed sh a -> Mixed sh (Primitive a)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
sh (X.XArray Array (Rank sh) a
arr1)) (Mixed sh b -> Mixed sh (Primitive b)
forall (sh :: [Maybe Nat]). Mixed sh b -> Mixed sh (Primitive b)
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh a -> Mixed sh (Primitive a)
toPrimitive -> M_Primitive IShX sh
_ (X.XArray Array (Rank sh) b
arr2)) =
Mixed sh (Primitive c) -> Mixed sh c
forall (sh :: [Maybe Nat]). Mixed sh (Primitive c) -> Mixed sh c
forall a (sh :: [Maybe Nat]).
PrimElt a =>
Mixed sh (Primitive a) -> Mixed sh a
fromPrimitive (Mixed sh (Primitive c) -> Mixed sh c)
-> Mixed sh (Primitive c) -> Mixed sh c
forall a b. (a -> b) -> a -> b
$ IShX sh -> XArray sh c -> Mixed sh (Primitive c)
forall (sh :: [Maybe Nat]) a.
IShX sh -> XArray sh a -> Mixed sh (Primitive a)
M_Primitive IShX sh
sh (Array (Rank sh) c -> XArray sh c
forall (sh :: [Maybe Nat]) a. Array (Rank sh) a -> XArray sh a
X.XArray ((a -> b -> c)
-> Array (Rank sh) a -> Array (Rank sh) b -> Array (Rank sh) c
forall a b c (n :: Nat).
(Unbox a, Unbox b, Unbox c) =>
(a -> b -> c) -> Array n a -> Array n b -> Array n c
S.zipWithA a -> b -> c
f Array (Rank sh) a
arr1 Array (Rank sh) b
arr2))