
    {KgY                     J   d Z ddlmZ ddlZddl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mZmZ ddlmZmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZm Z  ddl!m"Z"m#Z#m$Z$ d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/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5  G d d      Z6d Z7ejp                  js                  de5      d        Z:d Z;d Z<d Z=ejp                  js                  de5      d        Z>d Z?d Z@d  ZAd! ZBd" ZCd# ZDd$ ZEd% ZFejp                  js                  d& ed'      d'g      ejp                  js                  d(ed)fed*fg      d+               ZGejp                  js                  d,d-eHfd.eIfd/ eIfg      ejp                  js                  d0eeg      d1               ZJejp                  js                  d2dd)g      d3        ZKd4 ZLd5 ZMejp                  js                  g d6d7d*d7 ej                  g d8      gd7d)d7 ej                  g d9      gd7d*d: ej                  g d;      gd7d)d: ej                  g d<      gd7d*d= ej                  d7d*g      gd7d)d= ej                  g d>      gd7d*d* ej                  d7d*g      gd7d)d* ej                  d7d)g      gd*d*d: ej                  d*g      gd*d)d7 ej                  d*d)g      gd*d)d: ej                  d*d)g      gg      d?        ZOejp                  js                  d@eeg      dA        ZPejp                  js                  d@eeg      dB        ZQejp                  js                  d@eeg      ejp                  js                  dCeeeg      dD               ZRdE ZSejp                  js                  dFedGfedHfg      dI        ZTy)Jz'
Testing Recursive feature elimination
    )
attrgetterN)assert_allcloseassert_array_almost_equalassert_array_equal)BaseEstimatorClassifierMixin)TransformedTargetRegressor)CCAPLSCanonicalPLSRegression)	load_irismake_classificationmake_friedman1)RandomForestClassifier)RFERFECV)SimpleImputer)LinearRegressionLogisticRegression)
get_scorermake_scorerzero_one_loss)
GroupKFoldcross_val_score)make_pipeline)StandardScaler)SVCSVR	LinearSVR)check_random_state)ignore_warnings)CSR_CONTAINERSc                   L    e Zd ZdZd
dZd Zd ZeZeZeZ	ddZ
ddZd Zd	 Zy)MockClassifierz@
    Dummy classifier to test recursive feature elimination
    c                     || _         y N	foo_param)selfr(   s     l/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/feature_selection/tests/test_rfe.py__init__zMockClassifier.__init__"   s	    "    c                     t        |      t        |      k(  sJ t        j                  |j                  d   t        j                        | _        | S )N   )dtype)lennponesshapefloat64coef_r)   Xys      r*   fitzMockClassifier.fit%   s;    1vQWWQWWQZrzz:
r,   c                      |j                   d   S )Nr   )r3   )r)   Ts     r*   predictzMockClassifier.predict*   s    wwqzr,   Nc                      y)Ng         r6   s      r*   scorezMockClassifier.score1       r,   c                     d| j                   iS )Nr(   r'   )r)   deeps     r*   
get_paramszMockClassifier.get_params4   s    T^^,,r,   c                     | S r&   r>   )r)   paramss     r*   
set_paramszMockClassifier.set_params7   s    r,   c                 
    ddiS )N	allow_nanTr>   )r)   s    r*   
_more_tagszMockClassifier._more_tags:   s    T""r,   )r   )NN)T)__name__
__module____qualname____doc__r+   r9   r<   predict_probadecision_function	transformr?   rC   rF   rI   r>   r,   r*   r$   r$      s<    #
 MI-#r,   r$   c                      t        d      } t               }t        j                  |j                  | j                  t        |j                        df      f   }|j                  }t        d| d      }t        |dd	      }|j                  ||       t        |j                        |j                  d
   k(  sJ t        d      }t        |dd	      }|j                  ||       t        |j                         |j                                y )Nr      size      )n_estimatorsrandom_state	max_depth   皙?	estimatorn_features_to_selectstepr.   linearkernel)r    r   r1   c_datanormalr0   targetr   r   r9   ranking_r3   r   r   get_support)	generatoririsr7   r8   clfrfeclf_svcrfe_svcs           r*   test_rfe_features_importancero   >   s    "1%I;D 	dii))DII/B)CCDAA
 byTU
VC
!#
>CGGAqMs||
***"GG!#FGKK1 s('*=*=*?@r,   csr_containerc                    t        d      }t               }t        j                  |j                  |j                  t        |j                        df      f   } | |      }|j                  }t        d      }t        |dd      }|j                  ||       |j                  |      }|j                  ||       t        |j                        |j                  d	   k(  sJ t        d      }	t        |	dd      }
|
j                  ||       |
j                  |      }|j                  |j                  j                  k(  sJ t        |d d
 |j                  d d
        t        |j                  |      |j                  |j                               |j!                  ||      |j!                  |j                  |j                        k(  sJ t        ||j#                                y )Nr   rR   rS   r`   ra   rZ   r[   r\   r.   
   )r    r   r1   rc   rd   re   r0   rf   r   r   r9   rP   rg   r3   r   r<   r?   toarray)rp   ri   rj   r7   X_sparser8   rk   rl   X_r
clf_sparse
rfe_sparse
X_r_sparses               r*   test_rfery   S   s   "1%I;D 	dii))DII/B)CCDAQHA X
C
!#
>CGGAqM
--
CGGCOs||
*** H%JzLJNN8Q%%h/J99		'''c#2h		#27ckk!nckk$)).DE99Q?cii		4;;????c:#5#5#78r,   c                      G d dt         t              } t        d      \  }}t        j                  t
        d      5  t         |              j                  ||       d d d        t        j                  t
        d      5  t         |              j                  ||d	
      j                  ||       d d d        t         |              j                  ||d	
      j                  ||d	
       y # 1 sw Y   xY w# 1 sw Y   KxY w)Nc                       e Zd ZddZddZy)0test_RFE_fit_score_params.<locals>.TestEstimatorNc                     |t        d      t        d      j                  ||      | _        | j                  j                  | _        | S )Nfit: prop cannot be Noner`   ra   )
ValueErrorr   r9   svc_r5   r)   r7   r8   props       r*   r9   z4test_RFE_fit_score_params.<locals>.TestEstimator.fitw   s@    | !;<<8,00A6DIDJKr,   c                 T    |t        d      | j                  j                  ||      S )Nscore: prop cannot be None)r   r   r?   r   s       r*   r?   z6test_RFE_fit_score_params.<locals>.TestEstimator.score~   s(    | !=>>99??1a((r,   r&   )rJ   rK   rL   r9   r?   r>   r,   r*   TestEstimatorr|   v   s    		)r,   r   T
return_X_yr~   matchr]   r   foo)r   )	r   r   r   pytestraisesr   r   r9   r?   )r   r7   r8   s      r*   test_RFE_fit_score_paramsr   s   s    ) ) %DAq	z)C	Dmo&**1a0 
E	z)E	Fmo&**1ae*<BB1aH 
G -/"&&q!%&8>>q!%>P 
E	D	F	Fs   "C64D6C?Dc                     t        d      } t               }t        j                  |j                  | j                  t        |j                        df      f   }|j                  }t        d      }t        |dd      }|j                  ||       t        |d	d      }|j                  ||       t        |j                  |j                         t        |j                  |j                         y )
Nr   rR   rS   r`   ra   rZ   r[   r\   g?)r    r   r1   rc   rd   re   r0   rf   r   r   r9   r   rg   support_)ri   rj   r7   r8   rk   rfe_numrfe_percs          r*   test_rfe_percent_n_featuresr      s    "1%I;D 	dii))DII/B)CCDAA
X
CCacBGKK1SsEHLLAx(('*:*:;x(('*:*:;r,   c                      t        d      } t               }t        j                  |j                  | j                  t        |j                        df      f   }|j                  }t               }t        |dd      }|j                  ||       |j                  |      }|j                  ||       t        |j                        |j                  d   k(  sJ |j                  |j                  j                  k(  sJ y )Nr   rR   rS   rZ   r[   r\   r.   )r    r   r1   rc   rd   re   r0   rf   r$   r   r9   rP   rg   r3   )ri   rj   r7   r8   rk   rl   ru   s          r*   test_rfe_mockclassifierr      s    "1%I;D 	dii))DII/B)CCDAA 
C
!#
>CGGAqM
--
CGGCOs||
***99		'''r,   c                 6   t        d      }t               }t        j                  |j                  |j                  t        |j                        df      f   }t        |j                        }t        t        d      d      }|j                  ||       |j                  j                         D ],  }t        |j                  |         |j                  d   k(  r,J  t        |j                        |j                  d   k(  sJ |j!                  |      }t#        ||j                         t        t        d      d      } | |      }	|j                  |	|       |j!                  |	      }
t#        |
j%                         |j                         t'        t(        d	      }t        t        d      d|
      } t+        |j                        ||       |j!                  |      }t#        ||j                         t-        d      }t        t        d      d|
      }|j                  ||       |j!                  |      }t#        ||j                         d }t        t        d      d|
      }|j                  ||       |j.                  dk(  sJ t        t        d      d      }|j                  ||       |j                  j                         D ]  }t        |j                  |         dk(  rJ  t        |j                        |j                  d   k(  sJ |j!                  |      }t#        ||j                         t        t        d      d      } | |      }	|j                  |	|       |j!                  |	      }
t#        |
j%                         |j                         t        t        d      d      } | |      }	|j                  |	|       |j!                  |	      }
t#        |
j%                         |j                         y )Nr   rR   rS   r`   ra   r.   r]   r_   F)greater_is_better)r]   r_   scoringaccuracyc                      y)Ng      ?r>   )r]   r7   r8   s      r*   test_scorerztest_rfecv.<locals>.test_scorer   r@   r,   rV   皙?)r    r   r1   rc   rd   re   r0   listrf   r   r   r9   cv_results_keysr3   rg   rP   r   rs   r   r   r!   r   n_features_)rp   ri   rj   r7   r8   rfecvkeyru   rfecv_sparsert   rx   r   scorerr   s                 r*   
test_rfecvr      sZ   "1%I;D 	dii))DII/B)CCDAT[[A Cx0q9E	IIaO   %%'5$$S)*aggaj888 ( u~~!''!*,,,
//!
C sDII& 3h#7a@LQHXq!''1Jz))+TYY7 -5AGCx0q'JEOEIIq!$
//!
CsDII& 
#FCx0q&IE	IIaO
//!
CsDII& Cx0q+NE	IIaO !!! Cx0q9E	IIaO  %%'5$$S)*a/// ( u~~!''!*,,,
//!
CsDII&3h#7a@LQHXq!''1Jz))+TYY7 3h#7cBLQHXq!''1Jz))+TYY7r,   c                     t        d      } t               }t        j                  |j                  | j                  t        |j                        df      f   }t        |j                        }t        t               d      }|j                  ||       |j                  j                         D ],  }t        |j                  |         |j                  d   k(  r,J  t        |j                        |j                  d   k(  sJ y )Nr   rR   rS   r.   r   )r    r   r1   rc   rd   re   r0   r   rf   r   r$   r9   r   r   r3   rg   )ri   rj   r7   r8   r   r   s         r*   test_rfecv_mockclassifierr     s    "1%I;D
dii))DII/B)CCDAT[[A N,15E	IIaO   %%'5$$S)*aggaj888 ( u~~!''!*,,,r,   c                     dd l } ddlm}  |       | _        t	        d      }t               }t        j                  |j                  |j                  t        |j                        df      f   }t        |j                        }t        t        d      dd      }|j                  ||       | j                  }|j!                  d       t        |j#                               dkD  sJ y )	Nr   )StringIOrR   rS   r`   ra   r.   )r]   r_   verbose)sysior   stdoutr    r   r1   rc   rd   re   r0   r   rf   r   r   r9   seekreadline)r   r   ri   rj   r7   r8   r   verbose_outputs           r*   test_rfecv_verbose_outputr     s    CJ"1%I;D
dii))DII/B)CCDAT[[ACx0q!DE	IIaOZZN~&&()A---r,   c                    t        |       }t               }t        j                  |j                  |j                  t        |j                        df      f   }t        |j                        }ddgddgddgfD ]  \  }}t        t               ||      }|j                  ||       t        j                  |j                  d   |z
  |z        dz   }|j                  j                         D ]  }	t        |j                  |	         |k(  rJ  t        |j                         |j                  d   k(  sJ |j"                  |k\  rJ  y )NrR   rS   rV   r.      r]   r_   min_features_to_select)r    r   r1   rc   rd   re   r0   r   rf   r   r$   r9   ceilr3   r   r   rg   r   )
global_random_seedri   rj   r7   r8   r_   r   r   	score_lenr   s
             r*   test_rfecv_cv_results_sizer   )  s2   "#56I;D
dii))DII/B)CCDAT[[A +,Q!Q!Q(@$$$&#9

 			!QGGQWWQZ*@@DHIAM	$$))+Cu((-.);;; , 5>>"aggaj000  $:::: )Ar,   c                      t        t        d            } | j                  dk(  sJ t               }t	        | |j
                  |j                        }|j                         dkD  sJ y )Nr`   ra   
classifiergffffff?)r   r   _estimator_typer   r   rd   rf   min)rl   rj   r?   s      r*   test_rfe_estimator_tagsr   B  sV    
c"
#C,...;DCDKK8E99;r,   c                    d}t        d||       \  }}|j                  \  }}t        d      }t        |d      }|j	                  ||      }|j
                  j                         |dz  k(  sJ t        |d	      }|j	                  ||      }|j
                  j                         |dz  k(  sJ t        |d
      }|j	                  ||      }|j
                  j                         |dz  k(  sJ y )Nrr   2   	n_samples
n_featuresrX   r`   ra   g{Gz?r_   rV   r      )r   r3   r   r   r9   r   sum)r   r   r7   r8   r   r]   selectorsels           r*   test_rfe_min_stepr   K  s    J:LDAq GGIz8$I 94(H
,,q!
C<<q000 94(H
,,q!
C<<q000 91%H
,,q!
C<<q000r,   c                    d }d }ddg}ddg}ddg}t        |||      D ]  \  }}}t        |       }	|	j                  d|f      }
|	j                  d      j	                         }t        t        d	      ||
      }|j                  |
|       t        j                  |j                         ||||      k(  sJ t        j                  |j                         ||||      k(  rJ  d}ddg}ddg}t        ||      D ]  \  }}t        |       }	|	j                  d|f      }
|	j                  d      j	                         }t        t        d	      |      }|j                  |
|       |j                  j                         D ]L  }t        |j                  |          ||||      k(  sJ t        |j                  |          ||||      k(  rLJ   y )Nc                 $    d| |z   |z
  dz
  |z  z   S Nr.   r>   r   r^   r_   s      r*   formula1z4test_number_of_subsets_of_features.<locals>.formula1l  s"    Z$&)==AdJKKr,   c                 P    dt        j                  | |z
  t        |      z        z   S r   )r1   r   floatr   s      r*   formula2z4test_number_of_subsets_of_features.<locals>.formula2o  s%    277J)==tLMMMr,      r   rV   d   rS   r`   ra   r\   r.   rr   r   )zipr    re   randroundr   r   r9   r1   maxrg   r   r   r   r0   )r   r   r   n_features_listn_features_to_select_list	step_listr   r^   r_   ri   r7   r8   rl   r   r   s                  r*   "test_number_of_subsets_of_featuresr   c  s   LN 2hO!"AAI252I3.
($ ''9:	3
"34NN3%%'*!5

 	1vvcll#x
<PRV'WWWWvvcll#x
<PRV'WWWW32 2hOAI;
D&'9:	3
"34NN3%%'8 44@		!Q$$))+Cu((-.(0$3    u((-.(0$3   	 , <r,   c                    t        |       }t               }t        j                  |j                  |j                  t        |j                        df      f   }|j                  }t        t        d            }|j                  ||       |j                  }|j                  }|j                  d       |j                  ||       t        |j                  |       |j                         |j                  j                         k(  sJ |j                         D ],  }||   t!        j"                  |j                  |         k(  r,J  y )NrR   rS   r`   ra   r   rV   )n_jobs)r    r   r1   rc   rd   re   r0   rf   r   r   r9   rg   r   rF   r   r   r   approx)	r   ri   rj   r7   r8   r   rfecv_rankingrfecv_cv_results_r   s	            r*   test_rfe_cv_n_jobsr     s   "#56I;D
dii))DII/B)CCDAACx01E	IIaONNM))	A	IIaOennm<!!#u'8'8'='='???? %%' %u7H7H7M)NNNN (r,   c            	         t        d      } t               }d}t        j                  t        j                  d|t        |j                                    }|j                  }|j                  dkD  j                  t              }t        t        |       ddt        d            }|j                  |||	       |j                  dkD  sJ y )
Nr   rZ   rX   r.   r   rV   )n_splits)r]   r_   r   cv)groups)r    r   r1   floorlinspacer0   rf   rd   astypeintr   r   r   r9   r   )ri   rj   number_groupsr   r7   r8   
est_groupss          r*   test_rfe_cv_groupsr     s    "1%I;DMXXbkk!]C4DEFF		A	q  %A(i@q!	J NN1aN'!!A%%%r,   importance_getterzregressor_.coef_zselector, expected_n_featuresr   rZ   c                    t        ddd      \  }}t        d      }t        |t        j                  t        j
                        } |||       }|j                  ||      }|j                  j                         |k(  sJ y )Nr   rr   r   r   r   	regressorfuncinverse_funcr   )	r   r   r	   r1   logexpr9   r   r   )r   r   expected_n_featuresr7   r8   r]   log_estimatorr   s           r*   test_rfe_wrapped_estimatorr     st     B2AFDAqq)I."&&rvvM 9JKH
,,q!
C<<!4444r,   zimportance_getter, err_typeautorandomc                     | j                   S r&   )
importance)xs    r*   <lambda>r     s    1<<r,   Selectorc                    t        ddd      \  }}t               }t        |t        j                  t        j
                        }t        j                  |      5   |||       }|j                  ||       d d d        y # 1 sw Y   y xY w)Nr   rr   *   r   r   r   )	r   r   r	   r1   r   r   r   r   r9   )r   err_typer  r7   r8   r]   r   models           r*   %test_rfe_importance_getter_validationr    sj     B2BGDAqI."&&rvvM 
x	 :KL		!Q 
!	 	 s   BB
r   c                 2   t               }|j                  }|j                  }t        j                  |d   d<   t        j
                  |d   d<   t               }| t        ||       }nt        |      }|j                  ||       |j                  |       y )Nr   r.   )r]   r   r   )r   rd   rf   r1   naninfr$   r   r   r9   rP   )r   rj   r7   r8   rk   rl   s         r*   test_rfe_allow_nan_inf_in_xr
    s{    ;D		AA ffAaDGffAaDG

C	~cb)C GGAqMMM!r,   c                      t        t               t                     } t        d      \  }}t	        | dd      }|j                  ||       |j                  |      j                  d   dk(  sJ y )NTr   rV   $named_steps.logisticregression.coef_)r^   r   r.   )r   r   r   r   r   r9   rP   r3   )pipelinerd   r8   sfms       r*   test_w_pipeline_2d_coef_r    sh    ^-/A/CDH4(GD!
@C GGD!==$$Q'1,,,r,   c                    t        |       }t               }t        j                  |j                  |j                  t        |j                        df      f   }|j                  }t        t        d            }|j                  ||       |j                  j                         D cg c]	  }d|v s| }}t        j                  |D cg c]  }|j                  |    c}      }t        j                  |d      }	t        j                  |d      }
t!        |j                  d	   |	       t!        |j                  d
   |
       y c c}w c c}w )NrR   rS   r`   ra   r   splitr   )axismean_test_scorestd_test_score)r    r   r1   rc   rd   re   r0   rf   r   r   r9   r   r   asarraymeanstdr   )r   ri   rj   r7   r8   r   r   
split_keys	cv_scoresexpected_meanexpected_stds              r*   test_rfecv_std_and_meanr    s   "#56I;D
dii))DII/B)CCDAACx01E	IIaO!&!2!2!7!7!9L!9#W^#!9JL

jIjsE--c2jIJIGGIA.M66)!,LE%%&78-HE%%&67F MIs   *	E4EE)r   r   r_   cv_results_n_featuresr.   )r.   rV   r   rZ   )r.   rV   r   rZ   r   rV   )r.   rV   rZ   )r.   r   r   r   )r.   rV   r   c                    t        d||d      \  }}t        t        d      ||       j                  ||       t	        j
                  d   |       t        fdj
                  j                         D              sJ y )	NrU   r   )r   r   n_informativen_redundantr`   ra   r   r   c              3   f   K   | ](  }t        |      t        j                  d          k(   * yw)r   N)r0   r   ).0valuer   s     r*   	<genexpr>z3test_rfecv_cv_results_n_features.<locals>.<genexpr>E  s2      /E 	E
c%++L9::/s   .1)r   r   r   r9   r   r   allvalues)r   r   r_   r  r7   r8   r   s         @r*    test_rfecv_cv_results_n_featuresr'  %  s    , :STDAq X&5E
 
IIaOu((68MN &&--/   r,   ClsRFEc                     t         j                  j                  d      }t         j                  j                  dd      }t	        d      } | |      }|j                  ||       y )N)rr   r   rS   rV   )rr   rV   r   )rW   )r1   r   re   randintr   r9   )r(  r7   r8   rk   rfe_tests        r*   test_multioutputr,  K  sS    
		g&A
		!'*A
 a
0Cc{HLLAr,   c                     t        d      \  }}t        j                  |d<   t        t	               t               t                     } | |d      }|j                  ||       y)z`Check that RFE works with pipeline that accept nans.

    Non-regression test for gh-21743.
    Tr   )r   r   r  )r]   r   N)r   r1   r  r   r   r   r   r9   )r(  r7   r8   pipefss        r*   test_pipeline_with_nansr0  T  s[     %DAqffAdGD 
@
B FF1aLr,   PLSEstimatorc                     t        ddd      \  }} |d      } | |d      j                  ||      }|j                  ||      dkD  sJ y	)
zCheck the behaviour of RFE with PLS estimators.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/12410
    r   rr   r   r   r.   )n_componentsr   g      ?N)r   r9   r?   )r(  r1  r7   r8   r]   r   s         r*   test_rfe_plsr4  j  sR     B2AFDAq!,Iia(,,Q2H>>!Q#%%%r,   c                     t               } t        t                     }d}d}t        j                  t
        |      5 }|j                  | j                  | j                        j                  | j                         ddd       t        j                  j                  t
              sJ |t        |j                  j                        v sJ y# 1 sw Y   SxY w)a  Check that we raise the proper AttributeError when the estimator
    does not implement the `decision_function` method, which is decorated with
    `available_if`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28108
    r   z/This 'RFE' has no attribute 'decision_function'z>'LinearRegression' object has no attribute 'decision_function'r   N)r   r   r   r   r   AttributeErrorr9   rd   rf   rO   
isinstancer#  	__cause__str)rj   rl   	outer_msg	inner_msg	exec_infos        r*   "test_rfe_estimator_attribute_errorr=  x  s     ;D (*
+CAIPI	~Y	79		4;;'99$))D 
8ioo//@@@IOO556666 
8	7s   A CCzClsRFE, paramr^   r   c                     t        dd      \  }}t        j                  t        | d      5   | d	dt	               i|di}|j                  ||       ddd       y# 1 sw Y   yxY w)
zCheck if the correct warning is raised when trying to initialize a RFE
    object with a n_features_to_select attribute larger than the number of
    features present in the X variable that is passed to the fit method
    rU   r   )r   rX   z=21 > n_features=20r   r]      Nr>   )r   r   warnsUserWarningr   r9   )r(  paramr7   r8   clsrfes        r*   %test_rfe_n_features_to_select_warningrD    sa     "1=DAq	kE72E)F	G F"4"6F5"+F

1a	 
H	G	Gs   'AA()UrM   operatorr   numpyr1   r   numpy.testingr   r   r   sklearn.baser   r   sklearn.composer	   sklearn.cross_decompositionr
   r   r   sklearn.datasetsr   r   r   sklearn.ensembler   sklearn.feature_selectionr   r   sklearn.imputer   sklearn.linear_modelr   r   sklearn.metricsr   r   r   sklearn.model_selectionr   r   sklearn.pipeliner   sklearn.preprocessingr   sklearn.svmr   r   r   sklearn.utilsr    sklearn.utils._testingr!   sklearn.utils.fixesr"   r$   ro   markparametrizery   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6  r  r
  r  r  arrayr'  r,  r0  r4  r=  rD  r>   r,   r*   <module>r[     s       X X 7 6 H H K K 3 0 ( E B B ? * 0 + + , 2 .# #BA* .99 :9>Q2<(($ .9N8 :N8b-".(;210>BO*&$ *%78:LM 8C8eQZ:PQ5 R5 !		>"	0 c5\2	 3	 ay) *$-G" M	
Aq("((<()	
Aq("((?+,	
Aq("((9%&	
Aq("((9%&	
Aq("((Aq6"#	
Aq("((9%&	
Aq("((Aq6"#	
Aq("((Aq6"#	
Aq("((A3- 	
Aq("((Aq6"#	
Aq("((Aq6"# ! , C<0 1 C<0 1* C<0#|])KL	& M 1	&7, s23e=U5VWr,   