{-# LANGUAGE GADTSyntax #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE MultiWayIf #-}


#ifndef O_LIQUID
-- Turn off Safe Haskell language extension due to liquid-base re-exports
{-# LANGUAGE Safe #-}
#endif

#if __GLASGOW_HASKELL__ == 810
-- Work around to fix GHC Issue #15304, issue popped up again in GHC 8.10, it should be fixed in GHC 8.12
-- This code is meant to reproduce MR 2608 for GHC 8.10
{-# OPTIONS_GHC -funfolding-keeness-factor=1 -funfolding-use-threshold=80 #-}
#endif



--------------------------------------------------------------------------------------------
-- |
-- Copyright   :  (C) 2017-2022 Nathan Waivio
-- License     :  BSD3
-- Maintainer  :  Nathan Waivio <nathan.waivio@gmail.com>
-- Stability   :  Stable
-- Portability :  unportable
--
-- Library implementing standard functions for the <https://en.wikipedia.org/wiki/Algebra_of_physical_space Algebra of Physical Space> Cl(3,0)
-- 
---------------------------------------------------------------------------------------------


module Algebra.Geometric.Cl3
(-- * The type for the Algebra of Physical Space
 Cl3(..),
 -- * Clifford Conjugate and Complex Conjugate
 bar, dag,
 -- * The littlest singular value
 lsv,
 -- * Constructor Selectors - For optimizing and simplifying calculations
 toR, toV3, toBV, toI,
 toPV, toH, toC,
 toBPV, toODD, toTPV,
 toAPS,
 -- * Pretty Printing for use with Octave
 showOctave,
 -- * Eliminate grades that are less than 'tol' to use a simpler Constructor
 reduce, tol,
#ifndef O_NO_STORABLE
 -- * Compact Storable types for the Cl3 Constructors with smart constructors
 Cl3_R, toCl3_R, fromCl3_R,
 Cl3_V3, toCl3_V3, fromCl3_V3,
 Cl3_BV, toCl3_BV, fromCl3_BV,
 Cl3_I, toCl3_I, fromCl3_I,
 Cl3_PV, toCl3_PV, fromCl3_PV,
 Cl3_H, toCl3_H, fromCl3_H,
 Cl3_C, toCl3_C, fromCl3_C,
 Cl3_BPV, toCl3_BPV, fromCl3_BPV,
 Cl3_ODD, toCl3_ODD, fromCl3_ODD,
 Cl3_TPV, toCl3_TPV, fromCl3_TPV,
 Cl3_APS, toCl3_APS, fromCl3_APS,
#endif
#ifndef O_NO_RANDOM
 -- * Random Instances
 randR, rangeR,
 randV3, rangeV3,
 randBV, rangeBV,
 randI, rangeI,
 randPV, rangePV,
 randH, rangeH,
 randC, rangeC,
 randBPV, rangeBPV,
 randODD, rangeODD,
 randTPV, rangeTPV,
 randAPS, rangeAPS,
 randUnitV3,
 randProjector,
 randNilpotent,
 randUnitary,
#endif
 -- * Helpful Functions
 eigvals, hasNilpotent,
 spectraldcmp, project,
 mIx, timesI,
 abssignum
) where

#ifndef O_NO_DERIVED
import Data.Data (Typeable, Data)
import GHC.Generics (Generic)
import Text.Read (Read,readPrec)
#endif

import Control.DeepSeq (NFData,rnf)

#ifndef O_NO_STORABLE
import Foreign.Storable (Storable, sizeOf, alignment, peek, poke)
import Foreign.Ptr (Ptr, plusPtr, castPtr)
#endif

#ifndef O_NO_RANDOM
import System.Random (RandomGen, Random, randomR, random)
#endif


-- | Cl3 provides specialized constructors for sub-algebras and other geometric objects
-- contained in the algebra.  Cl(3,0), abbreviated to Cl3, is a Geometric Algebra
-- of 3 dimensional space known as the Algebra of Physical Space (APS).  Geometric Algebras are Real
-- Clifford Algebras, double precision floats are used to approximate real numbers in this
-- library.  Single and Double grade combinations are specialized using algebraic datatypes
-- and live within the APS.
--
--   * 'R' is the constructor for the Real Scalar Sub-algebra Grade-0
--
--   * 'V3' is the Three Dimensional Real Vector constructor Grade-1
--
--   * 'BV' is the Bivector constructor Grade-2 an Imaginary Three Dimensional Vector
--
--   * 'I' is the Imaginary constructor Grade-3 and is the Pseudo-Scalar for APS
--
--   * 'PV' is the Paravector constructor with Grade-0 and Grade-1 elements, a Real Scalar plus Vector, (R + V3)
--
--   * 'H' is the Quaternion constructor it is the Even Sub-algebra with Grade-0 and Grade-2 elements, a Real Scalar plus Bivector, (R + BV)
--
--   * 'C' is the Complex constructor it is the Scalar Sub-algebra with Grade-0 and Grade-3 elements, a Real Scalar plus Imaginar Scalar, (R + I)
--
--   * 'BPV' is the Biparavector constructor with Grade-1 and Grade-2 elements, a Real Vector plus Bivector, (V3 + BV)
--
--   * 'ODD' is the Odd constructor with Grade-1 and Grade-3 elements, a Vector plus Imaginary Scalar, (V3 + I)
--
--   * 'TPV' is the Triparavector constructor with Grade-2 and Grade-3 elements, a Bivector plus Imaginary, (BV + I)
--
--   * 'APS' is the constructor for an element in the Algebra of Physical Space with Grade-0 through Grade-3 elements
--
data Cl3 where
  R   :: !Double -> Cl3 -- Real Scalar Sub-algebra
  V3  :: !Double -> !Double -> !Double -> Cl3 -- Three Dimensional Vectors
  BV  :: !Double -> !Double -> !Double -> Cl3 -- Bivectors, Imaginary Three Dimenstional Vectors
  I   :: !Double -> Cl3 -- Trivector Imaginary Pseudo-Scalar, Imaginary Scalar
  PV  :: !Double -> !Double -> !Double -> !Double -> Cl3 -- Paravector, Real Scalar plus Three Dimensional Real Vector, (R + V3)
  H   :: !Double -> !Double -> !Double -> !Double -> Cl3 -- Quaternion Even Sub-algebra, Real Scalar plus Bivector, (R + BV)
  C   :: !Double -> !Double -> Cl3 -- Complex Sub-algebra, Real Scalar plus Imaginary Scalar, (R + I)
  BPV :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> Cl3 -- Biparavector, Vector plus Bivector, (V3 + BV)
  ODD :: !Double -> !Double -> !Double -> !Double -> Cl3 -- Odd, Vector plus Imaginary, (V3 + I)
  TPV :: !Double -> !Double -> !Double -> !Double -> Cl3 -- Triparavector, Bivector plus Imaginary Scalar, (BV + I)
  APS :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> Cl3 -- Algebra of Physical Space
#ifndef O_NO_DERIVED
    deriving (Int -> Cl3 -> ShowS
[Cl3] -> ShowS
Cl3 -> String
(Int -> Cl3 -> ShowS)
-> (Cl3 -> String) -> ([Cl3] -> ShowS) -> Show Cl3
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Cl3] -> ShowS
$cshowList :: [Cl3] -> ShowS
show :: Cl3 -> String
$cshow :: Cl3 -> String
showsPrec :: Int -> Cl3 -> ShowS
$cshowsPrec :: Int -> Cl3 -> ShowS
Show, ReadPrec [Cl3]
ReadPrec Cl3
Int -> ReadS Cl3
ReadS [Cl3]
(Int -> ReadS Cl3)
-> ReadS [Cl3] -> ReadPrec Cl3 -> ReadPrec [Cl3] -> Read Cl3
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Cl3]
$creadListPrec :: ReadPrec [Cl3]
readPrec :: ReadPrec Cl3
$creadPrec :: ReadPrec Cl3
readList :: ReadS [Cl3]
$creadList :: ReadS [Cl3]
readsPrec :: Int -> ReadS Cl3
$creadsPrec :: Int -> ReadS Cl3
Read, Typeable, Typeable Cl3
DataType
Constr
Typeable Cl3
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Cl3 -> c Cl3)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Cl3)
-> (Cl3 -> Constr)
-> (Cl3 -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Cl3))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Cl3))
-> ((forall b. Data b => b -> b) -> Cl3 -> Cl3)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r)
-> (forall u. (forall d. Data d => d -> u) -> Cl3 -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Cl3 -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Cl3 -> m Cl3)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Cl3 -> m Cl3)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Cl3 -> m Cl3)
-> Data Cl3
Cl3 -> DataType
Cl3 -> Constr
(forall b. Data b => b -> b) -> Cl3 -> Cl3
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Cl3 -> c Cl3
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Cl3
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Cl3 -> u
forall u. (forall d. Data d => d -> u) -> Cl3 -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Cl3 -> m Cl3
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Cl3 -> m Cl3
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Cl3
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Cl3 -> c Cl3
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Cl3)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Cl3)
$cAPS :: Constr
$cTPV :: Constr
$cODD :: Constr
$cBPV :: Constr
$cC :: Constr
$cH :: Constr
$cPV :: Constr
$cI :: Constr
$cBV :: Constr
$cV3 :: Constr
$cR :: Constr
$tCl3 :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Cl3 -> m Cl3
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Cl3 -> m Cl3
gmapMp :: (forall d. Data d => d -> m d) -> Cl3 -> m Cl3
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Cl3 -> m Cl3
gmapM :: (forall d. Data d => d -> m d) -> Cl3 -> m Cl3
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Cl3 -> m Cl3
gmapQi :: Int -> (forall d. Data d => d -> u) -> Cl3 -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Cl3 -> u
gmapQ :: (forall d. Data d => d -> u) -> Cl3 -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Cl3 -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Cl3 -> r
gmapT :: (forall b. Data b => b -> b) -> Cl3 -> Cl3
$cgmapT :: (forall b. Data b => b -> b) -> Cl3 -> Cl3
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Cl3)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Cl3)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Cl3)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Cl3)
dataTypeOf :: Cl3 -> DataType
$cdataTypeOf :: Cl3 -> DataType
toConstr :: Cl3 -> Constr
$ctoConstr :: Cl3 -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Cl3
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Cl3
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Cl3 -> c Cl3
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Cl3 -> c Cl3
$cp1Data :: Typeable Cl3
Data, (forall x. Cl3 -> Rep Cl3 x)
-> (forall x. Rep Cl3 x -> Cl3) -> Generic Cl3
forall x. Rep Cl3 x -> Cl3
forall x. Cl3 -> Rep Cl3 x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Cl3 x -> Cl3
$cfrom :: forall x. Cl3 -> Rep Cl3 x
Generic)

#else

-- | In case we don't derive Show, provide 'showOctave' as the Show instance
instance Show Cl3 where
  show = showOctave

#endif


-- | Cl3 can be reduced to a normal form.
instance NFData Cl3 where
  rnf :: Cl3 -> ()
rnf !Cl3
_ = ()


-- |'showOctave' for useful for debug purposes.
-- The additional octave definition is needed:  
-- 
-- > e0 = [1,0;0,1]; e1=[0,1;1,0]; e2=[0,-i;i,0]; e3=[1,0;0,-1];
--
-- This allows one to take advantage of the isomorphism between Cl3 and M(2,C)
showOctave :: Cl3 -> String
showOctave :: Cl3 -> String
showOctave (R Double
a0) = Double -> String
forall a. Show a => a -> String
show Double
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0"
showOctave (V3 Double
a1 Double
a2 Double
a3) = Double -> String
forall a. Show a => a -> String
show Double
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3"
showOctave (BV Double
a23 Double
a31 Double
a12) = Double -> String
forall a. Show a => a -> String
show Double
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3"
showOctave (I Double
a123) = Double -> String
forall a. Show a => a -> String
show Double
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> String
forall a. Show a => a -> String
show Double
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3"
showOctave (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> String
forall a. Show a => a -> String
show Double
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3"
showOctave (C Double
a0 Double
a123) = Double -> String
forall a. Show a => a -> String
show Double
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> String
forall a. Show a => a -> String
show Double
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++
                                        Double -> String
forall a. Show a => a -> String
show Double
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3"
showOctave (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> String
forall a. Show a => a -> String
show Double
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> String
forall a. Show a => a -> String
show Double
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"
showOctave (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double -> String
forall a. Show a => a -> String
show Double
a0 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e0 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++
                                                Double -> String
forall a. Show a => a -> String
show Double
a23 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e1 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a31 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e2 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a12 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e3 + " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
a123 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"i*e0"


-- |Cl(3,0) has the property of equivalence.  "Eq" is "True" when all of the grade elements are equivalent.
instance Eq Cl3 where
  (R Double
a0) == :: Cl3 -> Cl3 -> Bool
== (R Double
b0) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0

  (R Double
a0) == (V3 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (BV Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (I Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (C Double
b0 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (R Double
a0) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (V3 Double
a1 Double
a2 Double
a3) == (R Double
b0) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (R Double
b0) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (R Double
b0) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (R Double
b0) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (R Double
b0) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (C Double
a0 Double
a123) == (R Double
b0) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (R Double
b0) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (R Double
b0) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (R Double
b0) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (R Double
b0) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (V3 Double
a1 Double
a2 Double
a3) == (V3 Double
b1 Double
b2 Double
b3) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3

  (V3 Double
a1 Double
a2 Double
a3) == (BV Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (I Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (C Double
b0 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (V3 Double
a1 Double
a2 Double
a3) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (BV Double
a23 Double
a31 Double
a12) == (V3 Double
b1 Double
b2 Double
b3) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (V3 Double
b1 Double
b2 Double
b3) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (V3 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (V3 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (C Double
a0 Double
a123) == (V3 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (V3 Double
b1 Double
b2 Double
b3) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (V3 Double
b1 Double
b2 Double
b3) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (V3 Double
b1 Double
b2 Double
b3) = Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (V3 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (BV Double
a23 Double
a31 Double
a12) == (BV Double
b23 Double
b31 Double
b12) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12

  (BV Double
a23 Double
a31 Double
a12) == (I Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (C Double
b0 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BV Double
a23 Double
a31 Double
a12) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (I Double
a123) == (BV Double
b23 Double
b31 Double
b12) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (BV Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (BV Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12
  (C Double
a0 Double
a123) == (BV Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (BV Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (BV Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (BV Double
b23 Double
b31 Double
b12) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (BV Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (I Double
a123) == (I Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123

  (I Double
a123) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (C Double
b0 Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (I Double
a123) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (I Double
b123) = Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (I Double
b123) = Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (C Double
a0 Double
a123) == (I Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (I Double
b123) = Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (I Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (I Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (I Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3

  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (C Double
b0 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (H Double
a0 Double
a23 Double
a31 Double
a12) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (C Double
a0 Double
a123) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (H Double
a0 Double
a23 Double
a31 Double
a12) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12

  (H Double
a0 Double
a23 Double
a31 Double
a12) == (C Double
b0 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (C Double
a0 Double
a123) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (C Double
a0 Double
a123) == (C Double
b0 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123

  (C Double
a0 Double
a123) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (C Double
a0 Double
a123) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (C Double
a0 Double
a123) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (C Double
a0 Double
a123) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (C Double
b0 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (C Double
b0 Double
b123) = Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (C Double
b0 Double
b123) = Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (C Double
b0 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12
                                                                              Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31
                                                                             Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123 Bool -> Bool -> Bool
&& Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123
                                                                            Bool -> Bool -> Bool
&& Double
b0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
b3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23 Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123
                                                                            Bool -> Bool -> Bool
&& Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0

  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) == (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b0 Bool -> Bool -> Bool
&& Double
a1 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b1 Bool -> Bool -> Bool
&& Double
a2 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b2 Bool -> Bool -> Bool
&& Double
a3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b3 Bool -> Bool -> Bool
&& Double
a23 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b23
                                                                                      Bool -> Bool -> Bool
&& Double
a31 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b31 Bool -> Bool -> Bool
&& Double
a12 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b12 Bool -> Bool -> Bool
&& Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
b123


-- |Cl3 has a total preorder ordering in which all pairs are comparable by two real valued functions.
-- Comparison of two reals is just the typical real compare function.  Comparison of to imaginary numbers
-- is just the typical comparison function.  When reals are compared to anything else it will compare the
-- absolute value of the reals to the magnitude of the other cliffor.  Compare of two complex values
-- compares the polar magnitude of the complex numbers.  Compare of two vectors compares the vector
-- magnitudes.  The Ord instance for the general case is based on the singular values of each cliffor and
-- this Ordering compares the largest singular value 'abs' and then the littlest singular value 'lsv'.
-- Some arbitrary cliffors may return EQ for Ord but not be exactly '==' equivalent, but they are related
-- by a right and left multiplication of two unitary elements.  For instance for the Cliffors A and B,
-- A == B could be False, but compare A B is EQ, because A * V = U * B, where V and U are unitary.  
instance Ord Cl3 where
  compare :: Cl3 -> Cl3 -> Ordering
compare (R Double
a0) (R Double
b0) = Double -> Double -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Double
a0 Double
b0 -- Real Numbers have a total order within the limitations of Double Precision comparison
  compare (I Double
a123) (I Double
b123) = Double -> Double -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Double
a123 Double
b123 -- Imaginary Numbers have a total order within the limitations of Double Precision comparison
  compare Cl3
cliffor1 Cl3
cliffor2 =
     let (R Double
a0) = Cl3 -> Cl3
forall a. Num a => a -> a
abs Cl3
cliffor1
         (R Double
b0) = Cl3 -> Cl3
forall a. Num a => a -> a
abs Cl3
cliffor2
         (R Double
a0') = Cl3 -> Cl3
lsv Cl3
cliffor1
         (R Double
b0') = Cl3 -> Cl3
lsv Cl3
cliffor2
     in case Double -> Double -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Double
a0 Double
b0 of
          Ordering
LT -> Ordering
LT
          Ordering
GT -> Ordering
GT
          Ordering
EQ -> Double -> Double -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Double
a0' Double
b0'



-- |Cl3 has a "Num" instance.  "Num" is addition, geometric product, negation, 'abs' the largest
-- singular value, and 'signum'.
-- 
instance Num Cl3 where
  -- | Cl3 can be added
  (R Double
a0) + :: Cl3 -> Cl3 -> Cl3
+ (R Double
b0) = Double -> Cl3
R (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0)

  (R Double
a0) + (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
b1 Double
b2 Double
b3
  (R Double
a0) + (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 Double
b23 Double
b31 Double
b12
  (R Double
a0) + (I Double
b123) = Double -> Double -> Cl3
C Double
a0 Double
b123
  (R Double
a0) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
PV (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b1 Double
b2 Double
b3
  (R Double
a0) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b23 Double
b31 Double
b12
  (R Double
a0) + (C Double
b0 Double
b123) = Double -> Double -> Cl3
C (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b123
  (R Double
a0) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
0
  (R Double
a0) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 Double
0 Double
0 Double
0 Double
b123
  (R Double
a0) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 Double
b23 Double
b31 Double
b12 Double
b123
  (R Double
a0) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123

  (V3 Double
a1 Double
a2 Double
a3) + (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
PV Double
b0 Double
a1 Double
a2 Double
a3
  (BV Double
a23 Double
a31 Double
a12) + (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
H Double
b0 Double
a23 Double
a31 Double
a12
  (I Double
a123) + (R Double
b0) = Double -> Double -> Cl3
C Double
b0 Double
a123
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
PV (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a1 Double
a2 Double
a3
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
H (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a23 Double
a31 Double
a12
  (C Double
a0 Double
a123) + (R Double
b0) = Double -> Double -> Cl3
C (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a123
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (R Double
b0) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (R Double
b0) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 Double
a123
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (R Double
b0) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 Double
a123
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (R Double
b0) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123

  (V3 Double
a1 Double
a2 Double
a3) + (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Cl3
V3 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3)

  (V3 Double
a1 Double
a2 Double
a3) + (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12
  (V3 Double
a1 Double
a2 Double
a3) + (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 Double
b123
  (V3 Double
a1 Double
a2 Double
a3) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
PV Double
b0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3)
  (V3 Double
a1 Double
a2 Double
a3) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 Double
0
  (V3 Double
a1 Double
a2 Double
a3) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 Double
b123
  (V3 Double
a1 Double
a2 Double
a3) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
b23 Double
b31 Double
b12
  (V3 Double
a1 Double
a2 Double
a3) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
b123
  (V3 Double
a1 Double
a2 Double
a3) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 Double
b123
  (V3 Double
a1 Double
a2 Double
a3) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
b23 Double
b31 Double
b12 Double
b123

  (BV Double
a23 Double
a31 Double
a12) + (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12
  (I Double
a123) + (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
ODD Double
b1 Double
b2 Double
b3 Double
a123
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3)
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 Double
0
  (C Double
a0 Double
a123) + (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 Double
0 Double
0 Double
0 Double
a123
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
a23 Double
a31 Double
a12
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
a123
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 Double
a123
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
a23 Double
a31 Double
a12 Double
a123

  (BV Double
a23 Double
a31 Double
a12) + (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Cl3
BV (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)

  (BV Double
a23 Double
a31 Double
a12) + (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 Double
b123
  (BV Double
a23 Double
a31 Double
a12) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 Double
0
  (BV Double
a23 Double
a31 Double
a12) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H Double
b0 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)
  (BV Double
a23 Double
a31 Double
a12) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 Double
b123
  (BV Double
a23 Double
a31 Double
a12) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
b1 Double
b2 Double
b3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)
  (BV Double
a23 Double
a31 Double
a12) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 Double
b123
  (BV Double
a23 Double
a31 Double
a12) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double -> Double -> Double -> Double -> Cl3
TPV (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
b123
  (BV Double
a23 Double
a31 Double
a12) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
b1 Double
b2 Double
b3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
b123

  (I Double
a123) + (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
TPV Double
b23 Double
b31 Double
b12 Double
a123
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)
  (C Double
a0 Double
a123) + (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 Double
b23 Double
b31 Double
b12 Double
a123
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 Double
a123
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
TPV (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
a123
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
a123

  (I Double
a123) + (I Double
b123) = Double -> Cl3
I (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (I Double
a123) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
b1 Double
b2 Double
b3 Double
0 Double
0 Double
0 Double
a123
  (I Double
a123) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
0 Double
0 Double
0 Double
b23 Double
b31 Double
b12 Double
a123
  (I Double
a123) + (C Double
b0 Double
b123) = Double -> Double -> Cl3
C Double
b0 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (I Double
a123) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
a123
  (I Double
a123) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
b1 Double
b2 Double
b3 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (I Double
a123) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
b23 Double
b31 Double
b12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (I Double
a123) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (I Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 Double
b123
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (I Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 Double
b123
  (C Double
a0 Double
a123) + (I Double
b123) = Double -> Double -> Cl3
C Double
a0 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (I Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
b123
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (I Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
PV (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3)

  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 Double
b123
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
b23 Double
b31 Double
b12 Double
0
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
0 Double
0 Double
0 Double
b123
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 Double
b123
  (PV Double
a0 Double
a1 Double
a2 Double
a3) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
b23 Double
b31 Double
b12 Double
b123

  (H Double
a0 Double
a23 Double
a31 Double
a12) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 Double
0
  (C Double
a0 Double
a123) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b1 Double
b2 Double
b3 Double
0 Double
0 Double
0 Double
a123
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
a23 Double
a31 Double
a12 Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
0 Double
0 Double
0 Double
a123
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 Double
a123
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
a23 Double
a31 Double
a12 Double
a123

  (H Double
a0 Double
a23 Double
a31 Double
a12) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)

  (H Double
a0 Double
a23 Double
a31 Double
a12) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 Double
b123
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 Double
b123
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
b123
  (H Double
a0 Double
a23 Double
a31 Double
a12) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b1 Double
b2 Double
b3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
b123

  (C Double
a0 Double
a123) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
0 Double
0 Double
0 Double
b23 Double
b31 Double
b12 Double
a123
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
0
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 Double
a123
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
0 Double
0 Double
0 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
a123
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a1 Double
a2 Double
a3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
a123

  (C Double
a0 Double
a123) + (C Double
b0 Double
b123) = Double -> Double -> Cl3
C (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (C Double
a0 Double
a123) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
a123
  (C Double
a0 Double
a123) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
b1 Double
b2 Double
b3 Double
0 Double
0 Double
0 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (C Double
a0 Double
a123) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 Double
b23 Double
b31 Double
b12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (C Double
a0 Double
a123) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
b123
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0) Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
a23 Double
a31 Double
a12 Double
b123
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
b123
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
b123

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
b23 Double
b31 Double
b12 Double
a123
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
b1 Double
b2 Double
b3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
a123
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) Double
a123

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 Double
b23 Double
b31 Double
b12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
b23 Double
b31 Double
b12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
b1 Double
b2 Double
b3 Double
a23 Double
a31 Double
a12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3) Double
a23 Double
a31 Double
a12 (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double -> Double -> Double -> Double -> Cl3
TPV (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
b0 Double
b1 Double
b2 Double
b3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12) (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) + (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b0)
                                                                                (Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b1) (Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2) (Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3)
                                                                                (Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23) (Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31) (Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12)
                                                                                (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123)

  -- | Multiplication Instance implementing a Geometric Product
  (R Double
a0) * :: Cl3 -> Cl3 -> Cl3
* (R Double
b0) = Double -> Cl3
R (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)

  (R Double
a0) * (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Cl3
V3 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (R Double
a0) * (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Cl3
BV (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (R Double
a0) * (I Double
b123) = Double -> Cl3
I (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (R Double
a0) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
PV (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (R Double
a0) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                  (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (R Double
a0) * (C Double
b0 Double
b123) = Double -> Double -> Cl3
C (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                           (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (R Double
a0) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                            (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (R Double
a0) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                     (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (R Double
a0) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double -> Double -> Double -> Double -> Cl3
TPV (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (R Double
a0) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)

  (V3 Double
a1 Double
a2 Double
a3) * (R Double
b0) = Double -> Double -> Double -> Cl3
V3 (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (BV Double
a23 Double
a31 Double
a12) * (R Double
b0) = Double -> Double -> Double -> Cl3
BV (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (I Double
a123) * (R Double
b0) = Double -> Cl3
I (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
PV (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                 (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
H (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                  (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (C Double
a0 Double
a123) * (R Double
b0) = Double -> Double -> Cl3
C (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                           (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (R Double
b0) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                            (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                     (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (R Double
b0) = Double -> Double -> Double -> Double -> Cl3
TPV (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                        (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (R Double
b0) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                                    (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                                    (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                                    (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)

  (V3 Double
a1 Double
a2 Double
a3) * (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
H (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                    (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)

  (V3 Double
a1 Double
a2 Double
a3) * (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                         (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (V3 Double
a1 Double
a2 Double
a3) * (I Double
b123) = Double -> Double -> Double -> Cl3
BV (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (V3 Double
a1 Double
a2 Double
a3) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                         (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                         (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                         Double
0
  (V3 Double
a1 Double
a2 Double
a3) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                           (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (V3 Double
a1 Double
a2 Double
a3) * (C Double
b0 Double
b123) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                    (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (V3 Double
a1 Double
a2 Double
a3) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                   (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                   (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                   (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (V3 Double
a1 Double
a2 Double
a3) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
H (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                          (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
  (V3 Double
a1 Double
a2 Double
a3) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0
                                               (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                               (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                               (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (V3 Double
a1 Double
a2 Double
a3) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                           (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                           (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                           (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)

  (BV Double
a23 Double
a31 Double
a12) * (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2  Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1  Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                         (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1  Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2  Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (I Double
a123) * (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Cl3
BV (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                         (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                         (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                         Double
0
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                           (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (C Double
a0 Double
a123) * (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                    (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                   (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                   (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                   (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (V3 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
H (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                          (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0
                                               (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                               (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                               (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (V3 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                           (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                           (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                           (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (BV Double
a23 Double
a31 Double
a12) * (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                          (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)

  (BV Double
a23 Double
a31 Double
a12) * (I Double
b123) = Double -> Double -> Double -> Cl3
V3 (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (BV Double
a23 Double
a31 Double
a12) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0
                                            (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                            (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                            (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (BV Double
a23 Double
a31 Double
a12) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                            (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
  (BV Double
a23 Double
a31 Double
a12) * (C Double
b0 Double
b123) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                       (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (BV Double
a23 Double
a31 Double
a12) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                      (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)  
                                                      (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                      (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (BV Double
a23 Double
a31 Double
a12) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                               (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (BV Double
a23 Double
a31 Double
a12) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                  (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                  (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                  Double
0
  (BV Double
a23 Double
a31 Double
a12) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                              (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                              (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                              (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (I Double
a123) * (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Cl3
V3 (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0
                                            (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                            (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                            (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                            (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
  (C Double
a0 Double
a123) * (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                       (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                      (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)    
                                                      (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                      (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (BV Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
ODD (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                               (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                               (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                               (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                  (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                  (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                  Double
0
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (BV Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)  
                                                              (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                              (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)

  (I Double
a123) * (I Double
b123) = Double -> Cl3
R (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)

  (I Double
a123) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double -> Double -> Double -> Double -> Cl3
TPV (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                    (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (I Double
a123) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
ODD (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                      (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (I Double
a123) * (C Double
b0 Double
b123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                             (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (I Double
a123) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                              (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (I Double
a123) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
H (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                     (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (I Double
a123) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double -> Double -> Double -> Double -> Cl3
PV (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                         (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (I Double
a123) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                      (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                      (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                      (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)

  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
TPV (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                      (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (C Double
a0 Double
a123) * (I Double
b123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                             (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (I Double
b123) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                              (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
H (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                     (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (I Double
b123) = Double -> Double -> Double -> Double -> Cl3
PV (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                         (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (I Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                      (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                      (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                      (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)


  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                            (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                            (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                            Double
0

  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                              (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                              (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                       (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                       (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                       (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                      (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                      (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                      (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                               (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                               (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                               (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0
                                                  (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                  (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                  (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (PV Double
a0 Double
a1 Double
a2 Double
a3) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)

  (H Double
a0 Double
a23 Double
a31 Double
a12) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                              (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                              (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (C Double
a0 Double
a123) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                       (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                       (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                       (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                      (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                      (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                      (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                               (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                               (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                               (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                               (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                               (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0
                                                  (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                  (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                  (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (PV Double
b0 Double
b1 Double
b2 Double
b3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                              (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                              (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                              (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                              (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (H Double
a0 Double
a23 Double
a31 Double
a12) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
H (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                              (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)

  (H Double
a0 Double
a23 Double
a31 Double
a12) * (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                         (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                         (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                         (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                        (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2  Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                    (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (H Double
a0 Double
a23 Double
a31 Double
a12) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (C Double
a0 Double
a123) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                         (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                         (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                         (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                        (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                        (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                        (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                 (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                 (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                 (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                    (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                    (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                    (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (H Double
b0 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)

  (C Double
a0 Double
a123) * (C Double
b0 Double
b123) = Double -> Double -> Cl3
C (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)

  (C Double
a0 Double
a123) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (C Double
a0 Double
a123) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                          (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                          (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                          (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (C Double
a0 Double
a123) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                             (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                             (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                             (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (C Double
a0 Double
a123) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                         (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                         (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                         (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (C Double
b0 Double
b123) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                 (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                          (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                          (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                          (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                             (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                             (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
                                             (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (C Double
b0 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                         (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                         (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                         (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0)

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                                (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                                (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                                (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                         (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                         (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                         (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                            (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                            (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                            (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                        (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                        (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                        (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                        (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                        (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                        (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                        (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                         (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                         (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                         (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                            (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                            (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                            (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (BPV Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                        (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                        (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double -> Double -> Double -> Double -> Cl3
H (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)

  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                     (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                     (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                     (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
  (ODD Double
a1 Double
a2 Double
a3 Double
a123) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                 (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                 (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                 (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                 (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                                 (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                                 (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                                 (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                     (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                     (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2) (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
                                                     (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)
  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (ODD Double
b1 Double
b2 Double
b3 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                 (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2)
                                                                 (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                                 (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1)
                                                                 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                        (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                        (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12) (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23) (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                        Double
0

  (TPV Double
a23 Double
a31 Double
a12 Double
a123) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                    (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                    (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                    (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                    (Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                    (Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                    (Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                    (Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)

  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (TPV Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                    (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                    (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                    (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                    (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)

  (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) * (APS Double
b0 Double
b1 Double
b2 Double
b3 Double
b23 Double
b31 Double
b12 Double
b123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123)
                                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12)
                                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31)
                                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23)
                                                                                (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3)




  -- |'abs' is the spectral norm aka the spectral radius
  -- it is the largest singular value. This function may need to be fiddled with
  -- to make the math a bit safer wrt overflows.  This makes use of the largest
  -- singular value, if the littlest singular value is zero then the element is not
  -- invertable, we can see here that R, C, V3, BV, and H are all invertable, and
  -- by implication R, C, and H are division algebras.
  abs :: Cl3 -> Cl3
abs Cl3
cl3 = (Cl3, Cl3) -> Cl3
forall a b. (a, b) -> a
fst ((Cl3, Cl3) -> Cl3) -> (Cl3, Cl3) -> Cl3
forall a b. (a -> b) -> a -> b
$ Cl3 -> (Cl3, Cl3)
abssignum Cl3
cl3


  -- |'signum' satisfies the Law "abs x * signum x == x"
  -- kind of cool: signum of a vector is it's unit vector.
  signum :: Cl3 -> Cl3
signum Cl3
cl3 = (Cl3, Cl3) -> Cl3
forall a b. (a, b) -> b
snd ((Cl3, Cl3) -> Cl3) -> (Cl3, Cl3) -> Cl3
forall a b. (a -> b) -> a -> b
$ Cl3 -> (Cl3, Cl3)
abssignum Cl3
cl3


  -- |'fromInteger'
  fromInteger :: Integer -> Cl3
fromInteger Integer
int = Double -> Cl3
R (Integer -> Double
forall a. Num a => Integer -> a
fromInteger Integer
int)


  -- |'negate' simply distributes into the grade components
  negate :: Cl3 -> Cl3
negate (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
  negate (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
V3 (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
  negate (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
  negate (I Double
a123) = Double -> Cl3
I (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
  negate (PV Double
a0 Double
a1 Double
a2 Double
a3) =  Double -> Double -> Double -> Double -> Cl3
PV (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
                                (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
  negate (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
                                (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
  negate (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
                         (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
  negate (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
                                          (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
  negate (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
                                   (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
  negate (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
                                      (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
  negate (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
                                                  (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
                                                  (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
                                                  (Double -> Double
forall a. Num a => a -> a
negate Double
a123)

-- | 'reimMag' small helper function to calculate magnitude for PV and TPV
reimMag :: Double -> Double -> Double -> Double -> Double
reimMag :: Double -> Double -> Double -> Double -> Double
reimMag Double
v0 Double
v1 Double
v2 Double
v3 =
  let sumsqs :: Double
sumsqs = Double
v1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
v2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
v3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Double
x = Double -> Double
forall a. Num a => a -> a
abs Double
v0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sqrt Double
sumsqs
  in Double -> Double
forall a. Floating a => a -> a
sqrt (Double
v0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
sumsqs Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
x)

-- |Cl(3,0) has a Fractional instance
instance Fractional Cl3 where
  -- |Some of the sub algebras are division algebras but APS is not a division algebra
  recip :: Cl3 -> Cl3
recip (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Fractional a => a -> a
recip Double
a0)   -- R is a division algebra
  recip Cl3
cliff = 
    let (R Double
mag) = Cl3 -> Cl3
forall a. Num a => a -> a
abs Cl3
cliff
        recipsqmag :: Double
recipsqmag = Double -> Double
forall a. Fractional a => a -> a
recip Double
magDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        negrecipsqmag :: Double
negrecipsqmag = Double -> Double
forall a. Num a => a -> a
negate Double
recipsqmag
        recipmag2 :: Cl3
recipmag2 = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
toR (Cl3 -> Cl3) -> Cl3 -> Cl3
forall a b. (a -> b) -> a -> b
$ Cl3
cliff Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
bar Cl3
cliff
        go_recip :: Cl3 -> Cl3
go_recip (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
V3 (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3)
        go_recip (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12)
        go_recip (I Double
a123) = Double -> Cl3
I (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a123)
        go_recip (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a0) (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12)  -- H is a division algebra
        go_recip (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a0) (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a123)   -- C is a division algebra
        go_recip (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
recipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3) (Double
negrecipsqmag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a123)
        go_recip pv :: Cl3
pv@PV{} = Cl3
recipmag2 Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
bar Cl3
pv
        go_recip tpv :: Cl3
tpv@TPV{} = Cl3
recipmag2 Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
bar Cl3
tpv
        go_recip Cl3
cliffor = Cl3 -> Cl3
reduce (Cl3 -> Cl3) -> Cl3 -> Cl3
forall a b. (a -> b) -> a -> b
$ (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Fractional a => a -> a
recip Cl3 -> Cl3
recip' Cl3
cliffor
    in Cl3 -> Cl3
go_recip Cl3
cliff


  -- |'fromRational'
  fromRational :: Rational -> Cl3
fromRational Rational
rat = Double -> Cl3
R (Rational -> Double
forall a. Fractional a => Rational -> a
fromRational Rational
rat)


-- |Cl(3,0) has a "Floating" instance.
instance Floating Cl3 where
  pi :: Cl3
pi = Double -> Cl3
R Double
forall a. Floating a => a
pi

  --
  exp :: Cl3 -> Cl3
exp (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
exp Double
a0)
  exp (I Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
cos Double
a123) (Double -> Double
forall a. Floating a => a -> a
sin Double
a123)
  exp (C Double
a0 Double
a123) =
    let expa0 :: Double
expa0 = Double -> Double
forall a. Floating a => a -> a
exp Double
a0
    in Double -> Double -> Cl3
C (Double
expa0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos Double
a123) (Double
expa0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin Double
a123)
  exp Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
exp Cl3 -> Cl3
exp' Cl3
cliffor



  --
  log :: Cl3 -> Cl3
log (R Double
a0)
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0 = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
log Double
a0)
    | Double
a0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== (-Double
1) = Double -> Cl3
I Double
forall a. Floating a => a
pi
    | Bool
otherwise = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0) Double
forall a. Floating a => a
pi
  log (I Double
a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
1 = Double -> Cl3
I (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== (-Double
1) = Double -> Cl3
I (-Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    | Bool
otherwise = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123) (Double -> Double
forall a. Num a => a -> a
signum Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2))
  log (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2) (Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a123 Double
a0)
  log Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
log Cl3 -> Cl3
log' Cl3
cliffor


  --
  sqrt :: Cl3 -> Cl3
sqrt (R Double
a0)
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0 = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt Double
a0)
    | Bool
otherwise = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
sqrt(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0)
  sqrt (I Double
a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R Double
0
    | Bool
otherwise =
        let sqrtr :: Double
sqrtr = Double -> Double
forall a. Floating a => a -> a
sqrt(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a123
            phiby2 :: Double
phiby2 = Double -> Double
forall a. Num a => a -> a
signum Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
4) -- evaluated: atan2 a123 0 / 2
        in Double -> Double -> Cl3
C (Double
sqrtr Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos Double
phiby2) (Double
sqrtr Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin Double
phiby2)
  sqrt (C Double
a0 Double
a123) =
    let sqrtr :: Double
sqrtr = Double -> Double
forall a. Floating a => a -> a
sqrt(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        phiby2 :: Double
phiby2 = Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a123 Double
a0 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2
    in Double -> Double -> Cl3
C (Double
sqrtr Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos Double
phiby2) (Double
sqrtr Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin Double
phiby2)
  sqrt Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
sqrt Cl3 -> Cl3
sqrt' Cl3
cliffor

  --
  sin :: Cl3 -> Cl3
sin (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sin Double
a0)
  sin (I Double
a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R Double
0
    | Bool
otherwise = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
sinh Double
a123)
  sin (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
sin Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cosh Double
a123) (Double -> Double
forall a. Floating a => a -> a
cos Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sinh Double
a123)
  sin Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
sin Cl3 -> Cl3
sin' Cl3
cliffor

  --
  cos :: Cl3 -> Cl3
cos (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
cos Double
a0)
  cos (I Double
a123) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
cosh Double
a123)
  cos (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
cos Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cosh Double
a123) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double -> Double
forall a. Floating a => a -> a
sin Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sinh Double
a123)
  cos Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
cos Cl3 -> Cl3
cos' Cl3
cliffor

  --
  tan :: Cl3 -> Cl3
tan (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
tan Double
a0)
  tan (I Double
a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R Double
0
    | Bool
otherwise = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
tanh Double
a123)
  tan (Cl3 -> Cl3
reduce -> C Double
a0 Double
a123) =
    let
      m :: Double
m = Double
x2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
y2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x1 :: Double
x1 = Double
sinxDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
coshy
      y1 :: Double
y1 = Double
cosxDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
sinhy
      x2 :: Double
x2 = Double
cosxDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
coshy
      y2 :: Double
y2 = Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
sinxDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
sinhy
      sinx :: Double
sinx  = Double -> Double
forall a. Floating a => a -> a
sin Double
a0
      cosx :: Double
cosx  = Double -> Double
forall a. Floating a => a -> a
cos Double
a0
      sinhy :: Double
sinhy = Double -> Double
forall a. Floating a => a -> a
sinh Double
a123
      coshy :: Double
coshy = Double -> Double
forall a. Floating a => a -> a
cosh Double
a123
    in Double -> Double -> Cl3
C ((Double
x1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
x2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
y1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
y2)Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
m) ((Double
x2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
y1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
x1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
y2)Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
m)
  tan Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
tan Cl3 -> Cl3
tan' Cl3
cliffor



  --
  asin :: Cl3 -> Cl3
asin (R Double
a0)
      -- asin (R a0) = I (-1) * log (I 1 * R a0 + sqrt (1 - (R a0)^2))
      -- I (-1) * log (I a0 + sqrt (R 1 - (R a0)^2))
      -- I (-1) * log (I a0 + sqrt (R (1 - a0^2)))
      -- I (-1) * log (I a0 + (I (sqrt.negate $ 1 - a0^2)))
      -- I (-1) * log (I a0 + (sqrt.negate $ 1 - a0^2))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- I (-1) * C (log.abs $ (a0 + (sqrt.negate $ 1 - a0^2))) (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2))
      -- C (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2)) (negate.log.abs $ (a0 + (sqrt.negate $ 1 - a0^2)))
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
> Double
1 = Double -> Double -> Cl3
C (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) (Double -> Double
forall a. Num a => a -> a
negate(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
log (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
1)))
      -- I (-1) * log (I a0 + R (sqrt $ 1 - a0^2))
      -- I (-1) * log (C (sqrt $ 1 - a0^2) a0)
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- I (-1) * C (log.sqrt $ (sqrt $ 1 - a0^2)^2 + a0^2) (atan2 a0 (sqrt $ 1 - a0^2))
      -- C (atan2 a0 (sqrt $ 1 - a0^2)) (negate.log.sqrt $ (sqrt $ 1 - a0^2)^2 + a0^2)
      -- C (atan(a0/(sqrt $ 1 - a0^2))) (negate.log.sqrt $ 1)
      -- Apply sqrt 1 == 1, Apply log 1 == 0, reduce
      -- R (atan(a0/(sqrt $ 1 - a0^2)))
      -- Identity: tan(asin x) = x / (sqrt (1 - x^2))
      -- R (asin a0)
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Double
1) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
asin Double
a0)
      -- I (-1) * log (I a0 + sqrt (R (1 - a0^2)))
      -- I (-1) * log (I (a0 + (sqrt.negate $ 1 - a0^2)))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- I (-1) * C (log.abs $ (a0 + (sqrt.negate $ 1 - a0^2))) (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2))
      -- C (signum (a0 + (sqrt.negate $ 1 - a0^2)) * (pi/2)) (negate.log.abs $ (a0 + (sqrt.negate $ 1 - a0^2)))
      -- For the negative branch signum is -1
      -- C (-pi/2) (negate.log.abs $ (a0 + (sqrt $ a0^2 - 1)))
    | Bool
otherwise = Double -> Double -> Cl3
C (-Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) (Double -> Double
forall a. Num a => a -> a
negate(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
1)))
      --
      -- For I:
      -- I (-1) * log (I (1) * I a123 + sqrt (R 1 - (I a123)^2))
      -- I (-1) * log (R (-a123) + sqrt (R 1 - (I a123)^2))
      -- I (-1) * log (R (-a123) + sqrt (R 1 - R (-a123^2)))
      -- I (-1) * log (R (-a123) + sqrt (R (1 + a123^2)))
      -- I (-1) * log (R (-a123) + R (sqrt $ 1 + a123^2))
      -- I (-1) * log (R ((sqrt $ 1 + a123^2) - a123))
      -- ((sqrt $ 1 + a123^2) - a123)) is always positive
      -- Def ==> log (R a0) | a0 >= 0 = R (log a0)
      -- I (-1) * (R (log $ (sqrt $ 1 + a123^2) - a123))
      -- I (negate.log $ (sqrt $ 1 + a123^2) - a123)
      -- I (negate.log $ (sqrt $ 1 + a123^2) - a123)
      -- because ((sqrt $ 1 + a123^2) - a123)) is always positive: negate.log == log.recip
      -- I (log.recip $ (sqrt $ 1 + a123^2) - a123)
      -- recip $ (sqrt $ 1 + a123^2) - a123) == (sqrt $ 1 + a123^2) + a123)
      -- I (log $ (sqrt $ 1 + a123^2) + a123)
      -- I (asinh a123)
  asin (I Double
a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R Double
0
    | Bool
otherwise = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
asinh Double
a123)
    --
  asin (C Double
a0 Double
a123) =
      -- For C:
      -- I (-1) * log (I 1 * C a0 a123 + sqrt (R 1 - (C a0 a123)^2))
      -- I (-1) * log (C (-a123) a0 + sqrt (R 1 - (C a0 a123)^2))
      -- I (-1) * log (C (-a123) a0 + sqrt (C (1 - a0^2 + a123^2) (-2*a0*a123)))
      -- Def ==> sqrt (C a0 a123) = C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2)) ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- I (-1) * log (C (-a123) a0 + C ((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) ((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)))
      -- I (-1) * log (C (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123) (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0))
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- C (atan2 (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)
      --          (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123))
      --   (negate.log.sqrt $ (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)^2 +
      --                      (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)^2)
      -- Collect like terms:
    let theta :: Double
theta = Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 (-Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a123) (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
        rho :: Double
rho = Double -> Double
forall a. Floating a => a -> a
sqrt(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (-Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a123)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        b0 :: Double
b0 = Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos (Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123
        b123 :: Double
b123 = Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin (Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a0
    in Double -> Double -> Cl3
C (Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
b123 Double
b0) (Double -> Double
forall a. Floating a => a -> a
log (Double
b0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ (-Double
2))
    --
  asin Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
asin Cl3 -> Cl3
asin' Cl3
cliffor

  --
  acos :: Cl3 -> Cl3
acos (R Double
a0)
      -- acos x == (pi/2) - asin x so just subistute
      -- For R a0 > 1:
      -- R (pi/2) - C (pi/2) (negate.log $ (a0 + (sqrt $ a0^2 - 1)))
      -- C 0 (negate.negate.log $ (a0 + (sqrt $ a0^2 - 1)))
      -- I (log $ (a0 + (sqrt $ a0^2 - 1)))
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
> Double
1 = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
log (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
1)))
      -- For R a0 > (-1)
      -- R (pi/2) - R (asin a0) == R (acos a0)
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Double
1) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
acos Double
a0)
      -- For R otherwise:
      -- R (pi/2) - C (-pi/2) (negate.log.abs $ (a0 + (sqrt $ a0^2 - 1)))
      -- C pi (negate.negate.log.abs $ (a0 + (sqrt $ a0^2 - 1)))
      -- C pi (log.abs $ (a0 + (sqrt $ a0^2 - 1)))
    | Bool
otherwise = Double -> Double -> Cl3
C Double
forall a. Floating a => a
pi (Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
1)))
      --
      -- For I:
      -- asin (I a123)  = I (asinh a123) -- so,
      -- acos x == R (pi/2) - I (asinh a123)
      -- C (pi/2) (negate $ asinh a123)
  acos (I Double
a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    | Bool
otherwise = Double -> Double -> Cl3
C (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) (Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double -> Double
forall a. Floating a => a -> a
asinh Double
a123)
  --
  acos (C Double
a0 Double
a123) =
      -- For C:
      -- asin (C a0 a123) = C (atan2 (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0) (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)) (negate.log.sqrt $ (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)^2 + (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)^2)
      -- acos x == (pi/2) - asin x so just subistute
      -- R (pi/2) - C (atan2 (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0) (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)) (negate.log.sqrt $ (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * cos (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) - a123)^2 + (((sqrt.sqrt $ (1 - a0^2 + a123^2)^2 + (-2*a0*a123)^2) * sin (atan2 (-2*a0*a123) (1 - a0^2 + a123^2) / 2)) + a0)^2)
    let theta :: Double
theta = Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 (-Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a123) (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
        rho :: Double
rho = Double -> Double
forall a. Floating a => a -> a
sqrt(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (-Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a123)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        b0 :: Double
b0 = Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos (Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123
        b123 :: Double
b123 = Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin (Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a0
    in Double -> Double -> Cl3
C ((Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
b123 Double
b0) (Double -> Double
forall a. Floating a => a -> a
log (Double
b0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2)
    --
  acos Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
acos Cl3 -> Cl3
acos' Cl3
cliffor

  --
  atan :: Cl3 -> Cl3
atan (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
atan Double
a0)
  --
  atan (I Double
a123)
      -- I (0.5) * (log (R 1 - (I 1 * I a123)) - log (R 1 + (I 1 * I a123)))
      -- I (0.5) * (log (R 1 - (R (-a123))) - log (R 1 + (R (-a123))))
      -- I (0.5) * ((log (R (1 + a123))) - log (R (1 - a123)))
      -- Def ==> C (log.negate $ a0) pi for negative a123
      -- I (0.5) * ((log (R (1 + a123))) - (C (log.negate $ (1 - a123)) pi))
      -- Def ==> R (log a0) for positive a123
      -- I (0.5) * ((R (log (1 + a123))) - (C (log.negate $ (1 - a123)) pi))
      -- I (0.5) * (C (log (1 + a123) - (log.negate $ (1 - a123))) (-pi))
      -- C (pi/2) ((log (1 + a123) - (log.negate $ (1 - a123)))/2)
    | Double
a123 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
> Double
1 = Double -> Double -> Cl3
C (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) (Double
0.5Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double -> Double
forall a. Floating a => a -> a
log (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double
forall a. Floating a => a -> a
log (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
1)))
      -- I (0.5) * (log (R 1 - (I 1 * I a123)) - log (R 1 + (I 1 * I a123)))
      -- I (0.5) * (log (R 1 - (R (-a123))) - log (R 1 + (R (-a123))))
      -- I (0.5) * ((log (R (1 + a123))) - log (R (1 - a123)))
      -- I (0.5) * ((R (log (1 + a123))) - R (log (1 - a123)))
      -- I (0.5) * (R ((log (1 + a123)) - (log (1 - a123))))
      -- I (((log (1 + a123)) - (log (1 - a123)))/2)
      -- I (atanh a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R Double
0
    | Double
a123 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Double
1) = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
atanh Double
a123)
      -- I (0.5) * (log (R 1 - (I 1 * I a123)) - log (R 1 + (I 1 * I a123)))
      -- I (0.5) * (log (R 1 - (R (-a123))) - log (R 1 + (R (-a123))))
      -- I (0.5) * ((log (R (1 + a123))) - R (log (1 - a123)))
      -- C (-pi/2) (((log.negate $ (1 + a123)) - (log (1 - a123)))/2)
    | Bool
otherwise = Double -> Double -> Cl3
C (-Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) (((Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123)) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double
forall a. Floating a => a -> a
log (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123))Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
      --
      -- I (0.5) * (log (R 1 - (I 1 * C a0 a123)) - log (R 1 + (I 1 * C a0 a123)))
      -- I (0.5) * (log (C (1 + a123) (-a0)) - log (C (1 - a123) a0))
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- I (0.5) * ((C (log.sqrt $ (1 + a123)^2 + (-a0)^2) (atan2 (-a0) (1 + a123))) - (C (log.sqrt $ (1 - a123)^2 + a0^2) (atan2 a0 (1 - a123))))
      -- I (0.5) * C ((log.sqrt $ (1 + a123)^2 + (-a0)^2) - (log.sqrt $ (1 - a123)^2 + a0^2)) ((atan2 (-a0) (1 + a123)) - (atan2 a0 (1 - a123)))
      -- I (0.5) * C (0.5*((log $ (1 + a123)^2 + a0^2) - (log $ (1 - a123)^2 + a0^2))) ((atan2 (-a0) (1 + a123)) - (atan2 a0 (1 - a123)))
      -- C (((atan2 a0 (1 - a123)) + (atan2 a0 (1 + a123)))/2) (((log $ (1 + a123)^2 + a0^2) - (log $ (1 - a123)^2 + a0^2))/4)
  atan (C Double
a0 Double
a123) = Double -> Double -> Cl3
C ((Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a0 (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a0 (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123))Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
                       ((Double -> Double
forall a. Floating a => a -> a
log ((Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double
forall a. Floating a => a -> a
log ((Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
4)
    --
  atan Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
atan Cl3 -> Cl3
atan' Cl3
cliffor

  --
  sinh :: Cl3 -> Cl3
sinh (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sinh Double
a0)
  sinh (I Double
a123) = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
sin Double
a123)
  sinh (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
cos Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sinh Double
a0) (Double -> Double
forall a. Floating a => a -> a
sin Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cosh Double
a0)
  sinh Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
sinh Cl3 -> Cl3
sinh' Cl3
cliffor

  --
  cosh :: Cl3 -> Cl3
cosh (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
cosh Double
a0)
  cosh (I Double
a123) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
cos Double
a123)
  cosh (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
cos Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cosh Double
a0) (Double -> Double
forall a. Floating a => a -> a
sin Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sinh Double
a0)
  cosh Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
cosh Cl3 -> Cl3
cosh' Cl3
cliffor

  --
  tanh :: Cl3 -> Cl3
tanh (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
tanh Double
a0)
  tanh (I Double
a123) = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
tan Double
a123)
  tanh (Cl3 -> Cl3
reduce -> C Double
a0 Double
a123) =
    let
      m :: Double
m = Double
x2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
y2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x1 :: Double
x1 = Double
cosyDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
sinhx
      y1 :: Double
y1 = Double
sinyDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
coshx
      x2 :: Double
x2 = Double
cosyDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
coshx
      y2 :: Double
y2 = Double
sinyDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
sinhx
      siny :: Double
siny  = Double -> Double
forall a. Floating a => a -> a
sin Double
a123
      cosy :: Double
cosy  = Double -> Double
forall a. Floating a => a -> a
cos Double
a123
      sinhx :: Double
sinhx = Double -> Double
forall a. Floating a => a -> a
sinh Double
a0
      coshx :: Double
coshx = Double -> Double
forall a. Floating a => a -> a
cosh Double
a0
    in Double -> Double -> Cl3
C ((Double
x1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
x2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
y1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
y2)Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
m) ((Double
x2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
y1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
x1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
y2)Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
m)
  tanh Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
tanh Cl3 -> Cl3
tanh' Cl3
cliffor

  --
  asinh :: Cl3 -> Cl3
asinh (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
asinh Double
a0)
  --
  asinh (I Double
a123)
      -- log (I a123 + sqrt (R (1 - a123^2)))
      -- 3 branches where between -1 and 1 it is just asin
      -- For a123 > 1:
      -- log (I a123 + I (sqrt.negate $ (1 - a123^2)))
      -- log (I (a123 + (sqrt (a123^2 - 1))))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 + (sqrt (a123^2 - 1)))) (signum (a123 + (sqrt (a123^2 - 1))) * (pi/2))
      -- a123 is positive so signum evaluates to 1
      -- C (log.abs $ (a123 + (sqrt (a123^2 - 1)))) (pi/2)
    | Double
a123 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
> Double
1 = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
1))) (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
      -- log (I a123 + sqrt (R (1 - a123^2)))
      -- log (I a123 + R (sqrt (1 - a123^2)))
      -- log (C (sqrt (1 - a123^2)) a123)
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- C (log.sqrt $ (sqrt (1 - a123^2))^2 + a123^2) (atan2 a123 (sqrt (1 - a123^2)))
      -- (sqrt (1 - a123^2))^2 + a123^2 == 1
      -- sqrt 1 == 1
      -- log 1 == 0
      -- I (atan2 a123 (sqrt (1 - a123^2)))
      -- I (atan (a123 / (sqrt (1 - a123^2))))
      -- Identity: tan(asin x) = x / (sqrt (1 - x^2))
      -- asin a123 = atan (a123 / (sqrt (1 - a123^2)))
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R Double
0
    | Double
a123 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Double
1) = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
asin Double
a123)
      -- log (I a123 + sqrt (R (1 - a123^2)))
      -- For a123 < (-1):
      -- log (I a123 + I (sqrt.negate $ (1 - a123^2)))
      -- log (I (a123 + (sqrt (a123^2 - 1))))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 + (sqrt (a123^2 - 1)))) (signum (a123 + (sqrt (a123^2 - 1))) * (pi/2))
      -- for a123 lt (-1) signum evaluates to -1
    | Bool
otherwise = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
1))) (-Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    --
  asinh (C Double
a0 Double
a123) =
      -- For C:
      -- log (C a0 a123 + sqrt (C (a0^2 - a123^2 +1) (2*a0*a123)))
      -- Def ==> sqrt (C a0 a123) = C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2)) ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- log (C a0 a123 + C ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)) ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))
      -- log (C (a0 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2))) (a123 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2))))
      -- Def ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- C (log.sqrt $ (a0 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))^2 +
      --               (a123 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))^2)
      --   (atan2 (a123 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * sin (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2)))
      --          (a0 + ((sqrt.sqrt $ (a0^2 - a123^2 +1)^2 + (2*a0*a123)^2) * cos (atan2 (2*a0*a123) (a0^2 - a123^2 +1) / 2))))
      -- Collect like terms:
    let theta :: Double
theta = Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 (Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a123) (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
1)
        rho :: Double
rho = Double -> Double
forall a. Floating a => a -> a
sqrt(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
1)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a123)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
        b0 :: Double
b0 = Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos (Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
        b123 :: Double
b123 = Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin (Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    in Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log (Double
b0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2) (Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
b123 Double
b0)
    --
  asinh Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
asinh Cl3 -> Cl3
asinh' Cl3
cliffor

  --
  acosh :: Cl3 -> Cl3
acosh (R Double
a0)
    -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
1 = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
acosh Double
a0)
      -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
      -- log (R a0 + R (sqrt $ a0+1) * R (sqrt $ a0-1))
      -- log (R a0 + R ((sqrt $ a0+1) * (sqrt $ a0-1)))
      -- log (R (a0 + (sqrt $ a0+1) * (sqrt $ a0-1)))
      -- R (log $ a0 + (sqrt $ a0+1) * (sqrt $ a0-1))
      -- R (acosh a0)
      -- Strangely ghc substitutes 'acosh a0' with something like:
      -- R (log $ a0 + (a0 + 1 ) * (sqrt $ (a0 - 1)/(a0 + 1)))
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Double
1) = Double -> Cl3
I (Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 (Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double
a0) -- This is I because of cancelation of the real component
      -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
      -- log (R a0 + R (sqrt $ a0+1) * I (sqrt.negate $ a0-1))
      -- log (R a0 + I ((sqrt $ a0+1) * (sqrt.negate $ a0-1)))
      -- log (R a0 + I ((sqrt $ a0+1) * (sqrt $ 1-a0)))
      -- log $ C (a0) ((sqrt $ a0+1) * (sqrt $ 1-a0))
      -- Def log ==> log (C b0 b123) = C (log.sqrt $ b0^2 + b123^2) (atan2 b123 b0)
      -- let b0 = a0
      --     b123 = (sqrt $ a0+1) * (sqrt $ 1-a0) = sqrt $ 1-a0^2
      -- in C (log.sqrt $ b0^2 + b123^2) (atan2 b123 b0)
      -- b123^2 = 1-a0^2
      -- C (log.sqrt $ a0^2 + 1-a0^2) (atan2 (sqrt $ 1-a0^2) a0)
      -- C (log.sqrt $ 1) (atan2 (sqrt $ 1-a0^2) a0)
      -- C 0 (atan2 (sqrt $ 1-a0^2) a0)
      -- I (atan2 (sqrt $ 1-a0^2) a0)
    | Bool
otherwise = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
acosh(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0) Double
forall a. Floating a => a
pi
      -- log (R a0 + sqrt(R (a0+1)) * sqrt(R (a0-1)))
      -- log (R a0 + I (sqrt.negate $ a0+1) * I (sqrt.negate $ a0-1))
      -- Def ==> (I a123) * (I b123) = R (negate $ a123*b123)
      -- log (R a0 + R (negate $ (sqrt.negate $ a0+1) * (sqrt.negate $ a0-1))
      -- log (R (a0 + (negate $ (sqrt.negate $ a0+1) * (sqrt.negate $ a0-1))))
      -- C (log.negate $ (a0 + (negate $ (sqrt.negate $ a0+1) * (sqrt.negate $ a0-1)))) pi
      -- C (log $ (negate a0 + ((sqrt $ (negate a0)+1) * (sqrt $ (negate a0)-1)))) pi
      -- C (acosh (negate a0)) pi
      --
  acosh (I Double
a123)
      -- log (I a123 + sqrt(C 1 a123) * sqrt(C (-1) a123))
      -- Def ==> sqrt (C a0 a123) =
      --   C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2))
      --      ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- log (I a123 +
      --      C ((sqrt.sqrt $ 1 + a123^2) * cos (atan2 a123 1 / 2))
      --        ((sqrt.sqrt $ 1 + a123^2) * sin (atan2 a123 1 / 2)) *
      --      C ((sqrt.sqrt $ 1 + a123^2) * cos (atan2 a123 (-1) / 2))
      --        ((sqrt.sqrt $ 1 + a123^2) * sin (atan2 a123 (-1) / 2)) )
      -- Factor out "(sqrt.sqrt $ 1 + a123^2)*"
      -- log (I a123 + R (sqrt.sqrt $ 1 + a123^2) *
      --               C (cos (atan2 a123 1 / 2)) (sin (atan2 a123 1 / 2)) *
      --               R (sqrt.sqrt $ 1 + a123^2) *
      --               C (cos (atan2 a123 (-1) / 2)) (sin (atan2 a123 (-1) / 2)))
      -- Collect both R's and simplify
      -- log (I a123 + (R (sqrt $ 1 + a123^2)) *
      --                C (cos (atan2 a123 1 / 2)) (sin (atan2 a123 1 / 2)) *
      --                C (cos (atan2 a123 (-1) / 2)) (sin (atan2 a123 (-1) / 2)))
      -- Def ==> (C a0 a123) * (C b0 b123) = C (a0*b0 - a123*b123) (a0*b123 + a123*b0)
      -- log (I a123 + R (sqrt $ 1 + a123^2) *
      --               C ((cos (atan2 a123 1 / 2))*(cos (atan2 a123 (-1) / 2)) - (sin (atan2 a123 1 / 2))*(sin (atan2 a123 (-1) / 2)))
      --                 ((cos (atan2 a123 1 / 2))*(sin (atan2 a123 (-1) / 2)) + (sin (atan2 a123 1 / 2))*(cos (atan2 a123 (-1) / 2))) )
      --
      -- Solution now branches for positive and negative a123
      --
      -- For a123 > 0 Substitute (cos (atan2 a123 (-1) / 2)) == (sin (atan2 a123 1 / 2)) AND
      --                         (sin (atan2 a123 (-1) / 2)) == (cos (atan2 a123 1 / 2)) AND
      --                         atan2 a123 1 == atan a123
      -- log (I a123 + R (sqrt $ 1 + a123^2) *
      --               C ((cos (atan a123 / 2))*(sin (atan a123 / 2)) - (sin (atan a123 / 2))*(cos (atan a123 / 2)))
      --                 ((cos (atan a123 / 2))*(cos (atan a123 / 2)) + (sin (atan a123 / 2))*(sin (atan a123 / 2))) )
      -- sin^2 + cos^2 == 1 AND cos*sin - sin*cos == 0 AND Reduce C 0 1 to I 1 AND apply (*) AND apply (+)
      -- log (I (a123 + sqrt (1 + a123^2)))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 + sqrt (1 + a123^2))) (signum (a123 + sqrt (1 + a123^2)) * (pi/2))
      -- With a123 positive Apply signum:
      -- C (log.abs $ (a123 + sqrt (1 + a123^2))) (pi/2)
    | Double
a123 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
> Double
0 = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))) (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
      -- With a123 == 0:
      -- reduce C 0 (pi/2)
      -- I (pi/2)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
I (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
      -- For a123 < 0 Substitute (cos (atan2 a123 (-1) / 2)) == (negate.sin $ (atan2 a123 1 / 2)) AND
      --                         (sin (atan2 a123 (-1) / 2)) == (negate.cos $ (atan2 a123 1 / 2)) AND
      --                         atan2 a123 1 == atan a123
      -- log (I a123 + R (sqrt $ 1 + a123^2) *
      --               C ((cos (atan2 a123 1 / 2))*(negate.sin $ (atan2 a123 1 / 2)) - (sin (atan2 a123 1 / 2))*(negate.cos $ (atan2 a123 1 / 2)))
      --                 ((cos (atan2 a123 1 / 2))*(negate.cos $ (atan2 a123 1 / 2)) + (sin (atan2 a123 1 / 2))*(negate.sin $ (atan2 a123 1 / 2))) )
      -- Factor negate out AND sin^2 + cos^2 == 1 AND cos*sin - sin*cos == 0 AND Reduce C 0 (-1) to I (-1) AND apply (*) AND apply (+)
      -- log (I (a123 - sqrt (1 + a123^2)))
      -- Def ==> log (I a123) = C (log.abs $ a123) (signum a123 * (pi/2))
      -- C (log.abs $ (a123 - sqrt (1 + a123^2))) (signum (a123 - sqrt (1 + a123^2)) * (pi/2))
      -- With a123 negateive Apply signum:
      -- C (log.abs $ (a123 - sqrt (1 + a123^2))) (-pi/2)
    | Bool
otherwise = Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
abs (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double
forall a. Floating a => a -> a
sqrt (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))) (-Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    --
  acosh (C Double
a0 Double
a123) =
      -- log (C a0 a123 + sqrt(C (a0+1) a123) * sqrt(C (a0-1) a123))
      -- Def ==> sqrt (C a0 a123) =
      --   C ((sqrt.sqrt $ a0^2 + a123^2) * cos (atan2 a123 a0 / 2))
      --      ((sqrt.sqrt $ a0^2 + a123^2) * sin (atan2 a123 a0 / 2))
      -- log (C a0 a123 +
      --      C ((sqrt.sqrt $ (a0+1)^2 + a123^2) * cos (atan2 a123 (a0+1) / 2))
      --        ((sqrt.sqrt $ (a0+1)^2 + a123^2) * sin (atan2 a123 (a0+1) / 2)) *
      --      C ((sqrt.sqrt $ (a0-1)^2 + a123^2) * cos (atan2 a123 (a0-1) / 2))
      --        ((sqrt.sqrt $ (a0-1)^2 + a123^2) * sin (atan2 a123 (a0-1) / 2)) )
      -- Factor out the scalar in both Complex numbers
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ (a0+1)^2 + a123^2) *
      --      C (cos (atan2 a123 (a0+1) / 2)) (sin (atan2 a123 (a0+1) / 2)) *
      --      R (sqrt.sqrt $ (a0-1)^2 + a123^2) *
      --      C (cos (atan2 a123 (a0-1) / 2)) (sin (atan2 a123 (a0-1) / 2)) )
      -- Combine the R terms
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *
      --      C (cos (atan2 a123 (a0+1) / 2)) (sin (atan2 a123 (a0+1) / 2)) *
      --      C (cos (atan2 a123 (a0-1) / 2)) (sin (atan2 a123 (a0-1) / 2)) )
      -- Def ==> (C a0 a123) * (C b0 b123) = C (a0*b0 - a123*b123)
      --                                       (a0*b123 + a123*b0)
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *
      --      C (((cos (atan2 a123 (a0+1) / 2))*(cos (atan2 a123 (a0-1) / 2))) - ((sin (atan2 a123 (a0+1) / 2))*(sin (atan2 a123 (a0-1) / 2))))
      --        (((cos (atan2 a123 (a0+1) / 2))*(sin (atan2 a123 (a0-1) / 2))) + ((sin (atan2 a123 (a0+1) / 2))*(cos (atan2 a123 (a0-1) / 2)))) )
      -- =
      -- log (C a0 a123 +
      --      R (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *
      --      C (cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1))))
      --        (sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1)))) )
      -- Apply (*)
      -- log (C a0 a123 +
      --      C ((sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *(cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1)))))
      --        ((sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) *(sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1))))) )
      -- Apply (+)
      -- log (C (a0 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1))))))
      --        (a123 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1)))))) )
      -- Def ==>  log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
      -- = C (log.sqrt $ (a0 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1))))))^2 + (a123 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1))))))^2) 
      --     (atan2 (a123 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((sin(0.5*(atan2 a123 (a0-1) + atan2 a123 (a0+1)))))) (a0 + (sqrt.sqrt $ ((a0+1)^2 + a123^2) * ((a0-1)^2 + a123^2)) * ((cos(0.5*(atan2 a123 (a0+1) + atan2 a123 (a0-1)))))))
      -- Collect like terms:
    let theta :: Double
theta = Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a123 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
1) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a123 (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
1)
        rho :: Double
rho = Double -> Double
forall a. Floating a => a -> a
sqrt(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ ((Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
1)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
* ((Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
1)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
        b0 :: Double
b0 = Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos(Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
        b123 :: Double
b123 = Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
rho Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin(Double
thetaDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    in Double -> Double -> Cl3
C (Double -> Double
forall a. Floating a => a -> a
log (Double
b0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2) (Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
b123 Double
b0)
    --
  acosh Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
acosh Cl3 -> Cl3
acosh' Cl3
cliffor

  --
  atanh :: Cl3 -> Cl3
atanh (R Double
a0)
      -- = 0.5*log (R (1+a0)) - 0.5*log (R (1-a0))
      -- = (R ((0.5*).log $ 1+a0)) - (C ((0.5*).log.negate $ 1-a0) (pi/2))
      -- = C (((0.5*).log $ 1+a0) - ((0.5*).log.negate $ 1-a0)) (-pi/2)
      -- = C (0.5*((log $ 1+a0) - (log $ a0-1))) (-pi/2)
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
> Double
1 = Double -> Double -> Cl3
C ((Double -> Double
forall a. Floating a => a -> a
log (Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
a0) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double
forall a. Floating a => a -> a
log (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
1))Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) (-Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
      -- = 0.5 * (log (R (1+a0)) - log (R (1-a0)))
      -- = 0.5*(R (log $ 1+a0) - R (log $ 1-a0))
      -- = R (0.5*(log $ 1+a0) - 0.5*(log $ 1-a0))
      -- = R (atanh a0)
    | Double
a0 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= (-Double
1) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
atanh Double
a0)
      -- = 0.5 * (log (R (1+a0)) - log (R (1-a0)))
      -- = (C ((0.5*).log.negate $ 1+a0) (pi/2)) - (R ((0.5*).log $ 1-a0))
      -- = C (((0.5*).log.negate $ 1+a0) - ((0.5*).log $ 1-a0)) (pi/2)
      -- = C (0.5*((log.negate $ 1+a0) - (log $ 1-a0))) (pi/2)
    | Bool
otherwise = Double -> Double -> Cl3
C (((Double -> Double
forall a. Floating a => a -> a
log(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
a0) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double
forall a. Floating a => a -> a
log (Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
a0))Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2) (Double
forall a. Floating a => a
piDouble -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
    --
    -- For I:
    -- = 0.5 * (log (C 1 a123) - log (C 1 (-a123)))
    -- = I (atan a123)
  atanh (I Double
a123)
    | Double
a123 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 = Double -> Cl3
R Double
0
    | Bool
otherwise = Double -> Cl3
I (Double -> Double
forall a. Floating a => a -> a
atan Double
a123)
    -- = 0.5 * (log (C (1+a0) a123) - log (C (1-a0) (-a123)))
    -- Def log ==> log (C a0 a123) = C (log.sqrt $ a0^2 + a123^2) (atan2 a123 a0)
    -- log (C (1+a0) a123) = C (log.sqrt $ (1+a0)^2 + a123^2) (atan2 a123 (1+a0))
    -- log (C (1-a0) (-a123)) = C (log.sqrt $ (1-a0)^2 + (-a123)^2) (atan2 (-a123) (1-a0))
    -- = C (((0.5*).log.sqrt $ (1+a0)^2 + a123^2) - ((0.5*).log.sqrt $ (1-a0)^2 + a123^2)) (0.5*((atan2 a123 (1+a0)) - (atan2 (-a123) (1-a0))))
    -- C (((log $ (1+a0)^2 + a123^2) - (log $ (1-a0)^2 + a123^2))/4) (((atan2 a123 (1-a0)) + (atan2 a123 (1+a0)))/2)
  atanh (C Double
a0 Double
a123) = Double -> Double -> Cl3
C ((Double -> Double
forall a. Floating a => a -> a
log ((Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
a0)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2) Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double -> Double
forall a. Floating a => a -> a
log ((Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
a0)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
4) ((Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a123 (Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
a0) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double -> Double
forall a. RealFloat a => a -> a -> a
atan2 Double
a123 (Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
a0))Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)
  --
  atanh Cl3
cliffor = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
forall a. Floating a => a -> a
atanh Cl3 -> Cl3
atanh' Cl3
cliffor



-- |'lsv' the littlest singular value. Useful for testing for invertability.
lsv :: Cl3 -> Cl3
lsv :: Cl3 -> Cl3
lsv (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Num a => a -> a
abs Double
a0) -- absolute value of a real number
lsv (V3 Double
a1 Double
a2 Double
a3) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)) -- magnitude of a vector
lsv (BV Double
a23 Double
a31 Double
a12) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)) -- magnitude of a bivector
lsv (I Double
a123) = Double -> Cl3
R (Double -> Double
forall a. Num a => a -> a
abs Double
a123)
lsv (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> Cl3
R (Double -> Double -> Double -> Double -> Double
loDisc Double
a0 Double
a1 Double
a2 Double
a3)
lsv (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Cl3
R (Double -> Double -> Double -> Double -> Double
loDisc Double
a123 Double
a23 Double
a31 Double
a12)
lsv (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))
lsv (C Double
a0 Double
a123) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)) -- magnitude of a complex number
lsv (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) =
  let x :: Double
x = Double -> Double
forall a. Num a => a -> a
negate(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 -- core was duplicating this computation added let to hopefully reduce the duplication
      y :: Double
y = Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x -- attempted to balance out the sum of several positives with a negitive before the next sum of positives and negitive
  in if Double
y Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
<= Double
tol' -- gaurd for numerical errors, y could be negative with large enough biparavectors
     then Double -> Cl3
R Double
0
     else Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt Double
y)
lsv (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt (Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2))
lsv (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) =
  let x :: Double
x = Double -> Double
forall a. Num a => a -> a
negate(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+
                        (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 -- core was duplicating this computation added let to hopefully reduce the duplication
      y :: Double
y = Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x -- attempted to balance out the sum of several positives with a negitive before the next sum of positives and negitive
  in if Double
y Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
<= Double
tol' -- gaurd for numerical errors, y could be negative with large enough cliffors
     then Double -> Cl3
R Double
0
     else Double -> Cl3
R (Double -> Double
forall a. Floating a => a -> a
sqrt Double
y)


-- | 'loDisc' The Lower Discriminant for Paravectors and Triparavectors, real and imagninary portions of APS
loDisc :: Double -> Double -> Double -> Double -> Double
loDisc :: Double -> Double -> Double -> Double -> Double
loDisc Double
v0 Double
v1 Double
v2 Double
v3 =
  let sumsqs :: Double
sumsqs = Double
v1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
v2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
v3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Double
x = Double -> Double
forall a. Num a => a -> a
negate (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double -> Double
forall a. Num a => a -> a
abs Double
v0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sqrt Double
sumsqs
      y :: Double
y = Double
v0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
sumsqs Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x
  in if Double
y Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
<= Double
tol' -- gaurd for numerical errors, y could be negative with large enough paravectors
     then Double
0
     else Double -> Double
forall a. Floating a => a -> a
sqrt Double
y


-- | 'spectraldcmp' the spectral decomposition of a function to calculate analytic functions of cliffors in Cl(3,0).
-- This function requires the desired function's R, I, and C instances to be calculated and the function's derivative.
-- If multiple functions are being composed, its best to pass the composition of the funcitons
-- to this function and the derivative to this function.  Any function with a Taylor Series
-- approximation should be able to be used.  A real, imaginary, and complex version of the function to be decomposed
-- must be provided and spectraldcmp will handle the case for an arbitrary Cliffor.
-- 
-- It may be possible to add, in the future, a RULES pragma like:
--
-- > "spectral decomposition function composition"
-- > forall f f' g g' cliff.
-- > spectraldcmp f f' (spectraldcmp g g' cliff) = spectraldcmp (f.g) (f'.g') cliff
-- 
-- 
spectraldcmp :: (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp :: (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmp Cl3 -> Cl3
fun Cl3 -> Cl3
fun' (Cl3 -> Cl3
reduce -> Cl3
cliffor) = Cl3 -> Cl3
dcmp Cl3
cliffor
  where
    dcmp :: Cl3 -> Cl3
dcmp r :: Cl3
r@R{} = Cl3 -> Cl3
fun Cl3
r
    dcmp i :: Cl3
i@I{} = Cl3 -> Cl3
fun Cl3
i
    dcmp c :: Cl3
c@C{} = Cl3 -> Cl3
fun Cl3
c
    dcmp v :: Cl3
v@V3{} = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toR Cl3 -> Cl3
fun Cl3
v -- spectprojR fun v
    dcmp pv :: Cl3
pv@PV{} = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toR Cl3 -> Cl3
fun Cl3
pv -- spectprojR fun pv
    dcmp bv :: Cl3
bv@BV{} = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toI Cl3 -> Cl3
fun Cl3
bv -- spectprojI fun bv
    dcmp tpv :: Cl3
tpv@TPV{} = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toI Cl3 -> Cl3
fun Cl3
tpv -- spectprojI fun tpv
    dcmp h :: Cl3
h@H{} = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toC Cl3 -> Cl3
fun Cl3
h -- spectprojC fun h
    dcmp od :: Cl3
od@ODD{} = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toC Cl3 -> Cl3
fun Cl3
od -- spectprojC fun od
    dcmp Cl3
cliff
      | Cl3 -> Bool
hasNilpotent Cl3
cliff = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
jordan Cl3 -> Cl3
toC Cl3 -> Cl3
fun Cl3 -> Cl3
fun' Cl3
cliff  -- jordan normal form Cl3 style
      | Cl3 -> Bool
isColinear Cl3
cliff = (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toC Cl3 -> Cl3
fun Cl3
cliff -- spectprojC fun bpv
      | Bool
otherwise =                               -- transform it so it will be colinear
          let (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Cl3 -> Cl3
toBPV Cl3
cliff
              boost :: Cl3
boost = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
boost2colinear Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
          in Cl3
boost Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toC Cl3 -> Cl3
fun (Cl3 -> Cl3
bar Cl3
boost Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
cliff Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
boost) Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
bar Cl3
boost -- v * spectprojC fun d * v_bar
--


-- | 'jordan' does a Cl(3,0) version of the decomposition into Jordan Normal Form and Matrix Function Calculation
-- The intended use is for calculating functions for cliffors with vector parts simular to Nilpotent.
-- It is a helper function for 'spectraldcmp'.  It is fortunate because eigen decomposition doesn't
-- work with elements with nilpotent content, so it fills the gap.
jordan :: (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
jordan :: (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
jordan Cl3 -> Cl3
toSpecial Cl3 -> Cl3
fun Cl3 -> Cl3
fun' Cl3
cliffor =
  let eigs :: Cl3
eigs = Cl3 -> Cl3
toSpecial Cl3
cliffor
  in Cl3 -> Cl3
fun Cl3
eigs Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
+ Cl3 -> Cl3
fun' Cl3
eigs Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
toBPV Cl3
cliffor

-- | 'spectraldcmpSpecial' helper function for with specialization for real, imaginary, or complex eigenvalues.
-- To specialize for Reals pass 'toR', to specialize for Imaginary pass 'toI', to specialize for Complex pass 'toC'
spectraldcmpSpecial :: (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial :: (Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
spectraldcmpSpecial Cl3 -> Cl3
toSpecial Cl3 -> Cl3
function Cl3
cliffor =
  let (Cl3
p,Cl3
p_bar,Cl3
eig1,Cl3
eig2) = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3, Cl3, Cl3)
projEigs Cl3 -> Cl3
toSpecial Cl3
cliffor
  in Cl3 -> Cl3
function Cl3
eig1 Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
p Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
+ Cl3 -> Cl3
function Cl3
eig2 Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
p_bar



-- | 'eigvals' calculates the eignenvalues of the cliffor.
-- This is useful for determining if a cliffor is the pole
-- of a function.
eigvals :: Cl3 -> (Cl3,Cl3)
eigvals :: Cl3 -> (Cl3, Cl3)
eigvals (Cl3 -> Cl3
reduce -> Cl3
cliffor) = Cl3 -> (Cl3, Cl3)
eigv Cl3
cliffor
  where
    eigv :: Cl3 -> (Cl3, Cl3)
eigv r :: Cl3
r@R{} = Cl3 -> (Cl3, Cl3)
dup Cl3
r
    eigv i :: Cl3
i@I{} = Cl3 -> (Cl3, Cl3)
dup Cl3
i
    eigv c :: Cl3
c@C{} = Cl3 -> (Cl3, Cl3)
dup Cl3
c
    eigv v :: Cl3
v@V3{} = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toR Cl3
v -- eigvalsR v
    eigv pv :: Cl3
pv@PV{} = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toR Cl3
pv -- eigvalsR pv
    eigv bv :: Cl3
bv@BV{} = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toI Cl3
bv -- eigvalsI bv
    eigv tpv :: Cl3
tpv@TPV{} = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toI Cl3
tpv -- eigvalsI tpv
    eigv h :: Cl3
h@H{} = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toC Cl3
h -- eigvalsC h
    eigv od :: Cl3
od@ODD{} = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toC Cl3
od -- eigvalsC od
    eigv Cl3
cliff
      | Cl3 -> Bool
hasNilpotent Cl3
cliff = Cl3 -> (Cl3, Cl3)
dup(Cl3 -> (Cl3, Cl3)) -> (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
reduce(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
toC (Cl3 -> (Cl3, Cl3)) -> Cl3 -> (Cl3, Cl3)
forall a b. (a -> b) -> a -> b
$ Cl3
cliff  -- this case is actually nilpotent
      | Cl3 -> Bool
isColinear Cl3
cliff = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toC Cl3
cliff  -- eigvalsC bpv
      | Bool
otherwise =                           -- transform it so it will be colinear
          let (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Cl3 -> Cl3
toBPV Cl3
cliff
              boost :: Cl3
boost = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
boost2colinear Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
          in (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toC (Cl3 -> Cl3
bar Cl3
boost Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
cliff Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
boost) -- eigvalsC d
--


dup :: Cl3 -> (Cl3,Cl3)
dup :: Cl3 -> (Cl3, Cl3)
dup Cl3
cliff = (Cl3
cliff, Cl3
cliff)

-- | 'eigvalsSpecial' helper function to calculate Eigenvalues
eigvalsSpecial :: (Cl3 -> Cl3) -> Cl3 -> (Cl3,Cl3)
eigvalsSpecial :: (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3)
eigvalsSpecial Cl3 -> Cl3
toSpecial Cl3
cliffor =
  let (Cl3
_,Cl3
_,Cl3
eig1,Cl3
eig2) = (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3, Cl3, Cl3)
projEigs Cl3 -> Cl3
toSpecial Cl3
cliffor
  in (Cl3
eig1,Cl3
eig2)


-- | 'project' makes a projector based off of the vector content of the Cliffor.
project :: Cl3 -> Cl3  -- PV<:Cl3
project :: Cl3 -> Cl3
project R{} = Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 Double
0 Double
0 Double
0.5   -- default to e3 direction
project I{} = Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 Double
0 Double
0 Double
0.5   -- default to e3 direction
project C{} = Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 Double
0 Double
0 Double
0.5   -- default to e3 direction
project (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
triDProj Double
a1 Double
a2 Double
a3   -- proj v@V3{} = 0.5 + 0.5*signum v
project (PV Double
_ Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
triDProj Double
a1 Double
a2 Double
a3   -- proj pv@PV{} = 0.5 + 0.5*(signum.toV3 $ pv)
project (ODD Double
a1 Double
a2 Double
a3 Double
_) = Double -> Double -> Double -> Cl3
triDProj Double
a1 Double
a2 Double
a3   -- od@ODD{} = 0.5 + 0.5*(signum.toV3 $ od)
project (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
triDProj Double
a23 Double
a31 Double
a12   -- bv@BV{} = 0.5 + 0.5*(mIx.signum $ bv)
project (H Double
_ Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
triDProj Double
a23 Double
a31 Double
a12   -- h@H{} = 0.5 + 0.5*(mIx.signum.toBV $ h)
project (TPV Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Cl3
triDProj Double
a23 Double
a31 Double
a12   -- tpv@TPV{} = 0.5 + 0.5*(mIx.signum.toBV $ tpv)
project (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
biTriDProj Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
project (APS Double
_ Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
biTriDProj Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12



-- If Dot product is negative or zero we have a problem, if it is zero
-- it either the vector or bivector par is zero or they are orthognal
-- if the dot product is negative the vectors could be antiparallel
biTriDProj :: Double -> Double -> Double -> Double -> Double -> Double -> Cl3  -- PV<:Cl3
biTriDProj :: Double -> Double -> Double -> Double -> Double -> Double -> Cl3
biTriDProj Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 =
  let v3Mag :: Double
v3Mag = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      v3MagltTol :: Bool
v3MagltTol = Double
v3Mag Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
< Double
tol'
      halfInvV3Mag :: Double
halfInvV3Mag = Double -> Double
forall a. Fractional a => a -> a
recip Double
v3Mag Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2
      bvMag :: Double
bvMag = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      bvMagltTol :: Bool
bvMagltTol = Double
bvMag Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
< Double
tol'
      halfInvBVMag :: Double
halfInvBVMag = Double -> Double
forall a. Fractional a => a -> a
recip Double
bvMag Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2
      dotPos :: Bool
dotPos = (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12) Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0
      b1 :: Double
b1 = Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23
      b2 :: Double
b2 = Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31
      b3 :: Double
b3 = Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12
      bHalfInvMag :: Double
bHalfInvMag = (Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
b1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      c1 :: Double
c1 = Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a23
      c2 :: Double
c2 = Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a31
      c3 :: Double
c3 = Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a12
      cHalfInvMag :: Double
cHalfInvMag = (Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
2)(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
c1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
  in if | Bool
v3MagltTol Bool -> Bool -> Bool
&& Bool
bvMagltTol -> Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 Double
0 Double
0 Double
0.5
        | Bool
bvMagltTol -> Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 (Double
halfInvV3Mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
halfInvV3Mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
halfInvV3Mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3)
        | Bool
v3MagltTol -> Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 (Double
halfInvBVMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
halfInvBVMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
halfInvBVMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12)
        | Bool
dotPos -> Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 (Double
bHalfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
b1) (Double
bHalfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
b2) (Double
bHalfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
b3)
        | Bool
otherwise -> Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 (Double
cHalfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
c1) (Double
cHalfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
c2) (Double
cHalfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
c3)


-- | 'triDProj' a single 3 dimensional vector grade to a projector
triDProj :: Double -> Double -> Double -> Cl3  -- PV<:Cl3
triDProj :: Double -> Double -> Double -> Cl3
triDProj Double
v1 Double
v2 Double
v3 =
  let mag :: Double
mag = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
v1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
v2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
v3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      halfInvMag :: Double
halfInvMag = Double -> Double
forall a. Fractional a => a -> a
recip Double
mag Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
2
  in if Double
mag Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
     then Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 Double
0 Double
0 Double
0.5
     else Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 (Double
halfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
v1) (Double
halfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
v2) (Double
halfInvMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
v3)


-- | 'boost2colinear' calculates a boost that is perpendicular to both the vector and bivector
-- components of the cliffor, that will mix the vector and bivector parts such that the vector and bivector
-- parts become colinear. This function is a simularity transform such that:
--
-- > cliffor = boost * colinear * bar boost
--
-- and returns the boost given the inputs.  First the boost must be calculated
-- and then
--
-- > colinear = bar boost * cliffor * boost
--
-- and colinear will have colinear vector and bivector parts of the cliffor.
-- This is somewhat simular to finding the drift frame for a static electromagnetic field.
--
-- > v = toV3 cliffor  -- extract the vector
-- > bv = mIx.toBV $ cliffor  -- extract the bivector and turn it into a vector
-- > invariant = ((2*).mIx.toBV $ v * bv) / (toR (v^2) + toR (bv^2))
-- > boost = spectraldcmpSpecial toR (exp.(/4).atanh) invariant
--
boost2colinear :: Double -> Double -> Double -> Double -> Double -> Double -> Cl3  -- PV<:Cl3
boost2colinear :: Double -> Double -> Double -> Double -> Double -> Double -> Cl3
boost2colinear Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 =
  let scale :: Double
scale = Double -> Double
forall a. Fractional a => a -> a
recip (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      b1 :: Double
b1 = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)
      b2 :: Double
b2 = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12)
      b3 :: Double
b3 = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)
      eig1 :: Double
eig1 = (Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*)(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
b1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      eig2 :: Double
eig2 = Double -> Double
forall a. Num a => a -> a
negate Double
eig1
      transEig1 :: Double
transEig1 = Double -> Double
forall a. Floating a => a -> a
exp(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
4)(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
atanh (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
eig1
      transEig2 :: Double
transEig2 = Double -> Double
forall a. Floating a => a -> a
exp(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/Double
4)(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
atanh (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
eig2
      sumTransEigs :: Double
sumTransEigs = (Double
transEig1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
transEig2) Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Fractional a => a -> a
recip Double
eig1
  in Double -> Double -> Double -> Double -> Cl3
PV (Double
0.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
transEig1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
transEig2)) (Double
sumTransEigs Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
b1) (Double
sumTransEigs Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
b2) (Double
sumTransEigs Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
b3)


-- | 'isColinear' takes a Cliffor and determines if either the vector part or the bivector part are
-- zero or both aligned in the same direction.
isColinear :: Cl3 -> Bool
isColinear :: Cl3 -> Bool
isColinear R{} = Bool
True
isColinear V3{} = Bool
True
isColinear BV{} = Bool
True
isColinear I{} = Bool
True
isColinear PV{} = Bool
True
isColinear H{} = Bool
True
isColinear C{} = Bool
True
isColinear ODD{} = Bool
True
isColinear TPV{} = Bool
True
isColinear (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Bool
colinearHelper Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
isColinear (APS Double
_ Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Double -> Double -> Double -> Bool
colinearHelper Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12

colinearHelper :: Double -> Double -> Double -> Double -> Double -> Double -> Bool
colinearHelper :: Double -> Double -> Double -> Double -> Double -> Double -> Bool
colinearHelper Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 =
  let magV3 :: Double
magV3 = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMagV3 :: Double
invMagV3 = Double -> Double
forall a. Fractional a => a -> a
recip Double
magV3
      magBV :: Double
magBV = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMagBV :: Double
invMagBV = Double -> Double
forall a. Fractional a => a -> a
recip Double
magBV
      crss :: Double
crss = Double -> Double
forall a. Floating a => a -> a
sqrt (((Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2)Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12) Double -> Double -> Double
forall a. Num a => a -> a -> a
- (Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3)Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31))Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+
                   ((Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3)Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) Double -> Double -> Double
forall a. Num a => a -> a -> a
- (Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1)Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12))Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+
                   ((Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1)Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) Double -> Double -> Double
forall a. Num a => a -> a -> a
- (Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2)Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23))Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
  in Double
magV3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
||     -- Zero Vector
     Double
magBV Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0 Bool -> Bool -> Bool
||     -- Zero Bivector
     Double
crss Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
<= Double
tol'      -- Orthoganl part is zero-ish


-- | 'hasNilpotent' takes a Cliffor and determines if the vector part and the bivector part are
-- orthoganl and equal in magnitude, i.e. that it is simular to a nilpotent BPV.
hasNilpotent :: Cl3 -> Bool
hasNilpotent :: Cl3 -> Bool
hasNilpotent R{} = Bool
False
hasNilpotent V3{} = Bool
False
hasNilpotent BV{} = Bool
False
hasNilpotent I{} = Bool
False
hasNilpotent PV{} = Bool
False
hasNilpotent H{} = Bool
False
hasNilpotent C{} = Bool
False
hasNilpotent ODD{} = Bool
False
hasNilpotent TPV{} = Bool
False
hasNilpotent (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Bool
nilpotentHelper Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
hasNilpotent (APS Double
_ Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Double -> Double -> Double -> Bool
nilpotentHelper Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12

nilpotentHelper :: Double -> Double -> Double -> Double -> Double -> Double -> Bool
nilpotentHelper :: Double -> Double -> Double -> Double -> Double -> Double -> Bool
nilpotentHelper Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 =
  let magV3 :: Double
magV3 = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMagV3 :: Double
invMagV3 = Double -> Double
forall a. Fractional a => a -> a
recip Double
magV3
      magBV :: Double
magBV = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMagBV :: Double
invMagBV = Double -> Double
forall a. Fractional a => a -> a
recip Double
magV3
      magDiff :: Double
magDiff = Double -> Double
forall a. Num a => a -> a
abs (Double
magV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
magBV)
      b1 :: Double
b1 = Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1
      b2 :: Double
b2 = Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2
      b3 :: Double
b3 = Double
invMagV3 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3
      b23 :: Double
b23 = Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23
      b31 :: Double
b31 = Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31
      b12 :: Double
b12 = Double
invMagBV Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12
      c0 :: Double
c0 = Double
b1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12
      c1 :: Double
c1 = Double
b12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3
      c2 :: Double
c2 = Double
b1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3
      c3 :: Double
c3 = Double
b31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2
      c23 :: Double
c23 = Double
b2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31
      c31 :: Double
c31 = Double
b3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23
      c12 :: Double
c12 = Double
b1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
b23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23
      c123 :: Double
c123 = Double
b1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b23 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b23Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b31 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b31Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b12 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
b12Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3
      x :: Double
x = Double -> Double
forall a. Floating a => a -> a
sqrt ((Double
c0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
c0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
c0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+
                (Double
c2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
c3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
c3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
c1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
c1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
c2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
c23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
      sqMag :: Double
sqMag = Double -> Double
forall a. Floating a => a -> a
sqrt (Double
c0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x)
  in Double
magV3 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
/= Double
0 Bool -> Bool -> Bool
&&          -- Non-Zero Vector Part
     Double
magBV Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
/= Double
0 Bool -> Bool -> Bool
&&          -- Non-Zero Bivector Part
     Double
magDiff Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
<= Double
tol' Bool -> Bool -> Bool
&&     -- Vector and Bivector are Equal Magnitude
     Double
sqMag Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
<= Double
tol'          -- It's non-zero but squares to zero


-- | 'projEigs' function returns complementary projectors and eigenvalues for a Cliffor with specialization.
-- The Cliffor at this point is allready colinear and the Eigenvalue is known to be real, imaginary, or complex.
projEigs :: (Cl3 -> Cl3) -> Cl3 -> (Cl3,Cl3,Cl3,Cl3)
projEigs :: (Cl3 -> Cl3) -> Cl3 -> (Cl3, Cl3, Cl3, Cl3)
projEigs Cl3 -> Cl3
toSpecial Cl3
cliffor =
  let p :: Cl3
p = Cl3 -> Cl3
project Cl3
cliffor
      p_bar :: Cl3
p_bar = Cl3 -> Cl3
bar Cl3
p
      eig1 :: Cl3
eig1 = Cl3
2 Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
toSpecial (Cl3
p Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
cliffor Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
p)
      eig2 :: Cl3
eig2 = Cl3
2 Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
toSpecial (Cl3
p_bar Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
cliffor Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3
p_bar)
  in (Cl3
p,Cl3
p_bar,Cl3
eig1,Cl3
eig2)

-- | 'reduce' function reduces the number of grades in a specialized Cliffor if they
-- are zero-ish
reduce :: Cl3 -> Cl3
reduce :: Cl3 -> Cl3
reduce Cl3
cliff
  | Cl3 -> Cl3
forall a. Num a => a -> a
abs Cl3
cliff Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Double -> Cl3
R Double
0
  | Bool
otherwise = Cl3 -> Cl3
go_reduce Cl3
cliff
    where
      go_reduce :: Cl3 -> Cl3
go_reduce r :: Cl3
r@R{} = Cl3
r
      go_reduce v :: Cl3
v@V3{} = Cl3
v
      go_reduce bv :: Cl3
bv@BV{} = Cl3
bv
      go_reduce i :: Cl3
i@I{} = Cl3
i
      go_reduce pv :: Cl3
pv@PV{}
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toV3 Cl3
pv) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toR Cl3
pv
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toR Cl3
pv) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toV3 Cl3
pv
        | Bool
otherwise = Cl3
pv
      go_reduce h :: Cl3
h@H{}
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toBV Cl3
h) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toR Cl3
h
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toR Cl3
h) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toBV Cl3
h
        | Bool
otherwise = Cl3
h
      go_reduce c :: Cl3
c@C{}
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toI Cl3
c) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toR Cl3
c
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toR Cl3
c) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toI Cl3
c
        | Bool
otherwise = Cl3
c
      go_reduce bpv :: Cl3
bpv@BPV{}
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toBV Cl3
bpv) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toV3 Cl3
bpv
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toV3 Cl3
bpv) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toBV Cl3
bpv
        | Bool
otherwise = Cl3
bpv
      go_reduce od :: Cl3
od@ODD{}
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toI Cl3
od) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toV3 Cl3
od
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toV3 Cl3
od) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toI Cl3
od
        | Bool
otherwise = Cl3
od
      go_reduce tpv :: Cl3
tpv@TPV{}
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toBV Cl3
tpv) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toI Cl3
tpv
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toI Cl3
tpv) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
toBV Cl3
tpv
        | Bool
otherwise = Cl3
tpv
      go_reduce aps :: Cl3
aps@APS{}
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toBPV Cl3
aps) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
go_reduce (Cl3 -> Cl3
toC Cl3
aps)
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toODD Cl3
aps) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
go_reduce (Cl3 -> Cl3
toH Cl3
aps)
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toTPV Cl3
aps) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
go_reduce (Cl3 -> Cl3
toPV Cl3
aps)
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toC Cl3
aps) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
go_reduce (Cl3 -> Cl3
toBPV Cl3
aps)
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toH Cl3
aps) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
go_reduce (Cl3 -> Cl3
toODD Cl3
aps)
        | Cl3 -> Cl3
forall a. Num a => a -> a
abs (Cl3 -> Cl3
toPV Cl3
aps) Cl3 -> Cl3 -> Bool
forall a. Ord a => a -> a -> Bool
<= Cl3
tol = Cl3 -> Cl3
go_reduce (Cl3 -> Cl3
toTPV Cl3
aps)
        | Bool
otherwise = Cl3
aps


-- | 'mIx' a more effecient '\x -> I (-1) * x' typically useful for converting a
-- Bivector to a Vector in the same direction. Related to Hodge Dual and/or
-- Inverse Hodge Star.
mIx :: Cl3 -> Cl3
mIx :: Cl3 -> Cl3
mIx (R Double
a0) = Double -> Cl3
I (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
mIx (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
BV (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
mIx (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
V3 Double
a23 Double
a31 Double
a12
mIx (I Double
a123) = Double -> Cl3
R Double
a123
mIx (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
TPV (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3) (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
mIx (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a23 Double
a31 Double
a12 (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
mIx (C Double
a0 Double
a123) = Double -> Double -> Cl3
C Double
a123 (Double -> Double
forall a. Num a => a -> a
negate Double
a0)
mIx (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a23 Double
a31 Double
a12 (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
mIx (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
H Double
a123 (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
mIx (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
PV Double
a123 Double
a23 Double
a31 Double
a12
mIx (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a123 Double
a23 Double
a31 Double
a12 (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3) (Double -> Double
forall a. Num a => a -> a
negate Double
a0)

-- | 'timesI' is a more effecient '\x -> I 1 * x'
timesI :: Cl3 -> Cl3
timesI :: Cl3 -> Cl3
timesI (R Double
a0) = Double -> Cl3
I Double
a0
timesI (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
BV Double
a1 Double
a2 Double
a3
timesI (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
V3 (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
timesI (I Double
a123) = Double -> Cl3
R (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
timesI (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a1 Double
a2 Double
a3 Double
a0
timesI (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
ODD (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12) Double
a0
timesI (C Double
a0 Double
a123) = Double -> Double -> Cl3
C (Double -> Double
forall a. Num a => a -> a
negate Double
a123) Double
a0
timesI (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12) Double
a1 Double
a2 Double
a3
timesI (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
H (Double -> Double
forall a. Num a => a -> a
negate Double
a123) Double
a1 Double
a2 Double
a3
timesI (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
PV (Double -> Double
forall a. Num a => a -> a
negate Double
a123) (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
timesI (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double -> Double
forall a. Num a => a -> a
negate Double
a123) (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12) Double
a1 Double
a2 Double
a3 Double
a0

-- | 'abssignum' is a more effecient '\cl3 -> (abs cl3, signum cl3)'
-- So 'abs' is always R and 'signum' is the same type of constructor as the input
-- 'signum' is the element divided by its largest singular value 'abs'
abssignum :: Cl3 -> (Cl3,Cl3)
abssignum :: Cl3 -> (Cl3, Cl3)
abssignum Cl3
cl3 =
  let (R Double
m0) = Cl3 -> Cl3
absolute Cl3
cl3
  in if Double
m0 Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
     then (Double -> Cl3
R Double
0, Double -> Cl3
R Double
0) -- (abs 0 == 0, signum 0 == 0)
     else (Double -> Cl3
R Double
m0, Cl3
cl3Cl3 -> Cl3 -> Cl3
forall a. Fractional a => a -> a -> a
/(Double -> Cl3
R Double
m0))

absolute :: Cl3 -> Cl3
absolute :: Cl3 -> Cl3
absolute (R Double
a0) = Double -> Cl3
R (Double -> Double
forall a. Num a => a -> a
abs Double
a0)
absolute (V3 Double
a1 Double
a2 Double
a3) = let m :: Double
m = Double -> Double -> Double -> Double
rss3 Double
a1 Double
a2 Double
a3 in Double -> Cl3
R Double
m
absolute (BV Double
a23 Double
a31 Double
a12) = let m :: Double
m = Double -> Double -> Double -> Double
rss3 Double
a23 Double
a31 Double
a12 in Double -> Cl3
R Double
m
absolute (I Double
a123) = Double -> Cl3
R (Double -> Double
forall a. Num a => a -> a
abs Double
a123)
absolute (PV Double
a0 Double
a1 Double
a2 Double
a3) = let m :: Double
m = Double -> Double -> Double -> Double -> Double
reimMag Double
a0 Double
a1 Double
a2 Double
a3 in Double -> Cl3
R Double
m
absolute (H Double
a0 Double
a23 Double
a31 Double
a12) = let m :: Double
m = Double -> Double -> Double -> Double -> Double
rss4 Double
a0 Double
a23 Double
a31 Double
a12 in Double -> Cl3
R Double
m
absolute (C Double
a0 Double
a123) = let m :: Double
m = Double -> Double -> Double
rss2 Double
a0 Double
a123 in Double -> Cl3
R Double
m
absolute (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = let mag0 :: Double
mag0 = Double -> Double -> Double -> Double
rss3 (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23) (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23) (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)
                                          m :: Double
m = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
mag0 in Double -> Cl3
R Double
m
absolute (ODD Double
a1 Double
a2 Double
a3 Double
a123) = let m :: Double
m = Double -> Double -> Double -> Double -> Double
rss4 Double
a1 Double
a2 Double
a3 Double
a123 in Double -> Cl3
R Double
m
absolute (TPV Double
a23 Double
a31 Double
a12 Double
a123) = let m :: Double
m = Double -> Double -> Double -> Double -> Double
reimMag Double
a123 Double
a23 Double
a31 Double
a12 in Double -> Cl3
R Double
m
absolute (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = let mag0 :: Double
mag0 = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
                                                  m :: Double
m = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
mag0 in Double -> Cl3
R Double
m

rss2 :: Double -> Double -> Double
rss2 :: Double -> Double -> Double
rss2 Double
a0 Double
a123 = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2

rss3 :: Double -> Double -> Double -> Double
rss3 :: Double -> Double -> Double -> Double
rss3 Double
x Double
y Double
z = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
xDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
yDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
zDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2

rss4 :: Double -> Double -> Double -> Double -> Double
rss4 :: Double -> Double -> Double -> Double -> Double
rss4 Double
t Double
x Double
y Double
z = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
tDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
xDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
yDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
zDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2



#ifdef O_LIQUID
tol :: Cl3
tol = R 0

tol' :: Double
tol' = 0
#else
-- | 'tol' currently 128*eps
tol :: Cl3
{-# INLINE tol #-}
tol :: Cl3
tol = Double -> Cl3
R Double
1.4210854715202004e-14

tol' :: Double
{-# INLINE tol' #-}
tol' :: Double
tol' = Double
1.4210854715202004e-14
#endif

-- | 'bar' is a Clifford Conjugate, the vector grades are negated
bar :: Cl3 -> Cl3
bar :: Cl3 -> Cl3
bar (R Double
a0) = Double -> Cl3
R Double
a0
bar (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
V3 (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
bar (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
bar (I Double
a123) = Double -> Cl3
I Double
a123
bar (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3)
bar (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
bar (C Double
a0 Double
a123) = Double -> Double -> Cl3
C Double
a0 Double
a123
bar (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3) (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
bar (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3) Double
a123
bar (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12) Double
a123
bar (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 (Double -> Double
forall a. Num a => a -> a
negate Double
a1) (Double -> Double
forall a. Num a => a -> a
negate Double
a2) (Double -> Double
forall a. Num a => a -> a
negate Double
a3) (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12) Double
a123

-- | 'dag' is the Complex Conjugate, the imaginary grades are negated
dag :: Cl3 -> Cl3
dag :: Cl3 -> Cl3
dag (R Double
a0) = Double -> Cl3
R Double
a0
dag (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
V3 Double
a1 Double
a2 Double
a3
dag (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
dag (I Double
a123) = Double -> Cl3
I (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
dag (PV Double
a0 Double
a1 Double
a2 Double
a3) =  Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
a1 Double
a2 Double
a3
dag (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
dag (C Double
a0 Double
a123) = Double -> Double -> Cl3
C Double
a0 (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
dag (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12)
dag (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
dag (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12) (Double -> Double
forall a. Num a => a -> a
negate Double
a123)
dag (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 (Double -> Double
forall a. Num a => a -> a
negate Double
a23) (Double -> Double
forall a. Num a => a -> a
negate Double
a31) (Double -> Double
forall a. Num a => a -> a
negate Double
a12) (Double -> Double
forall a. Num a => a -> a
negate Double
a123)

----------------------------------------------------------------------------------------------------------------
-- the to... functions provide a lossy cast from one Cl3 constructor to another
---------------------------------------------------------------------------------------------------------------
-- | 'toR' takes any Cliffor and returns the R portion
toR :: Cl3 -> Cl3
toR :: Cl3 -> Cl3
toR (R Double
a0) = Double -> Cl3
R Double
a0
toR V3{} = Double -> Cl3
R Double
0
toR BV{} = Double -> Cl3
R Double
0
toR I{} = Double -> Cl3
R Double
0
toR (PV Double
a0 Double
_ Double
_ Double
_) = Double -> Cl3
R Double
a0
toR (H Double
a0 Double
_ Double
_ Double
_) = Double -> Cl3
R Double
a0
toR (C Double
a0 Double
_) = Double -> Cl3
R Double
a0
toR BPV{} = Double -> Cl3
R Double
0
toR ODD{} = Double -> Cl3
R Double
0
toR TPV{} = Double -> Cl3
R Double
0
toR (APS Double
a0 Double
_ Double
_ Double
_ Double
_ Double
_ Double
_ Double
_) = Double -> Cl3
R Double
a0

-- | 'toV3' takes any Cliffor and returns the V3 portion
toV3 :: Cl3 -> Cl3
toV3 :: Cl3 -> Cl3
toV3 R{} = Double -> Double -> Double -> Cl3
V3 Double
0 Double
0 Double
0
toV3 (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
V3 Double
a1 Double
a2 Double
a3
toV3 BV{} = Double -> Double -> Double -> Cl3
V3 Double
0 Double
0 Double
0
toV3 I{} = Double -> Double -> Double -> Cl3
V3 Double
0 Double
0 Double
0
toV3 (PV Double
_ Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
V3 Double
a1 Double
a2 Double
a3
toV3 H{} = Double -> Double -> Double -> Cl3
V3 Double
0 Double
0 Double
0
toV3 C{} = Double -> Double -> Double -> Cl3
V3 Double
0 Double
0 Double
0
toV3 (BPV Double
a1 Double
a2 Double
a3 Double
_ Double
_ Double
_) = Double -> Double -> Double -> Cl3
V3 Double
a1 Double
a2 Double
a3
toV3 (ODD Double
a1 Double
a2 Double
a3 Double
_) = Double -> Double -> Double -> Cl3
V3 Double
a1 Double
a2 Double
a3
toV3 TPV{} = Double -> Double -> Double -> Cl3
V3 Double
0 Double
0 Double
0
toV3 (APS Double
_ Double
a1 Double
a2 Double
a3 Double
_ Double
_ Double
_ Double
_) = Double -> Double -> Double -> Cl3
V3 Double
a1 Double
a2 Double
a3

-- | 'toBV' takes any Cliffor and returns the BV portion
toBV :: Cl3 -> Cl3
toBV :: Cl3 -> Cl3
toBV R{} = Double -> Double -> Double -> Cl3
BV Double
0 Double
0 Double
0
toBV V3{} = Double -> Double -> Double -> Cl3
BV Double
0 Double
0 Double
0
toBV (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV Double
a23 Double
a31 Double
a12
toBV I{} = Double -> Double -> Double -> Cl3
BV Double
0 Double
0 Double
0
toBV PV{} = Double -> Double -> Double -> Cl3
BV Double
0 Double
0 Double
0
toBV (H Double
_ Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV Double
a23 Double
a31 Double
a12
toBV C{} = Double -> Double -> Double -> Cl3
BV Double
0 Double
0 Double
0
toBV (BPV Double
_ Double
_ Double
_ Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV Double
a23 Double
a31 Double
a12
toBV ODD{} = Double -> Double -> Double -> Cl3
BV Double
0 Double
0 Double
0
toBV (TPV Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Cl3
BV Double
a23 Double
a31 Double
a12
toBV (APS Double
_ Double
_ Double
_ Double
_ Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Cl3
BV Double
a23 Double
a31 Double
a12

-- | 'toI' takes any Cliffor and returns the I portion
toI :: Cl3 -> Cl3
toI :: Cl3 -> Cl3
toI R{} = Double -> Cl3
I Double
0
toI V3{} = Double -> Cl3
I Double
0
toI BV{} = Double -> Cl3
I Double
0
toI (I Double
a123) = Double -> Cl3
I Double
a123
toI PV{} = Double -> Cl3
I Double
0
toI H{} = Double -> Cl3
I Double
0
toI (C Double
_ Double
a123) = Double -> Cl3
I Double
a123
toI BPV{} = Double -> Cl3
I Double
0
toI (ODD Double
_ Double
_ Double
_ Double
a123) = Double -> Cl3
I Double
a123
toI (TPV Double
_ Double
_ Double
_ Double
a123) = Double -> Cl3
I Double
a123
toI (APS Double
_ Double
_ Double
_ Double
_ Double
_ Double
_ Double
_ Double
a123) = Double -> Cl3
I Double
a123

-- | 'toPV' takes any Cliffor and returns the PV poriton
toPV :: Cl3 -> Cl3
toPV :: Cl3 -> Cl3
toPV (R Double
a0) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
0 Double
0 Double
0
toPV (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
PV Double
0 Double
a1 Double
a2 Double
a3
toPV BV{} = Double -> Double -> Double -> Double -> Cl3
PV Double
0 Double
0 Double
0 Double
0
toPV I{} = Double -> Double -> Double -> Double -> Cl3
PV Double
0 Double
0 Double
0 Double
0
toPV (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
a1 Double
a2 Double
a3
toPV (H Double
a0 Double
_ Double
_ Double
_) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
0 Double
0 Double
0
toPV (C Double
a0 Double
_) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
0 Double
0 Double
0
toPV (BPV Double
a1 Double
a2 Double
a3 Double
_ Double
_ Double
_) = Double -> Double -> Double -> Double -> Cl3
PV Double
0 Double
a1 Double
a2 Double
a3
toPV (ODD Double
a1 Double
a2 Double
a3 Double
_) = Double -> Double -> Double -> Double -> Cl3
PV Double
a1 Double
a2 Double
a3 Double
0
toPV TPV{} = Double -> Double -> Double -> Double -> Cl3
PV Double
0 Double
0 Double
0 Double
0
toPV (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
_ Double
_ Double
_ Double
_) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
a1 Double
a2 Double
a3

-- | 'toH' takes any Cliffor and returns the H portion
toH :: Cl3 -> Cl3
toH :: Cl3 -> Cl3
toH (R Double
a0) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 Double
0 Double
0 Double
0
toH V3{} = Double -> Double -> Double -> Double -> Cl3
H Double
0 Double
0 Double
0 Double
0
toH (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H Double
0 Double
a23 Double
a31 Double
a12
toH (I Double
_) = Double -> Double -> Double -> Double -> Cl3
H Double
0 Double
0 Double
0 Double
0
toH (PV Double
a0 Double
_ Double
_ Double
_) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 Double
0 Double
0 Double
0
toH (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 Double
a23 Double
a31 Double
a12
toH (C Double
a0 Double
_) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 Double
0 Double
0 Double
0
toH (BPV Double
_ Double
_ Double
_ Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H Double
0 Double
a23 Double
a31 Double
a12
toH ODD{} = Double -> Double -> Double -> Double -> Cl3
H Double
0 Double
0 Double
0 Double
0
toH (TPV Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Double -> Cl3
H Double
0 Double
a23 Double
a31 Double
a12
toH (APS Double
a0 Double
_ Double
_ Double
_ Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 Double
a23 Double
a31 Double
a12

-- | 'toC' takes any Cliffor and returns the C portion
toC :: Cl3 -> Cl3
toC :: Cl3 -> Cl3
toC (R Double
a0) = Double -> Double -> Cl3
C Double
a0 Double
0
toC V3{} = Double -> Double -> Cl3
C Double
0 Double
0
toC BV{} = Double -> Double -> Cl3
C Double
0 Double
0
toC (I Double
a123) = Double -> Double -> Cl3
C Double
0 Double
a123
toC (PV Double
a0 Double
_ Double
_ Double
_) = Double -> Double -> Cl3
C Double
a0 Double
0
toC (H Double
a0 Double
_ Double
_ Double
_) = Double -> Double -> Cl3
C Double
a0 Double
0
toC (C Double
a0 Double
a123) = Double -> Double -> Cl3
C Double
a0 Double
a123
toC BPV{} = Double -> Double -> Cl3
C Double
0 Double
0
toC (ODD Double
_ Double
_ Double
_ Double
a123) = Double -> Double -> Cl3
C Double
0 Double
a123
toC (TPV Double
_ Double
_ Double
_ Double
a123) = Double -> Double -> Cl3
C Double
0 Double
a123
toC (APS Double
a0 Double
_ Double
_ Double
_ Double
_ Double
_ Double
_ Double
a123) = Double -> Double -> Cl3
C Double
a0 Double
a123

-- | 'toBPV' takes any Cliffor and returns the BPV portion
toBPV :: Cl3 -> Cl3
toBPV :: Cl3 -> Cl3
toBPV R{} = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
0 Double
0 Double
0 Double
0 Double
0 Double
0
toBPV (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0
toBPV (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12
toBPV I{} = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
0 Double
0 Double
0 Double
0 Double
0 Double
0
toBPV (PV Double
_ Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0
toBPV (H Double
_ Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12
toBPV C{} = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
0 Double
0 Double
0 Double
0 Double
0 Double
0
toBPV (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
toBPV (ODD Double
a1 Double
a2 Double
a3 Double
_) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0
toBPV (TPV Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12
toBPV (APS Double
_ Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
_) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12

-- | 'toODD' takes any Cliffor and returns the ODD portion
toODD :: Cl3 -> Cl3
toODD :: Cl3 -> Cl3
toODD R{} = Double -> Double -> Double -> Double -> Cl3
ODD Double
0 Double
0 Double
0 Double
0
toODD (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 Double
0
toODD BV{} = Double -> Double -> Double -> Double -> Cl3
ODD Double
0 Double
0 Double
0 Double
0
toODD (I Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
0 Double
0 Double
0 Double
a123
toODD (PV Double
_ Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 Double
0
toODD H{} = Double -> Double -> Double -> Double -> Cl3
ODD Double
0 Double
0 Double
0 Double
0
toODD (C Double
_ Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
0 Double
0 Double
0 Double
a123
toODD (BPV Double
a1 Double
a2 Double
a3 Double
_ Double
_ Double
_) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 Double
0
toODD (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 Double
a123
toODD (TPV Double
_ Double
_ Double
_ Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
0 Double
0 Double
0 Double
a123
toODD (APS Double
_ Double
a1 Double
a2 Double
a3 Double
_ Double
_ Double
_ Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 Double
a123

-- | 'toTPV' takes any Cliffor and returns the TPV portion
toTPV :: Cl3 -> Cl3
toTPV :: Cl3 -> Cl3
toTPV R{} = Double -> Double -> Double -> Double -> Cl3
TPV Double
0 Double
0 Double
0 Double
0
toTPV V3{} = Double -> Double -> Double -> Double -> Cl3
TPV Double
0 Double
0 Double
0 Double
0
toTPV (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 Double
0
toTPV (I Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
0 Double
0 Double
0 Double
a123
toTPV PV{} = Double -> Double -> Double -> Double -> Cl3
TPV Double
0 Double
0 Double
0 Double
0
toTPV (H Double
_ Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 Double
0
toTPV (C Double
_ Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
0 Double
0 Double
0 Double
a123
toTPV (BPV Double
_ Double
_ Double
_ Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 Double
0
toTPV (ODD Double
_ Double
_ Double
_ Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
0 Double
0 Double
0 Double
a123
toTPV (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 Double
a123
toTPV (APS Double
_ Double
_ Double
_ Double
_ Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 Double
a123

-- | 'toAPS' takes any Cliffor and returns the APS portion
toAPS :: Cl3 -> Cl3
toAPS :: Cl3 -> Cl3
toAPS (R Double
a0) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 Double
0 Double
0 Double
0 Double
0
toAPS (V3 Double
a1 Double
a2 Double
a3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 Double
0
toAPS (BV Double
a23 Double
a31 Double
a12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 Double
0
toAPS (I Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
0 Double
0 Double
0 Double
0 Double
0 Double
0 Double
a123
toAPS (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 Double
0
toAPS (H Double
a0 Double
a23 Double
a31 Double
a12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 Double
0
toAPS (C Double
a0 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
0 Double
0 Double
0 Double
0 Double
0 Double
0 Double
a123
toAPS (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
0
toAPS (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
a1 Double
a2 Double
a3 Double
0 Double
0 Double
0 Double
a123
toAPS (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
0 Double
0 Double
0 Double
0 Double
a23 Double
a31 Double
a12 Double
a123
toAPS (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123

-- derivatives of the functions in the Fractional Class for use in Jordan NF functon implemetnation
recip' :: Cl3 -> Cl3
recip' :: Cl3 -> Cl3
recip' = Cl3 -> Cl3
forall a. Num a => a -> a
negate(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)   -- pole at 0

exp' :: Cl3 -> Cl3
exp' :: Cl3 -> Cl3
exp' = Cl3 -> Cl3
forall a. Floating a => a -> a
exp

log' :: Cl3 -> Cl3
log' :: Cl3 -> Cl3
log' = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip  -- pole at 0

sqrt' :: Cl3 -> Cl3
sqrt' :: Cl3 -> Cl3
sqrt' = (Cl3 -> Cl3 -> Cl3
forall a. Fractional a => a -> a -> a
/Cl3
2)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Floating a => a -> a
sqrt   -- pole at 0

sin' :: Cl3 -> Cl3
sin' :: Cl3 -> Cl3
sin' = Cl3 -> Cl3
forall a. Floating a => a -> a
cos

cos' :: Cl3 -> Cl3
cos' :: Cl3 -> Cl3
cos' = Cl3 -> Cl3
forall a. Num a => a -> a
negate(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Floating a => a -> a
sin

tan' :: Cl3 -> Cl3
tan' :: Cl3 -> Cl3
tan' = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Floating a => a -> a
cos  -- pole at pi/2*n for all integers

asin' :: Cl3 -> Cl3
asin' :: Cl3 -> Cl3
asin' = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Floating a => a -> a
sqrt(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3
1Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
-)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-1

acos' :: Cl3 -> Cl3
acos' :: Cl3 -> Cl3
acos' = Cl3 -> Cl3
forall a. Num a => a -> a
negate(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Floating a => a -> a
sqrt(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3
1Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
-)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-1

atan' :: Cl3 -> Cl3
atan' :: Cl3 -> Cl3
atan' = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3
1Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
+)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-i

sinh' :: Cl3 -> Cl3
sinh' :: Cl3 -> Cl3
sinh' = Cl3 -> Cl3
forall a. Floating a => a -> a
cosh

cosh' :: Cl3 -> Cl3
cosh' :: Cl3 -> Cl3
cosh' = Cl3 -> Cl3
forall a. Floating a => a -> a
sinh

tanh' :: Cl3 -> Cl3
tanh' :: Cl3 -> Cl3
tanh' = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Floating a => a -> a
cosh

asinh' :: Cl3 -> Cl3
asinh' :: Cl3 -> Cl3
asinh' = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3 -> Cl3
forall a. Floating a => a -> a
sqrt(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3
1Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
+)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-i

acosh' :: Cl3 -> Cl3
acosh' :: Cl3 -> Cl3
acosh' Cl3
x = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip (Cl3 -> Cl3) -> Cl3 -> Cl3
forall a b. (a -> b) -> a -> b
$ Cl3 -> Cl3
forall a. Floating a => a -> a
sqrt (Cl3
x Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
- Cl3
1) Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
* Cl3 -> Cl3
forall a. Floating a => a -> a
sqrt (Cl3
x Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
+ Cl3
1)  -- pole at +/-1

atanh' :: Cl3 -> Cl3
atanh' :: Cl3 -> Cl3
atanh' = Cl3 -> Cl3
forall a. Fractional a => a -> a
recip(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3
1Cl3 -> Cl3 -> Cl3
forall a. Num a => a -> a -> a
-)(Cl3 -> Cl3) -> (Cl3 -> Cl3) -> Cl3 -> Cl3
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Cl3 -> Integer -> Cl3
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)  -- pole at +/-1


#ifndef O_NO_STORABLE
-------------------------------------------------------------------
-- 
-- Instance of Cl3 types with the "Foreign.Storable" library.
--  
-- For use with high performance data structures like Data.Vector.Storable
-- or Data.Array.Storable
-- 
-------------------------------------------------------------------

-- | Cl3 instance of Storable uses the APS constructor as its standard interface.
-- "peek" returns a cliffor constructed with APS. "poke" converts a cliffor to APS.
-- For a more compact storing of constructors other than APS use the storable
-- subtypes Cl3_R, Cl3_V3, Cl3_BV, Cl3_I, Cl3_PV, Cl3_H, Cl3_C, Cl3_BPV,
-- Cl3_ODD, Cl3_TPV.
instance Storable Cl3 where
  sizeOf :: Cl3 -> Int
sizeOf Cl3
_ = Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3 -> Int
alignment Cl3
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3 -> IO Cl3
peek Ptr Cl3
ptr = do
    Double
a0 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a1 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a2 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Double
a3 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3)
    Double
a23 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
4)
    Double
a31 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
5)
    Double
a12 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
6)
    Double
a123 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
7)
    Cl3 -> IO Cl3
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3 -> IO Cl3) -> Cl3 -> IO Cl3
forall a b. (a -> b) -> a -> b
$ Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3 -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)
  
  poke :: Ptr Cl3 -> Cl3 -> IO ()
poke Ptr Cl3
ptr (Cl3 -> Cl3
toAPS -> APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a0
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a1
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a2
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3) Double
a3
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
4) Double
a23
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
5) Double
a31
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
6) Double
a12
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
7) Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3 -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)
  poke Ptr Cl3
_ Cl3
_ = String -> IO ()
forall a. HasCallStack => String -> a
error String
"Serious Issues with poke in Cl3.Storable"


-- | 'Cl3_R' a compact storable data type for R.
data Cl3_R where
  Cl3_R :: !Double -> Cl3_R

-- | 'toCl3_R' converts a Cl3 value constructed with R to its compact form.
toCl3_R :: Cl3 -> Cl3_R
toCl3_R :: Cl3 -> Cl3_R
toCl3_R (R Double
a0) = Double -> Cl3_R
Cl3_R Double
a0
toCl3_R Cl3
err = String -> Cl3_R
forall a. HasCallStack => String -> a
error (String -> Cl3_R) -> String -> Cl3_R
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not R to Cl3_R, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_R' converts the compact Cl3_R type back to a Cl3 type.
fromCl3_R :: Cl3_R -> Cl3
fromCl3_R :: Cl3_R -> Cl3
fromCl3_R (Cl3_R Double
a0) = Double -> Cl3
R Double
a0

instance Show Cl3_R where
  show :: Cl3_R -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_R -> Cl3) -> Cl3_R -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_R -> Cl3
fromCl3_R

#ifndef O_NO_DERIVED
instance Read Cl3_R where
  readPrec :: ReadPrec Cl3_R
readPrec = Cl3 -> Cl3_R
toCl3_R (Cl3 -> Cl3_R) -> ReadPrec Cl3 -> ReadPrec Cl3_R
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_R where
  sizeOf :: Cl3_R -> Int
sizeOf Cl3_R
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_R -> Int
alignment Cl3_R
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_R -> IO Cl3_R
peek Ptr Cl3_R
ptr = do
    Double
a0 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
offset
    Cl3_R -> IO Cl3_R
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_R -> IO Cl3_R) -> Cl3_R -> IO Cl3_R
forall a b. (a -> b) -> a -> b
$ Double -> Cl3_R
Cl3_R Double
a0
      where
        offset :: Ptr Double
offset = (Ptr Cl3_R -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_R
ptr :: Ptr Double)

  poke :: Ptr Cl3_R -> Cl3_R -> IO ()
poke Ptr Cl3_R
ptr (Cl3_R Double
a0) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr Double
offset Double
a0
      where
        offset :: Ptr Double
offset = (Ptr Cl3_R -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_R
ptr :: Ptr Double)


-- | 'Cl3_V3' a compact storable data type for V3.
data Cl3_V3 where
  Cl3_V3 :: !Double -> !Double -> !Double -> Cl3_V3

-- | 'toCl3_V3' converts a Cl3 value constructed with V3 to its compact form.
toCl3_V3 :: Cl3 -> Cl3_V3
toCl3_V3 :: Cl3 -> Cl3_V3
toCl3_V3 (V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3_V3
Cl3_V3 Double
a1 Double
a2 Double
a3
toCl3_V3 Cl3
err = String -> Cl3_V3
forall a. HasCallStack => String -> a
error (String -> Cl3_V3) -> String -> Cl3_V3
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not V3 to Cl3_V3, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_V3' converts the compact Cl3_V3 type back to a Cl3 type.
fromCl3_V3 :: Cl3_V3 -> Cl3
fromCl3_V3 :: Cl3_V3 -> Cl3
fromCl3_V3 (Cl3_V3 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Cl3
V3 Double
a1 Double
a2 Double
a3

instance Show Cl3_V3 where
  show :: Cl3_V3 -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_V3 -> Cl3) -> Cl3_V3 -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_V3 -> Cl3
fromCl3_V3

#ifndef O_NO_DERIVED
instance Read Cl3_V3 where
  readPrec :: ReadPrec Cl3_V3
readPrec = Cl3 -> Cl3_V3
toCl3_V3 (Cl3 -> Cl3_V3) -> ReadPrec Cl3 -> ReadPrec Cl3_V3
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_V3 where
  sizeOf :: Cl3_V3 -> Int
sizeOf Cl3_V3
_ = Int
3 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_V3 -> Int
alignment Cl3_V3
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_V3 -> IO Cl3_V3
peek Ptr Cl3_V3
ptr = do
    Double
a1 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a2 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a3 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Cl3_V3 -> IO Cl3_V3
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_V3 -> IO Cl3_V3) -> Cl3_V3 -> IO Cl3_V3
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Cl3_V3
Cl3_V3 Double
a1 Double
a2 Double
a3
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_V3 -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_V3
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_V3 -> Cl3_V3 -> IO ()
poke Ptr Cl3_V3
ptr (Cl3_V3 Double
a1 Double
a2 Double
a3) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a1
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a2
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a3
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_V3 -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_V3
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_BV' a compact storable data type for BV.
data Cl3_BV where
  Cl3_BV :: !Double -> !Double -> !Double -> Cl3_BV

-- | 'toCl3_BV' converts a Cl3 value constructed with BV to its compact form.
toCl3_BV :: Cl3 -> Cl3_BV
toCl3_BV :: Cl3 -> Cl3_BV
toCl3_BV (BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3_BV
Cl3_BV Double
a23 Double
a31 Double
a12
toCl3_BV Cl3
err = String -> Cl3_BV
forall a. HasCallStack => String -> a
error (String -> Cl3_BV) -> String -> Cl3_BV
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not BV to Cl3_BV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_BV' converts the compact Cl3_BV type back to a Cl3 type.
fromCl3_BV :: Cl3_BV -> Cl3
fromCl3_BV :: Cl3_BV -> Cl3
fromCl3_BV (Cl3_BV Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Cl3
BV Double
a23 Double
a31 Double
a12

instance Show Cl3_BV where
  show :: Cl3_BV -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_BV -> Cl3) -> Cl3_BV -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_BV -> Cl3
fromCl3_BV

#ifndef O_NO_DERIVED
instance Read Cl3_BV where
  readPrec :: ReadPrec Cl3_BV
readPrec = Cl3 -> Cl3_BV
toCl3_BV (Cl3 -> Cl3_BV) -> ReadPrec Cl3 -> ReadPrec Cl3_BV
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_BV where
  sizeOf :: Cl3_BV -> Int
sizeOf Cl3_BV
_ = Int
3 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_BV -> Int
alignment Cl3_BV
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_BV -> IO Cl3_BV
peek Ptr Cl3_BV
ptr = do
    Double
a23 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a31 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a12 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Cl3_BV -> IO Cl3_BV
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_BV -> IO Cl3_BV) -> Cl3_BV -> IO Cl3_BV
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Cl3_BV
Cl3_BV Double
a23 Double
a31 Double
a12
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_BV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_BV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_BV -> Cl3_BV -> IO ()
poke Ptr Cl3_BV
ptr (Cl3_BV Double
a23 Double
a31 Double
a12) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a23
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a31
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a12
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_BV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_BV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_I' a compact storable data type for I.
data Cl3_I where
  Cl3_I :: !Double -> Cl3_I

-- | 'toCl3_I' converts a Cl3 value constructed with I to its compact form.
toCl3_I :: Cl3 -> Cl3_I
toCl3_I :: Cl3 -> Cl3_I
toCl3_I (I Double
a123) = Double -> Cl3_I
Cl3_I Double
a123
toCl3_I Cl3
err = String -> Cl3_I
forall a. HasCallStack => String -> a
error (String -> Cl3_I) -> String -> Cl3_I
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not R to Cl3_R, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_I' converts the compact Cl3_I type back to a Cl3 type.
fromCl3_I :: Cl3_I -> Cl3
fromCl3_I :: Cl3_I -> Cl3
fromCl3_I (Cl3_I Double
a123) = Double -> Cl3
I Double
a123

instance Show Cl3_I where
  show :: Cl3_I -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_I -> Cl3) -> Cl3_I -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_I -> Cl3
fromCl3_I

#ifndef O_NO_DERIVED
instance Read Cl3_I where
  readPrec :: ReadPrec Cl3_I
readPrec = Cl3 -> Cl3_I
toCl3_I (Cl3 -> Cl3_I) -> ReadPrec Cl3 -> ReadPrec Cl3_I
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_I where
  sizeOf :: Cl3_I -> Int
sizeOf Cl3_I
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_I -> Int
alignment Cl3_I
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_I -> IO Cl3_I
peek Ptr Cl3_I
ptr = do
    Double
a123 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
offset
    Cl3_I -> IO Cl3_I
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_I -> IO Cl3_I) -> Cl3_I -> IO Cl3_I
forall a b. (a -> b) -> a -> b
$ Double -> Cl3_I
Cl3_I Double
a123
      where
        offset :: Ptr Double
offset = (Ptr Cl3_I -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_I
ptr :: Ptr Double)

  poke :: Ptr Cl3_I -> Cl3_I -> IO ()
poke Ptr Cl3_I
ptr (Cl3_I Double
a123) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr Double
offset Double
a123
      where
        offset :: Ptr Double
offset = (Ptr Cl3_I -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_I
ptr :: Ptr Double)


-- | 'Cl3_PV' a compact storable data type for PV.
data Cl3_PV where
  Cl3_PV :: !Double -> !Double -> !Double -> !Double -> Cl3_PV

-- | 'toCl3_PV' converts a Cl3 value constructed with PV to its compact form.
toCl3_PV :: Cl3 -> Cl3_PV
toCl3_PV :: Cl3 -> Cl3_PV
toCl3_PV (PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3_PV
Cl3_PV Double
a0 Double
a1 Double
a2 Double
a3
toCl3_PV Cl3
err = String -> Cl3_PV
forall a. HasCallStack => String -> a
error (String -> Cl3_PV) -> String -> Cl3_PV
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not PV to Cl3_PV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_PV' converts the compact Cl3_PV type back to a Cl3 type.
fromCl3_PV :: Cl3_PV -> Cl3
fromCl3_PV :: Cl3_PV -> Cl3
fromCl3_PV (Cl3_PV Double
a0 Double
a1 Double
a2 Double
a3) = Double -> Double -> Double -> Double -> Cl3
PV Double
a0 Double
a1 Double
a2 Double
a3

instance Show Cl3_PV where
  show :: Cl3_PV -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_PV -> Cl3) -> Cl3_PV -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_PV -> Cl3
fromCl3_PV

#ifndef O_NO_DERIVED
instance Read Cl3_PV where
  readPrec :: ReadPrec Cl3_PV
readPrec = Cl3 -> Cl3_PV
toCl3_PV (Cl3 -> Cl3_PV) -> ReadPrec Cl3 -> ReadPrec Cl3_PV
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_PV where
  sizeOf :: Cl3_PV -> Int
sizeOf Cl3_PV
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_PV -> Int
alignment Cl3_PV
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_PV -> IO Cl3_PV
peek Ptr Cl3_PV
ptr = do
    Double
a0 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a1 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a2 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Double
a3 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
4)
    Cl3_PV -> IO Cl3_PV
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_PV -> IO Cl3_PV) -> Cl3_PV -> IO Cl3_PV
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> Cl3_PV
Cl3_PV Double
a0 Double
a1 Double
a2 Double
a3
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_PV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_PV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_PV -> Cl3_PV -> IO ()
poke Ptr Cl3_PV
ptr (Cl3_PV Double
a0 Double
a1 Double
a2 Double
a3) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a0
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a1
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a2
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3) Double
a3
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_PV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_PV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_H' a compact storable data type for H.
data Cl3_H where
  Cl3_H :: !Double -> !Double -> !Double -> !Double -> Cl3_H

-- | 'toCl3_H' converts a Cl3 value constructed with H to its compact form.
toCl3_H :: Cl3 -> Cl3_H
toCl3_H :: Cl3 -> Cl3_H
toCl3_H (H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3_H
Cl3_H Double
a0 Double
a23 Double
a31 Double
a12
toCl3_H Cl3
err = String -> Cl3_H
forall a. HasCallStack => String -> a
error (String -> Cl3_H) -> String -> Cl3_H
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not H to Cl3_H, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_H' converts the compact Cl3_H type back to a Cl3 type.
fromCl3_H :: Cl3_H -> Cl3
fromCl3_H :: Cl3_H -> Cl3
fromCl3_H (Cl3_H Double
a0 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Cl3
H Double
a0 Double
a23 Double
a31 Double
a12

instance Show Cl3_H where
  show :: Cl3_H -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_H -> Cl3) -> Cl3_H -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_H -> Cl3
fromCl3_H

#ifndef O_NO_DERIVED
instance Read Cl3_H where
  readPrec :: ReadPrec Cl3_H
readPrec = Cl3 -> Cl3_H
toCl3_H (Cl3 -> Cl3_H) -> ReadPrec Cl3 -> ReadPrec Cl3_H
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_H where
  sizeOf :: Cl3_H -> Int
sizeOf Cl3_H
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_H -> Int
alignment Cl3_H
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_H -> IO Cl3_H
peek Ptr Cl3_H
ptr = do
    Double
a0 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a23 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a31 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Double
a12 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3)
    Cl3_H -> IO Cl3_H
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_H -> IO Cl3_H) -> Cl3_H -> IO Cl3_H
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> Cl3_H
Cl3_H Double
a0 Double
a23 Double
a31 Double
a12
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_H -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_H
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_H -> Cl3_H -> IO ()
poke Ptr Cl3_H
ptr (Cl3_H Double
a0 Double
a23 Double
a31 Double
a12) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a0
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a23
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a31
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3) Double
a12
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_H -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_H
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_C' a compact storable data type for C.
data Cl3_C where
  Cl3_C :: !Double -> !Double -> Cl3_C

-- | 'toCl3_C' converts a Cl3 value constructed with C to its compact form.
toCl3_C :: Cl3 -> Cl3_C
toCl3_C :: Cl3 -> Cl3_C
toCl3_C (C Double
a0 Double
a123) = Double -> Double -> Cl3_C
Cl3_C Double
a0 Double
a123
toCl3_C Cl3
err = String -> Cl3_C
forall a. HasCallStack => String -> a
error (String -> Cl3_C) -> String -> Cl3_C
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not C to Cl3_C, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_C' converts the compact Cl3_C type back to a Cl3 type.
fromCl3_C :: Cl3_C -> Cl3
fromCl3_C :: Cl3_C -> Cl3
fromCl3_C (Cl3_C Double
a0 Double
a123) = Double -> Double -> Cl3
C Double
a0 Double
a123

instance Show Cl3_C where
  show :: Cl3_C -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_C -> Cl3) -> Cl3_C -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_C -> Cl3
fromCl3_C

#ifndef O_NO_DERIVED
instance Read Cl3_C where
  readPrec :: ReadPrec Cl3_C
readPrec = Cl3 -> Cl3_C
toCl3_C (Cl3 -> Cl3_C) -> ReadPrec Cl3 -> ReadPrec Cl3_C
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_C where
  sizeOf :: Cl3_C -> Int
sizeOf Cl3_C
_ = Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_C -> Int
alignment Cl3_C
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_C -> IO Cl3_C
peek Ptr Cl3_C
ptr = do
    Double
a0 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a123 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Cl3_C -> IO Cl3_C
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_C -> IO Cl3_C) -> Cl3_C -> IO Cl3_C
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Cl3_C
Cl3_C Double
a0 Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_C -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_C
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_C -> Cl3_C -> IO ()
poke Ptr Cl3_C
ptr (Cl3_C Double
a0 Double
a123) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a0
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_C -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_C
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_BPV' a compact storable data type for BPV.
data Cl3_BPV where
  Cl3_BPV :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> Cl3_BPV

-- | 'toCl3_BPV' converts a Cl3 value constructed with BPV to its compact form.
toCl3_BPV :: Cl3 -> Cl3_BPV
toCl3_BPV :: Cl3 -> Cl3_BPV
toCl3_BPV (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3_BPV
Cl3_BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
toCl3_BPV Cl3
err = String -> Cl3_BPV
forall a. HasCallStack => String -> a
error (String -> Cl3_BPV) -> String -> Cl3_BPV
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not BPV to Cl3_BPV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_BPV' converts the compact Cl3_BPV type back to a Cl3 type.
fromCl3_BPV :: Cl3_BPV -> Cl3
fromCl3_BPV :: Cl3_BPV -> Cl3
fromCl3_BPV (Cl3_BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12

instance Show Cl3_BPV where
  show :: Cl3_BPV -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_BPV -> Cl3) -> Cl3_BPV -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_BPV -> Cl3
fromCl3_BPV

#ifndef O_NO_DERIVED
instance Read Cl3_BPV where
  readPrec :: ReadPrec Cl3_BPV
readPrec = Cl3 -> Cl3_BPV
toCl3_BPV (Cl3 -> Cl3_BPV) -> ReadPrec Cl3 -> ReadPrec Cl3_BPV
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_BPV where
  sizeOf :: Cl3_BPV -> Int
sizeOf Cl3_BPV
_ = Int
6 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_BPV -> Int
alignment Cl3_BPV
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_BPV -> IO Cl3_BPV
peek Ptr Cl3_BPV
ptr = do
    Double
a1 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a2 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a3 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Double
a23 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3)
    Double
a31 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
4)
    Double
a12 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
5)
    Cl3_BPV -> IO Cl3_BPV
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_BPV -> IO Cl3_BPV) -> Cl3_BPV -> IO Cl3_BPV
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> Double -> Double -> Cl3_BPV
Cl3_BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_BPV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_BPV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_BPV -> Cl3_BPV -> IO ()
poke Ptr Cl3_BPV
ptr (Cl3_BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a1
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a2
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a3
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3) Double
a23
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
4) Double
a31
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
5) Double
a12
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_BPV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_BPV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_ODD' a compact storable data type for ODD.
data Cl3_ODD where
  Cl3_ODD :: !Double -> !Double -> !Double -> !Double -> Cl3_ODD

-- | 'toCl3_ODD' converts a Cl3 value constructed with ODD to its compact form.
toCl3_ODD :: Cl3 -> Cl3_ODD
toCl3_ODD :: Cl3 -> Cl3_ODD
toCl3_ODD (ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3_ODD
Cl3_ODD Double
a1 Double
a2 Double
a3 Double
a123
toCl3_ODD Cl3
err = String -> Cl3_ODD
forall a. HasCallStack => String -> a
error (String -> Cl3_ODD) -> String -> Cl3_ODD
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not ODD to Cl3_ODD, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_ODD' converts the compact Cl3_ODD type back to a Cl3 type.
fromCl3_ODD :: Cl3_ODD -> Cl3
fromCl3_ODD :: Cl3_ODD -> Cl3
fromCl3_ODD (Cl3_ODD Double
a1 Double
a2 Double
a3 Double
a123) = Double -> Double -> Double -> Double -> Cl3
ODD Double
a1 Double
a2 Double
a3 Double
a123

instance Show Cl3_ODD where
  show :: Cl3_ODD -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_ODD -> Cl3) -> Cl3_ODD -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_ODD -> Cl3
fromCl3_ODD

#ifndef O_NO_DERIVED
instance Read Cl3_ODD where
  readPrec :: ReadPrec Cl3_ODD
readPrec = Cl3 -> Cl3_ODD
toCl3_ODD (Cl3 -> Cl3_ODD) -> ReadPrec Cl3 -> ReadPrec Cl3_ODD
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_ODD where
  sizeOf :: Cl3_ODD -> Int
sizeOf Cl3_ODD
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_ODD -> Int
alignment Cl3_ODD
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_ODD -> IO Cl3_ODD
peek Ptr Cl3_ODD
ptr = do
    Double
a1 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a2 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a3 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Double
a123 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3)
    Cl3_ODD -> IO Cl3_ODD
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_ODD -> IO Cl3_ODD) -> Cl3_ODD -> IO Cl3_ODD
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> Cl3_ODD
Cl3_ODD Double
a1 Double
a2 Double
a3 Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_ODD -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_ODD
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_ODD -> Cl3_ODD -> IO ()
poke Ptr Cl3_ODD
ptr (Cl3_ODD Double
a1 Double
a2 Double
a3 Double
a123) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a1
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a2
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a3
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3) Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_ODD -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_ODD
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_TPV' a compact storable data type for TPV.
data Cl3_TPV where
  Cl3_TPV :: !Double -> !Double -> !Double -> !Double -> Cl3_TPV

-- | 'toCl3_TPV' converts a Cl3 value constructed with TPV to its compact form.
toCl3_TPV :: Cl3 -> Cl3_TPV
toCl3_TPV :: Cl3 -> Cl3_TPV
toCl3_TPV (TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3_TPV
Cl3_TPV Double
a23 Double
a31 Double
a12 Double
a123
toCl3_TPV Cl3
err = String -> Cl3_TPV
forall a. HasCallStack => String -> a
error (String -> Cl3_TPV) -> String -> Cl3_TPV
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not TPV to Cl3_TPV, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_TPV' converts the compact Cl3_TPV type back to a Cl3 type.
fromCl3_TPV :: Cl3_TPV -> Cl3
fromCl3_TPV :: Cl3_TPV -> Cl3
fromCl3_TPV (Cl3_TPV Double
a23 Double
a31 Double
a12 Double
a123) = Double -> Double -> Double -> Double -> Cl3
TPV Double
a23 Double
a31 Double
a12 Double
a123

instance Show Cl3_TPV where
  show :: Cl3_TPV -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_TPV -> Cl3) -> Cl3_TPV -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_TPV -> Cl3
fromCl3_TPV

#ifndef O_NO_DERIVED
instance Read Cl3_TPV where
  readPrec :: ReadPrec Cl3_TPV
readPrec = Cl3 -> Cl3_TPV
toCl3_TPV (Cl3 -> Cl3_TPV) -> ReadPrec Cl3 -> ReadPrec Cl3_TPV
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_TPV where
  sizeOf :: Cl3_TPV -> Int
sizeOf Cl3_TPV
_ = Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_TPV -> Int
alignment Cl3_TPV
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_TPV -> IO Cl3_TPV
peek Ptr Cl3_TPV
ptr = do
    Double
a23 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a31 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a12 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Double
a123 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3)
    Cl3_TPV -> IO Cl3_TPV
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_TPV -> IO Cl3_TPV) -> Cl3_TPV -> IO Cl3_TPV
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> Cl3_TPV
Cl3_TPV Double
a23 Double
a31 Double
a12 Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_TPV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_TPV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_TPV -> Cl3_TPV -> IO ()
poke Ptr Cl3_TPV
ptr (Cl3_TPV Double
a23 Double
a31 Double
a12 Double
a123) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a23
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a31
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a12
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3) Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_TPV -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_TPV
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


-- | 'Cl3_APS' a compact storable data type for APS.
data Cl3_APS where
  Cl3_APS :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> Cl3_APS

-- | 'toCl3_APS' converts a Cl3 value constructed with APS to its compact form.
toCl3_APS :: Cl3 -> Cl3_APS
toCl3_APS :: Cl3 -> Cl3_APS
toCl3_APS (APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3_APS
Cl3_APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123
toCl3_APS Cl3
err = String -> Cl3_APS
forall a. HasCallStack => String -> a
error (String -> Cl3_APS) -> String -> Cl3_APS
forall a b. (a -> b) -> a -> b
$ String
"Please don't try and cast something that's not APS to Cl3_APS, Got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Cl3 -> String
forall a. Show a => a -> String
show Cl3
err

-- | 'fromCl3_APS' converts the compact Cl3_APS type back to a Cl3 type.
fromCl3_APS :: Cl3_APS -> Cl3
fromCl3_APS :: Cl3_APS -> Cl3
fromCl3_APS (Cl3_APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123

instance Show Cl3_APS where
  show :: Cl3_APS -> String
show = Cl3 -> String
forall a. Show a => a -> String
show(Cl3 -> String) -> (Cl3_APS -> Cl3) -> Cl3_APS -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cl3_APS -> Cl3
fromCl3_APS

#ifndef O_NO_DERIVED
instance Read Cl3_APS where
  readPrec :: ReadPrec Cl3_APS
readPrec = Cl3 -> Cl3_APS
toCl3_APS (Cl3 -> Cl3_APS) -> ReadPrec Cl3 -> ReadPrec Cl3_APS
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Cl3
forall a. Read a => ReadPrec a
readPrec
#endif

instance Storable Cl3_APS where
  sizeOf :: Cl3_APS -> Int
sizeOf Cl3_APS
_ = Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  alignment :: Cl3_APS -> Int
alignment Cl3_APS
_ = Double -> Int
forall a. Storable a => a -> Int
sizeOf (Double
forall a. HasCallStack => a
undefined :: Double)
  peek :: Ptr Cl3_APS -> IO Cl3_APS
peek Ptr Cl3_APS
ptr = do
    Double
a0 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0)
    Double
a1 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1)
    Double
a2 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2)
    Double
a3 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3)
    Double
a23 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
4)
    Double
a31 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
5)
    Double
a12 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
6)
    Double
a123 <- Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
7)
    Cl3_APS -> IO Cl3_APS
forall (m :: * -> *) a. Monad m => a -> m a
return (Cl3_APS -> IO Cl3_APS) -> Cl3_APS -> IO Cl3_APS
forall a b. (a -> b) -> a -> b
$ Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3_APS
Cl3_APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_APS -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_APS
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)

  poke :: Ptr Cl3_APS -> Cl3_APS -> IO ()
poke Ptr Cl3_APS
ptr (Cl3_APS Double
a0 Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12 Double
a123) = do
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
0) Double
a0
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
1) Double
a1
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
2) Double
a2
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
3) Double
a3
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
4) Double
a23
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
5) Double
a31
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
6) Double
a12
    Ptr Double -> Double -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Int -> Ptr Double
forall b. Int -> Ptr b
offset Int
7) Double
a123
      where
        offset :: Int -> Ptr b
offset Int
i = (Ptr Cl3_APS -> Ptr Double
forall a b. Ptr a -> Ptr b
castPtr Ptr Cl3_APS
ptr :: Ptr Double) Ptr Double -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
iInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
8)


#endif



#ifndef O_NO_RANDOM
-------------------------------------------------------------------
-- 
-- Random Instance of Cl3 types with the "System.Random" library.
-- 
--
-- Random helper functions will be based on the "abs x * signum x" decomposition
-- for the single grade elements. The "abs x" will be the random magnitude that
-- is by the default [0,1), and the "signum x" part will be a random direction
-- of a vector or the sign of a scalar. The multi-grade elements will be constructed from
-- a combination of the single grade generators.  Each grade will be evenly
-- distributed across the range.
-- 
-------------------------------------------------------------------

-- | 'Random' instance for the 'System.Random' library
instance Random Cl3 where
  randomR :: (Cl3, Cl3) -> g -> (Cl3, g)
randomR (Cl3
minAbs,Cl3
maxAbs) g
g =
    case (Int, Int) -> g -> (Int, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (ConCl3 -> Int
forall a. Enum a => a -> Int
fromEnum (ConCl3
forall a. Bounded a => a
minBound :: ConCl3), ConCl3 -> Int
forall a. Enum a => a -> Int
fromEnum (ConCl3
forall a. Bounded a => a
maxBound :: ConCl3)) g
g of
      (Int
r, g
g') -> case Int -> ConCl3
forall a. Enum a => Int -> a
toEnum Int
r of
        ConCl3
ConR -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConV3 -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeV3 (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConBV -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeBV (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConI -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeI (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConPV -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangePV (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConH -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeH (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConC -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeC (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConBPV -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeBPV (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConODD -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeODD (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConTPV -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeTPV (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConAPS -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeAPS (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConProj -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeProjector (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConNilpotent -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeNilpotent (Cl3
minAbs,Cl3
maxAbs) g
g'
        ConCl3
ConUnitary -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeUnitary (Cl3
minAbs,Cl3
maxAbs) g
g'

  random :: g -> (Cl3, g)
random = (Cl3, Cl3) -> g -> (Cl3, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (Cl3
0,Cl3
1)



-- | 'ConCl3' Bounded Enum Algebraic Data Type of constructors of Cl3
data ConCl3 = ConR
            | ConV3
            | ConBV
            | ConI
            | ConPV
            | ConH
            | ConC
            | ConBPV
            | ConODD
            | ConTPV
            | ConAPS
            | ConProj
            | ConNilpotent
            | ConUnitary
  deriving (ConCl3
ConCl3 -> ConCl3 -> Bounded ConCl3
forall a. a -> a -> Bounded a
maxBound :: ConCl3
$cmaxBound :: ConCl3
minBound :: ConCl3
$cminBound :: ConCl3
Bounded, Int -> ConCl3
ConCl3 -> Int
ConCl3 -> [ConCl3]
ConCl3 -> ConCl3
ConCl3 -> ConCl3 -> [ConCl3]
ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3]
(ConCl3 -> ConCl3)
-> (ConCl3 -> ConCl3)
-> (Int -> ConCl3)
-> (ConCl3 -> Int)
-> (ConCl3 -> [ConCl3])
-> (ConCl3 -> ConCl3 -> [ConCl3])
-> (ConCl3 -> ConCl3 -> [ConCl3])
-> (ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3])
-> Enum ConCl3
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3]
$cenumFromThenTo :: ConCl3 -> ConCl3 -> ConCl3 -> [ConCl3]
enumFromTo :: ConCl3 -> ConCl3 -> [ConCl3]
$cenumFromTo :: ConCl3 -> ConCl3 -> [ConCl3]
enumFromThen :: ConCl3 -> ConCl3 -> [ConCl3]
$cenumFromThen :: ConCl3 -> ConCl3 -> [ConCl3]
enumFrom :: ConCl3 -> [ConCl3]
$cenumFrom :: ConCl3 -> [ConCl3]
fromEnum :: ConCl3 -> Int
$cfromEnum :: ConCl3 -> Int
toEnum :: Int -> ConCl3
$ctoEnum :: Int -> ConCl3
pred :: ConCl3 -> ConCl3
$cpred :: ConCl3 -> ConCl3
succ :: ConCl3 -> ConCl3
$csucc :: ConCl3 -> ConCl3
Enum)




-- | 'randR' random Real Scalar (Grade 0) with random magnitude and random sign
randR :: RandomGen g => g -> (Cl3, g)
randR :: g -> (Cl3, g)
randR = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
0,Cl3
1)


-- | 'rangeR' random Real Scalar (Grade 0) with random magnitude within a range and a random sign
rangeR :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeR = (Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g.
RandomGen g =>
(Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
scalarHelper Double -> Cl3
R


-- | 'randV3' random Vector (Grade 1) with random magnitude and random direction
-- the direction is using spherical coordinates
randV3 :: RandomGen g => g -> (Cl3, g)
randV3 :: g -> (Cl3, g)
randV3 = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeV3 (Cl3
0,Cl3
1)


-- | 'rangeV3' random Vector (Grade 1) with random magnitude within a range and a random direction
rangeV3 :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeV3 :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeV3 = (Double -> Double -> Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g.
RandomGen g =>
(Double -> Double -> Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
vectorHelper Double -> Double -> Double -> Cl3
V3


-- | 'randBV' random Bivector (Grade 2) with random magnitude and random direction
-- the direction is using spherical coordinates
randBV :: RandomGen g => g -> (Cl3, g)
randBV :: g -> (Cl3, g)
randBV = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeBV (Cl3
0,Cl3
1)


-- | 'rangeBV' random Bivector (Grade 2) with random magnitude in a range and a random direction
rangeBV :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeBV :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeBV = (Double -> Double -> Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g.
RandomGen g =>
(Double -> Double -> Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
vectorHelper Double -> Double -> Double -> Cl3
BV


-- | 'randI' random Imaginary Scalar (Grade 3) with random magnitude and random sign
randI :: RandomGen g => g -> (Cl3, g)
randI :: g -> (Cl3, g)
randI = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeI (Cl3
0,Cl3
1)


-- | 'rangeI' random Imaginary Scalar (Grade 3) with random magnitude within a range and random sign
rangeI :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeI :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeI = (Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
forall g.
RandomGen g =>
(Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
scalarHelper Double -> Cl3
I


-- | 'randPV' random Paravector made from random Grade 0 and Grade 1 elements
randPV :: RandomGen g => g -> (Cl3, g)
randPV :: g -> (Cl3, g)
randPV = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangePV (Cl3
0,Cl3
1)


-- | 'rangePV' random Paravector made from random Grade 0 and Grade 1 elements within a range
rangePV :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangePV :: (Cl3, Cl3) -> g -> (Cl3, g)
rangePV (Cl3
lo, Cl3
hi) g
g =
  let (R Double
scale, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (R Double
a0, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randR g
g'
      (V3 Double
a1 Double
a2 Double
a3, g
g''') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randV3 g
g''
      sumsqs :: Double
sumsqs = Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Double
x = Double -> Double
forall a. Num a => a -> a
abs Double
a0 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sqrt Double
sumsqs
      invMag :: Double
invMag = Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
sumsqs Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x
      mag :: Double
mag = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
invMag
  in (Double -> Double -> Double -> Double -> Cl3
PV (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a0) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3), g
g''')


-- | 'randH' random Quaternion made from random Grade 0 and Grade 2 elements
randH :: RandomGen g => g -> (Cl3, g)
randH :: g -> (Cl3, g)
randH = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeH (Cl3
0,Cl3
1)


-- | 'rangeH' random Quaternion made from random Grade 0 and Grade 2 elements within a range
rangeH :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeH :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeH (Cl3
lo, Cl3
hi) g
g =
  let (R Double
scale, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (R Double
a0, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randR g
g'
      (BV Double
a23 Double
a31 Double
a12, g
g''') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randBV g
g''
      invMag :: Double
invMag = Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      mag :: Double
mag = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
invMag
  in (Double -> Double -> Double -> Double -> Cl3
H (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a0) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12), g
g''')


-- | 'randC' random combination of Grade 0 and Grade 3
randC :: RandomGen g => g -> (Cl3, g)
randC :: g -> (Cl3, g)
randC = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeC (Cl3
0,Cl3
1)


-- | 'rangeC' random combination of Grade 0 and Grade 3 within a range
rangeC :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeC :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeC (Cl3
lo, Cl3
hi) g
g =
  let (R Double
scale, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (Double
phi, g
g'') = (Double, Double) -> g -> (Double, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (Double
0, Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
forall a. Floating a => a
pi) g
g'
  in (Double -> Double -> Cl3
C (Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos Double
phi) (Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin Double
phi), g
g'')


-- | 'randBPV' random combination of Grade 1 and Grade 2
randBPV :: RandomGen g => g -> (Cl3, g)
randBPV :: g -> (Cl3, g)
randBPV = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeBPV (Cl3
0,Cl3
1)


-- | 'rangeBPV' random combination of Grade 1 and Grade 2 within a range
rangeBPV :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeBPV :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeBPV (Cl3
lo, Cl3
hi) g
g =
  let (R Double
scale, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (V3 Double
a1 Double
a2 Double
a3, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randV3 g
g'
      (BV Double
a23 Double
a31 Double
a12, g
g''') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randBV g
g''
      x :: Double
x = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMag :: Double
invMag = Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x
      mag :: Double
mag = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
invMag
  in (Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12), g
g''')


-- | 'randODD' random combination of Grade 1 and Grade 3
randODD :: RandomGen g => g -> (Cl3, g)
randODD :: g -> (Cl3, g)
randODD = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeODD (Cl3
0,Cl3
1)


-- | 'rangeODD' random combination of Grade 1 and Grade 3 within a range
rangeODD :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeODD :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeODD (Cl3
lo, Cl3
hi) g
g =
  let (R Double
scale, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (V3 Double
a1 Double
a2 Double
a3, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randV3 g
g'
      (I Double
a123, g
g''') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randI g
g''
      invMag :: Double
invMag = Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      mag :: Double
mag = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
invMag
  in (Double -> Double -> Double -> Double -> Cl3
ODD (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a123), g
g''')


-- | 'randTPV' random combination of Grade 2 and Grade 3
randTPV :: RandomGen g => g -> (Cl3, g)
randTPV :: g -> (Cl3, g)
randTPV = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeTPV (Cl3
0,Cl3
1)


-- | 'rangeTPV' random combination of Grade 2 and Grade 3 within a range
rangeTPV :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeTPV :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeTPV (Cl3
lo, Cl3
hi) g
g =
  let (R Double
scale, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (BV Double
a23 Double
a31 Double
a12, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randBV g
g'
      (I Double
a123, g
g''') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randI g
g''
      sumsqs :: Double
sumsqs = Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      x :: Double
x = Double -> Double
forall a. Num a => a -> a
abs Double
a123 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sqrt Double
sumsqs
      invMag :: Double
invMag = Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
sumsqs Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x
      mag :: Double
mag = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
invMag
  in (Double -> Double -> Double -> Double -> Cl3
TPV (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a123), g
g''')


-- | 'randAPS' random combination of all 4 grades
randAPS :: RandomGen g => g -> (Cl3, g)
randAPS :: g -> (Cl3, g)
randAPS = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeAPS (Cl3
0,Cl3
1)


-- | 'rangeAPS' random combination of all 4 grades within a range
rangeAPS :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeAPS :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeAPS (Cl3
lo, Cl3
hi) g
g =
  let (R Double
scale, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (C Double
a0 Double
a123, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randC g
g'
      (V3 Double
a1 Double
a2 Double
a3, g
g''') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randV3 g
g''
      (BV Double
a23 Double
a31 Double
a12, g
g'v) = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randBV g
g'''
      x :: Double
x = Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a0Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a12)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a31 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a23)Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      invMag :: Double
invMag = Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
a0Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a23Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a31Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a12Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
a123Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
x
      mag :: Double
mag = Double
scale Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
invMag
  in (Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Cl3
APS (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a0) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a123), g
g'v)


-------------------------------------------------------------------
-- Additional Random generators
-------------------------------------------------------------------
-- | 'randUnitV3' a unit vector with a random direction
randUnitV3 :: RandomGen g => g -> (Cl3, g)
randUnitV3 :: g -> (Cl3, g)
randUnitV3 g
g =
  let (Double
theta, g
g') = (Double, Double) -> g -> (Double, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (Double
0,Double
2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
forall a. Floating a => a
pi) g
g
      (Double
u, g
g'') = (Double, Double) -> g -> (Double, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (-Double
1,Double
1) g
g'
      semicircle :: Double
semicircle = Double -> Double
forall a. Floating a => a -> a
sqrt (Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
uDouble -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2)
  in (Double -> Double -> Double -> Cl3
V3 (Double
semicircle Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
cos Double
theta) (Double
semicircle Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sin Double
theta) Double
u, g
g'')


-- | 'randProjector' a projector with a random direction
randProjector :: RandomGen g => g -> (Cl3, g)
randProjector :: g -> (Cl3, g)
randProjector g
g =
  let (V3 Double
a1 Double
a2 Double
a3, g
g') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randUnitV3 g
g
  in (Double -> Double -> Double -> Double -> Cl3
PV Double
0.5 (Double
0.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
0.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
0.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3), g
g')


-- | 'rangeProjector' a projector with a range of random magnitudes and directions
rangeProjector :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeProjector :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeProjector (Cl3
lo, Cl3
hi) g
g =
  let (R Double
mag, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (PV Double
a0 Double
a1 Double
a2 Double
a3, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randProjector g
g'
  in (Double -> Double -> Double -> Double -> Cl3
PV (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a0) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3), g
g'')


-- | 'randNilpotent' a nilpotent element with a random orientation
randNilpotent :: RandomGen g => g -> (Cl3, g)
randNilpotent :: g -> (Cl3, g)
randNilpotent g
g =
  let (PV Double
a0 Double
a1 Double
a2 Double
a3, g
g') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randProjector g
g
      (V3 Double
b1 Double
b2 Double
b3, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randUnitV3 g
g'
      c1 :: Double
c1 = Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2
      c2 :: Double
c2 = Double
a3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b3
      c3 :: Double
c3 = Double
a1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
a2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
b1 -- (V3 c1 c2 c3) vector normal to the projector: mIx.toBV $ toV3 p * v
      invMag :: Double
invMag = Double -> Double
forall a. Fractional a => a -> a
recip(Double -> Double) -> (Double -> Double) -> Double -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Double -> Double
forall a. Floating a => a -> a
sqrt (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
c1Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c2Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
c3Double -> Integer -> Double
forall a b. (Num a, Integral b) => a -> b -> a
^Integer
2
      d1 :: Double
d1 = Double
invMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
c1
      d2 :: Double
d2 = Double
invMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
c2
      d3 :: Double
d3 = Double
invMag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
c3  -- (V3 d1 d2 d3) unit vector normal to the projector
  in (Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
d1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0) (Double
d2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0) (Double
d3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a0) (Double
d2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a3 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
d3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a2) (Double
d3Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
d1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a3) (Double
d1Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a2 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
d2Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a1), g
g'')


-- | 'rangeNilpotent' a nilpotent with a range of random magnitudes and orientations
rangeNilpotent :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeNilpotent :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeNilpotent (Cl3
lo, Cl3
hi)  g
g =
  let (R Double
mag, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeR (Cl3
lo, Cl3
hi) g
g
      (BPV Double
a1 Double
a2 Double
a3 Double
a23 Double
a31 Double
a12, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randNilpotent g
g'
  in (Double -> Double -> Double -> Double -> Double -> Double -> Cl3
BPV (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a1) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a2) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a3) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a23) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a31) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
a12), g
g'')


-- | 'randUnitary' a unitary element with a random orientation
randUnitary :: RandomGen g => g -> (Cl3, g)
randUnitary :: g -> (Cl3, g)
randUnitary g
g =
  let (Cl3
tpv,g
g') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randTPV g
g
  in (Cl3 -> Cl3
forall a. Floating a => a -> a
exp Cl3
tpv,g
g')


-- | 'rangeUnitary' a unitary element with a range of random magnitudes and orientations, the exponential of a triparavector
rangeUnitary :: RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeUnitary :: (Cl3, Cl3) -> g -> (Cl3, g)
rangeUnitary (Cl3
lo, Cl3
hi) g
g =
  let (Cl3
tpv, g
g') = (Cl3, Cl3) -> g -> (Cl3, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Cl3, g)
rangeTPV (Cl3
lo, Cl3
hi) g
g
  in (Cl3 -> Cl3
forall a. Floating a => a -> a
exp Cl3
tpv, g
g')


-------------------------------------------------------------------
-- helper functions
-------------------------------------------------------------------
magHelper :: RandomGen g => (Cl3, Cl3) -> g -> (Double, g)
magHelper :: (Cl3, Cl3) -> g -> (Double, g)
magHelper (Cl3
lo, Cl3
hi) g
g =
  let R Double
lo' = Cl3 -> Cl3
forall a. Num a => a -> a
abs Cl3
lo
      R Double
hi' = Cl3 -> Cl3
forall a. Num a => a -> a
abs Cl3
hi
  in (Double, Double) -> g -> (Double, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (Double
lo', Double
hi') g
g


scalarHelper :: RandomGen g => (Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
scalarHelper :: (Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
scalarHelper Double -> Cl3
con (Cl3, Cl3)
rng g
g =
  let (Double
mag, g
g') = (Cl3, Cl3) -> g -> (Double, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Double, g)
magHelper (Cl3, Cl3)
rng g
g
      (Bool
sign, g
g'') = g -> (Bool, g)
forall a g. (Random a, RandomGen g) => g -> (a, g)
random g
g'
  in if Bool
sign
     then (Double -> Cl3
con Double
mag, g
g'')
     else (Double -> Cl3
con (Double -> Double
forall a. Num a => a -> a
negate Double
mag), g
g'')


vectorHelper :: RandomGen g => (Double -> Double -> Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
vectorHelper :: (Double -> Double -> Double -> Cl3) -> (Cl3, Cl3) -> g -> (Cl3, g)
vectorHelper Double -> Double -> Double -> Cl3
con (Cl3, Cl3)
rng g
g =
  let (Double
mag, g
g') = (Cl3, Cl3) -> g -> (Double, g)
forall g. RandomGen g => (Cl3, Cl3) -> g -> (Double, g)
magHelper (Cl3, Cl3)
rng g
g
      (V3 Double
x Double
y Double
z, g
g'') = g -> (Cl3, g)
forall g. RandomGen g => g -> (Cl3, g)
randUnitV3 g
g'
  in (Double -> Double -> Double -> Cl3
con (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
x) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
y) (Double
mag Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
z), g
g'')


#endif

-- End of File