!OC`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_(C) 2018 Nathan WaivioBSD3'Nathan Waivio <nathan.waivio@gmail.com>Stable unportableSafe%'16k>`cl3`8 Bounded Enum Algebraic Data Type of constructors of Cl3cl3Cl3 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 and live within the APS. ; is the constructor for the Real Scalar Sub-algebra Grade-0" is the Vector constructor Grade-1$ is the Bivector constructor Grade-2F is the Imaginary constructor Grade-3 and is the Pseudo-Scalar for APS@ is the Paravector constructor with Grade-0 and Grade-1 elements[ is the Quaternion constructor it is the Even Sub-algebra with Grade-0 and Grade-2 elementsZ is the Complex constructor it is the Scalar Sub-algebra with Grade-0 and Grade-3 elementsB is the Biparavector constructor with Grade-1 and Grade-2 elements 9 is the Odd constructor with Grade-1 and Grade-3 elements C is the Triparavector constructor with Grade-2 and Grade-3 elements i is the constructor for an element in the Algebra of Physical Space with Grade-0 through Grade-3 elements cl3 N 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];KThis allows one to take advantage of the isomorphism between Cl3 and M(2,C) cl3 C the littlest singular value. Useful for testing for invertability.cl30 the spectral decomposition of a function to calculate analytic functions of cliffors in Cl(3,0). This function requires the desired function to be calculated and it'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') cliffacl3a 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  spectprojw. It is fortunate because eigen decomposition doesn't work with elements with nilpotent content, so it fills the gap.bcl3bt helper function for with specialization for real, imaginary, or complex eigenvalues. To specialize for Reals pass #, to specialize for Imaginary pass !, to specialize for Complex pass cl3u calculates the eignenvalues of the cliffor. This is useful for determining if a cliffor is the pole of a function.ccl3c) helper function to calculate Eigenvaluescl3 makes a projector based off of the vector content of the Cliffor. We have safty problem with unreduced values, so it calls reduce first, as a view pattern.dcl3d calculates a boost that is perpendicular to both the vector and bivector components, 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 = v * d * bar v and returns v, d, and v_bar as a tuple. First v must be calculated and then d = bar v * cliffor * v. d will have colinear vector and bivector parts. This is somewhat simular to finding the drift frame for an electromagnetic field.ecl3ep takes a Cliffor and determines if the vector part and the bivector part are not at all orthoganl and non-zero.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.fcl3f 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.cl3P function reduces the number of grades in a specialized Cliffor if some are zerogcl3g negative icl3 currently 128*epscl37 is a Clifford Conjugate, the vector grades are negatedcl3; is the Complex Conjugate, the imaginary grades are negatedcl3, takes any Cliffor and returns the R portioncl3- takes any Cliffor and returns the V3 portioncl3- takes any Cliffor and returns the BV portioncl3, takes any Cliffor and returns the I portioncl3- takes any Cliffor and returns the PV poritoncl3, takes any Cliffor and returns the H portioncl3, takes any Cliffor and returns the C portioncl3. takes any Cliffor and returns the BPV portioncl3. takes any Cliffor and returns the ODD portioncl3. takes any Cliffor and returns the TPV portion cl3 . takes any Cliffor and returns the APS portion!cl3!C random Real Scalar (Grade 0) with random magnitude and random sign"cl3"T random Real Scalar (Grade 0) with random magnitude within a range and a random sign#cl3#q random Vector (Grade 1) with random magnitude and random direction the direction is using spherical coordinates$cl3$T random Vector (Grade 1) with random magnitude within a range and a random direction%cl3%s random Bivector (Grade 2) with random magnitude and random direction the direction is using spherical coordinates&cl3&R random Bivector (Grade 2) with random magnitude in a range and a random direction'cl3'H random Imaginary Scalar (Grade 3) with random magnitude and random sign(cl3(W random Imaginary Scalar (Grade 3) with random magnitude within a range and random sign)cl3)@ random Paravector made from random Grade 0 and Grade 1 elements*cl3*O random Paravector made from random Grade 0 and Grade 1 elements within a range+cl3+@ random Quaternion made from random Grade 0 and Grade 2 elements,cl3,O random Quaternion made from random Grade 0 and Grade 2 elements within a range-cl3-* random combination of Grade 0 and Grade 3.cl3.9 random combination of Grade 0 and Grade 3 within a range/cl3/* random combination of Grade 1 and Grade 20cl309 random combination of Grade 1 and Grade 2 within a range1cl31* random combination of Grade 1 and Grade 32cl329 random combination of Grade 1 and Grade 3 within a range3cl33* random combination of Grade 2 and Grade 34cl349 random combination of Grade 2 and Grade 3 within a range5cl35# random combination of all 4 grades6cl362 random combination of all 4 grades within a range7cl37& a unit vector with a random direction8cl38$ a projector with a random direction9cl39. a nilpotent 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.;cl3Cl(3,0) has a Floating instance.<cl3!Cl(3,0) has a Fractional instance=cl3 Cl3 has a Num instance. Num+ is addition, geometric product, negation, h" the largest singular value, and i like a unit vector of sorts.>cl3ECl3 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. 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 h( and then the littlest singular value  F. Some arbitrary cliffors may return EQ for Ord but not be exactly j 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. ?cl3*Cl(3,0) has the property of equivalence. Eq is True/ when all of the grade elements are equivalent.@cl3k instance for the  library:  !"#$%&'()*+,-./0123456789:   !"#$%&'()*+,-./0123456789(C) 2018 Nathan WaivioBSD3'Nathan Waivio <nathan.waivio@gmail.com>Stable unportableSafe%wGcl3G$ horizontally polarized Jones vectorHcl3H" vertically polarized Jones vectorIcl3I" diagonally polarized Jones vectorJcl3J' anti-diagonally polarized Jones vectorKcl3K- right hand circularly polarized Jones vectorLcl3L, left hand circularly polarized Jones vectorMcl3Mp function that returns Jones vector from input vector unit vector currently converts the input to a unit vectorNcl3N" Horizontal Polarizer Jones MatrixOcl3O Vertical Polarizer Jones MatrixPcl3P Diagonal Polarizer Jones MatrixQcl3Q% Anti-diagonal Polarizer Jones MatrixRcl3R+ Right Hand Circular Polarizer Jones MatrixScl3S* Left Hand Circular Polarizer Jones MatrixTcl3To funciton that returns a Jones Matrix from an input Bloch Vector currently converts the input to a unit vectorlcl3lS will produce a versor that rotates a vector by an angle about a unit vector axis.mcl3mv will produce a versor that rotates by double the input angle for rotating polarizers and wave plates the axis is e2.Ucl3Up Jones matrix for a rotated ideal Linear Horizontal Polarizer. Input value should be a scalar angle in Radians.Vcl3V Quarter Wave Plate Jones MatrixWcl3W[ Rotated Quarter Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.Xcl3X Half Wave Plate Jones MatrixYcl3YX Rotated Half Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.Zcl3Ze 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 Matrix]cl3] 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) * vec^cl3^ a Random Jones Vector._cl3_: a Random Orthogonal Complementary pair of Jones Vectors.GHIJKLMNOPQRSTUVWXYZ[\]^_GHIJKLMNOPQRSTUVXWYZ[\^_]n      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnomnpqrstuvwx"cl3-1.0.0.4-DOSZpFQ1dDw21vkd9BEaoTAlgebra.Geometric.Cl3#Algebra.Geometric.Cl3.JonesCalculusSystemRandomCl3RV3BVIPVHCBPVODDTPVAPS showOctavelsv spectraldcmpeigvalsproject hasNilpotentreducetolbardagtoRtoV3toBVtoItoPVtoHtoCtoBPVtoODDtoTPVtoAPSrandRrangeRrandV3rangeV3randBVrangeBVrandIrangeIrandPVrangePVrandHrangeHrandCrangeCrandBPVrangeBPVrandODDrangeODDrandTPVrangeTPVrandAPSrangeAPS randUnitV3 randProjector randNilpotent $fStorableCl3 $fFloatingCl3$fFractionalCl3$fNumCl3$fOrdCl3$fEqCl3 $fRandomCl3 $fShowCl3 $fReadCl3 $fDataCl3 $fGenericCl3$fBoundedConCl3 $fEnumConCl3hpvvpvdpvapvrpvlpvjvhpmvpmdpmapmrpmlpmjmhpmRotqwpqwpRothwphwpRotwpwpRotrefl factorize randJonesVecrandOrthogonalJonesVecConCl3jordanspectraldcmpSpecialeigvalsSpecialboost2colinear isColinearprojEigsmIbaseGHC.Numabssignumghc-prim GHC.Classes==!random-1.1-9LLJAJa4iQFLJiLXBOBXBV System.RandomrotrotIsh