lol-cpp-0.2.0.0: A fast C++ backend for <https://hackage.haskell.org/package/lol lol>.

Copyright(c) Eric Crockett 2011-2017
Chris Peikert 2011-2017
LicenseGPL-3
Maintainerecrockett0@email.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Crypto.Lol.Cyclotomic.Tensor.CPP

Description

Wrapper for a C++ implementation of Tensor interfaces.

Synopsis

Documentation

data CT (m :: Factored) r Source #

An implementation of Tensor backend by C++ code.

Instances
IFunctor CT Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Associated Types

type IFElt CT a :: Constraint #

Methods

fmapI :: (IFElt CT a, IFElt CT b, Fact m) => (a -> b) -> CT m a -> CT m b #

zipWithI :: (IFElt CT a, IFElt CT b, IFElt CT c, Fact m) => (a -> b -> c) -> CT m a -> CT m b -> CT m c #

TensorPowDec CT Double Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

scalarPow :: Fact m => Double -> CT m Double #

powToDec :: Fact m => CT m Double -> CT m Double #

decToPow :: Fact m => CT m Double -> CT m Double #

twacePowDec :: Divides m m' => CT m' Double -> CT m Double #

embedPow :: Divides m m' => CT m Double -> CT m' Double #

embedDec :: Divides m m' => CT m Double -> CT m' Double #

coeffs :: Divides m m' => CT m' Double -> [CT m Double] #

powBasisPow :: Divides m m' => Tagged m [CT m' Double] #

TensorPowDec CT Int64 Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

scalarPow :: Fact m => Int64 -> CT m Int64 #

powToDec :: Fact m => CT m Int64 -> CT m Int64 #

decToPow :: Fact m => CT m Int64 -> CT m Int64 #

twacePowDec :: Divides m m' => CT m' Int64 -> CT m Int64 #

embedPow :: Divides m m' => CT m Int64 -> CT m' Int64 #

embedDec :: Divides m m' => CT m Int64 -> CT m' Int64 #

coeffs :: Divides m m' => CT m' Int64 -> [CT m Int64] #

powBasisPow :: Divides m m' => Tagged m [CT m' Int64] #

TensorG CT Double Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

mulGPow :: Fact m => CT m Double -> CT m Double #

mulGDec :: Fact m => CT m Double -> CT m Double #

divGPow :: Fact m => CT m Double -> Maybe (CT m Double) #

divGDec :: Fact m => CT m Double -> Maybe (CT m Double) #

TensorG CT Int64 Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

mulGPow :: Fact m => CT m Int64 -> CT m Int64 #

mulGDec :: Fact m => CT m Int64 -> CT m Int64 #

divGPow :: Fact m => CT m Int64 -> Maybe (CT m Int64) #

divGDec :: Fact m => CT m Int64 -> Maybe (CT m Int64) #

TensorGSqNorm CT Double Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

gSqNormDec :: Fact m => CT m Double -> Double #

TensorGSqNorm CT Int64 Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

gSqNormDec :: Fact m => CT m Int64 -> Int64 #

TensorCRT CT Maybe Double Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

crtFuncs :: Fact m => Maybe (Double -> CT m Double, CT m Double -> CT m Double, CT m Double -> CT m Double, CT m Double -> CT m Double, CT m Double -> CT m Double) #

crtExtFuncs :: Divides m m' => Maybe (CT m' Double -> CT m Double, CT m Double -> CT m' Double) #

TensorCRT CT Maybe Int64 Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

crtFuncs :: Fact m => Maybe (Int64 -> CT m Int64, CT m Int64 -> CT m Int64, CT m Int64 -> CT m Int64, CT m Int64 -> CT m Int64, CT m Int64 -> CT m Int64) #

crtExtFuncs :: Divides m m' => Maybe (CT m' Int64 -> CT m Int64, CT m Int64 -> CT m' Int64) #

TensorCRT CT Maybe (Complex Double) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

TensorCRT CT Identity (Complex Double) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Reflects q Int64 => TensorCRT CT Maybe (ZqBasic q Int64) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

crtFuncs :: Fact m => Maybe (ZqBasic q Int64 -> CT m (ZqBasic q Int64), CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64), CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64), CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64), CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64)) #

crtExtFuncs :: Divides m m' => Maybe (CT m' (ZqBasic q Int64) -> CT m (ZqBasic q Int64), CT m (ZqBasic q Int64) -> CT m' (ZqBasic q Int64)) #

TensorPowDec CT (Complex Double) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

TensorG CT (Complex Double) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

mulGPow :: Fact m => CT m (Complex Double) -> CT m (Complex Double) #

mulGDec :: Fact m => CT m (Complex Double) -> CT m (Complex Double) #

divGPow :: Fact m => CT m (Complex Double) -> Maybe (CT m (Complex Double)) #

divGDec :: Fact m => CT m (Complex Double) -> Maybe (CT m (Complex Double)) #

(Fact m, Ring r, Storable r) => C r (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

(*>) :: r -> CT m r -> CT m r #

(Reflects q Int64, Reflects q Double) => TensorPowDec CT (RRq q Double) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

scalarPow :: Fact m => RRq q Double -> CT m (RRq q Double) #

powToDec :: Fact m => CT m (RRq q Double) -> CT m (RRq q Double) #

decToPow :: Fact m => CT m (RRq q Double) -> CT m (RRq q Double) #

twacePowDec :: Divides m m' => CT m' (RRq q Double) -> CT m (RRq q Double) #

embedPow :: Divides m m' => CT m (RRq q Double) -> CT m' (RRq q Double) #

embedDec :: Divides m m' => CT m (RRq q Double) -> CT m' (RRq q Double) #

coeffs :: Divides m m' => CT m' (RRq q Double) -> [CT m (RRq q Double)] #

powBasisPow :: Divides m m' => Tagged m [CT m' (RRq q Double)] #

Reflects q Int64 => TensorPowDec CT (ZqBasic q Int64) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

scalarPow :: Fact m => ZqBasic q Int64 -> CT m (ZqBasic q Int64) #

powToDec :: Fact m => CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64) #

decToPow :: Fact m => CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64) #

twacePowDec :: Divides m m' => CT m' (ZqBasic q Int64) -> CT m (ZqBasic q Int64) #

embedPow :: Divides m m' => CT m (ZqBasic q Int64) -> CT m' (ZqBasic q Int64) #

embedDec :: Divides m m' => CT m (ZqBasic q Int64) -> CT m' (ZqBasic q Int64) #

coeffs :: Divides m m' => CT m' (ZqBasic q Int64) -> [CT m (ZqBasic q Int64)] #

powBasisPow :: Divides m m' => Tagged m [CT m' (ZqBasic q Int64)] #

Reflects q Int64 => TensorG CT (ZqBasic q Int64) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

mulGPow :: Fact m => CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64) #

mulGDec :: Fact m => CT m (ZqBasic q Int64) -> CT m (ZqBasic q Int64) #

divGPow :: Fact m => CT m (ZqBasic q Int64) -> Maybe (CT m (ZqBasic q Int64)) #

divGDec :: Fact m => CT m (ZqBasic q Int64) -> Maybe (CT m (ZqBasic q Int64)) #

(Reflects q Int64, Prime q, IrreduciblePoly (ZqBasic q Int64)) => TensorCRTSet CT (ZqBasic q Int64) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

crtSetDec :: (Divides m m', Coprime (PToF (CharOf (ZqBasic q Int64))) m') => Tagged m [CT m' (ZqBasic q Int64)] #

Fact m => Functor (CT m) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

fmap :: (a -> b) -> CT m a -> CT m b #

(<$) :: a -> CT m b -> CT m a #

Fact m => Applicative (CT m) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

pure :: a -> CT m a #

(<*>) :: CT m (a -> b) -> CT m a -> CT m b #

liftA2 :: (a -> b -> c) -> CT m a -> CT m b -> CT m c #

(*>) :: CT m a -> CT m b -> CT m b #

(<*) :: CT m a -> CT m b -> CT m a #

Fact m => Foldable (CT m) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

fold :: Monoid m0 => CT m m0 -> m0 #

foldMap :: Monoid m0 => (a -> m0) -> CT m a -> m0 #

foldr :: (a -> b -> b) -> b -> CT m a -> b #

foldr' :: (a -> b -> b) -> b -> CT m a -> b #

foldl :: (b -> a -> b) -> b -> CT m a -> b #

foldl' :: (b -> a -> b) -> b -> CT m a -> b #

foldr1 :: (a -> a -> a) -> CT m a -> a #

foldl1 :: (a -> a -> a) -> CT m a -> a #

toList :: CT m a -> [a] #

null :: CT m a -> Bool #

length :: CT m a -> Int #

elem :: Eq a => a -> CT m a -> Bool #

maximum :: Ord a => CT m a -> a #

minimum :: Ord a => CT m a -> a #

sum :: Num a => CT m a -> a #

product :: Num a => CT m a -> a #

Fact m => Traversable (CT m) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

traverse :: Applicative f => (a -> f b) -> CT m a -> f (CT m b) #

sequenceA :: Applicative f => CT m (f a) -> f (CT m a) #

mapM :: Monad m0 => (a -> m0 b) -> CT m a -> m0 (CT m b) #

sequence :: Monad m0 => CT m (m0 a) -> m0 (CT m a) #

TensorGaussian CT Double Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

tweakedGaussianDec :: (ToRational v, Fact m, MonadRandom rnd) => v -> rnd (CT m Double) #

Eq r => Eq (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

(==) :: CT m r -> CT m r -> Bool #

(/=) :: CT m r -> CT m r -> Bool #

Show (ArgType CT) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Show r => Show (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

showsPrec :: Int -> CT m r -> ShowS #

show :: CT m r -> String #

showList :: [CT m r] -> ShowS #

(Storable r, Random r, Fact m) => Random (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

randomR :: RandomGen g => (CT m r, CT m r) -> g -> (CT m r, g) #

random :: RandomGen g => g -> (CT m r, g) #

randomRs :: RandomGen g => (CT m r, CT m r) -> g -> [CT m r] #

randoms :: RandomGen g => g -> [CT m r] #

randomRIO :: (CT m r, CT m r) -> IO (CT m r) #

randomIO :: IO (CT m r) #

NFData r => NFData (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

rnf :: CT m r -> () #

(ZeroTestable r, Storable r) => C (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

isZero :: CT m r -> Bool #

(Additive r, Storable r, Fact m) => C (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

zero :: CT m r #

(+) :: CT m r -> CT m r -> CT m r #

(-) :: CT m r -> CT m r -> CT m r #

negate :: CT m r -> CT m r #

(Fact m, Ring r, Storable r) => C (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

(*) :: CT m r -> CT m r -> CT m r #

one :: CT m r #

fromInteger :: Integer -> CT m r #

(^) :: CT m r -> Integer -> CT m r #

(Protoable (IZipVector m r), Fact m, Storable r) => Protoable (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Associated Types

type ProtoType (CT m r) :: Type #

Methods

toProto :: CT m r -> ProtoType (CT m r) #

fromProto :: MonadError String m0 => ProtoType (CT m r) -> m0 (CT m r) #

(ApproxEqual r, Storable r) => ApproxEqual (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

(=~=) :: CT m r -> CT m r -> Bool #

(GFCtx fp d, Fact m, Additive (CT m fp)) => C (GF fp d) (CT m fp) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

Methods

(*>) :: GF fp d -> CT m fp -> CT m fp #

type IFElt CT a Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

type IFElt CT a = Storable a
type ProtoType (CT m r) Source # 
Instance details

Defined in Crypto.Lol.Cyclotomic.Tensor.CPP

type ProtoType (CT m r) = ProtoType (IZipVector m r)