!1j          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ `abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi [2018..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone=>?Xg Q2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,>=linear-accelerateDProvides a fairly subjective test to see if a quantity is near zero.nearZero (1e-11 :: Exp Double)(0, ())nearZero (1e-17 :: Exp Double)(1, ())nearZero (1e-5 :: Exp Float)(0, ())nearZero (1e-7 :: Exp Float)(1, ())>linear-accelerate%Determine if a quantity is near zero.?linear-accelerate j a k 1e-12@linear-accelerate j a k 1e-6Alinear-accelerate j a k 1e-12Blinear-accelerate j a k 1e-6=>=> [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,>HV![CDDC[2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,>HVX%llinear-accelerate*Sink a unary functor from Accelerate termsmlinear-acceleraten through two surface typesom Q2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone ,>HSVXg?+Elinear-accelerate Basis elementHlinear-accelerate8A vector is an additive group with additional structure.TODO: Support both p and qIlinear-accelerateThe zero vectorJlinear-accelerateCompute the sum of two vectors>test $ (V2_ 1 2 :: Exp (V2 Int)) ^+^ (V2_ 3 4 :: Exp (V2 Int))V2 4 6Klinear-accelerate*Compute the difference between two vectors>test $ (V2_ 4 5 :: Exp (V2 Int)) ^-^ (V2_ 3 1 :: Exp (V2 Int))V2 1 4Llinear-accelerate(Linearly interpolate between two vectorsMlinear-accelerate Compute the negation of a vector(test $ negated (V2_ 2 4 :: Exp (V2 Int)) V2 (-2) (-4)Nlinear-accelerateCompute the left scalar product%test $ 2 *^ (V2_ 3 4 :: Exp (V2 Int))V2 6 8Olinear-accelerate Compute the right scalar product%test $ (V2_ 3 4 :: Exp (V2 Int)) ^* 2V2 6 8Plinear-accelerate)Compute division by a scalar on the right(test $ (V2_ 4 6 :: Exp (V2 Double)) ^/ 2 V2 2.0 3.0Qlinear-accelerate(Compute division of a scalar on the left(test $ 4 /^ (V2_ 2 4 :: Exp (V2 Double)) V2 2.0 1.0Rlinear-accelerate"Addition with a scalar on the left%test $ 2 +^ (V2_ 3 4 :: Exp (V2 Int))V2 5 6Slinear-accelerate#Addition with a scalar on the right%test $ (V2_ 1 2 :: Exp (V2 Int)) ^+ 3V2 4 5Tlinear-accelerate%Subtraction with a scalar on the left%test $ 2 -^ (V2_ 3 4 :: Exp (V2 Int)) V2 (-1) (-2)Ulinear-accelerate&Subtraction with a scalar on the right%test $ (V2_ 1 2 :: Exp (V2 Int)) ^- 3 V2 (-2) (-1)EFGHLKJIMNOPQRSTUHLKJIEFGMNOPQRSTU J6K6N7O7P7Q7R6S6T6U6 Q2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone ,>HVXgP Wlinear-accelerate,Free and sparse inner product/metric spaces.Xlinear-accelerateMCompute the inner product of two vectors or (equivalently) convert a vector f a into a covector f a -> a.9(V2_ 1 2 :: Exp (V2 Int)) `dot` (V2_ 3 4 :: Exp (V2 Int))11Ylinear-accelerategCompute the squared norm. The name quadrance arises from Norman J. Wildberger's rational trigonometry.Zlinear-accelerate Compute the Y of the difference[linear-accelerate:Compute the distance between two vectors in a metric space\linear-accelerate.Compute the norm of a vector in a metric space]linear-accelerate)Convert a non-zero vector to unit vector.^linear-accelerate Normalize a W functor to have unit \4. This function does not change the functor if its \ is 0 or 1._linear-accelerate project u v computes the projection of v onto u. VW]\[ZYX^_ W]\[ZYXV^_Q2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,=>?@AHVXgW(`linear-accelerate)A space that has at least 1 basis vector a.alinear-accelerate$test $ (V1_ 2 :: Exp (V1 Int)) ^. _x2(test $ (V1_ 2 :: Exp (V1 Int)) & _x .~ 3V1 3`abcb`acQ2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,=>?@AHVXgbslinear-accelerate6A space that distinguishes 2 orthogonal basis vectors a and t, but may have more.tlinear-accelerate&test $ (V2_ 1 2 :: Exp (V2 Int)) ^. _y2*test $ (V2_ 1 2 :: Exp (V2 Int)) & _y .~ 3V2 1 3wlinear-accelerate*the counter-clockwise perpendicular vector)test $ perp $ (V2_ 10 20 :: Exp (V2 Int)) V2 (-20) 10xlinear-accelerate-Unit vector with given phase angle (modulo 2*r)ylinear-accelerate'test $ (V2_ 1 2 :: Exp (V2 Int)) ^. _yxV2 2 1 `acstuvwxyz v`astuyczwxQ2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,=>?@AHVXgjlinear-accelerate7A space that distinguishes 3 orthogonal basis vectors: a, t, and . (Although it may have more)linear-accelerate(test $ (V3_ 1 2 3 :: Exp (V3 Int)) ^. _z3-test $ (V3_ 1 2 3 :: Exp (V3 Int)) & _z .~ 42 V3 1 2 42linear-accelerate cross productlinear-acceleratescalar triple product`acstuyz`astuyczQ2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,=>?@AHVXgz|linear-accelerate4A space that distinguishes orthogonal basis vectors a, t, , and . (Although it may have more.)linear-accelerate*test $ (V4_ 1 2 3 4 :: Exp (V4 Int)) ^. _w4/test $ (V4_ 1 2 3 4 :: Exp (V4 Int)) & _w .~ 42 V4 1 2 3 42linear-accelerateOConvert a 3-dimensional affine vector into a 4-dimensional homogeneous vector.linear-accelerateNConvert a 3-dimensional affine point into a 4-dimensional homogeneous vector.linear-accelerategConvert 4-dimensional projective coordinates to a 3-dimensional point. This operation may be denoted, %euclidean [x:y:z:w] = (x/w, y/w, z/w)/ where the projective, homogenous, coordinate  [x:y:z:w]0 is one of many associated with a single point (x/w, y/w, z/w).N`acstuyzN`astuyczQ2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone ,=>?@AHVXgkQ2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone+,=>?@AHVXglinear-accelerate6Spherical linear interpolation between two quaternionslinear-accelerates with a specified branch cutlinear-acceleratet with a specified branch cutlinear-accelerateu with a specified branch cutlinear-acceleratev with a specified branch cutlinear-acceleratew with a specified branch cutlinear-acceleratex with a specified branch cut linear-acceleratenorm of the imaginary component linear-accelerateraise a  to a scalar power linear-accelerateApply a rotation to a vector linear-accelerate  axis theta builds a  representing a rotation of theta radians about axis.ylinear-accelerate0Helper for calculating with specific branch cutszlinear-accelerate0Helper for calculating with specific branch cuts{linear-accelerate$quadrance of the imaginary component        Q2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone%&'+,12=>?@AHVXgkclinear-accelerateValid Plcker coordinates p will have  p | 0QThat said, floating point makes a mockery of this claim, so you may want to use >.linear-acceleratedThis isn't the actual metric because this bilinear form gives rise to an isotropic quadratic space.linear-acceleratesChecks if the line is near-isotropic (isotropic vectors in this quadratic space represent lines in real 3D space).linear-accelerateGiven a pair of points represented by homogeneous coordinates generate Plcker coordinates for the line through them, directed from the second towards the first. linear-accelerateGiven a pair of 3D points, generate Plcker coordinates for the line through them, directed from the second towards the first.!linear-accelerate4Checks if two lines intersect (or nearly intersect)."linear-accelerate%Check how two lines pass each other.  passes l1 l2 describes l2 when looking down l1.#linear-accelerate!Checks if two lines are parallel.}linear-accelerateQRepresent a Plcker coordinate as a pair of 3-tuples, typically denoted U and V.$linear-accelerate7The minimum squared distance of a line from the origin.%linear-accelerate0The point where a line is closest to the origin.&linear-accelerateNot all 6-dimensional points correspond to a line in 3D. This predicate tests that a Plcker coordinate lies on the Grassmann manifold, and does indeed represent a 3D line.'linear-acceleratePThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). ' :: ~ (  a) a ( :: ~ (  a) a ) :: ~ (  a) a * :: ~ (  a) a + :: ~ (  a) a , :: ~ (  a) a (linear-acceleratePThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). ' :: ~ (  a) a ( :: ~ (  a) a ) :: ~ (  a) a * :: ~ (  a) a + :: ~ (  a) a , :: ~ (  a) a )linear-acceleratePThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). ' :: ~ (  a) a ( :: ~ (  a) a ) :: ~ (  a) a * :: ~ (  a) a + :: ~ (  a) a , :: ~ (  a) a *linear-acceleratePThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). ' :: ~ (  a) a ( :: ~ (  a) a ) :: ~ (  a) a * :: ~ (  a) a + :: ~ (  a) a , :: ~ (  a) a +linear-acceleratePThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). ' :: ~ (  a) a ( :: ~ (  a) a ) :: ~ (  a) a * :: ~ (  a) a + :: ~ (  a) a , :: ~ (  a) a ,linear-acceleratePThese elements form a basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). ' :: ~ (  a) a ( :: ~ (  a) a ) :: ~ (  a) a * :: ~ (  a) a + :: ~ (  a) a , :: ~ (  a) a -linear-accelerate[These elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). - ::  a => ~ (  a) a . ::  a => ~ (  a) a / ::  a => ~ (  a) a 0 ::  a => ~ (  a) a 1 ::  a => ~ (  a) a 2 ::  a => ~ (  a) a .linear-accelerate[These elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). - ::  a => ~ (  a) a . ::  a => ~ (  a) a / ::  a => ~ (  a) a 0 ::  a => ~ (  a) a 1 ::  a => ~ (  a) a 2 ::  a => ~ (  a) a /linear-accelerate[These elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). - ::  a => ~ (  a) a . ::  a => ~ (  a) a / ::  a => ~ (  a) a 0 ::  a => ~ (  a) a 1 ::  a => ~ (  a) a 2 ::  a => ~ (  a) a 0linear-accelerate[These elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). - ::  a => ~ (  a) a . ::  a => ~ (  a) a / ::  a => ~ (  a) a 0 ::  a => ~ (  a) a 1 ::  a => ~ (  a) a 2 ::  a => ~ (  a) a 1linear-accelerate[These elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). - ::  a => ~ (  a) a . ::  a => ~ (  a) a / ::  a => ~ (  a) a 0 ::  a => ~ (  a) a 1 ::  a => ~ (  a) a 2 ::  a => ~ (  a) a 2linear-accelerate[These elements form an alternate basis for the Plcker space, or the Grassmanian manifold Gr(2,V4). - ::  a => ~ (  a) a . ::  a => ~ (  a) a / ::  a => ~ (  a) a 0 ::  a => ~ (  a) a 1 ::  a => ~ (  a) a 2 ::  a => ~ (  a) a !   !"#$%&'()*+,-./012BCD!   CBD#!"$%&'()-,1.2*/+05@2014 Edward Kmett [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone,>HVFlinear-accelerateCompute the trace of a matrixGlinear-accelerate Compute the diagonal of a matrixEFGEFGQ2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone ,>HVXgPlinear-accelerateTMatrix product. This can compute any combination of sparse and dense multiplication.ntest $ (V2_ (V3_ 1 2 3) (V3_ 4 5 6) :: Exp (M23 Int)) !*! (V3_ (V2_ 1 2) (V2_ 3 4) (V2_ 4 5) :: Exp (M32 Int))V2 (V2 19 25) (V2 43 58)Qlinear-accelerateEntry-wise matrix addition.htest $ (V2_ (V3_ 1 2 3) (V3_ 4 5 6) :: Exp (M23 Int)) !+! (V2_ (V3_ 7 8 9) (V3_ 1 2 3) :: Exp (M23 Int))V2 (V3 8 10 12) (V3 5 7 9)Rlinear-accelerateEntry-wise matrix subtraction.htest $ (V2_ (V3_ 1 2 3) (V3_ 4 5 6) :: Exp (M23 Int)) !-! (V2_ (V3_ 7 8 9) (V3_ 1 2 3) :: Exp (M23 Int))!V2 (V3 (-6) (-6) (-6)) (V3 3 3 3)Slinear-accelerateMatrix * column vectorTtest $ (V2_ (V3_ 1 2 3) (V3_ 4 5 6) :: Exp (M23 Int)) !* (V3_ 7 8 9 :: Exp (V3 Int)) V2 50 122Tlinear-accelerateRow vector * matrixRtest $ (V2_ 1 2 :: Exp (V2 Int)) *! (V2_ (V3_ 3 4 5) (V3_ 6 7 8) :: Exp (M23 Int)) V3 15 18 21Ulinear-accelerateScalar-matrix product7test $ 5 *!! (V2_ (V2_ 1 2) (V2_ 3 4) :: Exp (M22 Int))V2 (V2 5 10) (V2 15 20)Vlinear-accelerateMatrix-scalar product7test $ (V2_ (V2_ 1 2) (V2_ 3 4) :: Exp (M22 Int)) !!* 5V2 (V2 5 10) (V2 15 20)Wlinear-accelerateMatrix-scalar divisionXlinear-accelerate-The identity matrix for any dimension vector."test $ (identity :: Exp (M44 Int))6V4 (V4 1 0 0 0) (V4 0 1 0 0) (V4 0 0 1 0) (V4 0 0 0 1)&test $ (identity :: Exp (V3 (V3 Int)))#V3 (V3 1 0 0) (V3 0 1 0) (V3 0 0 1)Ylinear-accelerateY is just an alias for Gtest $ transpose $ (V3_ (V2_ 1 2) (V2_ 3 4) (V2_ 5 6) :: Exp (M32 Int))V2 (V3 1 3 5) (V3 2 4 6)Zlinear-accelerate$Build a rotation matrix from a unit [linear-accelerate=Build a transformation matrix from a rotation expressed as a  and a translation vector.\linear-accelerateOBuild a transformation matrix from a rotation matrix and a translation vector.]linear-accelerate8Convert a 4x3 matrix to a 4x4 matrix, extending it with  [ 0 0 0 1 ] column vector^linear-accelerateXConvert a 3x3 matrix to a 4x4 matrix extending it with zeros in the new row and column._linear-accelerate2x2 matrix determinant`linear-accelerate3x3 matrix determinantalinear-accelerate4x4 matrix determinantblinear-accelerate2x2 matrix inverseclinear-accelerate3x3 matrix inversedlinear-accelerate4x4 matrix inverse!EFGPQRSTUVWXYZ[\]^_`abcd!PQRSTVUW^]_`abcdXYEFGZ[\P7Q6R6S7T7U7V7W7[2019..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNone+>gelinear-accelerateBuild a look at view matrixflinear-accelerate7Build a matrix for a symmetric perspective-view frustumglinear-accelerateUBuild a matrix for a symmetric perspective-view frustum with a far plane at infinitehlinear-accelerate?Build an orthographic perspective matrix from 6 clipping planeselinear-accelerateEyelinear-accelerateCenterlinear-accelerateUpflinear-accelerateFOVlinear-accelerate Aspect ratiolinear-accelerate Near planelinear-accelerate Far planeglinear-accelerateFOVlinear-accelerate Aspect Ratiolinear-accelerate Near planehlinear-accelerateLeftlinear-accelerateRightlinear-accelerateBottomlinear-accelerateToplinear-accelerateNearlinear-accelerateFarefghiefghii0Q2014 Edward Kmett, Charles Durham, [2015..2020] Trevor L. McDonell BSD-style (see the file LICENSE).Trevor L. McDonell <trevor.mcdonell@gmail.com> experimental non-portableNoneY  =>CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcstuvwxyz     !"#$%&'()*+,-./012BCDEFGPQRSTUVWXYZ[\]^_`abcd !"#$#$%&%&'('()*)*+,+,-.-./0/1/2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r stuvwxyz{|}~z{|}z{|}z{|}}|     Bz{| !"#$%&'()*+,-./0123z{|456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijfklmfnofnpcqrcqscqtcqucqvcqwcqxyz{f|}~f0linear-accelerate-0.7.0.0-7gdc3I0OiREBEX3g1zneGH#Data.Array.Accelerate.Linear.Matrix$Data.Array.Accelerate.Linear.Plucker'Data.Array.Accelerate.Linear.QuaternionData.Array.Accelerate.Linear.V0Data.Array.Accelerate.Linear.V4Data.Array.Accelerate.Linear.V3Data.Array.Accelerate.Linear.V2Data.Array.Accelerate.Linear.V1&Data.Array.Accelerate.Linear.Conjugate$Data.Array.Accelerate.Linear.Epsilon!Data.Array.Accelerate.Linear.Type#Data.Array.Accelerate.Linear.Vector#Data.Array.Accelerate.Linear.Metric"Data.Array.Accelerate.Linear.Trace'Data.Array.Accelerate.Linear.Projection!Data.Array.Accelerate.Linear.LiftData.Array.Accelerate.Linear$linear-1.21.1-GSRtap511Ww6RirKx1xviJ Linear.MatrixM22M23M24M32M33M34M42M43M44Linear.PluckerPluckerCounterclockwise ClockwiseCoplanarLinePassLinear.Quaternion Quaternion Linear.V0V0 Linear.V4V4 Linear.V3V3 Linear.V2V2 Linear.V1V1Linear.Conjugate conjugate ConjugateTrivialConjugate$fTrivialConjugateExp$fTrivialConjugateExp0$fTrivialConjugateExp1$fTrivialConjugateExp2$fTrivialConjugateExp3$fTrivialConjugateExp4$fTrivialConjugateExp5$fTrivialConjugateExp6$fTrivialConjugateExp7$fTrivialConjugateExp8$fTrivialConjugateExp9$fTrivialConjugateExp10$fTrivialConjugateExp11$fTrivialConjugateExp12$fTrivialConjugateExp13$fConjugateExp$fConjugateExp0$fConjugateExp1$fConjugateExp2$fConjugateExp3$fConjugateExp4$fConjugateExp5$fConjugateExp6$fConjugateExp7$fConjugateExp8$fConjugateExp9$fConjugateExp10$fConjugateExp11$fConjugateExp12$fConjugateExp13$fConjugateExp14EpsilonnearZero$fEpsilonCDouble$fEpsilonCFloat$fEpsilonDouble$fEpsilonFloatBox2BoxEelAdditivezero^+^^-^lerpnegated*^^*^//^+^^+-^^-IsMetricMetricdot quadranceqddistancenormsignorm normalizeprojectR1_xV1_ex $fFunctorV1 $fEpsilonV1 $fFloatingExp$fFractionalExp$fNumExp $fBoundedExp$fOrdV1$fEqV1$fEachExpExpExpExp $fUnliftExpV1 $fLiftExpV1$fEltV1 $fAdditiveV1 $fMetricV1$fR1V1R2_y_xyV2_perpangle_yxey $fFunctorV2 $fEpsilonV2$fOrdV2$fEqV2 $fUnliftExpV2 $fLiftExpV2$fEltV2$fR1V2 $fAdditiveV2 $fMetricV2$fR2V2R3_z_xyzV3_crosstriple_xz_yz_zx_zy_xzy_yxz_yzx_zxy_zyxez $fFunctorV3 $fEpsilonV3$fOrdV3$fEqV3 $fUnliftExpV3 $fLiftExpV3$fEltV3$fR2V3$fR1V3 $fAdditiveV3 $fMetricV3$fR3V3R4_w_xyzwV4_vectorpointnormalizePoint_xw_yw_zw_wx_wy_wz_xyw_xzw_xwy_xwz_yxw_yzw_ywx_ywz_zxw_zyw_zwx_zwy_wxy_wxz_wyx_wyz_wzx_wzy_xywz_xzyw_xzwy_xwyz_xwzy_yxzw_yxwz_yzxw_yzwx_ywxz_ywzx_zxyw_zxwy_zyxw_zywx_zwxy_zwyx_wxyz_wxzy_wyxz_wyzx_wzxy_wzyxew $fFunctorV4 $fEpsilonV4$fOrdV4$fEqV4 $fUnliftExpV4 $fLiftExpV4$fEltV4$fR3V4$fR2V4$fR1V4 $fAdditiveV4 $fMetricV4$fR4V4V0_ $fFunctorV0$fOrdV0$fEqV0 $fUnliftExpV0 $fLiftExpV0$fEltV0 $fAdditiveV0 $fMetricV0 Quaternion_slerpasinqacosqatanqasinhqacoshqatanhqabsipowrotate axisAngle$fFunctorQuaternion$fEpsilonQuaternion$fOrdQuaternion$fEqQuaternion$fUnliftExpQuaternion$fLiftExpQuaternion$fEltQuaternion$fAdditiveQuaternion$fMetricQuaternionPlucker_ squaredError>< isotropicplucker plucker3D intersectspassesparallelquadranceToOriginclosestToOriginisLinep01p02p03p23p31p12p10p20p30p32p13p21 $fEqLinePass $fEltLinePass$fFunctorPlucker$fEpsilonPlucker $fOrdPlucker $fEqPlucker$fUnliftExpPlucker$fLiftExpPlucker $fEltPlucker$fAdditivePlucker$fMetricPluckerCounterclockwise_ Clockwise_ Coplanar_Tracetracediagonal$fTraceQuaternion$fTracePlucker $fTraceV4 $fTraceV3 $fTraceV2 $fTraceV1 $fTraceV0$fTraceComplex!*!!+!!-!!**!*!!!!*!!/identity transposefromQuaternionmkTransformationmkTransformationMat m43_to_m44 m33_to_m44det22det33det44inv22inv33inv44lookAt perspectiveinfinitePerspectiveortho$$$$$$baseGHC.Numabs)accelerate-1.3.0.0-BT27cQiWdb0CYEzx7R6V5y!Data.Array.Accelerate.Classes.Ord<=fsink1unlift'Data.Array.Accelerate.LiftunliftliftLensData.Array.Accelerate.SmartExpAcc GHC.FloatpiasinacosatanasinhacoshatanhcutcutWithqi Data.Array.Accelerate.Classes.Eq==toUV"lens-4.19.2-KXfjtCwCOd3KUikLJUQm86Control.Lens.TypeLens'!Data.Array.Accelerate.Classes.NumNum)distributive-0.6.2-9LgT9uHZr8B4Dxk4MvZJQvData.Distributive distribute