summaryrefslogtreecommitdiff
path: root/packages/base/src/Internal/Modular.hs
diff options
context:
space:
mode:
Diffstat (limited to 'packages/base/src/Internal/Modular.hs')
-rw-r--r--packages/base/src/Internal/Modular.hs46
1 files changed, 0 insertions, 46 deletions
diff --git a/packages/base/src/Internal/Modular.hs b/packages/base/src/Internal/Modular.hs
index 5af038b..a211dd3 100644
--- a/packages/base/src/Internal/Modular.hs
+++ b/packages/base/src/Internal/Modular.hs
@@ -60,14 +60,6 @@ import Prelude hiding ((<>))
60 60
61 61
62 62
63-- | Wrapper with a phantom integer for statically checked modular arithmetic.
64newtype Mod (n :: Nat) t = Mod {unMod:: t}
65 deriving (Storable)
66
67instance (NFData t) => NFData (Mod n t)
68 where
69 rnf (Mod x) = rnf x
70
71infixr 5 ./. 63infixr 5 ./.
72type (./.) x n = Mod n x 64type (./.) x n = Mod n x
73 65
@@ -136,40 +128,6 @@ instance (Integral t, KnownNat n) => Num (Mod n t)
136 fromInteger = l0 (\m x -> fromInteger x `mod` (fromIntegral m)) 128 fromInteger = l0 (\m x -> fromInteger x `mod` (fromIntegral m))
137 129
138 130
139instance KnownNat m => Element (Mod m I)
140 where
141 constantD x n = i2f (constantD (unMod x) n)
142 extractR ord m mi is mj js = i2fM <$> extractR ord (f2iM m) mi is mj js
143 setRect i j m x = setRect i j (f2iM m) (f2iM x)
144 sortI = sortI . f2i
145 sortV = i2f . sortV . f2i
146 compareV u v = compareV (f2i u) (f2i v)
147 selectV c l e g = i2f (selectV c (f2i l) (f2i e) (f2i g))
148 remapM i j m = i2fM (remap i j (f2iM m))
149 rowOp c a i1 i2 j1 j2 x = rowOpAux (c_rowOpMI m') c (unMod a) i1 i2 j1 j2 (f2iM x)
150 where
151 m' = fromIntegral . natVal $ (undefined :: Proxy m)
152 gemm u a b c = gemmg (c_gemmMI m') (f2i u) (f2iM a) (f2iM b) (f2iM c)
153 where
154 m' = fromIntegral . natVal $ (undefined :: Proxy m)
155
156instance KnownNat m => Element (Mod m Z)
157 where
158 constantD x n = i2f (constantD (unMod x) n)
159 extractR ord m mi is mj js = i2fM <$> extractR ord (f2iM m) mi is mj js
160 setRect i j m x = setRect i j (f2iM m) (f2iM x)
161 sortI = sortI . f2i
162 sortV = i2f . sortV . f2i
163 compareV u v = compareV (f2i u) (f2i v)
164 selectV c l e g = i2f (selectV c (f2i l) (f2i e) (f2i g))
165 remapM i j m = i2fM (remap i j (f2iM m))
166 rowOp c a i1 i2 j1 j2 x = rowOpAux (c_rowOpML m') c (unMod a) i1 i2 j1 j2 (f2iM x)
167 where
168 m' = fromIntegral . natVal $ (undefined :: Proxy m)
169 gemm u a b c = gemmg (c_gemmML m') (f2i u) (f2iM a) (f2iM b) (f2iM c)
170 where
171 m' = fromIntegral . natVal $ (undefined :: Proxy m)
172
173 131
174instance KnownNat m => CTrans (Mod m I) 132instance KnownNat m => CTrans (Mod m I)
175instance KnownNat m => CTrans (Mod m Z) 133instance KnownNat m => CTrans (Mod m Z)
@@ -299,10 +257,6 @@ instance KnownNat m => Normed (Vector (Mod m Z))
299instance KnownNat m => Numeric (Mod m I) 257instance KnownNat m => Numeric (Mod m I)
300instance KnownNat m => Numeric (Mod m Z) 258instance KnownNat m => Numeric (Mod m Z)
301 259
302i2f :: Storable t => Vector t -> Vector (Mod n t)
303i2f v = unsafeFromForeignPtr (castForeignPtr fp) (i) (n)
304 where (fp,i,n) = unsafeToForeignPtr v
305
306f2i :: Storable t => Vector (Mod n t) -> Vector t 260f2i :: Storable t => Vector (Mod n t) -> Vector t
307f2i v = unsafeFromForeignPtr (castForeignPtr fp) (i) (n) 261f2i v = unsafeFromForeignPtr (castForeignPtr fp) (i) (n)
308 where (fp,i,n) = unsafeToForeignPtr v 262 where (fp,i,n) = unsafeToForeignPtr v