module Foreign.CUDA.Cusparse.Types (
Handle(..), HybMat(..), MatDescr(..),
Csrsv2Info(..), Csric02Info (..), Csrilu02Info (..),
Bsrsv2Info(..), Bsric02Info (..), Bsrilu02Info (..),
Bsrsm2Info(..),
SolvePolicy (..), SolveAnalysisInfo(..),
Operation(..), Status(..),
Action(..), Direction(..), FillMode(..), PointerMode(..), DiagType(..),
IndexBase(..), MatrixType(..), HybPartition(..),
) where
import Foreign (Ptr)
newtype Handle = Handle { useHandle :: ((Ptr ()))}
newtype HybMat = HybMat { useHybMat :: ((Ptr ()))}
newtype MatDescr = MatDescr { useMatDescr :: ((Ptr ()))}
newtype Csrsv2Info = Csrsv2Info { useCsrsv2Info :: ((Ptr ()))}
newtype Csric02Info = Csric02Info { useCsric02Info :: ((Ptr ()))}
newtype Csrilu02Info = Csrilu02Info { useCsrilu02Info :: ((Ptr ()))}
newtype Bsrsv2Info = Bsrsv2Info { useBsrsv2Info :: ((Ptr ()))}
newtype Bsric02Info = Bsric02Info { useBsric02Info :: ((Ptr ()))}
newtype Bsrilu02Info = Bsrilu02Info { useBsrilu02Info :: ((Ptr ()))}
newtype Bsrsm2Info = Bsrsm2Info { useBsrsm2Info :: ((Ptr ()))}
newtype SolveAnalysisInfo = SolveAnalysisInfo { useSolveAnalysisInfo :: ((Ptr ()))}
data SolvePolicy = NoLevel
| UseLevel
deriving (Eq,Show)
instance Enum SolvePolicy where
succ NoLevel = UseLevel
succ UseLevel = error "SolvePolicy.succ: UseLevel has no successor"
pred UseLevel = NoLevel
pred NoLevel = error "SolvePolicy.pred: NoLevel has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from UseLevel
fromEnum NoLevel = 0
fromEnum UseLevel = 1
toEnum 0 = NoLevel
toEnum 1 = UseLevel
toEnum unmatched = error ("SolvePolicy.toEnum: Cannot match " ++ show unmatched)
data Status = Success
| NotInitialized
| AllocFailed
| InvalidValue
| ArchMismatch
| MappingError
| ExecutionFailed
| InternalError
| MatrixTypeNotSupported
| ZeroPivot
deriving (Eq,Show)
instance Enum Status where
succ Success = NotInitialized
succ NotInitialized = AllocFailed
succ AllocFailed = InvalidValue
succ InvalidValue = ArchMismatch
succ ArchMismatch = MappingError
succ MappingError = ExecutionFailed
succ ExecutionFailed = InternalError
succ InternalError = MatrixTypeNotSupported
succ MatrixTypeNotSupported = ZeroPivot
succ ZeroPivot = error "Status.succ: ZeroPivot has no successor"
pred NotInitialized = Success
pred AllocFailed = NotInitialized
pred InvalidValue = AllocFailed
pred ArchMismatch = InvalidValue
pred MappingError = ArchMismatch
pred ExecutionFailed = MappingError
pred InternalError = ExecutionFailed
pred MatrixTypeNotSupported = InternalError
pred ZeroPivot = MatrixTypeNotSupported
pred Success = error "Status.pred: Success has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from ZeroPivot
fromEnum Success = 0
fromEnum NotInitialized = 1
fromEnum AllocFailed = 2
fromEnum InvalidValue = 3
fromEnum ArchMismatch = 4
fromEnum MappingError = 5
fromEnum ExecutionFailed = 6
fromEnum InternalError = 7
fromEnum MatrixTypeNotSupported = 8
fromEnum ZeroPivot = 9
toEnum 0 = Success
toEnum 1 = NotInitialized
toEnum 2 = AllocFailed
toEnum 3 = InvalidValue
toEnum 4 = ArchMismatch
toEnum 5 = MappingError
toEnum 6 = ExecutionFailed
toEnum 7 = InternalError
toEnum 8 = MatrixTypeNotSupported
toEnum 9 = ZeroPivot
toEnum unmatched = error ("Status.toEnum: Cannot match " ++ show unmatched)
data Action = Symbolic
| Numeric
deriving (Eq,Show)
instance Enum Action where
succ Symbolic = Numeric
succ Numeric = error "Action.succ: Numeric has no successor"
pred Numeric = Symbolic
pred Symbolic = error "Action.pred: Symbolic has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Numeric
fromEnum Symbolic = 0
fromEnum Numeric = 1
toEnum 0 = Symbolic
toEnum 1 = Numeric
toEnum unmatched = error ("Action.toEnum: Cannot match " ++ show unmatched)
data Direction = Row
| Column
deriving (Eq,Show)
instance Enum Direction where
succ Row = Column
succ Column = error "Direction.succ: Column has no successor"
pred Column = Row
pred Row = error "Direction.pred: Row has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Column
fromEnum Row = 0
fromEnum Column = 1
toEnum 0 = Row
toEnum 1 = Column
toEnum unmatched = error ("Direction.toEnum: Cannot match " ++ show unmatched)
data Operation = NonTranspose
| Transpose
| ConjugateTranspose
deriving (Eq,Show)
instance Enum Operation where
succ NonTranspose = Transpose
succ Transpose = ConjugateTranspose
succ ConjugateTranspose = error "Operation.succ: ConjugateTranspose has no successor"
pred Transpose = NonTranspose
pred ConjugateTranspose = Transpose
pred NonTranspose = error "Operation.pred: NonTranspose has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from ConjugateTranspose
fromEnum NonTranspose = 0
fromEnum Transpose = 1
fromEnum ConjugateTranspose = 2
toEnum 0 = NonTranspose
toEnum 1 = Transpose
toEnum 2 = ConjugateTranspose
toEnum unmatched = error ("Operation.toEnum: Cannot match " ++ show unmatched)
data IndexBase = Zero
| One
deriving (Eq,Show)
instance Enum IndexBase where
succ Zero = One
succ One = error "IndexBase.succ: One has no successor"
pred One = Zero
pred Zero = error "IndexBase.pred: Zero has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from One
fromEnum Zero = 0
fromEnum One = 1
toEnum 0 = Zero
toEnum 1 = One
toEnum unmatched = error ("IndexBase.toEnum: Cannot match " ++ show unmatched)
data HybPartition = Auto
| User
| Max
deriving (Eq,Show)
instance Enum HybPartition where
succ Auto = User
succ User = Max
succ Max = error "HybPartition.succ: Max has no successor"
pred User = Auto
pred Max = User
pred Auto = error "HybPartition.pred: Auto has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Max
fromEnum Auto = 0
fromEnum User = 1
fromEnum Max = 2
toEnum 0 = Auto
toEnum 1 = User
toEnum 2 = Max
toEnum unmatched = error ("HybPartition.toEnum: Cannot match " ++ show unmatched)
data MatrixType = General
| Symmetric
| Hermitian
| Triangular
deriving (Eq,Show)
instance Enum MatrixType where
succ General = Symmetric
succ Symmetric = Hermitian
succ Hermitian = Triangular
succ Triangular = error "MatrixType.succ: Triangular has no successor"
pred Symmetric = General
pred Hermitian = Symmetric
pred Triangular = Hermitian
pred General = error "MatrixType.pred: General has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Triangular
fromEnum General = 0
fromEnum Symmetric = 1
fromEnum Hermitian = 2
fromEnum Triangular = 3
toEnum 0 = General
toEnum 1 = Symmetric
toEnum 2 = Hermitian
toEnum 3 = Triangular
toEnum unmatched = error ("MatrixType.toEnum: Cannot match " ++ show unmatched)
data FillMode = Lower
| Upper
deriving (Eq,Show)
instance Enum FillMode where
succ Lower = Upper
succ Upper = error "FillMode.succ: Upper has no successor"
pred Upper = Lower
pred Lower = error "FillMode.pred: Lower has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Upper
fromEnum Lower = 0
fromEnum Upper = 1
toEnum 0 = Lower
toEnum 1 = Upper
toEnum unmatched = error ("FillMode.toEnum: Cannot match " ++ show unmatched)
data DiagType = NonUnit
| Unit
deriving (Eq,Show)
instance Enum DiagType where
succ NonUnit = Unit
succ Unit = error "DiagType.succ: Unit has no successor"
pred Unit = NonUnit
pred NonUnit = error "DiagType.pred: NonUnit has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Unit
fromEnum NonUnit = 0
fromEnum Unit = 1
toEnum 0 = NonUnit
toEnum 1 = Unit
toEnum unmatched = error ("DiagType.toEnum: Cannot match " ++ show unmatched)
data PointerMode = Host
| Device
deriving (Eq,Show)
instance Enum PointerMode where
succ Host = Device
succ Device = error "PointerMode.succ: Device has no successor"
pred Device = Host
pred Host = error "PointerMode.pred: Host has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from Device
fromEnum Host = 0
fromEnum Device = 1
toEnum 0 = Host
toEnum 1 = Device
toEnum unmatched = error ("PointerMode.toEnum: Cannot match " ++ show unmatched)