+
    Œvjä8  ã                   óÊ  € R+t RtRt^ RIHtHtHt ^ RIHtH	t	H
t
HtHtHt ^ RIt^ R	IHtHtHtHtHtHt ^ R
IHt ^ RIHt R tR tR tR tR,t]! ]4      ^,
          t R-R lt!R.R lt"R/R lt#R t$R t%R0R lt&R0R lt' ! R R4      t(R t)R t*R1R lt+ ! R R4      t, ! R R]-4      t.. R2Ot/R% t0]1! R!R"R#R$RRRR R&R'7	      t2R( t3R) t4]5R*8X  d   ^ RI6t6]6Pn                  ! 4        R# R# )3Úangle2cornerÚCustomDrawChangerÚDrawTimeCollectorÚFillPairedDataz3.4.8zUtilities used here and there.)ÚmktimeÚgmtimeÚstrftime)Úlog10ÚpiÚfloorÚsinÚcosÚhypotN)ÚtransformPointsÚinverseÚEllipseÚGroupÚStringÚnumericXShift)Úflatten)ÚstringWidthc                ó�   € ^ .^	,          p\        \        \        V P                  R4      4      4      w  r#pWCV.VR&   \	        V4      # )zNConvert a 'dd/mm/yyyy' formatted string to a tuple for use in the time module.Ú/ºNé   N)ÚlistÚmapÚintÚsplitÚtuple)Ú
timeStringÚLÚddÚmmÚyyyys   &    Úc/var/www/html/daimler-pipeline/venv/lib/python3.14/site-packages/reportlab/graphics/charts/utils.pyÚmkTimeTupler&   %   sE   € ð 
ˆˆa�€AÜœœC ×!1Ñ!1°#Ó!6Ó7Ó8�L€BˆDØ�rˆN€A€b�Eä�‹8€Oó    c                ó*   € \        \        V 4      4      # )z?Convert a number of seconds since the epoch into a date string.)r   r&   )r    s   &r%   Ústr2secondsr)   .   s   € ô ”+˜jÓ)Ó*Ð*r'   c                ó,   € \        R\        V 4      4      # )zAConvert a date string into the number of seconds since the epoch.z%Y-%m-%d)r   r   )Úsecondss   &r%   Úseconds2strr,   3   s   € ô �J¤ w£Ó0Ð0r'   c                óf  € V R9   d   V # V ^ 8  d   R\        V ) 4      ,          # \        \        V 4      4      pV^ 8X  d   V ^8  d   RpM$RpM!V^ 8  d   RV^,
          ,          pM	RV,          pW 8¼  d
   VR,          # V^,          V 8¼  d
   VR,          # V^,          V 8¼  d
   VR,          # VR,          # )aG  Return the first 'nice round number' greater than or equal to x

Used in selecting apropriate tick mark intervals; we say we want
an interval which places ticks at least 10 points apart, work out
what that is in chart space, and ask for the nextRoundNumber().
Tries the series 1,2,5,10,20,50,100.., going up or down as needed.
g      ð?çš™™™™™¹?ç      $@g       @g      @)é    é   g      ð¿)ÚnextRoundNumberr   r	   )ÚxÚlgÚbases   &  r%   r2   r2   9   s±   € ð 	ˆF„{Øˆàˆ1„uØ”o q bÓ)Õ)Ð)ä”�q“‹]ˆà�Œ7Ø�1ŒuØ‘à‘Ø�!ŒVØ˜B �FÕ#‰Dà˜2•:ˆDð Œ9Ø˜#•:ÐØ�Q�h˜1Œ_Ø˜#•:ÐØ�Q�h˜1Œ_Ø˜#•:Ðà˜$•;Ðr'   c                óF  € W8¼  d1   W8X  d    V ^ 8X  d   Rp RpMRV ,          p RV,          pM\        R4      hW,
          \        V4      ,          pV^ 8„  ;'       d>    V^8  ;'       g    V^
8„  ;'       d$    ^
\        \        V4      4      ,          ;'       g    ^pTp W4,          pV\        R,          8:  d   MV^
,          pK'  ^ pV\        V,          8”  d   V^,           pK   \        V,          V,          pW,          p\        V4      V^ 8  ,
          p	Wy,          pWyV,           ,          pW',          pV^ 8”  d   WQ8¼  d   RpTpMV^ 8  d   V) pW8”  d   Tp^ pW8:  d   W€8:  d   M#V^,           pV\        8”  g   Kš  ^ pV^
,          pK§  WƒWpV,
          V,           V,
          3# )z>determine tick parameters for range [lo, hi] using I intervalsr.   gÍÌÌÌÌÌì?gš™™™™™ñ?zlo>hig        gš™™™™™¹¿éÿÿÿÿ)Ú
ValueErrorÚfloatr   r	   Ú
_intervalsr   Ú_j_max)
ÚloÚhiÚIr3   ÚbÚaÚjÚssÚnÚls
   &&&       r%   Úfind_intervalrE   a   s{  € ð 
„xØŒ6Ø�1ŒuØ�Ø‘à˜•V�Ø˜•V‘ä˜WÓ%Ð%Ø	…w”�a“Õ€AØ	ˆ!‰×6Ð��1‘—�˜˜"™×6Ð6 2¤u¬U°1«X£Õ#6×;Ð;¸!€AØ	€AØ
Ø�CˆØŒj˜�nÔ˜eØˆb�DŠà	€AØ
ŒJ�q�MŒ/˜q 1�uš1à
Ü˜�]˜1�_ˆØ�EˆÜ�‹F�A�a‘C�LˆØ�DˆØ�!•�HˆØ�DˆØˆQŒ3ØŒuØ�Ø�øØ�ŒTØ�ˆAØŒtØ�Ø�ØŒ5�Q”U˜EØ��EˆØŒVŽ8ØˆAØ�"•ŠAØ�˜!•V˜a•Z "•_Ð$Ð$r'   c                 ó¤  € V'       d@   \        W4      ^ ,          V,          p\        W4      w  rVVR8”  d
   V^,           pWS,          pMF V^ ,           RpV F4  p\	        WV4      pV^,          V8  g   K  VR,          w  rEpV^,          pK6  	  XXV3#   \         d2    \        \        ^T^,
          4      \        T^,           ^4      4      p L|i ; i)r0   ç:Œ0âŽyE>g Èë…óÌár   )ÚdivmodÚ	TypeErrorÚrangeÚmaxrE   )	ÚlowerÚupperrC   ÚgridÚtr=   ÚzÚwÚis	   &&&&     r%   Úfind_good_gridrS   �   sÄ   € ßÜ�5Ó˜qÕ! DÕ(ˆÜ�uÓ"‰ˆØˆTŒ6˜˜1��2Ø�W‰ð	-ØˆaŽDð ˆÛˆAÜ˜E¨Ó*ˆAØ��t�AŽvØ �e‘��tØ�A•$’ñ	 ð
 ˆb�$ˆ;Ðøô ô 	-Ü”c˜!˜A˜a�C“j¤ Q q¥S¨£Ó,ŠAð	-ús   Á		B Â9CÃCc                ó´  € \        WW%4      w  rxp\        \        V4      4      p	V	^ 8X  d   ^p	VRV	,          ,          p
\        V
4      V
8g  p
V	^8”  g   V	R
8  d"   R\	        V
^,           4      ,           R,           pM|V	^ 8¼  d-   \        V	4      V
,           pR\	        V4      ,           R,           pMIV
\        V	4      ,
          pR\	        V^,           4      ,           R,           \	        V4      ,           R,           pV'       d
   VR,           p. p\        \        W‡,
          4      V,          R	,           4      ^,           pV'       dW   . p\        V4       FB  pWuV,          ,           pVP                  V4       VP                  VVV,           ,          4       KD  	  WÞ3# \        V4       F3  pWuV,          ,           pVP                  VVVV,           ,          34       K5  	  V# )z®
return tick positions and labels for range lower<=x<=upper
n=number of intervals to try (can be a list or sequence)
split=1 return ticks then labels else (tick,label) pairs
r/   z%+z.0eÚ%z.0fÚ.Úfz%%r.   éýÿÿÿ)rS   r   r	   r   Úreprr9   rJ   Úappend)rL   rM   rC   r   ÚpercentrN   ÚlabelVOffsetrO   r=   ÚpowerrQ   ÚformatÚdigitsÚTÚlabelsrR   Úvs   &&&&&&&          r%   Úticksrc   ¤   sw  € ô ! ¨qÓ7�K€Aˆ4Ü”%˜“+Ó€EØˆa„x˜�ØˆS�%�Z�€AÜˆA‹�‰	€Aàˆq„y�E˜B”JØ”d˜1˜Q�3“i• Õ%‰à�AŒ:Ü˜“Z •\ˆFØœ4 ›<Õ'¨Õ-‰Fà”s˜5“z•\ˆFØœ˜f Q�h›Õ'¨Õ+¬D°«LÕ8¸Õ<ˆFç�v˜d•{�Ø
€AÜŒE�"•$‹K˜Õ˜SÕ Ó! !Õ#€AßØˆÜ�q–ˆAØ�q•&•ˆAØ�H‰H�QŒKØ�M‰M˜& A l¥NÕ3Ö4ñ ð ˆyÐä�q–ˆAØ�q•&•ˆAØ�H‰H�a˜ 1 \¥>Õ2Ð3Ö4ñ ð ˆr'   c                 óÈ  € \        V 4      pR V 9   dÉ   ^ pW!8  d   W,          f   V^,          pK  W!8X  d   V # V^,
          pW,          f   V^,          pK  V^,          pV'       g	   V'       d   WV p \        \        V 4      4       Uu. uF  q@V,          e   K  VNK  	  ppV F/  pRW^,
          ,          W^,           ,          ,           ,          W&   K1  	  W#V 3# ^ W3# u upi )Nç      à?)ÚlenrJ   )ÚdataÚmr?   rD   rR   r>   s   &     r%   Ú	findNonesri   Ê   sÇ   € ÜˆD‹	€AØˆt„|ØˆØŒc�d•g’oØ��FŠAØŒ4˜�Øˆa�CˆØ�gŠoØ��FŠAØ	ˆ1�ˆß—˜$ ˜)�4Üœc $›iÔ(Ó<Ñ(�1°­G�QˆQÑ(ˆÐ<ÛˆAØ˜4 !¥�9 T¨A­#¥YÕ.Õ/ˆD‹Gñ à�TˆzÐØˆQˆ8€Oùò	 =s   Â	CÂCc                 ó  € V  Uu. uF  q^,          NK  	  pp\        V4      w  r4p\        V4      pV'       g   WF8  g   WR8w  d:   V'       g   WF8  d   WV p \        W4       UUu. uF  w  rV^ ,          V3NK  	  p ppV # u upi u uppi ©r1   )ri   rf   Úzip)Úpairsr3   ÚYr?   rD   ÚnYrh   Úys   &       r%   ÚpairFixNonesrq   Ü   s{   € ÙÓ‘u�!ˆ1�ˆ‘u€AÐÜ�q‹\�F€AˆÜˆA‹€AßˆAŒC�2”5ß�”˜U Q˜Z�UÜ%(¨¤]Ô3¡]™c˜a�!�A•$�q“¡]ˆÑ3Ø€Lùò 	ùó
 4s   …B Á%Bc           
      óè   € V^,
          V ^ ,          .,          V ,           p \        V\        V 4      ^,           4       Uu. uF'  p\        \        WV,
          V 4      4      V,          NK)  	  p pV # u upi rk   )rJ   rf   r9   Úsum)rg   rC   rR   s   && r%   Úmaveragert   å   sd   € Øˆa�C�$�q•'��?˜4Õ€DÜ/4°Q´s¸4³yÀµ{Ô/CÓDÑ/C¨!ŒE”#�d˜Q�3˜q�kÓ"Ó# A×%Ð%Ñ/C€DÐDØ€Kùò Es   ¾-A/c           
      óª   € \        T \        V  Uu. uF  q"^,          NK  	  upV4      4       UUu. uF  w  r#V^ ,          V3NK  	  upp# u upi u uppi rk   )rl   rt   )rg   rC   r3   Úss   &&  r%   ÚpairMaveragerw   ê   sJ   € Ü # D¬(Á$Ó3GÁ$¸Q°a·D°DÁ$Ñ3GÈÓ*JÔ KÔLÑ K™˜ˆQˆq�T�!‹HÑ KÒLÐLùÒ3GùÓLs
   �A
°Ac                   ó€   a € ] tR t^ít o RtR.3R ltR tR tR t]	R 4       t
]	R 4       t]R	 4       tR
 tR tRtV tR# )r   za
generic mechanism for collecting information about nodes at the time they are about to be drawn
Úgifc                ó‚   € \         P                  ! 4       V n        V P                  4        R V n        Wn        RV n        R # )NF)ÚweakrefÚWeakKeyDictionaryÚ_nodesÚclearÚ_pmcanvÚformatsÚdisabled)Úselfr€   s   &&r%   Ú__init__ÚDrawTimeCollector.__init__ñ   s.   € Ü×/Ò/Ó1ˆŒØ�
‰
ŒØˆŒØŒØˆŽr'   c                óJ   € . V n         V P                   P                  V n        R # ©N)Ú_inforZ   Ú_info_append©r‚   s   &r%   r~   ÚDrawTimeCollector.clearø   s   € ØˆŒ
Ø ŸJ™J×-Ñ-ˆÖr'   c                óD   € WV3V P                   V&   WP                  R &   R# )Ú_drawTimeCallbackN)r}   Ú__dict__)r‚   ÚfuncÚnodeÚargsÚkwdss   &&&*,r%   ÚrecordÚDrawTimeCollector.recordü   s"   € Ø! tÐ,ˆ�‰�DÑØ-1�‰Ð)Ó*r'   c                ó¤   € V P                   P                  VR 4      pV'       d,   Vw  rEpV! WV.VO5/ VB pVe   V P                  V4       R # R # R # r†   )r}   Úgetrˆ   )r‚   r�   ÚcanvasÚrendererrŽ   r�   r‘   rR   s   &&&&    r%   Ú__call__ÚDrawTimeCollector.__call__   sR   € Ø�{‰{�‰˜t DÓ)ˆßØ#ÑˆD˜Ù�T Ð9¨DÒ9°DÑ9ˆAØŠ}˜d×/Ñ/°Ö2‰}ñ r'   c                ó  € \        VR R4      pV'       g   R# V P                  pV P                  pWPP                  ,           pW`P                  ,           pVP                  4       p	\        P                  WEV3Wx334      V	R&   V	# )ÚctmNÚrect)Úgetattrr3   rp   ÚwidthÚheightÚcopyr   ÚtransformAndFlatten)
r�   r–   r—   r‘   ÚAÚx1Úy1Úx2Úy2ÚDs
   &&&,      r%   ÚrectDrawTimeCallbackÚ&DrawTimeCollector.rectDrawTimeCallback  sm   € ä�F˜5 Ó&ˆß‘&Ø�V‰VˆØ�V‰VˆØ—*‘*�_ˆØ—+‘+Õˆà�I‰I‹KˆÜ#×7Ñ7¸¸r¸7ÀBÀ7Ð:KÓLˆˆ&‰	Øˆr'   c                óv   € \        V 4      R8w  d   \        V 4      p\        W!4      p\        \        V4      4      # )zftransform an flatten a list of points
A   transformation matrix
p   points [(x0,y0),....(xk,yk).....]
)r1   r0   r0   r1   r0   r0   )r   r   r   r   )r¢   ÚpÚiAs   && r%   r¡   Ú%DrawTimeCollector.transformAndFlatten  s2   € ô �‹8�]Ô"Ü˜“ˆBÜ Ó%ˆAÜ”W˜Q“ZÓ Ð r'   c                ót   € V P                   '       g   ^ RIpVP                  ^^4      V n         V P                   # )r0   N)r   ÚrenderPMÚPMCanvas)r‚   r¯   s   & r%   ÚpmcanvÚDrawTimeCollector.pmcanv  s,   € à�|�|ˆ|ÛØ#×,Ñ,¨Q¨qÓ1ˆDŒLØ�|‰|Ðr'   c                óN  € \        VR R4      pV'       g   R# \        V\        4      '       dv   V P                  pVP	                  VP
                  VP                  VP                  VP                  4       VP                  pV Uu. uF  qˆ^,          V^,          3NK  	  ppMTVP                  4       P                  p\        ^ \        V4      ^4       U	u. uF  q—V	,          Wy^,           ,          3NK  	  pp	VP                  4       p
V P                  WW4      V
R&   V
# u upi u up	i )r›   NÚpoly)r�   Ú
isinstancer   r±   ÚellipseÚcxÚcyÚrxÚryÚvpathÚ	asPolygonÚpointsrJ   rf   r    r¡   )r‚   r�   r–   r—   r‘   r¢   Úcr«   r3   rR   r§   s   &&&&,      r%   ÚwedgeDrawTimeCallbackÚ'DrawTimeCollector.wedgeDrawTimeCallback&  så   € Ü�F˜5 Ó&ˆß‘&Ü�dœ7×#Ò#Ø—‘ˆAØ�I‰I�d—g‘g˜tŸw™w¨¯©°·±Ô8Ø—‘ˆAÙ&'Ó(¡a �A•$�q˜•t“¡aˆAÐ(ˆAà—‘Ó ×'Ñ'ˆAÜ(-¨a´°A³°qÔ(9Ó:Ñ(9 1�A•$�q˜1�•v“Ñ(9ˆAÐ:à�I‰I‹KˆØ×,Ñ,¨QÓ1ˆˆ&‰	Øˆùò )ùò ;s   ÂDÃ D"c                ó¸   € ^ RI p\        VR,           R4      p VP                  V P                  V4       VP                  4        R#   TP                  4        i ; i)z¯
save the current information known to this collector
fnroot is the root name of a resource to name the saved info
override this to get the right semantics for your collector
Nz.default-collector.outrQ   )ÚpprintÚopenr‡   Úclose)r‚   ÚfnrootrÂ   rW   s   &&  r%   ÚsaveÚDrawTimeCollector.save6  sC   € ó 	Ü
ˆvÐ.Õ.¨sÓ
3ˆð	Ø�M‰M˜$Ÿ*™* QÔ'à�G‰GŽIøˆA�G‰G�Iús   ™A ÁA)r‡   rˆ   r}   r   r�   r€   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rƒ   r~   r’   r˜   Ústaticmethodr¨   r¡   Úpropertyr±   r¿   rÆ   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r%   r   r   í   sp   ø‡ € ñð  %˜gô ò.ò2ò3ð ñ
ó ð
ð ñ!ó ð!ð ñó ðò÷ ð r'   c                óB   € V w  r#Vw  rE\        WB,
          WS,
          4      # )z"return distance between two points)r   )Úxxx_todo_changemeÚxxx_todo_changeme1Úx0Úy0r£   r¤   s   &&    r%   ÚxyDistrØ   C  s!   € à�G€RØ �G€RÜ�"•%˜"�%Ó!Ð!r'   c                 óF  € V w  rEVw  rgVw  r‰Vw  r«WE3pWd,
          Wu,
          3pW‰3pW¨,
          W¹,
          3p\        V^ ,          V^,          ,          V^,          V^ ,          ,          ,
          4      pV^ ,          V^ ,          ,
          V^,          V^,          ,
          3pV^ ,          V^,          ,          V^,          V^ ,          ,          ,
          pV^ ,          V^,          ,          V^,          V^ ,          ,          ,
          p\        V4      R8  d   \        V4      R8  d   R# R# VV,          pVV,          p^ Tu;8:  d   ^8:  dV   M R# ^ Tu;8:  d   ^8:  dA   M R# V^ ,          VV^ ,          ,          ,           V^,          VV^,          ,          ,           3# R# R# )r0   rG   Ú	collinearN)r9   Úabs)Úxxx_todo_changeme2Úxxx_todo_changeme3Úxxx_todo_changeme4Úxxx_todo_changeme5Úx00Úy00Úx01Úy01Úx10Úy10Úx11Úy11r«   ÚrÚqrv   ÚrsÚqpÚqprÚqpsrO   Úus   &&&&                  r%   ÚlineSegmentIntersectrï   I  sM  € à"�I€SØ"�I€SØ"�I€SØ"�I€SØˆ€AØ��•ˆ€Að 	ˆ€AØ��•ˆ€Aä	ˆq��t�A�a•D�y˜˜1�˜a �d�Õ"Ó	#€BØ	
ˆ1�ˆa��d��1�Q•4˜˜!�•9Ð	€Bà
ˆQ�%��!•�*�R˜•U˜1˜Q�4•ZÕ
€CØ
ˆQ�%��!•�*�R˜•U˜1˜Q�4•ZÕ
€Cä
ˆ2ƒwˆt„|Üˆs‹8�DŒ=¡ÙàˆB�€AØˆB�€Aàˆ!†wˆQ‡w€w�1�a–7˜—7�7Ø��t�A�a˜•d•F�{˜A˜a�D  1 Q¥4¥�KÐ'Ð'ñ �wr'   c
                ó�  € V'       g   \        4       pVR,          p\        ^´,          p
W:,          p\        WEV4      pT;'       d    R	;'       g    ^pVR,          pV^Z,          pV	R8w  d   V	R8X  d   W½RV,          ,          V,          ,          pMYV	R8X  d!   W½\        V4      ,          V,          ,          pM2V	R8X  d,   W½\        \	        W”WÅVR4      4      ,          V,          ,          pV FÖ  p\        VWV4      p\        V4      V,          p\        4       pVP                  \        ^ ^ VWVRR7      4       VP                  V \        V4      V,          ,           V\        V4      V,          ,           4       VP                  W¾V,          ,
          V
,          V,
          4       VP                  V4       W½V,          ,          pKØ  	  V# )
z%make a group with circular text in itéh  re   ÚstartÚmiddleÚendÚnumericN)ÚfontNameÚfontSizeÚ
textAnchorr7   )r   r
   r   r9   r   Úaddr   Ú	translater   r   Úrotate)r3   rp   ÚradiusÚangleÚtextrö   r÷   ÚinsideÚGrø   Úpi180Úphirž   ÚsigÚhsigÚsig90ÚletterÚbetaÚhs   &&&&&&&&&&         r%   ÚmakeCircularStringr	  f  sj  € ç”%“'ˆaà	ˆS…L€EÜˆs�F€EØ
�+€CÜ˜¨Ó1€EØ
�-ˆ-�R×
Ð
˜1€CØˆs�7€DØ��F€Eà�7ÔØ�xÔØ˜˜E�	•? 6Õ)Õ)‰CØ˜ÔØ”u˜U“|Õ# FÕ*Õ*‰CØ˜Ô"Ø”uœ]¨:¸5È(ÐSWÓXÓYÕYÐZ`Õ`Õ`ˆCãˆÜ˜F HÓ7ˆÜ�U‹|˜FÕ"ˆÜ‹GˆØ	�‰Œf�Q˜˜6¨HÐRYÔZÔ[Ø	�‰�A”c˜#“h˜v•oÕ% a¬¨C«°­Õ&7Ô8Ø	�‰�#˜4•i•- Õ& uÕ,Ô-Ø	�‰ˆaŒØ�4�x�Šñ ð €Hr'   c                   ó6   a € ] tR tRt o RtR tR tR tRtV t	R# )r   i†  z1
a class to simplify making changes at draw time
c                ó   € R V n         R # r†   ©Ústorer‰   s   &r%   rƒ   ÚCustomDrawChanger.__init__Š  s	   € ØˆŽ
r'   c                óV  € V'       d[   V P                  V4      V n        \        V P                  \        4      '       g#   Q R V P                  P
                  ,          4       hR# V P                  e9   V P                  P                  4        F  w  r4\        W#V4       K  	  RV n        R# R# )z5%s.changer should return a dict of changed attributesN)Ú_changerr  rµ   ÚdictÚ	__class__rÈ   ÚitemsÚsetattr)r‚   ÚchangeÚobjr@   rb   s   &&&  r%   r˜   ÚCustomDrawChanger.__call__�  sŽ   € ßØŸ™ sÓ+ˆDŒJÜ˜dŸj™j¬×.Ò.ð  BÐ0gÐjn×jxÑjx÷  kBñ  kBõ  1Bó  BÒ.Ø�Z‰ZÒ#Ø—z‘z×'Ñ'Ö)‘�Ü˜˜aÖ ñ *àˆDŽJñ $r'   c                ó   € \        R4      h)z‰
When implemented this method should return a dictionary of
original attribute values so that a future self(False,obj)
can restore them.
zAbstract method _changer called)ÚRuntimeError)r‚   r  s   &&r%   r  ÚCustomDrawChanger._changer–  s   € ô Ð<Ó=Ð=r'   r  N)
rÈ   rÉ   rÊ   rË   rÌ   rƒ   r˜   r  rÏ   rÐ   rÑ   s   @r%   r   r   †  s   ø‡ € ñòò÷>ð >r'   c                   ó*   a € ] tR tRt o RR ltRtV tR# )r   iž  c                ó<   € \         P                  W4       W n        R # r†   )r   rƒ   Úother)r‚   rb   r  s   &&&r%   rƒ   ÚFillPairedData.__init__Ÿ  s   € Ü�‰�dÔØŽ
r'   )r  N)r0   )rÈ   rÉ   rÊ   rË   rƒ   rÏ   rÐ   rÑ   s   @r%   r   r   ž  s   ø‡ € ÷ò r'   ÚeÚnerC   ÚnwrQ   Úswrv   Úsec                ób   € V R,          p\          F  w  r#pY!u;8  d   V8:  g   K  Vu #  K  	  R# )aJ  converts mathematical angle to a compass point from a math angle where
0 degrees lies along the x axis ie east==0 degrees

>>> [angle2dir(_) for _ in [0,360]+[__[0] for __ in _arange2dirs]+[__[1] for __ in _arange2dirs]]
['e', 'e', 'e', 'e', 'ne', 'n', 'nw', 'w', 'sw', 's', 'se', 'e', 'ne', 'n', 'nw', 'w', 'sw', 's', 'se', 'e']
rñ   r¾   )Ú_arange2dirs)rý   r@   r<   r=   Úds   &    r%   Ú	angle2dirr'  ®  s-   € ð 	��€Aß!‰	ˆ�ØŽ8�Ž8˜A’XŠ8ñ "ár'   r¾   )	r  r   rC   r!  rQ   r"  rv   r#  r¾   c                ó.   € \         \        V 4      ,          # )a$  converts a direction angle to a box corner name effectively the reverse direction
>>> [angle2corner(_) for _ in [0,360]+[__[0] for __ in _arange2dirs]+[__[1] for __ in _arange2dirs]]
['w', 'w', 'w', 'w', 'sw', 's', 'se', 'e', 'ne', 'n', 'nw', 'w', 'sw', 's', 'se', 'e', 'ne', 'n', 'nw', 'w']
)Ú_cornerNamesr'  )rý   s   &r%   r   r   ¿  s   € ô
 œ	 %Ó(Õ)Ð)r'   c                ó\  € V ^ ,          V ^,          8”  g   V ^,          V ^,          8”  dg   \        V ^ ,          V ^,          4      \        V ^,          V ^,          4      \        V ^ ,          V ^,          4      \        V ^,          V ^,          4      3p VR9  d   \        RV: 24      hVR9   d    V ^ ,          V ^,          ,           ^,          pMVR9   d   V ^,          pM	V ^ ,          pVR9   d"   V ^,          V ^,          ,           ^,          pW#3# VR9   d   V ^,          pW#3# V ^,          pW#3# )aD  return (x,y) for bounding box and corner name
>>> bb=(1,0,0,1);[boxCornerCoords(bb,_) for _ in 'c n ne e se s sw w nw'.split()]
[(0.5, 0.5), (0.5, 1), (1, 1), (1, 0.5), (1, 0), (0.5, 0), (0, 0), (0, 0.5), (0, 1)]
>>> boxCornerCoords(bb,'z')
Traceback (most recent call last):
    ...
ValueError: invalid box corner name 'z'
zinvalid box corner name )	rC   r   r  r#  rv   r"  rQ   r!  r¾   )r¾   rv   rC   )r   r  r#  )r  r¾   rQ   )r!  rC   r   )ÚminrK   r8   )ÚbbÚcnr3   rp   s   &&  r%   ÚboxCornerCoordsr.  Æ  s  € ð 
ˆ!…uˆR��U„{�b˜•e˜B˜q�E”kÜ�"�Q•%˜˜1�Óœs 2 a¥5¨¨A­Ó/´°B°qµE¸"¸Q½%Ó0@ÄÀRÈÅUÈ2ÈaÍ5ÓAQÐRˆØ	ÐBÔBÜÐ3°B±6Ð:Ó;Ð;Ø	ˆ]ÔØ��U�2�a•5�[˜!�O‰Ø	ˆÔ	Øˆq�E‰àˆq�EˆØ	ˆ]ÔØ��U�2�a•5�[˜!�Oˆð
 ˆ4€Kð	 
ˆÔ	Ø�1•ˆAð ˆ4€Kð ˆq�EˆØˆ4€Kr'   Ú__main__)r   r'  r.  r   r   r   rS   rE   ri   rï   r	  rt   r&   r2   rq   rw   r,   r)   rc   rØ   )r.   gš™™™™™É?g      Ð?re   )é   )©é   r0  é   é   é   é	   N)r1  r1   r0   Nr0   )r3  )r0   Nrò   )	)r7   ç     €6@r  )r7  ç     àP@r   )r8  ç      \@rC   )r9  ç     °c@r!  )r:  ç     Pi@rQ   )r;  ç     ðn@r"  )r<  ç     Hr@rv   )r=  ç     u@r#  )r>  ii  r  )8Ú__all__Ú__version__rÌ   Útimer   r   r   Úmathr	   r
   r   r   r   r   r{   Úreportlab.graphics.shapesr   r   r   r   r   r   Úreportlab.lib.utilsr   Úreportlab.pdfbase.pdfmetricsr   r&   r)   r,   r2   r:   rf   r;   rE   rS   rc   ri   rq   rt   rw   r   rØ   rï   r	  r   r   r   r%  r'  r  r)  r   r.  rÈ   ÚdoctestÚtestmod© r'   r%   Ú<module>rI     s  ðð€ð. €Ø(€ß )Ñ )ß 2× 2Û ß e× eÝ 'Ý 4òò+ò
1ò$ðL €
Ù
ˆ:ƒ�qÕ€ô-%ô^ô($òLò$ôô
M÷Tñ Tòl"ò(ô:÷@>ñ >ô0�Tô ò


€ò
ñ  �C˜4 #¨°°t¸cÀTÈCÔP€ò*òð6 ˆZÔÛØ‡O‚OÖñ r'   