
    Tif                     J   d dl Z d dlZd dlmZmZ d dlmZ d dlZddl	m
Z
mZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZmZmZ dd	lmZ d
dlmZmZ d
dlmZm Z m!Z! dZ"dZ#de# dZ$ ej%        d          Z&de&j'        d<   d'dZ(dedefdZ)d(dZ*de+deej,                 fdZ-d)dedefdZ.d'dZ/d*dZ0d  Z1d! Z2d" Z3d# Z4d$e(iZ5	 d d%l6m7Z7 n'# e8$ rZ9 e
j:        e9          Z7e7e5d$<   Y dZ9[9ndZ9[9ww xY w	 d d&l;m<Z< dS # e8$ r Z9 e
j:        e9          Z<e<e5d$<   Y dZ9[9dS dZ9[9ww xY w)+    N)defaultdictdeque)deepcopy   )
exceptionsgrouping	resourcesutil)logtol)planar_matrixtransform_points)DictIterableMappingNDArrayNumber)jsonify   )
arc_centerto_threepoint)ArcBezierLinetrimeshz!https://github.com/mikedh/trimesh{}F	WRITEABLEc                 L   d}d}g }g }| t          j        |                                           }|                    d          D ]+}|                    |j        t          |          f           ,|                    d          D ]K}|                    |j                            dd          d         |j        t          |          f           L	 |j        t          dz            }n@# t          $ r Y n4w xY w||                    d|it          f           nt          d	          t          |||
          }		 |%t          |j        t          dz                      |	d<   n1# t          $ r Y n%t          $ r t!          j        dd           Y nw xY wd|	v r	 t          |j        t          dz                      }
|
                                D ] \  }}||	d         v r||	d         |         d<   !n1# t          $ r Y n%t          $ r t!          j        dd           Y nw xY w|	S )ad  
    Load an SVG file into a Path2D object.

    Parameters
    -----------
    file_obj : open file object
      Contains SVG data
    file_type: None
      Not used
    path_string : None or str
      If passed, parse a single path string and ignore `file_obj`.

    Returns
    -----------
    loaded : dict
      With kwargs for Path2D constructor
    Nz{*}path)z	{*}circlez{*}rectz{*}linez{*}polylinez
{*}polygonr      classdz#`file_obj` or `pathstring` required)pathsshapesforcemetadatazfailed metadataTexc_infogeometrymetadata_geometry)etree
fromstringreaditerappendattribelement_transformtagrsplit_nsBaseException	_IDENTITY
ValueError_svg_path_convert_decodeKeyErrorr   debugitems)file_obj	file_typepath_stringr&   treer$   r%   elementshaperesultbagnamemetas                V/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trimesh/path/exchange/svg_io.pysvg_to_pathrI      s   & EDEF00 yy++ 	G 	GGLL'.*;G*D*DEFFFF YYL
 
 	 	E MM!!#q))"-u|=Nu=U=UV   	Kg.EE 	 	 	D			 sK()45555>???U6GGGF	4!(S:5E)F!G!GF:    4 4 4	#d3333334 V	8$+c,?&?@AAC!iikk @ @
d6*---;?F:&t,Z8@  	 	 	D 	8 	8 	8I'$777777	8 MsC   C* *
C76C7='E% %
F1FFAG3 3
H!?H! H!r1   returnc                 d    	 d |                                  D             S # t          $ r i cY S w xY w)Nc                     i | ]O\  }}|d d                              t                    '|                    t                    t	          |          PS r    N)
startswith_ns_urllstripr5   r:   .0kvs      rH   
<dictcomp>z$_attrib_metadata.<locals>.<dictcomp>p   sZ     
 
 
1u((
HHSMM71::
 
 
    )r=   r6   r1   s    rH   _attrib_metadatarX   m   sV    
 

 
 
 	

    			s     //
   c                    t                      }| }t          |          D ]Y}d|j        v r6|                    t	          |j        d                   ddd                    |                                }| nZt          |          dk    rt          S t          |          dk    r|d         S t          j	        |          S )z
    Find a transformation matrix for an XML element.

    Parameters
    --------------
    e : lxml.etree.Element
      Element to search upwards from.
    max_depth : int
      Maximum depth to search for transforms.
    	transformNr!   r   r    )
r   ranger1   
extendlefttransform_to_matrices	getparentlenr7   r
   	multi_dot)rB   	max_depthmatricescurrent_s        rH   r2   r2   y   s     wwHG9  '.(( 5gn[6Q R RSWSWUWSW XYYY##%%?E 
8}}	X!		{ ~h'''rV   r[   c                 `   d |                                                      d          D             }g }|D ]}t          |          dk    rt          |          dk    rt          d          |\  }}t	          j        d |                    dd                                          D                       }|d	k    r<|                    t          	                                           ||d
         dddf<   |dk    rE|                    t	          j
        |                    d          j        g df                     |dk    r`t	          j        |d                   }t          |          dk    r|dd         }nd}|                    t          ||                     u|dk    rFt          	                                }	|	ddddfxx         |z  cc<   |                    |	           t          j        d|            t	          j        |t          j                  S )a  
    Convert an SVG transform string to an array of matrices.

    i.e. "rotate(-10 50 100)
          translate(-36 45.5)
          skewX(40)
          scale(1 0.5)"

    Parameters
    -----------
    transform : str
      Contains transformation information in SVG form

    Returns
    -----------
    matrices : (n, 3, 3) float
      Multiple transformation matrices from input transform string
    c                     g | ]F}t          |          d k    d |                                                    d          D             GS )r   c                 \    g | ])}t          |          d k    |                                *S r   )r`   strip)rR   js     rH   
<listcomp>z4transform_to_matrices.<locals>.<listcomp>.<listcomp>   s+    ???qCFFQJJJJJrV   ()r`   rj   splitrR   is     rH   rl   z)transform_to_matrices.<locals>.<listcomp>   sR       q66A:: 	@?AGGIIOOC00???::rV   )r   r   z"should always have two components!c                 ,    g | ]}t          |          S  )floatro   s     rH   rl   z)transform_to_matrices.<locals>.<listcomp>   s    LLL588LLLrV   , 	translater!   Nmatrix)r   r   )r   r   r    rotater   r    )thetapointscalezunknown SVG transform: dtype)lowerrn   r`   r8   nparrayreplacer0   r7   copyvstackreshapeTdegreesr   r   r<   float64)
r[   
componentsrc   linekeyargsvaluesangler{   mats
             rH   r^   r^      s(   * ""((--  J H "7 "7t99>>YY!^^ABBB	T LLT\\#s-C-C-I-I-K-KLLLMM+OOINN,,---"(HRL!QH__
 OOBIv~~f'='='?&KLLMMMMH__Jvay))E6{{aqrr
OOMUCCCDDDDG^^..""CBQBKKK6!KKKOOC    I55566668HBJ////rV   r$   r%   c           
      6  &'()* d &'*fd}&'*fd}&'*fd}&'*fd} G d d          }||||d}t          t                    (t          t                    }	t          d	           '| D ]s\  }
}|
                    d
d          }t          |          dk    rt	          j        d           Dt          |
                    t          dz                       *t          j	        t          t          |                              }t          |          dk    rdddd)t          j	        )fd|D             t                    }t          j        |dd          }t          j        rHt!          j        t          j        |          t          j        t          |                              sJ g }|D ]i}||         }t)          ||d                            j        }|dv r|                     ||                     Nt          |          dk    r|dk    rt          j	        d |D             t          j                  }d}t          j        |ddddf         d                                          dk     rF|ddddf         |ddddf         }}t!          j        |t          j        |dd                    }|r*d|d         _        |                    |d                    =|                    |           T|                    |           kt;          |
          }|D ]}t)          |          j        }||v r ||         |          \  }}|j                            |           (*                             |           |	*                             tA          ||                     '*xx         t          |          z  cc<   u|D ]*\  }}
}t          |
                    t          dz                       *|dk    rytC          tE          |
d                    tE          |
d!                   gtE          |
d"                             }tG          t          j        d#          '*         z   d$          }n|d%k    rt          j	        |
d&         |
d'         gt          j                  } t          j	        |
d(         |
d)         gt          j                  \  }!}"t          j	        | | |!dfz   | |!|"fz   | d|"fz   | gt          j                  }tI          t          j        t          |                    '*         z   *          }nF|d+k    rt          j%        |
d,         &                                '                    d-d.          d.t          j        /          (                    d0          }tI          t          j        t          |                    '*         z   *          }n|d1k    rt          j%        |
d,         &                                '                    d-d.          d.t          j        /          (                    d0          }|d         |d2         k    )                                r+t          j        t          |                    '*         z   }#n8t          j        t          |          dz             '*         z   }#|#d         |#d2<   tI          |#*          }n|d3k    rt          j	        |
d4         |
d5         |
d6         |
d7         gt          j                  (                    d8          }tI          t          j        t          |                    '*         z   *          }nt	          j        d9| d:           ɉ(*                             |           |	*                             tA          ||                     '*xx         t          |          z  cc<   ,t          |	          dk    rg g d;S (fd<|	*                                D             }$t          |$          dk    s|d=k    rd>|$i}%n.tW          tY          |$-                                                    }%|%S )?a  
    Convert an SVG path string into a Path2D object

    Parameters
    -------------
    paths: list of tuples
      Containing (path string, (3, 3) matrix, metadata)

    Returns
    -------------
    drawing : dict
      Kwargs for Path2D constructor
    c                 V    t          j        d | D             t           j                  S )Nc                 *    g | ]}|j         |j        gS rs   realimagro   s     rH   rl   z?_svg_path_convert.<locals>.complex_to_float.<locals>.<listcomp>   s!    :::a!&!&):::rV   r}   )r   r   r   )r   s    rH   complex_to_floatz+_svg_path_convert.<locals>.complex_to_float   s(    x::6:::"*MMMMrV   c                              }|t          | j                  z   }t          t          j        ||                    | j        fS )Npoints)r`   r   r   r   arange)multistartendcountsrF   s      rH   
load_multiz%_svg_path_convert.<locals>.load_multi   sF     tc%,'''BIeS11222ELAArV   c                      | j         |                     d          | j        g          }t          t	          j        d                   z   t          | dd                    }||fS )Ng      ?r   closedFr   r   )r   r{   r   r   r   r   getattr)svg_arcr   arcr   r   rF   s      rH   load_arcz#_svg_path_convert.<locals>.load_arc   so    !!7='--2D2Dgk"RSS9Q<<&,. 7He44	
 
 
 F{rV   c                      | j         | j        | j        g          }t          t	          j        d                   z             |fS )Nr   r   )r   controlr   r   r   r   )svg_quadraticr   r   r   rF   s     rH   load_quadraticz)_svg_path_convert.<locals>.load_quadratic  sQ    !! -"79JK
 
 RYq\\F4L89996AArV   c                      | j         | j        | j        | j        g          }t	          t          j        d                   z             |fS )N   )r   control1control2r   r   r   r   )	svg_cubicr   r   r   rF   s     rH   
load_cubicz%_svg_path_convert.<locals>.load_cubic
  sQ    !!_i0)2DimT
 
 billVD\122F::rV   c                       e Zd Zd ZdS )$_svg_path_convert.<locals>.MultiLinec                 
   t           j        rt          d |D                       sJ d |D             }|                    |d         j                   t          j        d |D             t
          j                  | _        d S )Nc              3   B   K   | ]}t          |          j        d v V  dS )r   CloseN)type__name__rR   Ls     rH   	<genexpr>z@_svg_path_convert.<locals>.MultiLine.__init__.<locals>.<genexpr>  s1      PPQ477+/@@PPPPPPrV   c                     g | ]	}|j         
S rs   )r   r   s     rH   rl   zA_svg_path_convert.<locals>.MultiLine.__init__.<locals>.<listcomp>  s    ---!ag---rV   r!   c                 *    g | ]}|j         |j        gS rs   r   ro   s     rH   rl   zA_svg_path_convert.<locals>.MultiLine.__init__.<locals>.<listcomp>  s!    #E#E#EQVQV$4#E#E#ErV   r}   )	r   strictallr0   r   r   r   r   r   )selflinesr   s      rH   __init__z-_svg_path_convert.<locals>.MultiLine.__init__  s    z QPP%PPPPPPPP--u---FMM%)-((((#E#Ef#E#E#ERZXXXDKKKrV   N)r   
__module____qualname__r   rs   rV   rH   	MultiLiner     s(        		Y 		Y 		Y 		Y 		YrV   r   )r   r   CubicBezierQuadraticBezierc                      dS )Nr   rs   rs   rV   rH   <lambda>z#_svg_path_convert.<locals>.<lambda>(  s     rV   r#    r   zempty path string!rF   r    r   )r   r   r   c                 `    g | ]*}                     t          |          j        d           +S ri   )getr   r   )rR   rp   kinds_lookups     rH   rl   z%_svg_path_convert.<locals>.<listcomp>>  s2    MMMA,**477+;Q??MMMrV   r}   F)min_lenonly_nonzeror   r   c                     g | ]b}|j         j        |j         j        |j        j        |j        j        |j        j        |j        j        |j        j        |j        j        |j        g	cS rs   )r   r   r   r   centerradiusrotation)rR   as     rH   rl   z%_svg_path_convert.<locals>.<listcomp>U  si         GLGLEJEJHMHMHMHMJ
  rV   Nr   )axisgMbP?TrW   circlecxcyrr   r   rectxywidthheightr   polyliner   ru   rv   )sepr~   )r!   r   polygonr!   r   x1y1x2y2)r   r   zunsupported SVG shape: ``verticesentitiesc                 R    i | ]#\  }}|t          j        |          |         d $S )r   )r   r   )rR   rF   rT   r   s      rH   rU   z%_svg_path_convert.<locals>.<dictcomp>  sC       D! 	29Q<<Xd^DD  rV   Scener*   ).r   listr   r`   r   r<   r:   r5   r   r   
parse_pathintr   blocksr   r   r
   allclosehstackr   r   r   r0   r   ptpmeanrollr   extendrX   r'   updater   r   rt   r   r   r-   rj   r   r   r   r=   nextr/   r   )+r$   r%   r&   r   r   r   r   r   loadersr   r1   rx   r@   rawkindsr   parsedbchunkrd   vertsr   r   r   entity_meta
svg_entity	type_nameerT   kindr   entityoriginwhindexgeomskwargsr   r   r   r   rF   s+                                         @@@@@rH   r9   r9      s	   N N NB B B B B B
 
 
 
 
 
 
B B B B B B B; ; ; ; ; ; ;Y Y Y Y Y Y Y Y !)	 G 4  H4  H##F ^' ^'jjb)){q  I*+++ vzz#,//00htJ{334455 s88q== !"Aa88MMMMMMMUXYYY FFF: 	I=6!2!2BIc#hh4G4GHHHHH  .	% .	%AFE3qt9oo.G+++ii..////Q!5 0 0   "'   *  $ 6%122,Q///4466==!&qqq"1"uuQQQ!V}3E "]5"'#qq2I2I2IJJF )&*E!HOMM%(++++ MM%(((( e$$$$&f555 ! 	' 	'JZ((1IG##)wy)*551
!!+...%%a(((%%&6q&&A&ABBBtA&	' !' 5$ 5$ffvzz#,//008"vd|$$eF4L&9&9:E&+<N<N F 	!vd| ;DIIIFFV^^Xvc{F3K8
KKKF8VG_fX.>?rzRRRDAqX1a&&Aq6/6QF?FSj  F 3v;;!7!7&,!FGGGFFZ]x &&((00c::2:  gg  3v;;!7!7&,!FGGGFFY]x &&((00c::2:  gg  q	VBZ',,.. %	#f++..=	#f++/22VD\A!!Hb	'''FFV^^Xvd|VD\6$<HPRPZ  gfoo  3v;;!7!7&,!FGGGFFI8888999f%%%.vv>>???tF#
8}}B///   ~~''  E 5zzA~~'))e$ d5<<>>**++MrV   c                 @   |d}|                                 dt          |           d}d                    d|          d                    d|          d                    d|          d	                    d|          d
t          dt          dt          fdfd}fd}g }| D ]g}	|
|	j        |vr|	j        j        dk    r ||	          }
n ||	          }
t          |	j	                  }|||d<   |
                    ||
f           h|S )a  
    Convert the entities of a path to path strings.

    Parameters
    ------------
    entities : (n,) list
      Entity objects
    vertices : (m, 2) float
      Vertices entities reference
    name : any
      Trimesh namespace name to assign to entity
    digits : int
      Number of digits to format exports into
    only_layers : set
      Only export these layers if passed
    N   z0.fzKM {x:DI},{y:DI}a{r:DI},{r:DI},0,1,0,{d:DI},0a{r:DI},{r:DI},0,1,0,-{d:DI},0ZDIzM{:DI},{:DI}zL{:DI},{:DI}z6M{SX:DI} {SY:DI}A{R},{R} 0 {L:d},{S:d} {EX:DI},{EY:DI}r   r   rJ   c                 H    | d         |d         z  | d         |d         z  z
  S )zD
        Numpy 2.0 depreciated cross products of 2D arrays.
        r   r    rs   )r   r   s     rH   	_cross_2dz#_entities_to_str.<locals>._cross_2d  s'     tad{QqTAaD[((rV   c           	         | j                  }t          |dd          }|j        |j        |j        }}}| j        r+                    |d         |z
  |d         |d|z            S |\  }}}t          |t          j	        k              }	t           ||z
  ||z
            dk              }
                    |d         |d         |	|
|d         |d         |	          S )
z
        arc string: (rx ry x-axis-rotation large-arc-flag sweep-flag x y)+
        large-arc-flag: greater than 180 degrees
        sweep flag: direction (cw/ccw)
        FT)return_normalreturn_angler   r    g       @)r   r   r   r#   g        )SXSYr   SEXEYR)
r   r   r   r   spanr   formatr   r   pi)r   r   infoCr  r   vertex_start
vertex_mid
vertex_end
large_flag
sweep_flagr  r   temp_arctemp_circles              rH   r   z!_entities_to_str.<locals>.svg_arc  s     #*%(%dKKKk4;	e1: 	J%%!qAaDAq%III/7,j*''
Ij</l1JKKcQ
 

 AA!}!}  
 
 	
rV   c                     |                                }t          |          dk    rdS  t          |          dz
  z  z   j        |                    d           S )za
        Use an entities discrete representation to export a
        curve as a polyline
        r   r   r    r!   )discreter`   r  r   )r  r'  r   	temp_line	temp_moves     rH   svg_discretez&_entities_to_str.<locals>.svg_discrete  sd    
 ??6**x==A2E	Y#h--!*;<=Eb!!
 	
rV   r   rF   )r   r   r   r   r   layer	__class__r   r   r'   r0   )r   r   rF   digitsonly_layerstemp_digitsr   r*  pairsr  r@   rG   r  r   r$  r%  r(  r)  s               @@@@@@rH   _entities_to_strr1    s   " ~]]__F &s6{{%%%K 	[gdK    &&t[99I&&t[99IGOOk H)W ) )V ) ) ) )
 
 
 
 
 
 
 
6
 
 
 
 
 
 
 E * *"v|;'F'F$--!'&//KK ',v..K((DLdK())))LrV   c           
         dt          |           j        i}t          j        | d          rg }i }| j                                        D ]V\  }}	t          j        |	d          s|	j        ||<   |                    t          |	j	        |	j
        |||                     Wt          |          dk    rt          |          |d<   nBt          j        | d          rt          | j	        | j
        ||          }nt          d          |rd	                    d
 |D                       S t          j        d          }
g }|D ].\  }}|                    d| dt%          |           d           /d|v rt'          |d                   }n| j                                        dz  }	 t          | j                  |d<   n&# t,          $ r t/          j        dd           Y nw xY wd                    |          | j        d         d         | j        d         d         | j        d         | j        d         |t%          |          d} |
j        di |S )a  
    Export a Path2D object into an SVG file.

    Parameters
    -----------
    drawing : Path2D
     Source geometry
    return_path : bool
      If True return only path string not wrapped in XML
    only_layers : None or set
      If passed only export the specified layers
    digits : None or int
      Number of digits for floating point values

    Returns
    -----------
    as_svg : str
      XML formatted SVG, or path string
    r"   r   Path2D)r   r   rF   r-  r.  r   r+   )r   r   r-  r.  z'drawing must be Scene or Path2D object!rv   c              3   &   K   | ]}|d          V  dS rM   rs   )rR   rT   s     rH   r   zexport_svg.<locals>.<genexpr>s  s&      ,,!,,,,,,rV   ztemplates/base.svgz	<path d="z" z/>stroke_widthg      @r'   zfailed to encodeTr(   
r    )elementsmin_xmin_yr   r   r5  attribsrs   )r   r   r
   is_instance_namedr*   r=   r'   r   r1  r   r   r`   _encoder8   joinr	   
get_stringr0   _format_attribrt   extentsmaxr6   r   r<   boundsr  )drawingreturn_pathr.  r-  r
  r:  r0  	geom_metarF   geomtemplate_svgr7  rG   r@   r5  subss                   rH   
export_svgrI  :  s   * W./Ggw// D	!*0022 	 	JD$)$99 "mIdOLL !]!]! +      y>>A ,39+=+=G'(			2	2 	D %%#	
 
 
 BCCC  -xx,,e,,,,,, '(<==LH" M MkKKKK>$3G3GKKKLLLL VN344 **,,u45%g&677
 5 5 5	$t4444445
 IIh''"1%"1%#/!$$!'** D <&&&&&s   'F? ? G"!G"c                     d |                                  D             }d                    d |                                 D                       S )z
    Format attribs into the trimesh namespace.

    Parameters
    -----------
    attrib : dict
      Bag of keys and values.
    c                 4    i | ]\  }}|t          |          S rs   )r<  rQ   s      rH   rU   z"_format_attrib.<locals>.<dictcomp>  s$    
4
4
4TQ1gajj
4
4
4rV   r6  c              3      K   | ]?\  }}t          |          d k    |t          |          d k    -t           d| d| dV  @dS )r   N:z="")r`   _ns_namerQ   s      rH   r   z!_format_attrib.<locals>.<genexpr>  si        Aqq66A::!-CFFQJJ a1,6JJJ rV   )r=   r=  )r1   rE   s     rH   r?  r?    sY     5
4V\\^^
4
4
4C99  IIKK     rV   c                 `   t          | t                    rd| vr| S t          j        t	          d |                                 D             d                              d                    }dt          j        |          z   }t          j
        rt          | t          |                     |S )z
    Wangle things into a string.

    Parameters
    -----------
    stuff : dict, str
      Thing to pack

    Returns
    ------------
    encoded : str
      Packaged into url-safe b64 string
    rN  c                 D    i | ]\  }}|                     d           ||S )re   )rN   rQ   s      rH   rU   z_encode.<locals>.<dictcomp>  s/    EEEda1<<3D3DEQEEErV   )ru   rM  )
separatorsutf-8base64,)
isinstancestrbase64urlsafe_b64encoder   r=   encoder
   decode_textr   r   
_deep_samer:   )stuffpackrD   s      rH   r<  r<    s     % #U"2"2#EEekkmmEEE!	
 	
 	
 &//	 D )$///F
z +5'&//***MrV   c                    t          | t          j                  r$t          |t          t          j        f          sJ nLt          | t                    rt          |t                    sJ nt          | t          |                    sJ t          | t          t          f          r
| |k    sJ dS t          | t          t          t          j        f          rt          j	        | |          sJ dS t          | t                    rJt          |           t          |          k    sJ t          | |          D ]\  }}t          ||           dS t          | t                    sJ t          |                                           t          |                                          k    sJ |                                 D ]}t          | |         ||                    dS )aR  
    Do a recursive comparison of two items to check
    our encoding scheme in unit tests.

    Parameters
    -----------
    original : str, bytes, list, dict
      Original item
    other : str, bytes, list, dict
      Item that should be identical

    Raises
    ------------
    AssertionError
      If items are not the same.
    N)rU  r   ndarrayr   rV  r   bytesrt   r   r   r`   zipr[  dictsetkeys)originalotherr   r   rS   s        rH   r[  r[    s   & (BJ'' 1%$
!3444444	Hc	"	" 1%%%%%%% (DKK00000(S%L)) 5    	Huc2:6	7	7  {8U+++++	Hd	#	# 8}}E

****%(( 	 	DAqq! h%%%%% x}}3uzz||#4#44444]]__ * *8A;a))))* *rV   c                    | dS t          j        |           }|                    d          rTt          j        t          j        |dd                             d                                        d                    S |S )z
    Decode a base64 bag of stuff.

    Parameters
    ------------
    bag : str
      Starts with `base64,`

    Returns
    -------------
    loaded : dict
      Loaded bag of stuff
    NrT     rS  )	r
   rZ  rN   jsonloadsrW  urlsafe_b64decoderY  decode)rE   texts     rH   r:   r:     s}     {C  Dy!! 
z$T!""X__W%=%=>>EEgNN
 
 	
 KrV   svg)r   )r,   )NNN)rY   )N)FNN)=rW  ri  collectionsr   r   r   r   numpyr   r   r   r   r	   r
   	constantsr   r   transformationsr   r   typedr   r   r   r   r   r   r   r   r   r   r   r   r   rO  rO   r5   eyer7   flagsrI   rX   r2   rV  r   r^   r9   r1  rI  r?  r<  r[  r:   _svg_loaderssvg.pathr   r6   EExceptionWrapperlxmlr,   rs   rV   rH   <module>r{     sF     * * * * * * * *           5 5 5 5 5 5 5 5 5 5 5 5 ! ! ! ! ! ! ! ! > > > > > > > > = = = = = = = = = = = = = =       + + + + + + + + ( ( ( ( ( ( ( ( ( ( 
-7BF1II	$	 Q Q Q Qh	W 	 	 	 	 	( ( ( (@@0S @0WRZ-@ @0 @0 @0 @0Fs sX sx s s s sle e e ePY' Y' Y' Y'x  "  <3* 3* 3*l  0 {#%####### % % % -,Q//J$L	%        (J'**EL	 s0   C C1C,,C15C= =D"DD"