easytensor-0.3.0.0: src-ghcjs/Numeric/DataFrame/Inference.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
-----------------------------------------------------------------------------
-- |
-- Module : Numeric.DataFrame.Inference
-- Copyright : (c) Artem Chirkin
-- License : BSD3
--
-- Maintainer : chirkin@arch.ethz.ch
--
-- The module provides data types and functions to infer typeclasses at runtime.
--
-----------------------------------------------------------------------------
module Numeric.DataFrame.Inference
( PrimBytesEvidence, inferPrimBytes
, ElementWiseEvidence, inferElementWise
, NumericFrameEvidence, inferNumericFrame
) where
import Numeric.Array
import Numeric.Array.ElementWise
import Numeric.Commons
import Numeric.DataFrame.Type
import Numeric.Dimensions
-- | Evidence for PrimBytes class
type PrimBytesEvidence t (ds :: [Nat])
= Evidence (PrimBytes (DataFrame t ds))
-- | Evidence for ElementWise class
type ElementWiseEvidence t (ds :: [Nat])
= Evidence (ElementWise (Idx ds) t (DataFrame t ds))
-- | Allow all common operations on available data frames
type NumericFrameEvidence t (ds :: [Nat])
= Evidence ( NumericFrame t ds)
inferPrimBytes :: forall t (ds :: [Nat])
. ( ArrayInstanceInference t ds
, Dimensions ds
)
=> PrimBytesEvidence t ds
inferPrimBytes = case getArrayInstance @t @ds of
AIScalar -> case elemTypeInstance @t of
ETFloat -> Evidence
ETDouble -> Evidence
ETInt -> Evidence
ETInt8 -> Evidence
ETInt16 -> Evidence
ETInt32 -> Evidence
ETWord -> Evidence
ETWord8 -> Evidence
ETWord16 -> Evidence
ETWord32 -> Evidence
ETWord8C -> Evidence
AIArrayF -> Evidence
AIArrayD -> Evidence
AIArrayI -> Evidence
AIArrayI8 -> Evidence
AIArrayI16 -> Evidence
AIArrayI32 -> Evidence
AIArrayW -> Evidence
AIArrayW8 -> Evidence
AIArrayW16 -> Evidence
AIArrayW32 -> Evidence
AIArrayW8C -> Evidence
inferElementWise :: forall t (ds :: [Nat])
. ( ArrayInstanceInference t ds
, Dimensions ds
)
=> ElementWiseEvidence t ds
inferElementWise = case getArrayInstance @t @ds of
AIScalar -> Evidence
AIArrayF -> Evidence
AIArrayD -> Evidence
AIArrayI -> Evidence
AIArrayI8 -> Evidence
AIArrayI16 -> Evidence
AIArrayI32 -> Evidence
AIArrayW -> Evidence
AIArrayW8 -> Evidence
AIArrayW16 -> Evidence
AIArrayW32 -> Evidence
AIArrayW8C -> Evidence
inferNumericFrame :: forall t (ds :: [Nat])
. ( ArrayInstanceInference t ds
, Dimensions ds
)
=> NumericFrameEvidence t ds
inferNumericFrame
| Evidence <- inferDimKnownDims @ds +!+ inferDimFiniteList @ds
= case getArrayInstance @t @ds of
AIScalar -> case elemTypeInstance @t of
ETFloat -> Evidence
ETDouble -> Evidence
ETInt -> Evidence
ETInt8 -> Evidence
ETInt16 -> Evidence
ETInt32 -> Evidence
ETWord -> Evidence
ETWord8 -> Evidence
ETWord16 -> Evidence
ETWord32 -> Evidence
ETWord8C -> Evidence
AIArrayF -> Evidence
AIArrayD -> Evidence
AIArrayI -> Evidence
AIArrayI8 -> Evidence
AIArrayI16 -> Evidence
AIArrayI32 -> Evidence
AIArrayW -> Evidence
AIArrayW8 -> Evidence
AIArrayW16 -> Evidence
AIArrayW32 -> Evidence
AIArrayW8C -> Evidence