
    kf$-                     R   d Z dZddlmZmZmZ ddlmZmZm	Z	m
Z
mZmZ ddlZddlmZmZmZmZmZmZ ddlmZ ddlmZ d	 Zd
 Zd Zd ZdZ ee          dz
  Zd#dZ d$dZ!d%dZ"d Z#d Z$d&dZ%d&dZ& G d d          Z'd Z(d Z)d'dZ* G d d           Z+ G d! d"e,          Z-dS )(z3.3.0zUtilities used here and there.    )mktimegmtimestrftime)log10pifloorsincoshypotN)transformPointsinverseEllipseGroupStringnumericXShift)flatten)stringWidthc                     dgdz  }t          t          t          |                     d                              \  }}}|||g|dd<   t	          |          S )zNConvert a 'dd/mm/yyyy' formatted string to a tuple for use in the time module.r   	   /N   )listmapintsplittuple)
timeStringLddmmyyyys        _/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/graphics/charts/utils.pymkTimeTupler#      sX     
aAC!1!1#!6!67788LBD2rNAbqbE88O    c                 :    t          t          |                     S )z?Convert a number of seconds since the epoch into a date string.)r   r#   )r   s    r"   str2secondsr&      s     +j))***r$   c                 <    t          dt          |                     S )zAConvert a date string into the number of seconds since the epoch.z%Y-%m-%d)r   r   )secondss    r"   seconds2strr)      s     Jw000r$   c                    | dv r| S | dk     rdt          |            z  S t          t          |                     }|dk    r| dk     rd}nd}n|dk     r	d|dz
  z  }nd|z  }|| k    r|dz  S |dz  | k    r|d	z  S |d
z  | k    r|dz  S |dz  S )a[  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.
    )r      r   g      r+   皙?g      ?      $@   g       @   g      @)nextRoundNumberr   r   )xlgbases      r"   r0   r0   #   s     	F{{1uuoqb))))q]]771uu!VVBF#DD2:D 199#:Qh1__#:Qh1__#:$;r$   )r,   g?g      ?      ?r+   r/   c                    | |k    r+| |k    r| dk    rd} d}nd| z  } d|z  }nt          d          || z
  t          |          z  }|dk    r+|dk     s|dk    rdt          t          |                    z  pd}|}	 ||z  }|t          d	         k    rn|dz  }d}|t          |         k    r|dz   }|t          |         k    	 t          |         |z  }| |z  }t          |          |dk     z
  }	||	z  }||	|z   z  }||z  }|dk    r||k    rd
}|}n|dk     r| }| |k    r|}d}||k    r|| k    rn|dz   }|t          k    rd}|dz  }|||| |z
  |z   |z
  fS )z>determine tick parameters for range [lo, hi] using I intervalsr   gr,   g?g?zlo>hir+   
   g        )
ValueErrorfloatr   r   
_intervalsr   _j_max)
lohiIr1   bajssnls
             r"   find_intervalrE   K   s    
Rxxr661uuVVW%%%	BwaA	!1"62uU1XX#6;!A	AaCjnebD
 	
A
JqM//q1u1!JqM//]1_rEFFAaCLqD!HbDQ33"uuTTA!ttq55QUUEEV88A"A)* aR!VaZ"_$$r$      r/            r   c                    |r=t          | |          d         |z  }t          ||          \  }}|dk    r|dz   }||z  }n	 |d          nB# t          $ r5 t          t          d|dz
            t          |dz   d                    }Y nw xY wd}|D ]5}t	          | ||          }|d         |k     r|d d         \  }}}|d         }6|||fS )Nr   :0yE>r+   r.   r   g)divmod	TypeErrorrangemaxrE   )	lowerupperrC   gridtr=   zwis	            r"   find_good_gridrX   z   s    5q!D(uT""AT6612W	-aDDD 	- 	- 	-c!AaCjjQqS,,AAA	-  	 	AE%**AtAvve2tA$b$;s   A
 
<B	B	c                 D   t          | |||          \  }}}t          t          |                    }	|	dk    rd}	|d|	z  z  }
t          |
          |
k    }
|	dk    s|	dk     rdt	          |
dz             z   dz   }nk|	dk    r(t          |	          |
z   }d	t	          |          z   d
z   }n=|
t          |	          z
  }d	t	          |dz             z   dz   t	          |          z   dz   }|r|dz   }g }t          t          ||z
            |z  dz             dz   }|rPg }t          |          D ]:}|||z  z   }|                    |           |                    |||z   z             ;||fS t          |          D ]'}|||z  z   }|                    ||||z   z  f           (|S )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   r+   r-   r   z%+rI   z.0e%z.0fr.   .fz%%r,   )rX   r   r   r   reprr9   rO   append)rQ   rR   rC   r   percentrS   labelVOffsetrT   r=   powerrV   formatdigitsTlabelsrW   vs                    r"   ticksrh      s    !q$77KAr4%++EaxxS%ZAA	AqyyEBJJd1Q3ii%A::ZZ\F4<<'-FFs5zz\FfQh'+DLL8<F"vd{
AE"Q$KKS !!!#A q 	5 	5A$q&AHHQKKKMM&AlN34444&yq 	5 	5A$q&AHHa1\>234444r$   c                     t                     }d  v rd}||k     r |         |dz  }||k     r |         ||k    r S |dz
  } |         |dz  } |         |dz  }|s|r
 ||           fdt          t                               D             }|D ]}d |dz
            |dz            z   z   |<    || fS d| fS )Nr   r+   c                 $    g | ]}|         
|S N ).0rW   datas     r"   
<listcomp>zfindNones.<locals>.<listcomp>   s    <<<1DGOQOOOr$   r4   )lenrO   )rn   mr?   rD   r>   rW   s   `     r"   	findNonesrr      s   D		At||ccd1goFA ccd1goa44aC1goFA 1go	1##$qs)4<<<<c$ii((<<< 	0 	0A4!9T!A#Y./DGG!TzQt8Or$   c                     d | D             }t          |          \  }}}t          |          }|s||k     s||k    r,|s||k     r
| ||         } d t          | |          D             } | S )Nc                     g | ]
}|d          S r+   rl   rm   r1   s     r"   ro   z pairFixNones.<locals>.<listcomp>   s    !1r$   c                 (    g | ]\  }}|d          |fS r   rl   )rm   r1   ys      r"   ro   z pairFixNones.<locals>.<listcomp>   s$    333ca!A$q333r$   )rr   rp   zip)pairsYr?   rD   nYrq   s         r"   pairFixNonesr~      s    uAq\\FAaAA 4AaCC2q55'!U1Q3ZU33Sr]]333Lr$   rH   c                      dz
   d         gz   z     fdt          t                     dz             D               S )Nr+   r   c           	      d    g | ],}t          t          |z
  |                             z  -S rl   )r9   sum)rm   rW   rn   rC   s     r"   ro   zmaverage.<locals>.<listcomp>   s:    DDD!E#d1Q3q5k""##A%DDDr$   )rO   rp   rn   rC   s   ``r"   maverager      sQ    aC$q'?4DDDDDDuQs4yy{/C/CDDDDKr$   c                 f    d t          | t          d | D             |                    D             S )Nc                 (    g | ]\  }}|d          |fS rx   rl   )rm   r1   ss      r"   ro   z pairMaverage.<locals>.<listcomp>   s$    LLL1QqT!HLLLr$   c                     g | ]
}|d          S ru   rl   rv   s     r"   ro   z pairMaverage.<locals>.<listcomp>   s    3G3G3GQAaD3G3G3Gr$   )rz   r   r   s     r"   pairMaverager      s9    LLD(3G3G$3G3G3G*J*J K KLLLLr$   c                   ~    e Zd ZdZdgfdZd Zd Zd Zed             Z	ed             Z
ed	             Zd
 Zd ZdS )DrawTimeCollectorzi
    generic mechanism for collecting information about nodes at the time they are about to be drawn
    gifc                     t          j                    | _        |                                  d | _        || _        d| _        d S )NF)weakrefWeakKeyDictionary_nodesclear_pmcanvformatsdisabled)selfr   s     r"   __init__zDrawTimeCollector.__init__   s8    /11

r$   c                 6    g | _         | j         j        | _        d S rk   )_infor_   _info_appendr   s    r"   r   zDrawTimeCollector.clear   s    
 J-r$   c                 4    |||f| j         |<   | |j        d<   d S )N_drawTimeCallback)r   __dict__)r   funcnodeargskwdss        r"   recordzDrawTimeCollector.record   s(    !$t,D-1)***r$   c                     | j                             |d           }|r-|\  }}} ||||g|R i |}||                     |           d S d S d S rk   )r   getr   )r   r   canvasrendererr   r   r   rW   s           r"   __call__zDrawTimeCollector.__call__   s}    {tD)) 	3#D$T&9D999D99A}d//22222	3 	3 }r$   c                     t          |dd           }|sd S | j        }| j        }|| j        z   }|| j        z   }|                                }	t                              |||f||ff          |	d<   |	S )Nctmrect)getattrr1   ry   widthheightcopyr   transformAndFlatten)
r   r   r   r   Ax1y1x2y2Ds
             r"   rectDrawTimeCallbackz&DrawTimeCollector.rectDrawTimeCallback   sz    F5&&&&VV$*_$+IIKK#77Br7Br7:KLL&	r$   c                     t          |           dk    rt          |           }t          ||          }t          t          |                    S )z transform an flatten a list of points
        A   transformation matrix
        p   points [(x0,y0),....(xk,yk).....]
        )r+   r   r   r+   r   r   )r   r   r   r   )r   piAs      r"   r   z%DrawTimeCollector.transformAndFlatten   sC     88]""B1%%AWQZZ   r$   c                 \    | j         sdd l}|                    dd          | _         | j         S )Nr   r+   )r   renderPMPMCanvas)r   r   s     r"   pmcanvzDrawTimeCollector.pmcanv	  s4    | 	2OOO#,,Qq11DL|r$   c                    t          |dd           }|sd S t          |t                    rG| j        }|                    |j        |j        |j        |j                   |j	        d D             nC|
                                j        fdt          dt                    d          D             |                                }|                     |          |d<   |S )Nr   c                 .    g | ]}|d          |d         fS )r+   r.   rl   rv   s     r"   ro   z;DrawTimeCollector.wedgeDrawTimeCallback.<locals>.<listcomp>  s$    (((!A$qt(((r$   c                 6    g | ]}|         |d z            fS ru   rl   )rm   rW   r   s     r"   ro   z;DrawTimeCollector.wedgeDrawTimeCallback.<locals>.<listcomp>  s)    :::1!A$q1v:::r$   r   r.   poly)r   
isinstancer   r   ellipsecxcyrxryvpath	asPolygonpointsrO   rp   r   r   )	r   r   r   r   r   r   cr   r   s	           @r"   wedgeDrawTimeCallbackz'DrawTimeCollector.wedgeDrawTimeCallback  s    F5&&&&d7## 	;AIIdgtw888A((a(((AA  'A::::aAq(9(9:::AIIKK,,Qq11&	r$   c                     ddl }t          |dz   d          }	 |                     | j        |           |                                 dS # |                                 w xY w)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
        r   Nz.default-collector.outrV   )pprintopenr   close)r   fnrootr   r]   s       r"   savezDrawTimeCollector.save   s`     	
v..s
3
3	MM$*Q'''GGIIIIIAGGIIIIs   A
 
A N)__name__
__module____qualname____doc__r   r   r   r   staticmethodr   r   propertyr   r   r   rl   r$   r"   r   r      s           %g    . . .2 2 23 3 3 
 
 \
 ! ! \!   X       r$   r   c                 B    | \  }}|\  }}t          ||z
  ||z
            S )z"return distance between two points)r   )xxx_todo_changemexxx_todo_changeme1x0y0r   r   s         r"   xyDistr   -  s,    GR GR"R%"R%!!!r$   c                    | \  }}|\  }}|\  }}	|\  }
}||f}||z
  ||z
  f}||	f}|
|z
  ||	z
  f}t          |d         |d         z  |d         |d         z  z
            }|d         |d         z
  |d         |d         z
  f}|d         |d         z  |d         |d         z  z
  }|d         |d         z  |d         |d         z  z
  }t          |          dk     rt          |          dk     rdS d S ||z  }||z  }d|cxk    rdk    r=n d S d|cxk    rdk    r.n d S |d         ||d         z  z   |d         ||d         z  z   fS d S d S )Nr   r+   rL   	collinear)r9   abs)xxx_todo_changeme2xxx_todo_changeme3xxx_todo_changeme4xxx_todo_changeme5x00y00x01y01x10y10x11y11r   rqr   rsqpqprqpsrT   us                         r"   lineSegmentIntersectr   3  s   "IS"IS"IS"ISCACCA 	CACCA	qtAaDy1ad"	#	#B	
1ad1Q4!9	B
Q%!*RU1Q4Z
C
Q%!*RU1Q4Z
C
2wwt||s88D==tBABA!wwwwQwwwwww1a7777777777tAadF{AaD1Q4K'' w77r$   startc
                    |st                      }|dz  }t          dz  }
||
z  }t          |||          }|rdpd}|dz  }|dz  }|	dk    rd|	dk    r||d|z  z  |z  z  }nO|	d	k    r||t          |          z  |z  z  }n0|	d
k    r*||t          t	          |	||||d                    z  |z  z  }|D ]}t          |||          }t          |          |z  }t                      }|                    t          dd|||d                     |                    | t          |          |z  z   |t          |          |z  z              |
                    |||z  z
  |
z  |z
             |                    |           |||z  z  }|S )z%make a group with circular text in itih     r7   r+   r4   Z   r   middleendnumericNr   )fontNamefontSize
textAnchor)r   r   r   r9   r   addr   	translater
   r	   rotate)r1   ry   radiusangletextr   r   insideGr   pi180phir   sighsigsig90letterbetahs                      r"   makeCircularStringr  P  s   %''a	SLEsFE
+Ch11E
-R
1Cs7DFE7x3E	?6))CC3uU||#F**CC""3u]:d5(SWXXYYYZ```C  FHh77U||F"GG	fQ6HhRYZZZ[[[	Ac#hhvo%aC&7888	#d4i-&u,---	as4xHr$   c                   $    e Zd ZdZd Zd Zd ZdS )CustomDrawChangerz9
    a class to simplify making changes at draw time
    c                     d | _         d S rk   )storer   s    r"   r   zCustomDrawChanger.__init__t  s    


r$   c                 $   |rM|                      |          | _        t          | j        t                    sJ d| j        j        z              d S | j        9| j                                        D ]\  }}t          |||           d | _        d S d S )Nz5%s.changer should return a dict of changed attributes)_changerr  r   dict	__class__r   itemssetattr)r   changeobjr@   rg   s        r"   r   zCustomDrawChanger.__call__w  s     	s++DJdj..  B  B0gjnjx  kB  1B  B  B  B  B  BZ#z'')) ! !!Aa    DJJJ $#r$   c                      t          d          )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  zCustomDrawChanger._changer  s     <===r$   N)r   r   r   r   r   r   r  rl   r$   r"   r  r  p  sK             > > > > >r$   r  c                       e Zd ZddZdS )FillPairedDatar   c                 J    t                               | |           || _        d S rk   )r   r   other)r   rg   r!  s      r"   r   zFillPairedData.__init__  s!    d1


r$   Nrx   )r   r   r   r   rl   r$   r"   r  r    s(             r$   r  )r/   )rF   N)rF   r+   r   Nr   )rH   )r   Nr   ).__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)   r0   r:   rp   r;   rE   rX   rh   rr   r~   r   r   r   r   r   r  r  r   r  rl   r$   r"   <module>r(     sZ  
 ( ) ) ) ) ) ) ) ) ) ) 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2  e e e e e e e e e e e e e e e e ' ' ' ' ' ' 4 4 4 4 4 4  + + +
1 1 1$ $ $L 

s:q-% -% -% -%^   ($ $ $ $L  $     
M M M MT T T T T T T Tl" " "( ( (:   @> > > > > > > >0    T     r$   