q`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_(C) 2018 Nathan WaivioBSD3'Nathan Waivio <nathan.waivio@gmail.com>Stable unportableSafe%'16>``8 Bounded Enum Algebraic Data Type of constructors of 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 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  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)  C the littlest singular value. Useful for testing for invertability.0 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') cliffaa 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.bbt 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 u calculates the eignenvalues of the cliffor. This is useful for determining if a cliffor is the pole of a function.cc) helper function to calculate Eigenvalues 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.dd 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.eep takes a Cliffor and determines if the vector part and the bivector part are not at all orthoganl and non-zero. 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.ff 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.P function reduces the number of grades in a specialized Cliffor if some are zerogg negative i currently 128*eps7 is a Clifford Conjugate, the vector grades are negated; is the Complex Conjugate, the imaginary grades are negated, takes any Cliffor and returns the R portion- takes any Cliffor and returns the V3 portion- takes any Cliffor and returns the BV portion, takes any Cliffor and returns the I portion- takes any Cliffor and returns the PV poriton, takes any Cliffor and returns the H portion, takes any Cliffor and returns the C portion. takes any Cliffor and returns the BPV portion. takes any Cliffor and returns the ODD portion. takes any Cliffor and returns the TPV portion  . takes any Cliffor and returns the APS portion!!C random Real Scalar (Grade 0) with random magnitude and random sign""T random Real Scalar (Grade 0) with random magnitude within a range and a random sign##q random Vector (Grade 1) with random magnitude and random direction the direction is using spherical coordinates$$T random Vector (Grade 1) with random magnitude within a range and a random direction%%s random Bivector (Grade 2) with random magnitude and random direction the direction is using spherical coordinates&&R random Bivector (Grade 2) with random magnitude in a range and a random direction''H random Imaginary Scalar (Grade 3) with random magnitude and random sign((W random Imaginary Scalar (Grade 3) with random magnitude within a range and random sign))@ random Paravector made from random Grade 0 and Grade 1 elements**O random Paravector made from random Grade 0 and Grade 1 elements within a range++@ random Quaternion made from random Grade 0 and Grade 2 elements,,O random Quaternion made from random Grade 0 and Grade 2 elements within a range--* random combination of Grade 0 and Grade 3..9 random combination of Grade 0 and Grade 3 within a range//* random combination of Grade 1 and Grade 2009 random combination of Grade 1 and Grade 2 within a range11* random combination of Grade 1 and Grade 3229 random combination of Grade 1 and Grade 3 within a range33* random combination of Grade 2 and Grade 3449 random combination of Grade 2 and Grade 3 within a range55# random combination of all 4 grades662 random combination of all 4 grades within a range77& a unit vector with a random direction88$ a projector with a random direction99. a nilpotent element with a random orientation: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.;Cl(3,0) has a Floating instance.<!Cl(3,0) has a Fractional instance= Cl3 has a Num instance. Num+ is addition, geometric product, negation, h" the largest singular value, and i like a unit vector of sorts.>ECl3 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. ?*Cl(3,0) has the property of equivalence. Eq is True/ when all of the grade elements are equivalent.@k instance for the  library:  !"#$%&'()*+,-./0123456789:   !"#$%&'()*+,-./0123456789` lmnopqrstuv  (C) 2018 Nathan WaivioBSD3'Nathan Waivio <nathan.waivio@gmail.com>Stable unportableSafe%GG$ horizontally polarized Jones vectorHH" vertically polarized Jones vectorII" diagonally polarized Jones vectorJJ' anti-diagonally polarized Jones vectorKK- right hand circularly polarized Jones vectorLL, left hand circularly polarized Jones vectorMMp function that returns Jones vector from input vector unit vector currently converts the input to a unit vectorNN" Horizontal Polarizer Jones MatrixOO Vertical Polarizer Jones MatrixPP Diagonal Polarizer Jones MatrixQQ% Anti-diagonal Polarizer Jones MatrixRR+ Right Hand Circular Polarizer Jones MatrixSS* Left Hand Circular Polarizer Jones MatrixTTo funciton that returns a Jones Matrix from an input Bloch Vector currently converts the input to a unit vectorwwS will produce a versor that rotates a vector by an angle about a unit vector axis.xxv will produce a versor that rotates by double the input angle for rotating polarizers and wave plates the axis is e2.UUp Jones matrix for a rotated ideal Linear Horizontal Polarizer. Input value should be a scalar angle in Radians.VV Quarter Wave Plate Jones MatrixWW[ Rotated Quarter Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.XX Half Wave Plate Jones MatrixYYX Rotated Half Wave Plate Jones Matrix. Input value should be a scalar angle in Radians.ZZe a Wave Plate with phase shift of phi Jones Matrix. Input value should be a scalar angle in Radians.[[ 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.\\ a Refelection Jones Matrix]] 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^^ a Random Jones Vector.__: a Random Orthogonal Complementary pair of Jones Vectors.GHIJKLMNOPQRSTUVWXYZ[\]^_GHIJKLMNOPQRSTUVXWYZ[\^_]y      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnomnpqrstuvwxyz{|}~"cl3-1.0.0.2-1LD5Kj1mL9JEASN2yCX8a0Algebra.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-LLUGZ7T9DqQ5vN0Jbcd0We System.RandomConRConV3ConBVConIConPVConHConCConBPVConODDConTPVConAPSrotrotIsh