
    mh                        d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlZdd	lmZmZmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZ de_          G d de!      Z" G d d      Z# G d dejH                        Z% G d dejH                        Z& G d d      Z'	 	 d'dZ(d Z)d Z*d Z+d  Z, G d! d"      Z- G d# d$e-      Z. G d% d&e-      Z/y)(z+Fetch and decode images in various formats.    N)md5)BytesIO)cycle)inf)Path)ElementTree)Image	ImageFileImageOps)parse_color   )DEFAULT_OPTIONS)
percentage)LOGGER)SVG)URLFetchingErrorfetchTc                        e Zd ZdZed        Zy)ImageLoadingErrorzpAn error occured when loading an image.

    The image data is probably corrupted or in an invalid format.

    c                 l    t        |      j                  }t        |      } | |r| d|       S |      S )Nz: )type__name__str)cls	exceptionnamevalues       c/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/weasyprint/images.pyfrom_exceptionz ImageLoadingError.from_exception"   s:    I''IdV2eW%99D99    N)r   
__module____qualname____doc__classmethodr    r    r   r   r      s     : :r    r   c                   F    e Zd ZdddefdZd Zd Zd	dZd Ze	d        Z
y)
RasterImageNnonec                 0   |}t        ||      }||ur|j                  |_        d x}}|| _        |i n|| _        |d   x| _        }	|d   | _        d|j                  v r|j                  d      }n|j                  dv r|j                  d      }|j                  | _        |j                  | _	        |j                  | _
        | j                  dk7  r| j                  | j                  z  nt        | _        |d   x| _        }
t        |d	i       j                  d
      }| j                  dk(  xr |d u| _        |j                  dv rgd| _        ||
s|	t#        j$                         }d|
d}| j                  | j                  |d<    |j&                  |fi | |j)                         }d }nTd| _        ||
s|j                  dk7  r:t#        j$                         }|j'                  |d|
       |j)                         }d }| j+                  ||      | _        y )Njpeg_qualitydpitransparencyRGBA)1PIRGBr   optimize_imagesappAPP14CMYK)JPEGMPOr6   formatoptimizequalityPNG)rotate_pillow_imager9   id_cache_jpeg_quality_dpiinfoconvertmodewidthheightr   ratior:   getattrgetinvert_colorsior   savegetvaluecache_image_data
image_data)selfpillow_imageimage_idrO   filenamecacheorientationoptionsoriginal_pillow_imager*   r:   app14
image_files                r   __init__zRasterImage.__init__*   s    !-*<E 4"7">">L$((J!Mbu,3N,CC\EN	\...'//7L/1'//6L %%	!''
"))37;;!3Cdjj4;;.
#*+<#==
 -ub9==gF!YY&0FU$5F/1 DK!X1IZZ\
%+B%%1)-););GI&!!!*88'002
DK!X1D1D1MZZ\
!!*UX!N'002
//
HEr    c                 T    | j                   |z  | j                  |z  | j                  fS N)rE   rF   rG   )rP   
resolution	font_sizes      r   get_intrinsic_sizezRasterImage.get_intrinsic_size^   s%    zzJ&j(@$**LLr    c                    | j                   dk  s| j                  dk  ry |dk(  }d}| j                  rd}t        ||j                  d   d   z  |z        }t        ||j                  d   d   z  |z        }	t        | j                   |z  | j                  |	z        }
|
| j                  kD  r| j                  |
z  }|j                  | ||      }|j                  |dd| d|       |j                  |       y )Nr   autor   gqq?)	rE   rF   rA   absctmmax	add_image	transformdraw_x_object)rP   streamconcrete_widthconcrete_heightimage_renderinginterpolaterG   pt_to_inwidth_inchesheight_inchesr+   
image_names               r   drawzRasterImage.drawa   s    ::?dkkQ.%/99!H~

1a0@@8KLL&**Q-2B BX MNMdjj</}1LMCTYY		C%%dK?
Aq?"2A	HZ(r    c                     |rt        |      S | j                   d| d| j                  xs d }t        | j                  ||      S )N- )LazyLocalImager>   rA   	LazyImager?   )rP   datarS   slotkeys        r   rN   zRasterImage.cache_image_datat   sF    !(++WWIQtfAdiio2%67CT[[#t44r    c                 $   |dk(  r| j                   | j                  }}nt        j                  t	        j
                  | j                  j                              }t        dt        | j                   |z              }t        dt        | j                  |z              }|j                  ||f       t	        j
                         }|j                  ||j                  | j                         |j                   |j                  }}| j                  |j                               | _        | j                   dv rd}nE| j                   dv rd}n4| j                   dk(  rd}n"t#        j$                  d	| j                          d}t'        j(                  d
d|||d|rdndd      }| j                  dk(  rJ| j*                  rt'        j,                  d      |d<   d|d<   t'        j.                  | j                  g|      S d|d<   t'        j(                  d|d      |d<   | j                   dv rd|d   d<   | j                   dv rt        j                  t	        j
                  | j                  j                              }	|	j1                  d      }
|	j3                  | j                   d d       }	| j5                  |	      }| j5                  |
      }| j                  |d      }t'        j.                  |gdd
dt'        j(                  d|d      ||dd|rdndd 	!      |d"<   nK| j5                  t        j                  t	        j
                  | j                  j                                    }t'        j.                  | j                  |d#      g|      S )$Nr   r8   )r1   r-   z
/DeviceRGB)LLAz/DeviceGrayr5   z/DeviceCMYKzUnknown image mode: %sz/XObjectz/Image   truefalse)TypeSubtypeWidthHeight
ColorSpaceBitsPerComponentInterpolater6   )r   r   r   r   r   r   r   r   Decodez
/DCTDecodeFilterz/FlateDecode   )	PredictorColumnsDecodeParms   Colors)r-   r|   Astreamalpha)rx   )	r   r   r   r   r   r   r   r   r   )extraSMaskrh   )rE   rF   r	   openrK   r   rO   rw   rd   round	thumbnailrL   r9   r:   rN   rM   rD   r   warningpydyf
DictionaryrJ   ArrayStream
getchannelrC   _get_png_data)rP   rl   	dpi_ratiorE   rF   r   rY   color_spacer   rQ   alphapng_data
alpha_datarh   s                 r   get_x_objectzRasterImage.get_x_object{   s   > JJ6E

2::doo.B.B#CDI5i!789EE$++	"9:;F0JNN9#3#3dmm  M%OOY-=-=6E"33J4G4G4IJDO99'&KYY+%'KYY& 'KNN3TYY?&K  % !%06g"
  ;;& !!"'++j"9h*E(O<< 1599(h$// 	1
 	 m 99'-.E- *99& ::bjj1E1E&FGL ++C0E'//		#2?L)),7H++E2J**:M*JF"\\6(("#$//!#$1    +$%)4v'; E'N ))

2::doo&:&:;<>H ||T228(2KLeTTr    c                    t               }| j                  |d       |j                  d       g }|j                  d      }|rt	        j
                  d|      \  }|j                  d      }|dk(  r!|j                  |j                  |             n |j                  |t        j                         |j                  dt        j                         |j                  d      }|rdj                  |      S )Nr<   )r9   r}      z!Is   IDATr    )
r   rL   seekreadstructunpackappendrK   SEEK_CURjoin)rQ   rY   r   raw_chunk_lengthchunk_length
chunk_types         r   r   zRasterImage._get_png_data   s    Y
*U3 	%??1- #MM$0@AML#+JW$
 =>bkk:OOAr{{+)q1  xx!!r    )Nsource)r   r!   r"   r   rZ   r_   rq   rN   r   staticmethodr   r%   r    r   r'   r'   )   s?    DH2FhM)&5QUf " "r    r'   c                   .     e Zd Z fdZed        Z xZS )rv   c                 H    t         |           || _        || _        |||<   y r\   )superrZ   _keyr?   )rP   rT   ry   rw   	__class__s       r   rZ   zLazyImage.__init__   s%    	c
r    c                 4    | j                   | j                     S r\   )r?   r   rP   s    r   rw   zLazyImage.data   s    {{499%%r    r   r!   r"   rZ   propertyrw   __classcell__r   s   @r   rv   rv      s     & &r    rv   c                   .     e Zd Z fdZed        Z xZS )ru   c                 0    t         |           || _        y r\   )r   rZ   	_filename)rP   rS   r   s     r   rZ   zLazyLocalImage.__init__   s    !r    c                 H    t        | j                        j                         S r\   )r   r   
read_bytesr   s    r   rw   zLazyLocalImage.data   s    DNN#..00r    r   r   s   @r   ru   ru      s    " 1 1r    ru   c                       e Zd Zd Zd Zd Zy)SVGImagec                 P    t        ||      | _        || _        || _        || _        y r\   )r   _svg	_base_url_url_fetcher_context)rP   treebase_urlurl_fetchercontexts        r   rZ   zSVGImage.__init__  s&    h'	!'r    c                     | j                   j                  |      \  }}d ||fv rD| j                   j                         }|r%|d   r |d   r|d   |d   z  }|r||z  }n|r||z  }nd }n|r|r||z  }nd}|||fS )N   r   r   )r   r_   get_viewbox)rP   image_resolutionr^   rE   rF   viewboxrG   s          r   r_   zSVGImage.get_intrinsic_size  s    		44Y?vE6?"ii++-G71:'!*
WQZ/"U]F"UNEvFNEEfe##r    c                    	 | j                   j                  |||| j                  | j                  | j                         y # t
        $ rA}t        j                  d| j                         t        j                  d|       Y d }~y d }~ww xY w)NzFailed to render SVG image %sz Error while rendering SVG image:exc_info)	r   rq   r   r   r   BaseExceptionr   errordebug)rP   rh   ri   rj   rk   r   s         r   rq   zSVGImage.draw  sm    	QIINN!!4==2  	QLL8$..ILL;iPP	Qs   >A 	B
7BBN)r   r!   r"   rZ   r_   rq   r%   r    r   r   r     s     $$Qr    r   c           	         || v r| |   S 	 t        ||      5 }d|v r|d   }n|d   j                         }|xs |d   }	ddd       d}
g }	dk(  r$	 t        j                        }t	        ||||      }
|
j	 t        j                  t                    }t        |j                         d      j                         }j                  d      }t        ||||| ||      }
|
| |<   |
S # 1 sw Y   xY w# t
        $ r}|j                  |       Y d}~d}~ww xY w# t
        $ rn}|	dk(  rt        j!                  |d	         	 t        j                        }t	        ||||      }
n"# t
        $ r t        j!                  |      w xY wY d}~d}~ww xY w# t"        t        f$ r:}t%        j&                  d
||       t%        j(                  d|       d}
Y d}~d}~ww xY w)z(Get an Image instance from an image URI.stringfile_obj	mime_typeNzimage/svg+xmlF)usedforsecuritypathr   zFailed to load image at %r: %szError while loading image:r   )r   r   r   
fromstringr   	Exceptionr   r	   r   r   r   encode	hexdigestrI   r'   r   r   r   r   r   r   )rT   r   rV   urlforced_mime_typer   rU   resultr   r   imagesvg_exceptionsr   svg_exceptionrQ   rR   r   raster_exceptionr   s                      r   get_image_from_urir   $  s    e|Sz*;$ 	@6!)
+002(?F;,?I	@ '5"--f5 sKA =W$zz'&/: szz|UCMMOzz&)# (FD%gW E#JLY	@ 	@  5%%m445  
M/+::>!;LMMM&11&9D$T3WEE  M+::;KLLM 
M$ /0 5sIF1IFs   F 'C&F #C2 3F 6D AF &C/+F 2	D;DF DF 	F"F #E$#F$FFF FF G"0GGc                 N   | j                   }|dk(  r$d| j                  v r~t        j                  |       } nh|dk7  rc|\  }}|dkD  r.t	        t
        j                  d|       }| j                  |      } |r)| j                  t
        j                  j                        } || _         | S )z{Return a copy of a Pillow image with modified orientation.

    If orientation is not changed, return the same image.

    
from-imageexifr(   r   ROTATE_)	r9   rB   r   exif_transposerH   r	   	Transpose	transposeFLIP_LEFT_RIGHT)rQ   rU   image_formatanglefliprotations         r   r=   r=   Z  s      &&Ll"\&&&#22<@L		!t19u'%0ABH'11(;L'11//1L 'Lr    c                 L   |D cg c]  }t        ||        }}|d   d|d<   |d   | |d<   |d   }t        |      D ]  \  }}|	||k  r|||<   |} d}t        |      D ]9  \  }}|	||   }||z
  ||z
  z  }t        |dz   |      D ]  }|||z  z   ||<    |}; |S c c}w )a  Give color stops positions on the gradient vector.

    ``vector_length`` is the distance between the starting point and ending
    point of the vector gradient.

    ``positions`` is a list of ``None``, or ``Dimension`` in px or %. 0 is the
    starting point, 1 the ending point.

    See https://drafts.csswg.org/css-images-3/#color-stop-syntax.

    Return processed color stops, as a list of floats in px.

    r   r   r   )r   	enumeraterange)	vector_length	positionspositionprevious_posi
previous_ibase	incrementjs	            r   process_color_stopsr  r  s    FOOHm4OIO |	!}%	" Q<L + (8,&+	!'( J + 8Z(D!DQ^<I:>1- 4#a)m3	!4J 7 Ps   B!c                     | d   | d   }}||z
  }|dk(  rdgt        |       z  } n| D cg c]
  }||z
  |z   } }||| fS c c}w )zNormalize stop positions between 0 and 1.

    Return ``(first, last, positions)``.

    first: original position of the first position.
    last: original position of the last position.
    positions: list of positions between 0 and 1.

    r   r   )len)r   firstlasttotal_lengthposs        r   normalize_stop_positionsr	    se     A,	"4E%<LqC#i.(	=FGccEk\1G	G$	!! Hs   ?c                    t        |      }|dkD  sJ |t        |       k(  sJ |d   |d   z
  }|dk(  rt        t        |            }|dz
  }| D cg c]  \  }}}}||z   }}}}}| D cg c]  \  }}}}||z   }	}}}}| D cg c]  \  }}}}||z   }
}}}}| D cg c]	  \  }}}}| }}}}}dx}x}x}}d|z  }t        |dd d      D ]K  \  }}|||dz
     z
  |z  }|dz
  |fD ].  }|||   |z  z  }||	|   |z  z  }||
|   |z  z  }|||   |z  z  }0 M |dk(  rt	        d      S t	        d||z  dz   d	||z  dz   d	||z  dz   d
| d	      S c c}}}}w c c}}}}w c c}}}}w c c}}}}w )zG
    https://drafts.csswg.org/css-images-3/#gradient-average-color
    r   r   r   r   Ntransparentzrgb(    /))r  listr   r   r   )colorsr   nb_stopsr  rgbapremul_rpremul_gpremul_br   result_rresult_gresult_bresult_atotal_weightr   r   weightr  s                        r   gradient_average_colorr     s
   
 9~Ha<<s6{"""R=9Q</Lqx)	!|(.//*!Q1A/H/(.//*!Q1A/H/(.//*!Q1A/H/!'((:1aAQ(E(011H1x1(X|#L 122 *8Yq1u--=a% 	*Af,,Hf,,Hf,,Ha6))H		** 1}=))8h&,-Qx(/BS/H.I("S()H,a9: 	:# 0//(s   E!
0E)
E1
*E9
c                   $    e Zd Zd Zd Zd Zd Zy)Gradientc                 v    |sJ t        d |D              | _        t        d |D              | _        || _        y )Nc              3   &   K   | ]	  \  }}|  y wr\   r%   ).0color_s      r   	<genexpr>z$Gradient.__init__.<locals>.<genexpr>  s     >heQE>   c              3   &   K   | ]	  \  }}|  y wr\   r%   )r%  r'  r   s      r   r(  z$Gradient.__init__.<locals>.<genexpr>  s     #LHH#Lr)  )tupler  stop_positions	repeating)rP   color_stopsr-  s      r   rZ   zGradient.__init__  s6    {>+>>##L#LL"r    c                      y)N)NNNr%   )rP   r   r^   s      r   r_   zGradient.get_intrinsic_size  s    r    c                 F   | j                  ||      \  }}}}}	|dk(  r9j                  dd||       j                  |	d          j                          y |	D 
cg c]  }
|
d   	 }}
t	        t        |      dz
        D cg c]  }||   ||dz      f }}t	        t        |	      dz
        D cg c]4  }|	|   j                  d      d d |	|dz      j                  d      d d dg6 }}t        |      D ]D  \  }}|dk(  s|dkD  r||dz
     d   ||dz
     d<   |t        |	      dz
  k  s7||   d   ||   d<   F t        |      D ]"  \  }\  }}d||fvs||fdk7  s||z  ||   d<   $ |dk(  rdnd}|d   |d	   f}| j                   }t        |	      dz
  d
z  }|dd	 }fd|D        }j                  ||||      }j                  |d||||      }j                  |       t        d |D              rzj                  dd||      }|dk(  rdnd}fd|D        }j                  ||||      }|j                  |d||||      }|j                  |       d|j                   dg|_        j!                  |j                         y c c}
w c c}w c c}w )Nsolidr   r   r   srgb)r   r   r   linearr   r   r   c              3   N   K   | ]  \  }}}j                  d |||        yw)r4  Ncreate_interpolation_function)r%  c0c1nrh   s       r   r(  z Gradient.draw.<locals>.<genexpr>  s0      ,B 00RC,s   "%r1   )dc              3   &   K   | ]	  }|d k7    yw)r   Nr%   )r%  r   s     r   r(  z Gradient.draw.<locals>.<genexpr>  s     .euz.r)  c              3   P   K   | ]  \  }}j                  d |f|fd        yw)r4  r   Nr6  )r%  r8  r9  rh   s      r   r(  z Gradient.draw.<locals>.<genexpr>  s2      -B 44VbURE1M-s   #&Grayr  z sh)layout	rectangle	set_colorfillr   r  tor   r-  create_stitching_functionadd_shadingrf   anyset_alpha_stater>   rh   paint_shading)rP   rh   ri   rj   _image_renderingscale_ytype_pointsr   r  r&  alphasr   alpha_couplescolor_couplesr   a0a1shading_typedomainextendr   boundssub_functionsfunctionshadingalpha_streamalpha_shadings    `                          r   rq   zGradient.draw  s?   48KKO5-1	6 GQ>?CVAY'KKM(./u%(// 3v;?+- AYq1u&- - 3v;?+- AY\\&!"1%va!e}'7'7'?'CQG- -
 "&) 	>HAuzq5.;AE.B1.EM!a%(+s6{Q&*7*:1*=M!$Q'	> %]3 	.KAxBR b"X%7&(2ga #	. "X-q1A,	".^^#f+/V+1R,*, 33FFM3 $$%C7#.v..!111no7L !& 11qL-+-M 777H(44ffffhHM""W"-%&}'7'7&8#<"=LWZZ(e 0--s   JJ29Jc                     t         )a]  Get layout information about the gradient.

        width, height: Gradient box. Top-left is at coordinates (0, 0).

        Returns (scale_y, type_, points, positions, colors).

        scale_y: vertical scale of the gradient. float, used for ellipses
                 radial gradients. 1 otherwise.
        type_: gradient type.
        points: coordinates of useful points, depending on type_:
            'solid': None.
            'linear': (x0, y0, x1, y1)
                      coordinates of the starting and ending points.
            'radial': (cx0, cy0, radius0, cx1, cy1, radius1)
                      coordinates of the starting end ending circles
        positions: positions of the color stops. list of floats in between 0
                   and 1 (0 at the starting point, 1 at the ending point).
        colors: list of (r, g, b, a).

        )NotImplementedError)rP   rE   rF   s      r   r?  zGradient.layout  s
    * "!r    N)r   r!   r"   rZ   r_   rq   r?  r%   r    r   r"  r"    s    # <)|"r    r"  c                       e Zd Zd Zd Zy)LinearGradientc                 P    t         j                  | ||       |\  | _        | _        y r\   )r"  rZ   direction_type	direction)rP   r.  ra  r-  s       r   rZ   zLinearGradient.__init__8  s#    $Y7.7+T^r    c                    t        | j                        dk(  rddd g | j                  d   gfS | j                  dk(  rW| j                  j	                  d      \  }}|dk(  rdnd}|dk(  rdnd}t        j                  ||      }||z  |z  }||z  |z  }	nH| j                  d	k(  sJ | j                  }
t        j                  |
      }t        j                  |
       }	t        |d
      t        |	d
      }	}t        | j                        }t        ||z        t        ||	z        z   }t        || j                        }| j                  sn|d   |d   k(  r-|j                  d|d   dz
         |j                  d|d          |d   |d   k(  r+|j!                  |d   dz          |j!                  |d          t#        |      \  }}}| j                  r5||k(  rt%        ||      }ddd g |gfS ||z
  }|dkD  sJ t'        t        |      dz
        D cg c]  }||dz      ||   z
   }}t)        dg|      }t)        |      }t)        dg|d d d         }t)        |d d d         }||k  rJt+        |      }|j!                  t+        |             |j!                  |d   |z          |||z  z  }||k  rJ|dkD  rLt+        |      }|j                  dt+        |             |j                  d|d   |z
         |||z  z  }|dkD  rL|||z  z
  dz  }||	|z  z
  dz  }|||z  z   ||	|z  z   |||z  z   ||	|z  z   f}dd|||fS c c}w )Nr   r1  r   cornerr'  leftr   topr   	   r   r3  )r  r  r`  ra  splitmathhypotsincosr   r  rb   r  r,  r-  insertr   r	  r   r   r   next)rP   rE   rF   yxfactor_xfactor_ydiagonaldxdyr   r  r   r   r  r  r&  stop_lengthr   position_steps
next_stepsnext_colorsprevious_stepsprevious_colorsstepstart_xstart_yrL  s                               r   r?  zLinearGradient.layout=  s   t{{q gtR$++a.)999 (*>>'',DAq&[raH%ZrQHzz%0H F"X-BE!H,B&&'111NNE%B((5/!B r1uR|B dkk"EBJ#frk*::'t7J7JK	~~ |y|+  IaL1$45a+}	"-  2!23fRj)!9)!DtY>> }.vyA'4eW44 ,K?"? s9~124 !a% 9Q</4N 4
 3N34J-K"A#=tt(<#=>N#F4R4L1O &J'd;/0  2!56{**	 & !)N+ao!67  IaL4$78++	 !) 2--2B..!3b5j 'BJ"6b4i29!46 (FIv55?4s   MN)r   r!   r"   rZ   r?  r%   r    r   r^  r^  7  s    8
R6r    r^  c                   *    e Zd Zd Zd Zd Zd Zd Zy)RadialGradientc                 l    t         j                  | ||       || _        || _        |\  | _        | _        y r\   )r"  rZ   centershape	size_typesize)rP   r.  r  r  r  r-  s         r   rZ   zRadialGradient.__init__  s2    $Y7
 %)!	r    c                    t        | j                        dk(  rddd g | j                  d   gfS | j                  \  }}}}t        ||      }t        ||      }|dk(  r||z
  }|dk(  r||z
  } | j                  | j                  ||||       \  }}||z  }	t        | j                        }
t        || j                        }| j                  sp|d   dkD  r2|d   |d   k(  r'|j                  dd       |
j                  d|
d          |d   |d   k(  r+|j                  |d   dz          |
j                  |
d          |d   dk  r| j                  r-|d   |d   z
  }|d|d    |z  z   z  }|D cg c]  }||z   	 }}n|d   dk  rddd g | j                  d   gfS t        |      D ]]  \  }}|dk(  r|
|d  ||d  }}
 nI|dkD  s|
|   }|
|dz
     }||dz
     }|dk  sJ t        ||||g|dd|g      }|g|
|d  }
dg||d  } n t        |      \  }}}||k(  r | j                  rt        |
|      }ddd g |gfS |||	z  ||||	z  |f}| j                  r| j                  |||	|||
      \  }}}
|	d|||
fS c c}w )	Nr   r1  r   rightbottomrg  r   radial)r  r  r  r   _handle_degenerate_resolve_sizer  r  r,  r-  rm  r   r   r   r	  _repeat)rP   rE   rF   origin_xcenter_xorigin_ycenter_ysize_xsize_yrJ  r  r   r   offsetr   r   r&  previous_colorprevious_positionintermediate_colorr  r  rL  s                          r   r?  zRadialGradient.layout  s=   t{{q gtR$++a.)999 26.(Hhh.h/wx'Hx(H 100vxBD6/ dkk"'0C0CD	~~ |aIaLIaL$@  A&a+}	"-  2!23fRj)Q<!~~ )"	! <&!	!}/M*NO?HI8X.I	I R=A%gtR$++b/1BBB#,Y#7 KAx1},212J	!"	!| &q	)/A,5a!e,<)01444-C+^UEJ.1h?.A* #5!Bvabz!B%&$712$7	!" ":)!DtY D=T^^*69=EgtR%00 h(%h($0 >>(,vw	6)C%FIv &)V;;Q Js   -I3c           
      (   |j                         }|j                         }|d   |d   z
  }	t        t        j                  ||d   z
  ||z  |d   z
        t        j                  ||d   z
  |d    |z        t        j                  |d    ||z  |d   z
        t        j                  |d    |d    |z              }
t        j                  |
|d   z
  |	z        }|dkD  rAd|z   }||z  }t        |      D cg c]  }|D ]  }||z   	  }}}g |d d |d   |	|z  z   }|d   dk(  r|||fS |d   |	z  }g |d d d|dd  }t        |      }|r3|||z  z  }t        |      D cg c]  }|D ]
  }||z
  |z     c}}|z   }||z
  }|dk(  r|||fS |d   |d   fdk(  sJ d|cxk  rdk  sJ  J |d d d   }d|z
  }t        |d      D ]  \  }}||k(  r.|| d  |z   }|| d  D cg c]
  }||z
  dz
   }}||z   }|||fc S ||k  s?||    }||dz
      }||dz
      }||||g}||||g}t        ||      }|g||dz
   d  |}||dz
   d  D cg c]
  }|dz
  |z
   }}|dz
  |z
  g||}|||fc S  y c c}}w c c}}w c c}w c c}w )	N   r   r   r   r   r   r4  )start)	copyrd   ri  rj  ceilr   intr   r   )rP   rE   rF   rJ  rL  r   r  original_colorsoriginal_positionsgradient_lengthmax_distancerepeat_afterrepeatr   r   repeat_beforefull_repeatpartial_repeatreverserG   new_positionsr&  
next_colornext_positionaverage_colorsaverage_positions
zero_colors                              r   r  zRadialGradient._repeat  s    ++-&^^- )fQi/ JJuvay(&7*:VAY*FGJJuvay(6!9*w*>?JJq	z6G#3fQi#?@JJq	zF1I:#78	:
 yy,":o!MN!%FfF&+FmO!"IO8@HOOI ONvbqzN6!9/M#MNF!9>9f,, q	O3 /6"1:.q.6!":. -(o33F49+4F4/0 24 K(*4*46?@I
 '4Q9f,,
 #1%'9"'=>&HHH>%A%%%%%$TrT*N"$WA6 	1KAx5  )!-6 %7rs$;!=  {*Q.!= != *I5	y&00% (+,q1uX6
 2QU8 <"'
J!G%-ue]$K!3"$57
$KQxy'AKFK *AE()4!63;HqL;.!6 !6 #QY4Q}QyQ	y&005	1IO&4,!="!6s   9I>)J*J
Jc           	      ,   | j                   dk(  r+| j                  \  }}t        ||      }t        ||      }||fS t        |      }t        ||z
        }t        |      }	t        ||z
        }
| j                  j	                  d      rt
        nt        }| j                  j                  d      r0| j                  dk(  r ||||	|
      }||fS  |||       ||	|
      fS | j                  dk(  r_ |t        j                  ||	      t        j                  ||
      t        j                  ||	      t        j                  ||
            }||fS  |||	f||
f||	f||
fd       \  }}|t        j                  d      z  |t        j                  d      z  fS )z+Resolve circle size of the radial gradient.explicitclosestsidecirclec                 &    t        j                  |  S r\   )ri  rj  )r  s    r   <lambda>z.RadialGradient._resolve_size.<locals>.<lambda>[  s    $**a. r    )ry   r   )r  r  r   rb   
startswithminrd   endswithr  ri  rj  sqrt)rP   rE   rF   r  r  r  r  rd  r  re  r  picksize_xycorner_xcorner_ys                  r   r  zRadialGradient._resolve_sizeA  s   >>Z'!YYNFF.F/F6>!8}EH$%(mVh&'ii**95s399f%zzX%tUC8''e$d3&777::!4::dC0$**T62J::eS14::eV3LNGG##!3K$%v(*( $))A,&499Q<(???r    c                 b    ||cxk(  rdk(  rn ndx}}||fS |dk(  rd}d}||fS |dk(  rd}d}||fS )ztHandle degenerate radial gradients.

        See https://drafts.csswg.org/css-images-3/#degenerate-radials

        r   gHz>g    cAr%   )rP   r  r  s      r   r  z!RadialGradient._handle_degenerate^  sc     V q ""FV v~ q[FF v~ q[FFv~r    N)r   r!   r"   rZ   r?  r  r  r  r%   r    r   r  r    s     )M<^P1d@:r    r  )NNr   )0r#   rK   ri  r   hashlibr   r   	itertoolsr   r   pathlibr   	xml.etreer   r   PILr	   r
   r   tinycss2.color4r   rt   r   layout.percentr   loggerr   svgr   urlsr   r   LOAD_TRUNCATED_IMAGES
ValueErrorr   r'   Objectrv   ru   r   r   r=   r  r	  r   r"  r^  r  r%   r    r   <module>r     s    1 	        !  * * '  &   ) #'	 :
 :" "D	& 	&1U\\ 1 Q  QF KO1=3l0*Z"&:D`" `"FX6X X6vZX Zr    