
    h0m                       S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S SKJr  S S	KJr  S SKrS S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  \" S\S9r\(       a7  S SKJr  S SK J!r!  S SK"J#r#  S SK$J%r%  S SKJ&r&  S SK'J(r(  S SK'J)r)  S SK'J*r*  \" S\#S9r+\RX                  \RZ                  \R\                  1r/Sr0\Rb                  " \0\Rd                  5      r3Sr4\Rb                  " \4\Rd                  5      r5S r6\Rb                  " \6\Rd                  5      r7S!r8\Rb                  " \8\Rd                  5      r9      S9S# jr:          S:S$ jr;          S;S% jr<            S<S& jr=\R|                  " S'S(9S=S) j5       r?        S>S* jr@        S?S+ jrA        S@S, jrBSAS- jrC\R|                  " S'S(9SBS. j5       rD            SCS/ jrE    SDS0 jrFSES1 jrG        SFS2 jrHSGS3 jrI          SHS4 jrJ            SIS5 jrKSJS6 jrL " S7 S8\S"\4   5      rMg)K    )annotationsN)suppress)TYPE_CHECKING)Any)Callable)Sequence)Sized)TypeVar)EagerSeriesNamespace)_DelayedCategories)ColumnNotFoundError)DuplicateError)
ShapeError)Implementation)Version)import_dtypes_module)isinstance_or_issubclassT)bound)DtypePandasLikeDataFrame)PandasLikeExprPandasLikeSeries)DType)DTypeBackend)TimeUnit)_1DArrayExprTa  ^
    datetime64\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
        (?:,                                      # Begin non-capturing group for optional timezone
            \s*                                   # Optional whitespace after comma
            (?P<time_zone>                        # Start named group for timezone
                [a-zA-Z\/]+                       # Match timezone name, e.g., UTC, America/New_York
                (?:[+-]\d{2}:\d{2})?              # Optional offset in format +HH:MM or -HH:MM
                |                                 # OR
                pytz\.FixedOffset\(\d+\)          # Match pytz.FixedOffset with integer offset in parentheses
            )                                     # End time_zone group
        )?                                        # End optional timezone group
    \]                                            # Closing bracket for datetime64
$a  ^
    timestamp\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
        (?:,                                      # Begin non-capturing group for optional timezone
            \s?tz=                                # Match "tz=" prefix
            (?P<time_zone>                        # Start named group for timezone
                [a-zA-Z\/]*                       # Match timezone name (e.g., UTC, America/New_York)
                (?:                               # Begin optional non-capturing group for offset
                    [+-]\d{2}:\d{2}               # Match offset in format +HH:MM or -HH:MM
                )?                                # End optional offset group
            )                                     # End time_zone group
        )?                                        # End optional timezone group
    \]                                            # Closing bracket for timestamp
    \[pyarrow\]                                   # Literal string "[pyarrow]"
$z^
    timedelta64\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
    \]                                            # Closing bracket for timedelta64
$a  ^
    duration\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
    \]                                            # Closing bracket for duration
    \[pyarrow\]                                   # Literal string "[pyarrow]"
$r   c                   SSK Jn  SSKJn  U R                  R
                  n[        X5      (       a  [        $ U R                  (       aF  [        X5      (       a6  UR                  (       d%  U R                  R                  S   UR                  4$ [        X5      (       a  UR                  (       a%  U R                  UR                  R                  S   4$ UR                  R
                  ULa6  U R                  [        UR                  UUR                  UR                  S94$ U R                  UR                  4$ [        U[        5      (       a  Sn[        U5      eU R                  U4$ )zValidate RHS of binary operation.

If the comparison isn't supported, return `NotImplemented` so that the
"right-hand-side" operation (e.g. `__radd__`) can be tried.
r   r   r   implementationbackend_versionz$Expected Series or scalar, got list.)narwhals._pandas_like.dataframer   narwhals._pandas_like.seriesr   nativeindex
isinstanceNotImplemented
_broadcastiloc	set_index_implementation_backend_versionlist	TypeError)lhsrhsr   r   	lhs_indexmsgs         M/var/www/html/env/lib/python3.13/site-packages/narwhals/_pandas_like/utils.pyalign_and_extract_nativer7   ]   s    D=

  I#++
~~*S;;CNNzzq!3::--#((>>JJ

 233::9,

JJ#&#6#6$'$8$8	  

CJJ''#t4n::s?    c                  [        XR                  5       R                  5      (       a/  [        U5      =n[        U 5      =n:w  a  SU SU 3n[	        U5      eU[
        R                  L a  U R                  SS9n Xl        U $ U[
        R                  L a  US:  a  SS0nO0 nU[
        R                  L a  SUs=::  a  S:  a	  O  OSUS	'   O U R                  " U4S
S0UD6$ )zuWrapper around pandas' set_axis to set object index.

We can set `copy` / `inplace` based on implementation/version.
zExpected object of length z, got length: Fdeep   inplacer=         copyaxisr   )r)   to_native_namespaceIndexlenr   r   CUDFrC   r(   PANDASset_axis)objr(   r#   r$   expected_len
actual_lenr5   kwargss           r6   r-   r-      s     %;;=CCDDE
"C
 *J" +<.zlSo,,,hhEh"	
...$U#.../(D(v<<0A000r8   c                  U[         R                  L a  U R                  SS9n Xl        U $ U[         R                  L a  US:  a  SS0nO0 nU[         R                  L a  SUs=::  a  S:  a	  O  OSUS'   O U R
                  " U4SS	0UD6$ )
zwWrapper around pandas' set_axis to set object columns.

We can set `copy` / `inplace` based on implementation/version.
Fr:   r<   r>   r?   rA   rC   rD   r=   )r   rH   rC   columnsrI   rJ   )rK   rP   r#   r$   rN   s        r6   set_columnsrQ      s     ,,,hhEh"
...$U#.../(D(v<<2a2622r8   c                   U[         R                  L a  US:  a  U R                  " U0 UD6$ U R                  " U0 UDSS0D6$ )zXWrapper around pandas' rename so that we can set `copy` based on implementation/version.rA   rC   F)r   rI   rename)rK   r#   r$   argsrN   s        r6   rS   rS      sG     ...4zz4*6**::t2v2E22r8      )maxsizec                  ^  [        T 5      n[        U5      nUS;   a  UR                  5       $ US;   a  UR                  5       $ US;   a  UR	                  5       $ US;   a  UR                  5       $ US;   a  UR                  5       $ US;   a  UR                  5       $ US;   a  UR                  5       $ US;   a  UR                  5       $ US	;   a  UR                  5       $ US
;   a  UR                  5       $ US;   a  UR                  5       $ US;   a  UR                  5       $ UR                  S5      (       a  UR                  5       $ US:X  a  [!        T UU 4S j5      $ ["        R%                  U5      =n(       d  [&        R%                  U5      =n(       a3  UR)                  S5      nUR)                  S5      nUR+                  XV5      $ [,        R%                  U5      =n(       d  [.        R%                  U5      =n(       a"  UR)                  S5      nUR1                  U5      $ US:X  a  UR3                  5       $ UR                  S5      (       a&  UR5                  S5      (       a  UR7                  5       $ UR                  S5      (       a&  UR5                  S5      (       a  UR9                  5       $ UR                  S5      (       a&  UR5                  S5      (       a  UR;                  5       $ UR=                  5       $ )N>   Int64int64Int64[pyarrow]int64[pyarrow]>   Int32int32Int32[pyarrow]int32[pyarrow]>   Int16int16Int16[pyarrow]int16[pyarrow]>   Int8int8Int8[pyarrow]int8[pyarrow]>   UInt64uint64UInt64[pyarrow]uint64[pyarrow]>   UInt32uint32UInt32[pyarrow]uint32[pyarrow]>   UInt16uint16UInt16[pyarrow]uint16[pyarrow]>   UInt8uint8UInt8[pyarrow]uint8[pyarrow]>   Float64float64double[pyarrow]Float64[pyarrow]float64[pyarrow]>   Float32float32float[pyarrow]Float32[pyarrow]float32[pyarrow]>   stringstring[python]string[pyarrow]large_string[pyarrow]>   boolbooleanbool[pyarrow]boolean[pyarrow]zdictionary<categoryc                 .   > [        T R                  5      $ N)tuple
categoriesnative_dtypes   r6   <lambda>5non_object_native_to_narwhals_dtype.<locals>.<lambda>  s    51H1H+Ir8   	time_unit	time_zonezdate32[day][pyarrow]decimalz	[pyarrow]timebinary)strr   rX   r\   r`   rd   rh   rl   rp   rt   rx   r}   StringBoolean
startswithCategorical$native_categorical_to_narwhals_dtypePATTERN_PD_DATETIMEmatchPATTERN_PA_DATETIMEgroupDatetimePATTERN_PD_DURATIONPATTERN_PA_DURATIONDurationDateendswithDecimalTimeBinaryUnknown)r   versiondtypedtypesmatch_dt_time_unitdt_time_zonedu_time_units   `       r6   #non_object_native_to_narwhals_dtyper      s   E!'*FFF||~FF||~FF||~BB{{}JJ}}JJ}}JJ}}FF||~   ~~   ~~XX}}HH~~&&!!##
3'#I
 	
 &++E222%++E222!'k!:#)<<#<|::%++E222%++E222!'k!:|,,&&{{}	""u~~k'B'B~~ENN;$?$?{{}!!enn[&A&A}}>>r8   c                   [        U5      nU[        R                  L a  UR                  5       $ [        R
                  R                  R                  U R                  S5      SS9nUS:X  a  UR                  5       $ US:X  a#  U[        R                  La  UR                  5       $ US:X  a  UR                  5       $ UR                  5       $ )Nd   T)skipnar   empty)r   r   rH   r   pdapitypesinfer_dtypeheadr   V1Object)seriesr   r#   r   inferred_dtypes        r6   object_native_to_narwhals_dtyper     s     "'*F,,, }} VV\\--fkk#.>t-LN!}} WGJJ%>}}	7	"}}==?r8   c                    [        U5      nU[        R                  L a  UR                  5       $ U R                  (       a  UR                  [        U5      5      $ UR                  5       $ r   )r   r   r   r   orderedEnumr   )r   r   get_categoriesr   s       r6   r   r   1  sV    
 "'*F'**!!##{{-n=>>r8   c                  ^  [        T 5      nUR                  S5      (       aA  SSKJn  [	        T S5      (       a  U" T R                  5       U5      $ U" T R                  U5      $ US:X  a&  UR                  5       (       a  [        T UU 4S j5      $ US:w  a  [        T U5      $ U[        R                  L a  [        U5      nUR                  5       $ Sn[        U5      e)	N)
large_listr0   structfixed_size_listr   )native_to_narwhals_dtypeto_arrowr   c                 J   > [        T R                  R                  5       5      $ r   )r   r   	to_pandasr   s   r6   r   *native_to_narwhals_dtype.<locals>.<lambda>Q  s    51H1H1R1R1T+Ur8   objectz;Unreachable code, object dtype should be handled separately)r   r   narwhals._arrow.utilsr   hasattrr   pyarrow_dtypeis_cudfr   r   r   DASKr   r   AssertionError)r   r   r#   	str_dtypearrow_native_to_narwhals_dtyper   r5   s   `      r6   r   r   >  s    
 L!IOPP	
 <,,1,2G2G2I7SS-l.H.H'RRJ>#9#9#;#;3'#U
 	
 H2<II	>..	. &g.}}E  
r8   c                   U[         R                  L a  g[        [        S5      (       a   [	        U [        R
                  5      (       a  g[        [        5         [        5       n[	        U [        R                  R                  R                  5      (       a  [        U SU5      c
   SSS5        gSSS5        g! , (       d  f       g= f)zbGet dtype backend for pandas type.

Matches pandas' `dtype_backend` argument in `convert_dtypes`.
N
ArrowDtypepyarrowbasenumpy_nullable)r   rH   r   r   r)   r   r   AttributeErrorr   r   
extensionsExtensionDtypegetattr)r   r#   sentinels      r6   get_dtype_backendr   `  s    
 ,,,r<  Zr}}%E%E	.	!8ubff//>>??vx08# 
"	!	!  
"	! s   AB88
Cc                    [        X5      S:H  $ )Nr   )r   )r   r#   s     r6   is_pyarrow_dtype_backendr   s  s    U3y@@r8   c                	   Ub  US;  a  SU S3n[        U5      e[        U5      n[        XR                  5      (       a  Sn[	        U5      e[        XR
                  5      (       a  US:X  a  gUS:X  a  gg	[        XR                  5      (       a  US:X  a  g
US:X  a  gg[        XR                  5      (       a  US:X  a  gUS:X  a  gg[        XR                  5      (       a  US:X  a  gUS:X  a  gg[        XR                  5      (       a  US:X  a  gUS:X  a  gg[        XR                  5      (       a  US:X  a  gUS:X  a  gg[        XR                  5      (       a  US:X  a  gUS:X  a  gg[        XR                  5      (       a  US:X  a  gUS:X  a  gg[        XR                  5      (       a  US:X  a  gUS:X  a  g g![        XR                  5      (       a  US:X  a  g"US:X  a  g#g$[        XR                  5      (       a  US:X  a  g%US:X  a  g&[         $ [        XR"                  5      (       a  US:X  a  g'US:X  a  g(g)[        XR$                  5      (       a  g*[        XR&                  5      (       ar  U[(        R*                  L a	  US+:  a  S,nOU R,                  nUS:X  a"  U R.                  =n(       a  S-U 3OS.n	S/U U	 S03$ U R.                  =n(       a  S1U 3OS.n	S2U U	 S33$ [        XR0                  5      (       a:  U[(        R*                  L a	  US+:  a  S,n
OU R,                  n
US:X  a  S4U
 S03$ S5U
 S33$ [        XR2                  5      (       a   S6S Kng8[        XR8                  5      (       aq  U[:        R<                  L a  S9n[	        U5      e[?        XR8                  5      (       a*  URA                  5       nURC                  U RD                  S:S;9$ S<n[        U5      e[        XRF                  URH                  URJ                  URL                  URN                  45      (       aU  U[(        R*                  L a+  US=:  a%   S6S K(nS6S KnS6S@K+J,n  URZ                  " U" XSA95      $ SBU  SCU SDU SE3n[	        U5      eSFU  3n[]        U5      e! [6         a    S7n g8f = f! [R         a#  nS>U  S?URT                   3n[S        U5      UeS nAff = f)GN>   r   r   z;Expected one of {None, 'pyarrow', 'numpy_nullable'}, got: ''z(Casting to Decimal is not supported yet.r   r{   r   rx   ry   r   r}   r~   rZ   rX   rY   r^   r\   r]   rb   r`   ra   rf   rd   re   rj   rh   ri   rn   rl   rm   rr   rp   rq   rv   rt   ru   r   r   r   r   r   r   )   nsz, tz= z
timestamp[z
][pyarrow]z, zdatetime64[]z	duration[ztimedelta64[r   z-PyArrow>=11.0.0 is required for `Date` dtype.zdate32[pyarrow]z9Converting to Enum is not supported in narwhals.stable.v1T)r   z9Can not cast / initialize Enum without categories present)r   r   zUnable to convert to z  to to the following exception: )narwhals_to_native_dtype)r   zConverting to z+ dtype is not supported for implementation z and version .zUnknown dtype: )/
ValueErrorr   r   r   NotImplementedErrorrx   r}   rX   r\   r`   rd   rh   rl   rp   rt   r   r   r   r   r   r   rI   r   r   r   r   r   ModuleNotFoundErrorr   r   r   r)   rE   CategoricalDtyper   StructArrayListr   r   pandasImportErrorr5   r   r   r   r   )r   dtype_backendr#   r$   r   r5   r   r   tztz_partr   par   r   excarrow_narwhals_to_native_dtypes                   r6   r   r   x  s     ]:W%WMm_\]^o!'*F~~668!#&&~~66I%%..~~66I%%..||44I%#..||44I%#..||44I%#..{{33I%"..}}55I%$..}}55I%$..}}55I%$..||44I%#..}}55I%$..
~~66I%%..'9'9:: 77^222 J
 8
  L ??LI%-2__'<r'<bTl2G~gYjAA*///$9B$92$iG wiq9977^222 J
 8
  L ??L 	) ~Z0	
  ~Q/	

  {{33	B  !{{33gjj MC%c**e[[))335B&&u'7'7&FFIov||V[[&++v}}U  ^222&7P0#$ ==!?!WXX !'R!"-y;  &c**E7
#C

G # 	BAC 	B(  0-eW4TUXU\U\T]^!#&C/0s*   R R" RR"
S,S

Sc                    U S   R                  5       nU  Vs/ s H  n[        U5      PM     nn[        U5      nXR                  U5         R                  R                  n/ nU  H  nUR
                  (       ak  UR                  UR                  UR                  UR                  R                  S   /U-  UUR                  UR                  R                  S95      5        M  UR                  R                  ULaJ  UR                  UR                  [        UR                  UUR                  UR                  S95      5        M  UR                  U5        M     U$ s  snf )Nr   )r(   namer   r"   )__native_namespace__rG   maxr(   r'   r+   append_with_nativeSeriesr,   r   r   r-   r.   r/   )r   native_namespaceslengths
max_lengthidx	reindexeds          r6   align_series_full_broadcastr	    s2    ay557%&v!s1vvG&WJ
z*
+
2
2
8
8CI<<$++q)*Z7!VVhhnn	 , 	 XX^^3&'('8'8()(:(:		 Q3 4 ? 's   Ec                r    S[        U 5      ;   a  g[        U 5      R                  5       [        U 5      :w  a  gg)Nr   rZ   rX   rY   )r   lower)r   s    r6   int_dtype_mapperr  C  s0    CJ
5zSZ'r8   c                R   US:X  a  US:X  a  U nU$ US:X  a  U S-  nU$ U S-  n U$ US:X  a  US:X  a  U S-  nU$ US:X  a  U nU$ U S-  n U$ US:X  a  US:X  a  U S-  nU$ US:X  a  U S-  nU$ U n U$ US:X  a"  US:X  a  U S-  nU$ US:X  a  U S-  nU$ U S-  n U$ SU S	3n[        U5      e)
Nr   us  @B msr   ʚ;zunexpected time unit zA, please report a bug at https://github.com/narwhals-dev/narwhals)r   )r  original_time_unitr   resultr5   s        r6   calculate_timestamp_datetimer  K  sM    T!F: M9 $%ZF6 M3 )^F2 M1 
t	#YF, M+ $F( M% %ZF$ M# 
t	#]F M $YF M F M 
s	"&F M $]F M	 YF M &&8%99z{S!!r8   c                N    U S-  n US:X  a  U S-  nU$ US:X  a  U S-  nU$ U S-  nU$ )NiQ r   r  r  r  r   )r  r   r  s      r6   calculate_timestamp_dater  p  sN    	F
AD]"
 M	 
d	Y M UMr8   c                   [        U5      U R                  S   :X  a  [        XR                  :H  5      (       a  U $ U R                  R                  R
                  S:X  d  U[        R                  L ai  US:  ac  U R                  R                  5       nU Vs/ s H  oUU;  d  M
  UPM     nnU(       a  [        R                  " Xd5      eU R                  SS2U4   $  X   $ s  snf ! [         aU  nU R                  R                  5       nU Vs/ s H  oUU;  d  M
  UPM     Os  snf nn[        R                  " Xd5      UeSnAff = f)zgSelect columns by name.

Prefer this over `df.loc[:, column_names]` as it's
generally more performant.
r=   br?   N)rG   shapeallrP   r   kindr   rI   tolistr   'from_missing_and_available_column_nameslocKeyError)dfcolumn_namesr$   r#   available_columnsxmissing_columnses           r6   select_columns_by_namer(  {  s(    <BHHQK'C

0J,K,K	


$.///Of4L JJ--/&2Ql?P6P1lQ%MM  vvao&& R  JJ--/&2Ql?P6P1lQQ!II
	s6   	C #C C% %
E/D?	D!D! D??Ec           	       ^ [        U R                  5      mU R                  [        R                  L aq  [        U4S jU R                  " / UQUQUQ6 R                  R                  5        5       5      (       a  Sn[        U5      eU R                  R                  UUUUSS9nU$ U R                  R                  UUUUSSS9nU$ )Nc              3  B   >#    U  H  nUTR                   :H  v   M     g 7fr   )r   ).0r%  r   s     r6   	<genexpr>pivot_table.<locals>.<genexpr>  s#      
S ###Ss   z=`pivot` with Categoricals is not implemented for cuDF backendF)valuesr(   rP   aggfuncmarginsT)r.  r(   rP   r/  r0  observed)r   _versionr.   r   rH   anysimple_selectschemar.  r   _native_framepivot_table)r"  r.  r(   rP   aggregate_functionr5   r  r   s          @r6   r7  r7    s     ""++.F	^000 
%%'B'B%'B''BCJJQQS
 
 
 RC%c**!!--& . 
  M !!--& . 
 Mr8   c                .    [        U R                  5       5      n[        U 5      U:w  aM  SSKJn  U" U 5      nSnUR                  5        H  u  pVUS:  d  M  USU SU S3-  nM     S	U 3n[        U5      eg ! [         a    SU  3n[        U5      S ef = f)
Nz7Expected hashable (e.g. str or int) column names, got: r   )Counterr   r=   z
- 'z' z timesz"Expected unique column names, got:)rG   drop_duplicates	Exceptionr   collectionsr:  itemsr   )rP   len_unique_columnsr5   r:  counterkeyvalues          r6   check_column_names_are_uniquerC    s    ( !8!8!:;
 7|))''"!--/JCqyse2eWF33 * 33%8S!! *	  (GyQo4'(s   A8 8Bc                  P    \ rS rSr\SS j5       r\SS j5       r\S	S j5       rSrg)
PandasLikeSeriesNamespacei  c                .    U R                   R                  $ r   )	compliantr.   selfs    r6   r#   (PandasLikeSeriesNamespace.implementation  s    ~~---r8   c                .    U R                   R                  $ r   )rG  r/   rH  s    r6   r$   )PandasLikeSeriesNamespace.backend_version  s    ~~...r8   c                .    U R                   R                  $ r   )rG  r2  rH  s    r6   r   !PandasLikeSeriesNamespace.version  s    ~~&&&r8   r  N)returnr   )rO  tuple[int, ...])rO  r   )	__name__
__module____qualname____firstlineno__propertyr#   r$   r   __static_attributes__r  r8   r6   rE  rE    s<    . . / / ' 'r8   rE  )r2   r   r3   zPandasLikeSeries | objectrO  z7tuple[pd.Series[Any] | object, pd.Series[Any] | object])
rK   r   r(   r   r#   r   r$   rP  rO  r   )
rK   r   rP   z	list[str]r#   r   r$   rP  rO  r   )rK   r   rT   r   r#   r   r$   rP  rN   r   rO  r   )r   r   r   r   rO  r   )r   r   r   r   r#   r   rO  r   )r   zpd.CategoricalDtyper   r   r   zCallable[[], tuple[str, ...]]rO  r   )r   r   r   r   r#   r   rO  r   )r   r   r#   r   rO  r   )r   r   r#   r   rO  r   )r   zDType | type[DType]r   r   r#   r   r$   rP  r   r   rO  zstr | PandasDtype)r   r   rO  zlist[PandasLikeSeries])r   r   rO  r   )r  pd.Series[int]r  r   r   r   rO  rW  )r  rW  r   r   rO  rW  )
r"  r   r#  zlist[str] | _1DArrayr$   rP  r#   r   rO  r   )r"  r   r.  Sequence[str]r(   rX  rP   rX  r8  z
str | NonerO  r   )rP   zpd.Index[str]rO  None)N
__future__r   	functoolsre
contextlibr   typingr   r   r   r   r	   r
   r   r   narwhals._compliant.seriesr   narwhals.dtypesr   narwhals.exceptionsr   r   r   narwhals.utilsr   r   r   r   r   pandas._typingr   PandasDtyper%   r   narwhals._pandas_like.exprr   r&   r   r   narwhals.typingr   r   r   r    rI   rH   MODINPANDAS_LIKE_IMPLEMENTATIONPD_DATETIME_RGXcompileVERBOSEr   PA_DATETIME_RGXr   PD_DURATION_RGXr   PA_DURATION_RGXr   r7   r-   rQ   rS   	lru_cacher   r   r   r   r   r   r   r	  r  r  r  r(  r7  rC  rE  r  r8   r6   <module>rp     s   "  	          ; . 3 . * ) " / 3Cu3C9=%,((G>2E  
 jj"**=  jj"**=  jj"**=  jj"**= &	& 9&<&R 1	
 1 1 #	 1
 % 1  1F3	
33 #	3
 %3 3<3	
33 #3 %	3
 3 3 R A !AH'.@N
,
 %
 
  2
  	
  # 	D& R A !A\\\ #\ %	\
 \ \~)))X""+.";>""J 	 &  %  #	 
  F      	 
 #  	 F"&' 45G5L M 'r8   