(F      !"#$%&'()*+,-./0123456789:;<=>?@ABCDE Safe 9:;<=DR0Numerical equality %Comparison within numerical precision.The class of invertible linear transformations!Inverse matrix action on a vector9Diagonal matrices in R2 behave as scaling transformationsEMultiplicative matrix semigroup ("multiplying" two matrices together)Matrix product3Linear maps, i.e. linear transformations of vectors 5Matrix action, i.e. linear transformation of a vector HA Mat2 can be seen as a linear operator that acts on points in the plane Hermitian space : inner product Inner product2Vector space : multiplication by a scalar quantityScalar multiplicationAdditive group : v ^+^ zero == zero ^+^ v == v v ^-^ v == zeroIdentity elementGroup action ("sum")$Inverse group action ("subtraction")V2 is a vector in R^2(A frame, i.e. a bounding box for objectsA  carries a "label" (i.e. any additional information such as a text tag, or any other data structure), in addition to position information. Data points on a plot are s.#A # defines a point in R2FBOverwrite either coordinate of a Point, to e.g. project on an axisG)Build a frame rooted at the origin (0, 0)H Create a  from a container of s P, i.e. construct two points p1 and p2 such that :"p1 := inf(x,y) P p2 := sup(x,y) PIFrame corner coordinatesJFrame corner coordinatesKFrame corner coordinatesLFrame corner coordinatesMThe M is the extent in the x direction and N is the extent in the y directionNThe M is the extent in the x direction and N is the extent in the y direction'Euclidean (L^2) norm((Normalize a V2 w.r.t. its Euclidean norm) Create a V2 v$ from two endpoints p1, p2. That is v can be seen as pointing from p1 to p2* Create a V2 v$ from two endpoints p1, p2. That is v can be seen as pointing from p1 to p2+$The origin of the axes, point (0, 0),Create a diagonal matrix-Build a V2 from a #; p (i.e. assuming the V2 points from the origin (0,0) to p).Move a point along a vector/Move a  along a vector0Given two frames F1 and F2, returns a function f that maps an arbitrary vector v that points within F1 to one contained within F2. map v into a unit square vector v01 with an affine transformation(optional) map v01= into another point in the unit square via a linear rescalingmap v01' onto F2$ with a second affine transformationNB: we do not check that v" is actually contained within the F10. This has to be supplied correctly by the user.1X-aligned unit vector2Y-aligned unit vectorO(Diagonal matrices can always be invertedPcMatrices form a monoid w.r.t. matrix multiplication and have the identity matrix as neutral elementQlDiagonal matrices form a monoid w.r.t. matrix multiplication and have the identity matrix as neutral elementRVectors form an additive groupS,Vectors form a monoid w.r.t. vector additionV  !"#$%&TFUVWXYGHIJKLMNZ'()*+,-./[\0 Initial frame Final frame#Optional rescaling in [0,1] x [0,1]Optional shift Initial vector] Initial frame Final frame#Optional rescaling in [0,1] x [0,1]Optional shiftInitial 12^_`aObcPQdefgRShF  !"#$%&TFUVWXYGHIJKLMNZ'()*+,-./[\0]12=    !"#$%&TFUVWXYGHIJKLMNZ'()*+,-./[\0]12^_`aObcPQdefgRShNone 34Specify the type of connection between line segments8ESpecify at which end should the text be anchored to its current point<%Specify a continuous or dashed stroke?Create the SVG header from a @?A rectangle, defined by its center coordinates and side lengths > putStrLn $ renderSvg $ rectCentered (Point 20 30) 15 30 (Just C.blue) (Just C.red) <g transform="translate(12.5 15.0)"><rect width="15.0" height="30.0" fill="#ff0000" stroke="#0000ff" /></g>ALine segment between two #s > putStrLn $ renderSvg $ line (Point 0 0) (Point 1 1) 0.1 Continuous C.blueviolet <line x1="0.0" y1="0.0" x2="1.0" y2="1.0" stroke="#8a2be2" stroke-width="0.1" /> > putStrLn $ renderSvg (line (Point 0 0) (Point 1 1) 0.1 (Dashed [0.2, 0.3]) C.blueviolet) <line x1="0.0" y1="0.0" x2="1.0" y2="1.0" stroke="#8a2be2" stroke-width="0.1" stroke-dasharray="0.2, 0.3" />ioAn array of axis-aligned identical segments (to be used as axis tickmarks), with centers given by the array of #sB"A plot axis with labeled tickmarks > putStrLn $ renderSvg $ axis (Point 0 50) X 200 2 C.red 0.05 Continuous 15 (-45) TAEnd T.pack (V2 (-10) 0) [LabeledPoint (Point 50 1) "bla", LabeledPoint (Point 60 1) "asdf"] <line x1="0.0" y1="50.0" x2="200.0" y2="50.0" stroke="#ff0000" stroke-width="2.0" /><line x1="50.0" y1="45.0" x2="50.0" y2="55.0" stroke="#ff0000" stroke-width="2.0" /><text x="-10.0" y="0.0" transform="translate(50.0 50.0)rotate(-45.0)" font-size="15" fill="#ff0000" text-anchor="end">bla</text><line x1="60.0" y1="45.0" x2="60.0" y2="55.0" stroke="#ff0000" stroke-width="2.0" /><text x="-10.0" y="0.0" transform="translate(60.0 50.0)rotate(-45.0)" font-size="15" fill="#ff0000" text-anchor="end">asdf</text>CC! renders text onto the SVG canvas ConventionsThe # argument p refers to the  lower-left corner of the text box.The text box can be rotated by rot degrees around p= and then anchored at either its beginning, middle or end to p with the 8 flag."The user can supply an additional $ displacement which will be applied afterA rotation and anchoring and refers to the rotated text box frame. > putStrLn $ renderSvg $ text (-45) C.green TAEnd "blah" (V2 (- 10) 0) (Point 250 0) <text x="-10.0" y="0.0" transform="translate(250.0 0.0)rotate(-45.0)" fill="#008000" text-anchor="end">blah</text>DA circle > putStrLn $ renderSvg $ circle (Point 20 30) 15 (Just C.blue) (Just C.red) <circle cx="20.0" cy="30.0" r="15.0" fill="#ff0000" stroke="#0000ff" />E"Polyline (piecewise straight line)  > putStrLn $ renderSvg (polyline [Point 100 50, Point 120 20, Point 230 50] 4 (Dashed [3, 5]) Round C.blueviolet) <polyline points="100.0,50.0 120.0,20.0 230.0,50.0" fill="none" stroke="#8a2be2" stroke-width="4.0" stroke-linejoin="round" stroke-dasharray="3.0, 5.0" />jRender a Colour from colour into a blaze Attribute$3456789:;<=>?@Center coordinates WidthHeight Stroke colour Fill colour A First point Second point Stroke width Stroke type Stroke colourklmLength Stroke width Font size Label angleLabel rendering Label shift iAxis Length  Stroke width Stroke colourCenter coordinatesnB Origin coordinatesAxis (i.e. either  or )Length of the axis Stroke width Stroke colour0The tick length is a fraction of the axis length Stroke typeLabel font sizeLabel rotation angle &How to anchor a text label to the axis How to render the tick label Offset the label Tick center coordinatesCRotation angle of the textbox Font size Font colour#How to anchor the text to the pointText #Displacement w.r.t. rotated textboxHInitial position of the text box (i.e. before rotation and displacement)oDCenterRadius Stroke colour Fill colourEData Stroke width Stroke type Stroke join type  Stroke colourpqrsjtuvwxyO  !"#$%&TWYGH'()*+,-./0]123456789:;<=>?@AliBCDEs3456789:;<=>?@AklminBCoDEpqrsjtuvwxyNoneNoneNoneMarco Zocca 2017BSD3Marco Zocca <zocca marco gmail>NoneF  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF@DABCE<=>3456789:;?#$%& !" ,+12'()-./*0  Safez{|}~z{|}~z{|}~SafeA point in a time series/An instant, defined by date (Day) and TimeOfDay None%Parse a row of numbers, separated by sep&parse a grid of numbers, separated by sep None:6Compute the plotting coordinates of a timeseries pointPreprocess the dataset for plotting 1. Remap the figure data to fit within the FigData ranges, expressed in pixels 2. Flip the data along the y axis since the origin in SVG is the top-left corner of the screen Create a  from a time series point (). The { (time axis) field will be used for the x coordinate, whereas both fields of TsPoint may be used to create the label field.NB : The coordinates of the resulting LabelPoint still live in the original data space; they must be rescaled to fit in the figure viewportMap a Tick onto the rationalsACreate a Tick from valid (year, month, day, hour, minute, second)     !"#$$%&''()**+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ )plot-light-0.1.0.9-IfKo1DLbm7wJ4v1vqEz9CAGraphics.Rendering.Plot.Light/Graphics.Rendering.Plot.Light.Internal.Geometry&Graphics.Rendering.Plot.Light.Internal/Graphics.Rendering.Plot.Light.PlotTypes.Heatmap/Graphics.Rendering.Plot.Light.PlotTypes.Scatter>Graphics.Rendering.Plot.Light.PlotTypes.TimeSeries.CandlestickData.TimeSeries.ForexData.TimeSeries%Graphics.Rendering.Plot.Light.IO.Text2Graphics.Rendering.Plot.Light.PlotTypes.TimeSeriesEps~= MatrixGroup<\>DiagMat2DMat2MultiplicativeSemigroup## LinearMap#>Mat2 Hermitian InnerProduct<.> VectorSpaceScalar.* AdditiveGroupzero^+^^-^V2AxisXYFrame_fpmin_fpmax LabeledPoint_lp_lplabelPoint_px_pynorm2 normalize2v2fromEndpoints-.origindiagMat2 v2fromPoint movePointmoveLabeledPointV2 frameToFramee1e2StrokeLineJoin_MiterRoundBevelInherit TextAnchor_TAStartTAMiddleTAEnd LineStroke_ ContinuousDashed svgHeader rectCenteredlineaxistextcirclepolyline setPointCoord mkFrameOriginframeFromDatasetxminxmaxyminymaxwidthheight$fMatrixGroupDiagMat2V2 $fMonoidMat2$fMonoidDiagMat2$fAdditiveGroupV2 $fMonoidV2mkPoint setPointX setPointYmkLabeledPointmoveLabeledPointmkFrame otherAxis fromFrametoFramemoveLabeledPointV2Frames$fEpsV2$fEpsV20 $fEpsFloat $fEpsDouble$fLinearMapDiagMat2V2!$fMultiplicativeSemigroupDiagMat2$fLinearMapMat2V2$fMultiplicativeSemigroupMat2 $fHermitianV2$fVectorSpaceV2 $fShowPointticks colourAttrstrokeDashArraytick labeledTick labeledTicks textAnchornone colourFillOptcolourStrokeOptstrokeLineJoinvsvivd0vdrealvdsFxRowrateOpenrateHighrateLow rateCloseTsPointTickTsp_tick_valrowNumsgridNumspacecomma rowNumSpaceparseFxDataset parseFxRow parseDateTimetsAxistspToLPfromTickmkTicknthtickToFractional