
    >qjS                        d dl Z d dlZd dlZd dlmZ d dlmZm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 d dlmZ ej.                  j0                  Zefd	Zd
 Zd Zd Zej.                  j;                  d ee            d        Z G d d      Z  ee       G d de              Z! edd       ee       G d de                     Z" edd       G d de!             Z#y)    N)LinAlgError)xp_assert_closemake_xp_test_case)Halton)cKDTree)
_AVAILABLE_SCALE_INVARIANT_NAME_TO_MIN_DEGREERBFInterpolator_get_backend)_rbfinterp_pythran)_run_concurrent_barrierc                 ~    t        |      }|j                  | j                  d   ||      }|j                  | ||      S )N   )r   _monomial_powersshapepolynomial_matrix)xdegreexpbackendpowerss        e/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/interpolate/tests/test_rbfinterp.py_vandermonder      s?     2G%%aggaj&"=F$$Q33    c                     | d d df   } d|j                  |        d|j                  d| z        z  z
  d|j                  d| z        z  z   z  }|S )Nr   g
ףp=
@      exp)r   r   ys      r   _1d_test_functionr$      sT     	
!Q$AbffaRj1RVVBqD\>)AbffRTlN:;AHr   c                    | d d df   | d d df   }}d|j                  d|z  dz
  dz   dz  d|z  dz
  dz  dz  z
        z  }d|j                  d|z  dz   dz   dz  d|z  dz   dz  z
        z  }d	|j                  d|z  d
z
  dz   dz  d|z  dz
  dz  dz  z
        z  }d|j                  d|z  dz
  dz   d|z  d
z
  dz  z
        z  }||z   |z   |z   }|S )Nr   r   g      ?	      r   1   
         ?   r   gɿr!   )	r   r   x1x2term1term2term3term4r#   s	            r   _2d_test_functionr2   "   s    q!tWa1gB266AbDFQ;,q.AbDFQ;q=899E266AbDFQ;,r/QrT!VRK788E"&&1R46A+a1R46A+a-788E266AbDFQ;,!B$q&1455E%AHr   c                 ^   d}d}dD ]  }t        |dt        j                  j                               }t	        |      D ]  }d|j                  |      z  dz
  }t        j                  ||       }t        ||dz
        }	t        j                  j                  |	d	      \  }
}|
d d |	j                  d   d f   }|j                  j                  |      j                  |      }	 t        j                  j                  |         y
# t        j                  j                  $ r Y   yw xY w)Nr)   d   )r   r'   r   r      Fscrambleseedr'   r   complete)modeT)r   nprandomRandomStateranger   _kernel_matrixr   linalgqrr   Tdotcholeskyr   )kernelmnxntestsndimseq_r   APQRQ2Bs                 r   #_is_conditionally_positive_definiterR   .   s    
BF  TE		0E0E0GHv 	A#**R. 1$A"11!V<AQA&A99<<
<3DAq
 1aggajk>"B#A		""1%		(  99(( s   %D

D,+D,rE   c                 R    t        j                  | d      dz   }t        | |      sJ y )Nr   )r
   getrR   )rE   rF   s     r   $test_conditionally_positive_definiterV   M   s+    
 	+a/A.vq999r   c                      e Zd Zej                  j                  d ee            d        Zej                  j                  d ee            d        Z	ej                  j                  d ee
            d        Zd Zej                  j                  d        Zd Zd Zej                  j                  d ee
            d	        Zej                  j                  d ee
            d
        Zej                  j                  d ee
            d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z edd       edd      d               Z d Z!d Z"y)_TestRBFInterpolatorrE   c                    t        ddt        j                  j                               }d|j                  d      z  }|j	                  |      }t        ||      }d|j                  d      z  }|j	                  |      } | j                  ||d|      |      } | j                  ||d|      |      }t        ||d	
       y )Nr   Fr6   r   2         ?epsilonrE          @:0yE>atol)r   r;   r<   r=   asarrayr$   buildr   	selfrE   r   rJ   r   r#   xitpyitp1yitp2s	            r   test_scale_invariance_1dz-_TestRBFInterpolator.test_scale_invariance_1dW   s     QRYY-B-B-DEcjjnJJqMa$Bzz$<

1aV
<TB<

1aV
<TBu40r   c                    t        ddt        j                  j                               }|j                  d      }|j	                  |      }t        ||      }|j                  d      }|j	                  |      } | j                  ||d|      |      } | j                  ||d|      |      }t        ||d	       y )
Nr'   Fr6   r4   r[   r\   r^   r_   r`   )r   r;   r<   r=   rb   r2   rc   r   rd   s	            r   test_scale_invariance_2dz-_TestRBFInterpolator.test_scale_invariance_2dg   s     QRYY-B-B-DEJJsOJJqMa$zz#zz$<

1aV
<TB<

1aV
<TBu40r   c                 8   t        ddt        j                  j                               }d}d}|j                  d      }|j	                  |      }t        ||      }|j                  d      }|j	                  |      }|t        v rA | j                  |||      |      }	 | j                  ||z  |z   ||      ||z  |z         }
nE | j                  ||d|	      |      }	 | j                  ||z  |z   |d|z  |	      ||z  |z         }
t        |	|
d
       y )Nr'   Fr6   gd~QJgAjZKr4   rE         @r\   r_   r`   )	r   r;   r<   r=   rb   r2   r	   rc   r   )re   rE   r   rJ   scaleshiftr   r#   rf   rg   rh   s              r   test_extreme_domainsz)_TestRBFInterpolator.test_extreme_domainsw   s7    QRYY-B-B-DEJJsOJJqMa$zz#zz$%%3DJJq!FJ3D9EDJJ%%   u*u$&E
 ADJJq!SJ@FEDJJ%%E	   u*u$	&E 	u40r   c                    t         j                  j                  d      }t        dd|      }d}|j                  d      }|j                  d      }|j	                  |      }|j	                  |      }t        |||      }t        |||      }|j                  dd|j                  d	         }	|j	                  |	      }	||	z  }
||	z  } | j                  ||
|
      |      }t        ||d       y )Nr   r'   Fr6   r   rZ           r[   r   r   r_   r`   )
r;   r<   r=   r   rb   r   normalr   rc   r   )re   r   rngrJ   r   r   rf   rM   Pitppoly_coeffsr#   rg   rh   s                r   test_polynomial_reproductionz1_TestRBFInterpolator.test_polynomial_reproduction   s     ii##A&QS1JJrNzz"~JJqMzz$FB'D&"-jjc1771:6jj-O{"/

1a
/5u40r   c                 6   t         j                  j                  d      }t        dd|      }d}d}|j                  d      }|j                  |      }|j	                  |      }|j	                  |      }t        |||      }	t        |||      }
|j                  dd	|	j                  d
         }|j	                  |      }|	|z  }|
|z  }| j                  |||      }|j                  fd}|j                  |d|        ||      }t        ||d       y )Nr   r'   Fr6   r   i	  rZ   rs   r[   r   rt   c                  8    |j                  d        | i |S )Nr4   )memory_budget)update)argskwargsce_reals     r   _chunk_evaluatorz<_TestRBFInterpolator.test_chunking.<locals>._chunk_evaluator   s!    MMM,D+F++r   r   r_   r`   )r;   r<   r=   r   rb   r   ru   r   rc   r   setattrr   )re   monkeypatchr   rv   rJ   r   largeNr   rf   rM   rw   rx   r#   rg   interpr   rh   r   s                    @r   test_chunkingz"_TestRBFInterpolator.test_chunking   s   
 ii##A&QS1JJrNzz&!JJqMzz$FB'D&"-jjc1771:6jj-O{"Aq0))	, 	F$68HItu40r   c           	      \   t        ddt        j                  j                               }|j                  d      }|j                  d      }|j	                  |      }|j	                  |      }|j                  t        ||      t        |j                  |d      |      g      j                  } | j                  ||      |      } | j                  ||d d df         |      } | j                  ||d d df         |      }t        |d d df   |       t        |d d df   |       y )Nr'   Fr6   r4   r   )axisr   )r   r;   r<   r=   rb   stackr2   fliprB   rc   r   	re   r   rJ   r   rf   r#   rg   rh   yitp3s	            r   test_vector_dataz%_TestRBFInterpolator.test_vector_data   s    QRYY-B-B-DEJJsOzz#JJqMzz$HH'2.'(:B?A BBC! 	
 !

1a &&

1a1g&t,&

1a1g&t,adU+adU+r   c           	      B   t        ddt        j                  j                               }|j                  d      }|j                  d      }t	        |t              dt	        |d d d d df   t              z  z   }t        |j                  |||f      \  }}} | j                  ||      |      } | j                  ||j                        |      } | j                  ||j                        |      }t        |j                  |       t        |j                  |       y )Nr'   Fr6   r4   y              ?rT   )r   r;   r<   r=   r2   maprb   rc   realimagr   r   s	            r   test_complex_dataz&_TestRBFInterpolator.test_complex_data   s     QRYY-B-B-DEJJsOzz#a$r*;Aa2gJ*K'KKaq\2
4 

1a &%

1aff%d+%

1aff%d+

E*

E*r   c                    t        ddt        j                  j                               }d|j                  d      z  }d|j                  d      z  }|j	                  |      }|j	                  |      }t        ||      }t        ||      } | j                  ||d|      |      }|j                  ||z
  dz        }	|	d	k  sJ y )
Nr   Fr6   r   rZ   rn   r\   r'   -C6?)r   r;   r<   r=   rb   r$   rc   mean
re   rE   r   rJ   r   rf   r#   ytrueyitpmses
             r   test_interpolation_misfit_1dz1_TestRBFInterpolator.test_interpolation_misfit_1d   s     QRYY-B-B-DEcjjnBJJqMzz$a$!$+;tzz!QFz;DAggte|a'(V||r   c                    t        ddt        j                  j                               }|j                  d      }|j                  d      }|j	                  |      }|j	                  |      }t        ||      }t        ||      } | j                  ||d|      |      }|j                  ||z
  dz        }	|	dk  sJ y )Nr'   Fr6   r4   rn   r\   g-C6*?)r   r;   r<   r=   rb   r2   rc   r   r   s
             r   test_interpolation_misfit_2dz1_TestRBFInterpolator.test_interpolation_misfit_2d  s     QRYY-B-B-DEJJsOzz#JJqMzz$a$!$+;tzz!QFz;DAggte|a'(V||r   c           	         t         j                  j                  d      }t        dd|      }d}d}d|j	                  ddd	      z  }d
|j                  d      z  }t        |t               |j                  d|d      z   }	|j                  |      }|j                  |	      }	t        ||      }
d}|D ]M  } | j                  ||	d||      |      }|j                  |j                  ||
z
  dz              }||k  sKd} n |sJ y )Nr   r   Fr6   g?g?r)      r   r4   rs   )r4   r[   )r]   	smoothingrE   r'   T)r;   r<   r=   r   linspacer$   ru   rb   rc   sqrtr   )re   rE   r   rv   rJ   noisermse_tolsmoothing_ranger   r#   r   rmse_within_tolr   ysmoothrmses                  r   test_smoothing_misfitz*_TestRBFInterpolator.test_smoothing_misfit   s    ii##A&QS1bkk"a44cjjoa$szz#uf'EEJJqMJJqM!!R(( 		Idjj1#	 !   !	"G
 77277GeOa#789Dh"&		 r   c                    t         j                  j                  d      }t        dd|      }d}|j                  d      }t	        ||      }|j                  dd|j                  d         }||z  }|j                         }	|	d	xx   dz  cc<   t        j                  d
      }
d|
d	<   t        |j                  ||||f      \  }}}}t        |j                  |	|
f      \  }	}
 | j                  ||	|
      |      }t        ||d       y )Nr   r   Fr6   r'   rZ   rs   r[   r)   )rZ   g     @@r   r   r`   )r;   r<   r=   r   r   ru   r   copyzerosr   rb   rc   r   )re   r   rv   rJ   r   r   rM   rx   r#   y_with_outlierr   r   s               r   test_array_smoothingz)_TestRBFInterpolator.test_array_smoothing?  s     ii##A&QS1JJrNF#jjc1771:6Orc!HHUO		""2::1k1/EF1k1$'

^Y4O$P!	Atzz!^yzA!Dad+r   c                    t        ddt        j                  j                               j                  d      }t	        |t              }t        ddt        j                  j                               j                  d      }d}t        j                  t        |      5   | j                  ||      |       d d d        y # 1 sw Y   y xY w)Nr'   Fr6   r)   r   zExpected the second axis of `x`match)	r   r;   r<   r=   r2   pytestraises
ValueErrorrc   )re   r#   dr   r   s        r   $test_inconsistent_x_dimensions_errorz9_TestRBFInterpolator.test_inconsistent_x_dimensions_errorW  s     1u299+@+@+BCJJ2Na$1u299+@+@+BCJJ2N1]]:U3 	 DJJq!Q	  	  	 s    CCc                     t        j                  ddd      d d d f   }t        j                  d      }d}t        j                  t
        |      5  | j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   r5   zExpected the first axis of `d`r   r;   r   r   r   r   r   rc   re   r#   r   r   s       r    test_inconsistent_d_length_errorz5_TestRBFInterpolator.test_inconsistent_d_length_errora  s`    KK1a D)HHQK0]]:U3 	JJq!	 	 	s   A--A6c                     t        j                  ddd      }t        j                  d      }d}t        j                  t
        |      5  | j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   r5   z"`y` must be a 2-dimensional array.r   r   r   s       r   test_y_not_2d_errorz(_TestRBFInterpolator.test_y_not_2d_errorh  sW    KK1a HHQK4]]:U3 	JJq!	 	 	s   
A&&A/c                     t        j                  ddd      d d d f   }t        j                  d      }t        j                  d      }d}t	        j
                  t        |      5  | j                  |||       d d d        y # 1 sw Y   y xY w)Nr   r   r5   zExpected `smoothing` to ber   r   )r;   r   r   onesr   r   r   rc   )re   r#   r   r   r   s        r   (test_inconsistent_smoothing_length_errorz=_TestRBFInterpolator.test_inconsistent_smoothing_length_erroro  sq    KK1a D)HHQKGGAJ	,]]:U3 	2JJq!yJ1	2 	2 	2s   &BBc                     t        j                  ddd      d d d f   }t        j                  d      }d}t        j                  t
        |      5  | j                  ||d       d d d        y # 1 sw Y   y xY w)Nr   r   r5   z`kernel` must be one ofr   testrm   r   r   s       r   test_invalid_kernel_name_errorz3_TestRBFInterpolator.test_invalid_kernel_name_errorw  sd    KK1a D)HHQK)]]:U3 	,JJq!FJ+	, 	, 	,   A//A8c                    t        j                  ddd      d d d f   }t        j                  d      }t        D ]E  }|t        v rd}t        j                  t        |      5  | j                  |||       d d d        G y # 1 sw Y   RxY w)Nr   r   r5   z`epsilon` must be specifiedr   rm   )	r;   r   r   r   r	   r   r   r   rc   )re   r#   r   rE   r   s        r    test_epsilon_not_specified_errorz5_TestRBFInterpolator.test_epsilon_not_specified_error~  s    KK1a D)HHQK  	0F))1Ez7 0

1a
/0 0	0
0 0s   #BB	c                 ,   t        j                  ddd      d d d f   }t        j                  ddd      }t        j                  d      }d}t        j                  t
        |      5   | j                  ||      |       d d d        y # 1 sw Y   y xY w)Nr   r   r5   z"`x` must be a 2-dimensional array.r   r   )re   r#   r   r   r   s        r   test_x_not_2d_errorz(_TestRBFInterpolator.test_x_not_2d_error  sy    KK1a D)KK1a HHQK4]]:U3 	 DJJq!Q	  	  	 s   (B

Bc                     t        j                  ddd      d d d f   }t        j                  d      }d}t        j                  t
        |      5  | j                  ||d       d d d        y # 1 sw Y   y xY w)Nr   r   z#At least 2 data points are requiredr   thin_plate_splinerm   r   r   s       r   "test_not_enough_observations_errorz7_TestRBFInterpolator.test_not_enough_observations_error  se    KK1a D)HHQK5]]:U3 	9JJq!$7J8	9 	9 	9r   c           
      J   t        j                  ddd      d d d f   }t        j                  d      }t        j                         D ]M  \  }}|dk\  sd| }t        j                  t        |      5  | j                  ||d||dz
         d d d        O y # 1 sw Y   ZxY w)Nr   r   r5   z`degree` should not be below r   r[   r]   rE   r   )	r;   r   r   r
   itemsr   warnsWarningrc   )re   r#   r   rE   degr   s         r   test_degree_warningz(_TestRBFInterpolator.test_degree_warning  s    KK1a D)HHQK.446 	OKFCax7u=\\'7 OJJq!SAJNO O		OO Os   4BB"	c                     t        j                  ddd      d d d f   }t        j                  d      }t        j                         D ]  \  }}| j                  ||d|d        y )Nr   r   r5   r[   rT   r   )r;   r   r   r
   r   rc   )re   r#   r   rE   rK   s        r   test_minus_one_degreez*_TestRBFInterpolator.test_minus_one_degree  s^    KK1a D)HHQK,224 	DIFAJJq!SJC	Dr   z	jax.numpyz+solve raises no error for a singular matrix)reasoncupyc                     |j                  ddgddgddgg      }|j                  g d      }d}t        j                  t        |      5   | j	                  ||d      |       d d d        y # 1 sw Y   y xY w)	Nr^   rs   r[   )rs   rs   rs   zdoes not have full column rankr   r   rm   )rb   r   r   r   rc   )re   r   r#   r   r   s        r   test_rank_errorz$_TestRBFInterpolator.test_rank_error  su    
 JJc
S#Jc
;<JJ'0]];e4 	<8DJJq!$7J8;	< 	< 	<s   A//A8c                     dD ]X  }|j                  d|f      }|j                  d|j                        } | j                  ||d      |      }t	        ||       Z y )N)r   r'   r   r   )r   )dtypelinearrm   )r   r   float64rc   r   )re   r   dimr#   r   fs         r   test_single_pointz&_TestRBFInterpolator.test_single_point  s`      	"C!S"ABJJ/A1

1a
1!4AAq!		"r   c                    t        ddt        j                  j                  d            }d|j                  d      z  }d|j                  d      z  }|j	                  |      |j	                  |      }}t        ||      }| j                  ||      } ||      } t        j                  t        j                  |            |      }t        ||d       y )	Nr   Fl   e r6   r   rZ   gؗҜ<r`   )r   r;   r<   r=   rb   r$   rc   pickleloadsdumpsr   )	re   r   rJ   r   rf   r#   r   rg   rh   s	            r   test_pickleablez$_TestRBFInterpolator.test_pickleable  s     QRYY-B-B:-NOcjjnB**Q-D!14a$Aq!t2V\\&1248u51r   N)#__name__
__module____qualname__r   markparametrizesortedr	   ri   rk   r   rq   ry   slowr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   skip_xp_backendsr   r   r    r   r   rX   rX   V   s   [[Xv.>'?@1 A1 [[Xv.>'?@1 A1 [[Xvj'9:1 ;1<12 [[!1 !1F,*+& [[Xvj'9: ;$ [[Xvj'9: ;" [[Xvj'9: ;<,0 2,	0 9OD k*WXf%RS< T Y<"2r   rX   c                   $    e Zd Zd Zd Zd Zd Zy) TestRBFInterpolatorNeighborsNonec                     t        |i |S Nr   re   r~   r   s      r   rc   z&TestRBFInterpolatorNeighborsNone.build  s    ///r   c                    t        ddt        j                  j                               }d}d}d|j                  d      z  }d|j                  d      z  }t	        |t              } | j                  ||||      |      }t        ||      }t        ||      }	|	j                  t        j                  j                  ||d       d	         }
t        ||
d
       y )Nr   Fr6   r       חArZ   r   r   rcondr   r_   r`   )r   r;   r<   r=   r$   rc   r   rC   r@   lstsqr   re   rJ   r   r   r   rf   r#   rg   rM   rw   rh   s              r   test_smoothing_limit_1dz8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_1d  s     QRYY-B-B-DE	cjjnBa$

q   	 F#D&)AT:1=>u40r   c                    t        ddt        j                  j                               }d}d}|j                  d      }|j                  d      }t	        |t              } | j                  ||||      |      }t        ||      }t        ||      }	|	j                  t        j                  j                  ||d       d	         }
t        ||
d
       y )Nr'   Fr6   r   r   r4   r   r   r   r_   r`   )r   r;   r<   r=   r2   rc   r   rC   r@   r   r   r   s              r   test_smoothing_limit_2dz8TestRBFInterpolatorNeighborsNone.test_smoothing_limit_2d  s     QRYY-B-B-DE	JJsOzz#a$

q   	 F#D&)AT:1=>u40r   c                    t        j                  ddgddgddgddgg      }t        j                  g d      }t        j                  t        d      5  t        ||j                  d	d
             d d d        y # 1 sw Y   y xY w)Nr^   rs   gNr=r*   g      @)rs   rs   rs   r[   zSingular matrixr   rT   r   )r;   arrayr   r   r   r   reshape)re   pointsvaluess      r   test_singularz.TestRBFInterpolatorNeighborsNone.test_singular  s     3Z3Z*+3Z
 ./]];.?@ 	;FFNN2q$9:	; 	; 	;s   A::BN)r   r   r   rc   r   r   r  r   r   r   r   r     s    01012;r   r   Tzneighbors not None uses KDTree)np_onlyr   c                       e Zd Zd Zd Zd Zy)TestRBFInterpolatorNeighbors20c                      t        |i |ddiS )N	neighborsr   r   r   s      r   rc   z$TestRBFInterpolatorNeighbors20.build  s    =="==r   c           	         t        ddt        j                  j                               }|j                  d      }|j                  d      }t	        |t              } | j                  ||      |      }g }t        |      }|D ]D  }|j                  |d      \  }	}
|j                   t        ||
   ||
         |d          d          F t        ||d       y )	Nr'   Fr6   r4   r   r   r_   r`   )r   r;   r<   r=   r2   rc   r   queryappendr   r   )re   rJ   r   rf   r#   rg   rh   treexirK   nbrs              r   #test_equivalent_to_rbf_interpolatorzBTestRBFInterpolatorNeighbors20.test_equivalent_to_rbf_interpolator  s    QRYY-B-B-DEJJsOzz#a$ 

1a &qz 	GBZZB'FAsLL8338DB1EF	G 	u40r   c                    t        ddt        j                  j                  d            }|j                  d      }|j                  d      }t	        |t              }| j                  ||      }d }t        d|||       y )Nr'   Fr   r6   r4   c                      ||       y r   r   )rK   r   r   s      r   	worker_fnzBTestRBFInterpolatorNeighbors20.test_concurrency.<locals>.worker_fn9  s	    2Jr   r)   )r   r;   r<   r=   r2   rc   r   )re   rJ   r   rf   r#   r   r  s          r   test_concurrencyz/TestRBFInterpolatorNeighbors20.test_concurrency.  sl     QRYY-B-B1-EFJJsOzz#a$Aq!	 	 Ivt<r   N)r   r   r   rc   r  r  r   r   r   r  r    s    >1$=r   r  c                       e Zd Zd Zd Zy)TestRBFInterpolatorNeighborsInfc                 <    t        |i |dt        j                  iS )Nr  )r   r;   infr   s      r   rc   z%TestRBFInterpolatorNeighborsInf.buildC  s    AA"&&AAr   c                 8   t        ddt        j                  j                               }d|j                  d      z  }d|j                  d      z  }t	        |t              } | j                  ||      |      } t        ||      |      }t        ||d       y )Nr   Fr6   r   rZ   r_   r`   )r   r;   r<   r=   r$   rc   r   r   )re   rJ   r   rf   r#   rg   rh   s          r   r  zCTestRBFInterpolatorNeighborsInf.test_equivalent_to_rbf_interpolatorF  s    QRYY-B-B-DEcjjnBa$ 

1a &%1%d+u40r   N)r   r   r   rc   r  r   r   r   r  r  ?  s    B
1r   r  )$r   r   numpyr;   numpy.linalgr   scipy._lib._array_apir   r   scipy.stats.qmcr   scipy.spatialr   scipy.interpolate._rbfinterpr   r	   r
   r   r   scipy.interpolater   scipy._lib._testutilsr   r   r   r   r$   r2   rR   r   r   rV   rX   r   r  r  r   r   r   <module>r!     s	      $ D " !  1 9;;//   " 4	> 6*#56: 7:w2 w2t ?#A;'; A; $A;H $'GH?#%=%9 %= $ I%=P $'GH1&F 1 I1r   