h$96      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(C) 2017-2022 Nathan WaivioBSD3'Nathan Waivio Stable unportableSafe&(38,5cl3& a compact storable data type for APS.cl3& a compact storable data type for TPV.cl3& a compact storable data type for ODD.cl3& a compact storable data type for BPV.cl3$ a compact storable data type for C.cl3$ a compact storable data type for H.cl3% a compact storable data type for PV.cl3$ a compact storable data type for I.cl3% a compact storable data type for BV. cl3 % a compact storable data type for V3. cl3 $ a compact storable data type for R. cl3Cl3 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.  ; is the constructor for the Real Scalar Sub-algebra Grade-0 9 is the Three Dimensional Real Vector constructor Grade-1 is the Bivector constructor Grade-2 an Imaginary Three Dimensional Vector is the Imaginary constructor Grade-3 and is the Pseudo-Scalar for APS is the Paravector constructor with Grade-0 and Grade-1 elements, a Real Scalar plus Vector, (R + V3) is the Quaternion constructor it is the Even Sub-algebra with Grade-0 and Grade-2 elements, a Real Scalar plus Bivector, (R + BV) 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) is the Biparavector constructor with Grade-1 and Grade-2 elements, a Real Vector plus Bivector, (V3 + BV) is the Odd constructor with Grade-1 and Grade-3 elements, a Vector plus Imaginary Scalar, (V3 + I) is the Triparavector constructor with Grade-2 and Grade-3 elements, a Bivector plus Imaginary, (BV + I) is the constructor for an element in the Algebra of Physical Space with Grade-0 through Grade-3 elementscl3 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)cl3 the littlest singular value. Useful for testing for invertability.cl3 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') cliffcl3 calculates the eignenvalues of the cliffor. This is useful for determining if a cliffor is the pole of a function.cl3 makes a projector based off of the vector content of the Cliffor.cl3 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.cl3 function reduces the number of grades in a specialized Cliffor if they are zero-ishcl3 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.cl3# is a more effecient 'x -> I 1 * x' cl3 8 is a more effecient 'cl3 -> (abs cl3, signum cl3)' So  is always R and / is the same type of constructor as the input 6 is the element divided by its largest singular value !cl3! currently 128*eps"cl3"7 is a Clifford Conjugate, the vector grades are negated#cl3#; is the Complex Conjugate, the imaginary grades are negated$cl3$, takes any Cliffor and returns the R portion%cl3%- takes any Cliffor and returns the V3 portion&cl3&- takes any Cliffor and returns the BV portion'cl3', takes any Cliffor and returns the I portion(cl3(- takes any Cliffor and returns the PV poriton)cl3), takes any Cliffor and returns the H portion*cl3*, takes any Cliffor and returns the C portion+cl3+. takes any Cliffor and returns the BPV portion,cl3,. takes any Cliffor and returns the ODD portion-cl3-. takes any Cliffor and returns the TPV portion.cl3.. takes any Cliffor and returns the APS portion/cl3/= converts a Cl3 value constructed with R to its compact form.0cl304 converts the compact Cl3_R type back to a Cl3 type.1cl31> converts a Cl3 value constructed with V3 to its compact form.2cl325 converts the compact Cl3_V3 type back to a Cl3 type.3cl33> converts a Cl3 value constructed with BV to its compact form.4cl345 converts the compact Cl3_BV type back to a Cl3 type.5cl35= converts a Cl3 value constructed with I to its compact form.6cl364 converts the compact Cl3_I type back to a Cl3 type.7cl37> converts a Cl3 value constructed with PV to its compact form.8cl385 converts the compact Cl3_PV type back to a Cl3 type.9cl39= converts a Cl3 value constructed with H to its compact form.:cl3:4 converts the compact Cl3_H type back to a Cl3 type.;cl3;= converts a Cl3 value constructed with C to its compact form.<cl3<4 converts the compact Cl3_C type back to a Cl3 type.=cl3=? converts a Cl3 value constructed with BPV to its compact form.>cl3>6 converts the compact Cl3_BPV type back to a Cl3 type.?cl3?? converts a Cl3 value constructed with ODD to its compact form.@cl3@6 converts the compact Cl3_ODD type back to a Cl3 type.Acl3A? converts a Cl3 value constructed with TPV to its compact form.Bcl3B6 converts the compact Cl3_TPV type back to a Cl3 type.Ccl3C? converts a Cl3 value constructed with APS to its compact form.Dcl3D6 converts the compact Cl3_APS type back to a Cl3 type.Ecl3E random Real Scalar (Grade 0) with random magnitude and random signFcl3F random Real Scalar (Grade 0) with random magnitude within a range and a random signGcl3G random Vector (Grade 1) with random magnitude and random direction the direction is using spherical coordinatesHcl3H random Vector (Grade 1) with random magnitude within a range and a random directionIcl3I random Bivector (Grade 2) with random magnitude and random direction the direction is using spherical coordinatesJcl3J random Bivector (Grade 2) with random magnitude in a range and a random directionKcl3K random Imaginary Scalar (Grade 3) with random magnitude and random signLcl3L random Imaginary Scalar (Grade 3) with random magnitude within a range and random signMcl3M random Paravector made from random Grade 0 and Grade 1 elementsNcl3N random Paravector made from random Grade 0 and Grade 1 elements within a rangeOcl3O random Quaternion made from random Grade 0 and Grade 2 elementsPcl3P random Quaternion made from random Grade 0 and Grade 2 elements within a rangeQcl3Q* random combination of Grade 0 and Grade 3Rcl3R9 random combination of Grade 0 and Grade 3 within a rangeScl3S* random combination of Grade 1 and Grade 2Tcl3T9 random combination of Grade 1 and Grade 2 within a rangeUcl3U* random combination of Grade 1 and Grade 3Vcl3V9 random combination of Grade 1 and Grade 3 within a rangeWcl3W* random combination of Grade 2 and Grade 3Xcl3X9 random combination of Grade 2 and Grade 3 within a rangeYcl3Y# random combination of all 4 gradesZcl3Z2 random combination of all 4 grades within a range[cl3[& a unit vector with a random direction\cl3\$ a projector with a random direction]cl3]. a nilpotent element with a random orientation^cl3^, a unitary element with a random orientation_cl3Cl3 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.`cl3Cl(3,0) has a Floating instance.acl3!Cl(3,0) has a Fractional instancebcl3 Cl3 has a Num instance. Num+ is addition, geometric product, negation, " the largest singular value, and .ccl3Cl3 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 & and then the littlest singular value . 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. dcl3*Cl(3,0) has the property of equivalence. Eq is True/ when all of the grade elements are equivalent.ecl3$Cl3 can be reduced to a normal form.cl3 instance for the  library   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^  "#$%&'()*+,-.! /0 123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ (C) 2018 Nathan WaivioBSD3'Nathan Waivio Stable unportableSafe&5cl3$ horizontally polarized Jones vectorcl3" vertically polarized Jones vectorcl3" diagonally polarized Jones vectorcl3' anti-diagonally polarized Jones vectorcl3- right hand circularly polarized Jones vectorcl3, left hand circularly polarized Jones vectorcl3 function that returns Jones vector from input vector unit vector currently converts the input to a unit vectorcl3" Horizontal Polarizer Jones Matrixcl3 Vertical Polarizer Jones Matrixcl3 Diagonal Polarizer Jones Matrixcl3% Anti-diagonal Polarizer Jones Matrixcl3+ Right Hand Circular Polarizer Jones Matrixcl3* Left Hand Circular Polarizer Jones Matrixcl3 funciton that returns a Jones Matrix from an input Bloch Vector currently converts the input to a unit vectorcl3 Jones matrix for a rotated ideal Linear Horizontal Polarizer. Input value should be a scalar angle in Radians.cl3 Quarter Wave Plate Jones Matrixcl3 Rotated Quarter Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.cl3 Half Wave Plate Jones Matrixcl3 Rotated Half Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.cl3 a Wave Plate with phase shift of phi Jones Matrix. Input value should be a scalar angle in Radians.cl3 a Rotated Wave Plate with phase shift of phi and rotation theta Jones Matrix. The first input value is phi the phase shift as a scalar value in Radians. The second input value is theta the rotation a scalar angle in Radians.cl3 a Refelection Jones Matrixcl3 is a function that takes an Jones Vector after transformation by an optical chain, and returns the amplitude (amp), phase (phi), and normalized Jones Vector (vec), by the factorization of the input such that: amp * exp (i*phi/2) * veccl3 a Random Jones Vector.cl3: a Random Orthogonal Complementary pair of Jones Vectors.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"cl3-3.0.0.0-2fedqkWsj2XGSvAWIGAfaGAlgebra.Geometric.Cl3#Algebra.Geometric.Cl3.JonesCalculusSystemRandomCl3_APSCl3_TPVCl3_ODDCl3_BPVCl3_CCl3_HCl3_PVCl3_ICl3_BVCl3_V3Cl3_RCl3RV3BVIPVHCBPVODDTPVAPS showOctavelsv spectraldcmpeigvalsproject hasNilpotentreducemIxtimesI abssignumtolbardagtoRtoV3toBVtoItoPVtoHtoCtoBPVtoODDtoTPVtoAPStoCl3_R fromCl3_RtoCl3_V3 fromCl3_V3toCl3_BV fromCl3_BVtoCl3_I fromCl3_ItoCl3_PV fromCl3_PVtoCl3_H fromCl3_HtoCl3_C fromCl3_C toCl3_BPV fromCl3_BPV toCl3_ODD fromCl3_ODD toCl3_TPV fromCl3_TPV toCl3_APS fromCl3_APSrandRrangeRrandV3rangeV3randBVrangeBVrandIrangeIrandPVrangePVrandHrangeHrandCrangeCrandBPVrangeBPVrandODDrangeODDrandTPVrangeTPVrandAPSrangeAPS randUnitV3 randProjector randNilpotent randUnitary $fStorableCl3 $fFloatingCl3$fFractionalCl3$fNumCl3$fOrdCl3$fEqCl3 $fNFDataCl3$fStorableCl3_R $fReadCl3_R $fShowCl3_R$fStorableCl3_V3 $fReadCl3_V3 $fShowCl3_V3$fStorableCl3_BV $fReadCl3_BV $fShowCl3_BV$fStorableCl3_I $fReadCl3_I $fShowCl3_I$fStorableCl3_PV $fReadCl3_PV $fShowCl3_PV$fStorableCl3_H $fReadCl3_H $fShowCl3_H$fStorableCl3_C $fReadCl3_C $fShowCl3_C$fStorableCl3_BPV $fReadCl3_BPV $fShowCl3_BPV$fStorableCl3_ODD $fReadCl3_ODD $fShowCl3_ODD$fStorableCl3_TPV $fReadCl3_TPV $fShowCl3_TPV$fStorableCl3_APS $fReadCl3_APS $fShowCl3_APS $fRandomCl3$fBoundedConCl3 $fEnumConCl3 $fShowCl3 $fReadCl3 $fDataCl3 $fGenericCl3hpvvpvdpvapvrpvlpvjvhpmvpmdpmapmrpmlpmjmhpmRotqwpqwpRothwphwpRotwpwpRotrefl factorize randJonesVecrandOrthogonalJonesVecbaseGHC.Numabssignumghc-prim GHC.Classes==#random-1.2.1-5nRgRSyg1qJ2vdOlHtQDPS System.Random