
    hh@              
      ^   U d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZ d dlmZmZmZ d dl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mZ d dl m!Z! d dl"m#Z# e	r$d dl$m%Z%m&Z& d dl'm(Z( d dl)m*Z* d dl"m+Z+m,Z, d dl-m.Z.m/Z/ e
Z0de1d<   	 ed          Z2de1d<   ed         Z3de1d<   ee2e3f         Z4de1d<   d Z5de1d<   dZ6de1d<    G d deeeeeef                   Z7 G d deeef                   Z8 G d  d!eeeeef                   Z9 G d" d#eeeee9f         e          Z:dS )$    )annotationsNreduce)chain)TYPE_CHECKINGAnyLiteralProtocoloverload)CompliantThenEagerNamespace	EagerWhen)combine_alias_output_namescombine_evaluate_output_namesPandasLikeDataFramePandasLikeExpr)PandasSelectorNamespacePandasLikeSeries)NativeDataFrameTNativeSeriesT)is_non_nullable_boolean)
zip_strict)IterableSequence)	TypeAlias)ScalarKwargs)ImplementationVersion)	IntoDTypeNonNestedLiteralr   
Incomplete	_Vertical   _HorizontalAxisVERTICAL
HORIZONTALc                      e Zd Zed1d            Zed2d            Zed3d            Zed4d	            Zd5dZd6dZ	d7dZ
d8dZd6dZd9dZd9dZd6dZd6dZd6d Zed:d"            Zd;d&Zd<d(Zd;d)Zd=d,Zd>d/Zd0S )?PandasLikeNamespacereturntype[PandasLikeDataFrame]c                    t           S Nr   selfs    V/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_pandas_like/namespace.py
_dataframezPandasLikeNamespace._dataframe5   s    ""    type[PandasLikeExpr]c                    t           S r0   r   r1   s    r3   _exprzPandasLikeNamespace._expr9   s    r5   type[PandasLikeSeries]c                    t           S r0   r   r1   s    r3   _serieszPandasLikeNamespace._series=   s    r5   r   c                *    t          j        |           S r0   )r   from_namespacer1   s    r3   	selectorszPandasLikeNamespace.selectorsA   s    &5d;;;r5   implementationr    versionr!   Nonec                "    || _         || _        d S r0   )_implementation_version)r2   r?   r@   s      r3   __init__zPandasLikeNamespace.__init__E   s    -r5   exprsr   c           	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )Ndfr   r-   list[PandasLikeSeries]c                F      fdD             }t          d |          gS )Nc              3  8   K   | ]} |          D ]}|V  d S r0    .0r8   srH   s      r3   	<genexpr>z=PandasLikeNamespace.coalesce.<locals>.func.<locals>.<genexpr>K   s8      >>EEE"II>>qa>>>>>>>r5   c                2    |                      |d d           S )Nstrategylimit	fill_null)xys     r3   <lambda>z<PandasLikeNamespace.coalesce.<locals>.func.<locals>.<lambda>M   s    AKKDK$M$M r5   r   )rH   seriesrF   s   ` r3   funcz*PandasLikeNamespace.coalesce.<locals>.funcJ   s8    >>>>U>>>FMMvVV r5   c              3  $   K   | ]}|j         V  d S r0   _depthrN   rW   s     r3   rP   z/PandasLikeNamespace.coalesce.<locals>.<genexpr>R   $      ..1ah......r5   r&   coalescer[   depthfunction_nameevaluate_output_namesalias_output_namescontextrH   r   r-   rI   r8   _from_callablemaxr   r   r2   rF   r[   s    ` r3   ra   zPandasLikeNamespace.coalesceI   sz    	 	 	 	 	 	 z((.......2$"?"G95A ) 
 
 	
r5   valuer#   dtypeIntoDType | Nonec           	     b     d fdt          fdddd	 d  j         j        
          S )NrH   r   r-   r   c                    j                             gd| j        j        dd                   }r|                              S |S )Nliteralr   r&   )datanameindexrg   )r;   from_iterable_native_frameru   cast)rH   pandas_seriesrn   r2   rm   s     r3   _lit_pandas_seriesz3PandasLikeNamespace.lit.<locals>._lit_pandas_seriesZ   s`     L66W&,QqS1	 7  M  1$))%000  r5   c                     |           gS r0   rL   )rH   rz   s    r3   rY   z)PandasLikeNamespace.lit.<locals>.<lambda>f   s    **2../ r5   r   litc                    dgS )Nrr   rL   _dfs    r3   rY   z)PandasLikeNamespace.lit.<locals>.<lambda>i   s    yk r5   rc   rd   re   rf   r?   r@   )rH   r   r-   r   r   rC   rD   )r2   rm   rn   rz   s   ```@r3   r|   zPandasLikeNamespace.litY   sm    		! 		! 		! 		! 		! 		! 		! 		! ////"9"9#/M
 
 
 	
r5   c           	     L     t           fdddd d  j         j                  S )Nc                j    j                             t          | j                  gddg          gS )Nlenr   )rt   ru   rg   )r;   rv   r   rw   )rH   r2   s    r3   rY   z)PandasLikeNamespace.len.<locals>.<lambda>q   s=    **)**+%sD +   r5   r   r   c                    dgS )Nr   rL   r~   s    r3   rY   z)PandasLikeNamespace.len.<locals>.<lambda>x   s    ug r5   r   r   r1   s   `r3   r   zPandasLikeNamespace.leno   sJ       
 "5"5#/M
 
 
 	
r5   c           	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )NrH   r   r-   rI   c                     t          j         fdD                       }d |D             }t          t          j        |          gS )Nc              3  .   K   | ]} |          V  d S r0   rL   rN   exprrH   s     r3   rP   zCPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>   s+      $@$@$TT"XX$@$@$@$@$@$@r5   c              3  D   K   | ]}|                     d dd          V  dS )r   NrU   rN   rO   s     r3   rP   zCPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>   s2      DDAQ[[D$77DDDDDDr5   )r   rv   r   operatoradd)rH   itnative_seriesrF   s   `  r3   r[   z0PandasLikeNamespace.sum_horizontal.<locals>.func   sQ    $$@$@$@$@%$@$@$@@@BDDDDDM8<7788r5   c              3  $   K   | ]}|j         V  d S r0   r]   r_   s     r3   rP   z5PandasLikeNamespace.sum_horizontal.<locals>.<genexpr>   r`   r5   r&   sum_horizontalrb   rh   ri   rl   s    ` r3   r   z"PandasLikeNamespace.sum_horizontal   sz    	9 	9 	9 	9 	9 	9
 z((.......2*"?"G95A ) 
 
 	
r5   ignore_nullsboolc          	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )NrH   r   r-   rI   c                      fdD             }s*t          d |D                       rd}t          |          rd |D             nt          |          }t          t          j        |          gS )Nc                0    g | ]} |          D ]}|S rL   rL   rM   s      r3   
<listcomp>zDPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<listcomp>   .    >>>EEE"II>>qa>>>>r5   c              3     K   | ]:}|j         j        d k    o%|                                                                V  ;dS objectNnativern   is_nullanyr   s     r3   rP   zCPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>   S       ( (EF(*@qyy{{/@/@( ( ( ( ( (r5   zwCannot use `ignore_nulls=False` in `all_horizontal` for non-nullable NumPy-backed pandas Series when nulls are present.c              3  f   K   | ],}t          |          r|n|                    d dd          V  -dS )TNr   rV   r   s     r3   rP   zCPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>   sZ          133VAAT4QU9V9V     r5   )r   
ValueErroriterr   r   and_rH   rZ   msgr   rF   r   s   `   r3   r[   z0PandasLikeNamespace.all_horizontal.<locals>.func   s    >>>>U>>>F &C ( (JP( ( ( % % &
 P oo%  "   $    &\\  8="--..r5   c              3  $   K   | ]}|j         V  d S r0   r]   r_   s     r3   rP   z5PandasLikeNamespace.all_horizontal.<locals>.<genexpr>   r`   r5   r&   all_horizontalrb   rh   ri   r2   r   rF   r[   s    `` r3   r   z"PandasLikeNamespace.all_horizontal   s    	/ 	/ 	/ 	/ 	/ 	/ 	/( z((.......2*"?"G95A ) 
 
 	
r5   c          	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )NrH   r   r-   rI   c                      fdD             }s*t          d |D                       rd}t          |          rd |D             nt          |          }t          t          j        |          gS )Nc                0    g | ]} |          D ]}|S rL   rL   rM   s      r3   r   zDPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<listcomp>   r   r5   c              3     K   | ]:}|j         j        d k    o%|                                                                V  ;dS r   r   r   s     r3   rP   zCPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>   r   r5   zwCannot use `ignore_nulls=False` in `any_horizontal` for non-nullable NumPy-backed pandas Series when nulls are present.c              3  f   K   | ],}t          |          r|n|                    d dd          V  -dS )FNr   r   s     r3   rP   zCPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>   sZ          133WAAUDRV9W9W     r5   )r   r   r   r   r   or_r   s   `   r3   r[   z0PandasLikeNamespace.any_horizontal.<locals>.func   s    >>>>U>>>F &C ( (JP( ( ( % % &
 P oo%  "   $    &\\  8<,,--r5   c              3  $   K   | ]}|j         V  d S r0   r]   r_   s     r3   rP   z5PandasLikeNamespace.any_horizontal.<locals>.<genexpr>   r`   r5   r&   any_horizontalrb   rh   ri   r   s    `` r3   r   z"PandasLikeNamespace.any_horizontal   s    	. 	. 	. 	. 	. 	. 	.( z((.......2*"?"G95A ) 
 
 	
r5   c           	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )NrH   r   r-   rI   c                      fdD             }d |D             }d |D             }t          t          j        |          t          t          j        |          z  gS )Nc                0    g | ]} |          D ]}|S rL   rL   rM   s      r3   r   zEPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>   .    DDD%%%))DDQADDDDr5   c              3  F   K   | ]}|                     d dd          V  dS )r   NrR   rU   r   s     r3   rP   zDPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s4      VVAakk!d$k??VVVVVVr5   c              3  D   K   | ]}d |                                 z
  V  dS )r&   Nr   r   s     r3   rP   zDPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s.      <<!a!))++o<<<<<<r5   )r   r   r   )rH   expr_resultsrZ   non_narF   s   `   r3   r[   z1PandasLikeNamespace.mean_horizontal.<locals>.func   si    DDDD5DDDLVVVVVF<<|<<<F8<006(,3O3OOPPr5   c              3  $   K   | ]}|j         V  d S r0   r]   r_   s     r3   rP   z6PandasLikeNamespace.mean_horizontal.<locals>.<genexpr>   r`   r5   r&   mean_horizontalrb   rh   ri   rl   s    ` r3   r   z#PandasLikeNamespace.mean_horizontal   s    	Q 	Q 	Q 	Q 	Q 	Q z((.......2+"?"G95A ) 
 
 	
r5   c           	          d
 fd} j                             |t          d D                       dz   dt           t	            	          S )NrH   r   r-   rI   c                F    t          t          j         fdD                                 }t                              d |D             d          j                            d          j        j                  	                    |d         j
                  gS )	Nc              3  .   K   | ]} |          V  d S r0   rL   r   s     r3   rP   zCPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>   +      -I-I4dd2hh-I-I-I-I-I-Ir5   c              3  >   K   | ]}|                                 V  d S r0   to_framer   s     r3   rP   zCPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>   *      66!666666r5   
horizontalhowr&   axisr?   r@   r   )listr   rv   r   concatrw   minrC   rD   aliasrt   rH   rZ   rF   r2   s   ` r3   r[   z0PandasLikeNamespace.min_horizontal.<locals>.func   s    %--I-I-I-I5-I-I-IIIJJF KK66v666L    #CCQCKK#'#7 M   %q	'' r5   c              3  $   K   | ]}|j         V  d S r0   r]   r_   s     r3   rP   z5PandasLikeNamespace.min_horizontal.<locals>.<genexpr>   r`   r5   r&   min_horizontalrb   rh   ri   rl   s   `` r3   r   z"PandasLikeNamespace.min_horizontal       
	 
	 
	 
	 
	 
	 
	 z((.......2*"?"G95A ) 
 
 	
r5   c           	          d
 fd} j                             |t          d D                       dz   dt           t	            	          S )NrH   r   r-   rI   c                F    t          t          j         fdD                                 }t                              d |D             d          j                            d          j        j                  	                    |d         j
                  gS )	Nc              3  .   K   | ]} |          V  d S r0   rL   r   s     r3   rP   zCPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>   r   r5   c              3  >   K   | ]}|                                 V  d S r0   r   r   s     r3   rP   zCPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>   r   r5   r   r   r&   r   r   r   )r   r   rv   r   r   r   rk   rC   rD   r   rt   r   s   ` r3   r[   z0PandasLikeNamespace.max_horizontal.<locals>.func   s    %--I-I-I-I5-I-I-IIIJJF KK66v666L    SSaS[[#'#7 M   %q	'' r5   c              3  $   K   | ]}|j         V  d S r0   r]   r_   s     r3   rP   z5PandasLikeNamespace.max_horizontal.<locals>.<genexpr>  r`   r5   r&   max_horizontalrb   rh   ri   rl   s   `` r3   r   z"PandasLikeNamespace.max_horizontal   r   r5   ._NativeConcat[NativeDataFrameT, NativeSeriesT]c                >    | j                                         j        S )zvConcatenate pandas objects along a particular axis.

        Return the **native** equivalent of `pd.concat`.
        )rC   to_native_namespacer   r1   s    r3   _concatzPandasLikeNamespace._concat
  s     #7799@@r5   dfsSequence[NativeDataFrameT]r   c                   | j                                         r(| j        dk     r|                     |t          d          S |                     |t                    S )N   Fr   copyr   )rC   	is_pandas_backend_versionr   r)   r2   r   s     r3   _concat_diagonalz$PandasLikeNamespace._concat_diagonal  sU    ))++ 	@0E0L0L<<(<???||Ch|///r5   *Sequence[NativeDataFrameT | NativeSeriesT]c                  | j                                         rdt          j                    5  t          j        ddt
                     |                     |t                    cd d d            S # 1 swxY w Y   nA| j                                         r(| j	        dk     r|                     |t          d          S |                     |t                    S )NignorezDThe behavior of array concatenation with empty entries is deprecated)messagecategoryr   r   Fr   )
rC   is_cudfwarningscatch_warningsfilterwarningsFutureWarningr   r*   r   r   r   s     r3   _concat_horizontalz&PandasLikeNamespace._concat_horizontal  s    '')) 		B(** : :'b*   
 ||Cj|99: : : : : : : : : : : : : : : : : !++-- 	B$2G$2N2N<<*5<AAA||Cj|111s   8A22A69A6c                  |d         j         }t          |dd          d          D ]\  }}|j         }t          |          t          |          k    r||k                                    s?d|                                 d| d|                                 d}t          |          | j                                        r(| j        dk     r| 	                    |t          d	
          S | 	                    |t                    S )Nr   r&   )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
r   Fr   r   )columns	enumerater   allto_list	TypeErrorrC   r   r   r   r)   )r2   r   cols_0irH   cols_currentr   s          r3   _concat_verticalz$PandasLikeNamespace._concat_vertical&  s'   Qs122wa000 
	% 
	%EAr:L\""c&kk118N7S7S7U7U1F)/)9)9F F&'F F+7+?+?+A+AF F F 
  nn$ 2 ))++ 	@0E0L0L<<(<???||Ch|///r5   	predicatePandasWhen[NativeSeriesT]c                P    t           t                                       ||           S )N)rg   )
PandasWhenr   	from_expr)r2   r  s     r3   whenzPandasLikeNamespace.when7  s     -(229d2KKKr5   	separatorstrc          	         | j         j                                        d
fd}| j                            |t          d D                       dz   dt           t           | 	          S )NrH   r   r-   rI   c                V   	  fd
D             }fd|D             }d |D             }sCt          t          j        |          }t          fd|                              | d           }nd t	          ||          D             ^}}|                    |                                                    d|j        j	        |j        j
                            		fd|d d	         D             }t          t          j        d
 t	          ||          D             |          }|gS )Nc                0    g | ]} |          D ]}|S rL   rL   rM   s      r3   r   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>@  r   r5   c                :    g | ]}|                               S rL   )rx   )rN   rO   strings     r3   r   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>A  s#    ;;;affVnn;;;r5   c                6    g | ]}|                                 S rL   r   r   s     r3   r   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>B  s     ;;;;;;r5   c                    | z   |z   S r0   rL   )rW   rX   r  s     r3   rY   z>PandasLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>F  s    Q]Q-> r5   c              3  J   K   | ]\  }}|                     | d           V  dS  Nzip_with)rN   rO   nms      r3   rP   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>M  sG       ' ',1ArAJJsB''' ' ' ' ' 'r5   sep)rt   ru   rn   c              3  F   K   | ]}                     | d           V  dS r  r  )rN   r  	sep_arrays     r3   rP   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>X  s5      SSbi00"b99SSSSSSr5   c              3  &   K   | ]\  }}||z   V  d S r0   rL   )rN   rO   vs      r3   rP   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>[  s*      FFtq!QUFFFFFFr5   )r   r   r   r  r   _with_native__native_namespace__Seriesr   ru   rn   r   )rH   r   rZ   	null_masknull_mask_resultresult
init_valuevalues
separatorsr  rF   r   r  r  s   `        @r3   r[   z,PandasLikeNamespace.concat_str.<locals>.func?  sv   DDDD5DDDL;;;;l;;;F;;l;;;I #)(,	#B#B  > > > >GGPP%%t ' '5?	5R5R' ' '#
V '333355<<!"(/5(/5	 =   	 TSSSIcrcNSSS
LFFz*f'E'EFFF  8Or5   c              3  $   K   | ]}|j         V  d S r0   r]   r_   s     r3   rP   z1PandasLikeNamespace.concat_str.<locals>.<genexpr>c  r`   r5   r&   
concat_strrb   rh   )rD   dtypesStringr8   rj   rk   r   r   )r2   r  r   rF   r[   r  s    ``` @r3   r&  zPandasLikeNamespace.concat_str:  s     %,,.. 	  	  	  	  	  	  	  	  	D z((.......2&"?"G95A ) 
 
 	
r5   N)r-   r.   )r-   r6   )r-   r9   )r-   r   )r?   r    r@   r!   r-   rA   )rF   r   r-   r   )rm   r#   rn   ro   r-   r   )r-   r   )rF   r   r   r   r-   r   )r-   r   )r   r   r-   r   )r   r   r-   r   )r  r   r-   r  )rF   r   r  r  r   r   r-   r   )__name__
__module____qualname__propertyr4   r8   r;   r>   rE   ra   r|   r   r   r   r   r   r   r   r   r   r   r   r  r&  rL   r5   r3   r,   r,   ,   s        # # # X#    X       X  < < < X<       
 
 
 
 
 
 
 
,
 
 
 
 
 
 
 

 
 
 
@
 
 
 
@
 
 
 
 
 
 
 
,
 
 
 
, A A A XA0 0 0 0
2 2 2 20 0 0 0"L L L L.
 .
 .
 .
 .
 .
r5   r,   c                      e Zd Zedddd            Zedddd            Zedddd            Zedddd            ZddddZdS )_NativeConcat.)r   objsIterable[NativeDataFrameT]r   r%   r   bool | Noner-   r   c                   d S r0   rL   r2   r/  r   r   s       r3   __call__z_NativeConcat.__call__l  	     3r5   Iterable[NativeSeriesT]r   c                   d S r0   rL   r3  s       r3   r4  z_NativeConcat.__call__t  s	     r5   *Iterable[NativeDataFrameT | NativeSeriesT]r'   c                   d S r0   rL   r3  s       r3   r4  z_NativeConcat.__call__x  r5  r5   r(    NativeDataFrameT | NativeSeriesTc                   d S r0   rL   r3  s       r3   r4  z_NativeConcat.__call__  s	     ,/3r5   Nc                   d S r0   rL   r3  s       r3   r4  z_NativeConcat.__call__  s	     ,/3r5   )r/  r0  r   r%   r   r1  r-   r   )r/  r6  r   r%   r   r1  r-   r   )r/  r8  r   r'   r   r1  r-   r   )r/  r8  r   r(   r   r1  r-   r:  )r)  r*  r+  r   r4  rL   r5   r3   r.  r.  k  s               X UX     X        X   / / / / / X/ !/ / / / / / / /r5   r.  c                  .    e Zd Zedd            Zdd	Zd
S )r  r-   type[PandasThen]c                    t           S r0   )
PandasThenr1   s    r3   _thenzPandasWhen._then  s
     r5   r  r   then	otherwise NativeSeriesT | NonNestedLiteralc                B    |j         }| ||          n |||          S r0   )where)r2   r  rB  rC  rF  s        r3   _if_then_elsezPandasWhen._if_then_else  s.     !J'/uuT{{{UU45K5KKr5   N)r-   r>  )r  r   rB  r   rC  rD  r-   r   )r)  r*  r+  r,  rA  rG  rL   r5   r3   r  r    sN            XL L L L L Lr5   r  c                  :    e Zd ZU dZded<   i Zded<   dZded<   d	S )
r@  r   intr^   r   _scalar_kwargswhenthenr  _function_nameN)r)  r*  r+  r^   __annotations__rJ  rL  rL   r5   r3   r@  r@    sC          FOOOO#%N%%%%$N$$$$$$r5   r@  );
__future__r   r   r   	functoolsr   	itertoolsr   typingr   r   r	   r
   r   narwhals._compliantr   r   r   narwhals._expression_parsingr   r   narwhals._pandas_like.dataframer   narwhals._pandas_like.exprr   narwhals._pandas_like.selectorsr   narwhals._pandas_like.seriesr   narwhals._pandas_like.typingr   r   narwhals._pandas_like.utilsr   narwhals._utilsr   collections.abcr   r   typing_extensionsr   narwhals._compliant.typingr   r    r!   narwhals.typingr"   r#   r$   rM  r%   r'   r(   r)   r*   r,   r.  r  r@  rL   r5   r3   <module>r_     sH   " " " " " " "               B B B B B B B B B B B B B B H H H H H H H H H H        @ ? ? ? ? ? 5 5 5 5 5 5 C C C C C C 9 9 9 9 9 9 H H H H H H H H ? ? ? ? ? ? & & & & & & <22222222++++++77777777777777;;;;;;;; 
     > qz	 ! ! ! !  # # # #)[01 1 1 1 1    
    |
 |
 |
 |
 |
		|
 |
 |
~	$/ $/ $/ $/ $/H-}<= $/ $/ $/NL L L L L!#3^]RSL L L&% % % % %%'7ST% % % % %r5   