packages feed

eigen-hhlo-0.1.0.0: src/EigenHHLO/Core/BackendConfig.hs

{-# LANGUAGE OverloadedStrings #-}

-- | Build opaque 'backend_config' strings for XLA custom calls.
module EigenHHLO.Core.BackendConfig
    ( svdConfig
    , qrConfig
    , eigConfig
    , cholConfig
    , luConfig
    ) where

import Data.Text (Text)
import qualified Data.Text as T

-- | Build backend_config string for SVD.
svdConfig :: Integer -> Integer -> Char -> Char -> Text
svdConfig m n jobu jobvt = T.intercalate "," $
    [ "m=" <> T.pack (show m)
    , "n=" <> T.pack (show n)
    , "jobu=" <> T.pack [jobu]
    , "jobvt=" <> T.pack [jobvt]
    ]

-- | Build backend_config string for QR factorization.
qrConfig :: Integer -> Integer -> Text
qrConfig m n = T.intercalate "," $
    [ "m=" <> T.pack (show m)
    , "n=" <> T.pack (show n)
    ]

-- | Build backend_config string for symmetric eigenvalue.
eigConfig :: Integer -> Char -> Text
eigConfig n uplo = T.intercalate "," $
    [ "n=" <> T.pack (show n)
    , "uplo=" <> T.pack [uplo]
    ]

-- | Build backend_config string for Cholesky.
cholConfig :: Integer -> Char -> Text
cholConfig n uplo = T.intercalate "," $
    [ "n=" <> T.pack (show n)
    , "uplo=" <> T.pack [uplo]
    ]

-- | Build backend_config string for LU.
luConfig :: Integer -> Integer -> Text
luConfig m n = T.intercalate "," $
    [ "m=" <> T.pack (show m)
    , "n=" <> T.pack (show n)
    ]