
    _ZhRb                        S SK r S SKrS SKrS SKJr  S SKrS SKrS SKrS SKr	S SK r S SK
JrJr  S\4S jrS rS rS r " S	 S
5      r\R&                  " 5       rS\4S jr " S S\5      r " S S5      r " S S\R4                  5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r \\\\ /r! " S S5      r" " S S\"5      r#g)     N)deepcopy)viewsutilsreturnc                 T    Sn[         R                  " X5      nUR                  S5      $ )Nz(\S+)\s+\((\S+)\)   )rematchgroup)	test_nameregexr
   s      ,/home/xtuchyna/git/mutpy/mutpy/controller.pyget_full_test_namer      s#     EHHU&E;;q>    c                 $   ^ [        U4S jU 5      $ )z&Get RTF series give test constraint m.c                    > TU :  a  U $ S$ Nr    )xrapfd_constraint_ms    r   <lambda> get_rtf_series.<locals>.<lambda>   s    0A5<1<r   )map)first_killersr   s    `r   get_rtf_seriesr      s    <mLLr   c                 4    U  Vs/ sH  oS   PM	     sn$ s  snf )zUFrom list of killers for all killed mutants, return the first killer for each mutant.r   r   )kill_order_per_mutationstest_orderss     r   get_first_killersr      s    .FG.F{N.FGGGs   c                 J    [        S U 5      n[        [        U5      5      U-  $ )z.Get cumulative step sum of covered fault area.c                     U S:g  $ r   r   phis    r   r   ?get_cumulative_step_sum_of_covered_fault_area.<locals>.<lambda>    s    r   )r   lenlist)
rtf_seriesall_mutantsfaults_detected_by_first_ms      r   -get_cumulative_step_sum_of_covered_fault_arear*      s&    !$%9:!F024{BBr   c                   &    \ rS rSrS rS rS rSrg)CompareOutputs$   c                 :    [         R                  " S5      U l        g )Nen_core_web_sm)spacyloadnlpselfs    r   __init__CompareOutputs.__init__&   s    ::./r   c                     [         R                  " SSUR                  5       5      n[         R                  " SSUR                  5       5      nX4:X  a  gU R                  X45      $ )N\s+ T)r	   substripis_same_using_cosine)r4   text1text2normalized_text1normalized_text2s        r   is_same_outputCompareOutputs.is_same_output)   sO    66&#u{{}=66&#u{{}=/(()9LLr   c                 Z    [        U5      n[        U5      nUR                  U5      nUS:  $ )Ng?)r2   
similarity)r4   output_originaloutput_mutantdoc1doc2rD   s         r   r<   #CompareOutputs.is_same_using_cosine:   s1    ?#=! __T*
D  r   )r2   N)__name__
__module____qualname____firstlineno__r5   rA   r<   __static_attributes__r   r   r   r,   r,   $   s    0M"!r   r,   c                     [         R                  " SSU R                  5       5      n[         R                  " SSUR                  5       5      nX#:H  $ )Nr8   r9   )r	   r:   r;   )output1output2normalized_output1normalized_output2s       r   rA   rA   F   s?    W]]_=W]]_= 33r   c                       \ rS rSrSS jrSrg)TestsFailAtOriginalO   Nc                     Xl         g Nresult)r4   rZ   s     r   r5   TestsFailAtOriginal.__init__Q   s    r   rY   rX   )rJ   rK   rL   rM   r5   rN   r   r   r   rU   rU   O   s    r   rU   c                   l    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS r\S 5       rSrg)MutationScoreU   c                     SU l         SU l        SU l        SU l        SU l        SU l        / U l        0 U l        0 U l        / U l	        / U l
        / U l        SU l        S U l        S U l        SU l        S U l        g )Nr      )killed_mutantstimeout_mutantsincompetent_mutantssurvived_mutantscovered_nodes	all_nodesoverall_mutationskiller_matrixper_mutant_statsapfd_buffer
test_orderr   	test_sizeapfdrapfdr   r'   r3   s    r   r5   MutationScore.__init__W   s     #$  !!# "(*%	
"$r   c                    U R                   b  U R                   $ S[        U R                   Vs/ sH  oS   PM	     sn5      U R                  U R                  -  -  -
  SSU R                  -  -  -   U l         U R                   $ s  snf )N   r   r   )rm   sumr   rl   r(   )r4   killer_testss     r   get_apfd_scoreMutationScore.get_apfd_scoren   s    99 99151N1NO1N!_1NO
^^d...0 023q4>>7I2JK	 yy Ps   B
c                    ^  T R                   b  T R                   $ T R                   Vs/ sH  oS   PM	     nn[        U 4S jU5      $ s  snf )Nr   c                 ,   > TR                   U :  a  U $ S$ r   )r   )r   r4   s    r   r   .MutationScore.get_rtf_series.<locals>.<lambda>}   s    $"9"9Q">QEAEr   )r'   r   r   )r4   r   r   s   `  r   r   MutationScore.get_rtf_seriesx   sI    ??&??";?;X;XY;XKQ;XYE}UU Zs   Ac                 z    [        S U R                  5       5      n[        [        U5      5      U R                  -  $ )Nc                     U S:g  $ r   r   r"   s    r   r   MMutationScore.get_cumulative_step_sum_of_covered_fault_area.<locals>.<lambda>   s    SAXr   )r   r   r%   r&   r(   )r4   r)   s     r   r*   ;MutationScore.get_cumulative_step_sum_of_covered_fault_area   s5    %()=t?R?R?T%U"D4684;K;KKKr   c                     U R                   b  U R                   $ U R                  5       nU[        U R                  5       5      U R                  U R
                  -  -  -
  U l         U R                   $ rX   )rn   r*   rr   r   r   r(   )r4   p_ms     r   get_rapfd_scoreMutationScore.get_rapfd_score   s_    ::!::@@B3 3 3 574;R;RUYUeUe;eff
zzr   c                   ^ [        SU R                  S-   5       Vs/ sH  oPM     nnUR                  5       n[        R                  " U5        [        USS9 VVs0 sH  u  pEXT_M	     snnmU4S jnU R                  R                  5        VVs0 sH  u  pxXv" U5      _M     n	nn/ n
U R                   H2  n[        U Vs/ sH  nTU   PM
     sn5      nU
R                  U5        M4     [        U
5      n[        XR                  5      n[        XR                  5      nU[!        U5      U R                  U R                  -  -  -
  $ s  snf s  snnf s  snnf s  snf )Nrq   )startc                    > TU    $ rX   r   )original_indexswap_maps    r   get_swapped_index9MutationScore.get_random_rapfd.<locals>.get_swapped_index   s    N++r   )rangerl   copyrandomshuffle	enumeraterk   itemsr   sortedappendr   r   r   r*   r(   rr   )r4   ioriginal_indicesshuffledneworiginalr   kvnew_test_ordernew_killers_orderskiller_orderith_test"new_killer_order_per_killed_mutantr   r'   r   r   s                    @r   get_random_rapfdMutationScore.get_random_rapfd   s]    (-Qt~~a/?'@A'@!A'@A $((*x  8AQR7ST7SmcHM7ST	, =AOO<Q<Q<ST<SSQ!-a00<ST   99L17]i9j]iQY(8:L]i9j1l.%%&HI : **<=#M3J3JK
 <JHXHXYS*&$*A*ADDTDT*TUUUO B U U :ks   
EEE E
c                     U R                   U R                  -
  nU(       a  U R                  U R                  -   U-  S-  $ S$ )Nd   r   )r(   rc   ra   rb   )r4   bottoms     r   countMutationScore.count   sA    !!D$<$<<RX$%%(<(<<F#M_^__r   c                 .    U =R                   S-  sl         g Nrq   )ra   r3   s    r   
inc_killedMutationScore.inc_killed   s    q r   c                 .    U =R                   S-  sl         g r   )rb   r3   s    r   inc_timeoutMutationScore.inc_timeout   s    !r   c                 .    U =R                   S-  sl         g r   )rc   r3   s    r   inc_incompetentMutationScore.inc_incompetent   s      A% r   c                 .    U =R                   S-  sl         g r   )rd   r3   s    r   inc_survivedMutationScore.inc_survived   s    "r   c                 X    U =R                   U-  sl         U =R                  U-  sl        g rX   )re   rf   )r4   re   rf   s      r   update_coverageMutationScore.update_coverage   s!    m+)#r   c                 h    U R                   U R                  -   U R                  -   U R                  -   $ rX   )ra   rb   rc   rd   r3   s    r   r(   MutationScore.all_mutants   s0    ""T%9%99D<T<TTW[WlWlllr   )rf   rm   rj   re   rc   r   ra   rh   rg   ri   rn   r   r'   rd   rk   rl   rb   N)rJ   rK   rL   rM   r5   rt   r   r*   r   r   r   r   r   r   r   r   propertyr(   rN   r   r   r   r]   r]   U   sY    .VL
*VX`!"&#$ m mr   r]   c                   $  ^  \ rS rSr SU 4S jjrS\SS4S jrS\SS4S jrS\SS4S jrS	 r	S
 r
S rS rS r\R                  S 5       rS r\R                  S 5       r\R                  S 5       rS rS rS rS rS rS rS rS rSrU =r$ )MutationController   Nc
                 :  > [         T
U ]  U5        X l        X0l        XPl        X`l        [        R                  " U5      U l        Xl	        U" U R                  U R
                  U R                  U5      U l
        0 U l        0 U l        / U l        [        5       U l        g rX   )superr5   target_loadertest_loadermutant_generatortimeout_factorr   StdoutManagerstdout_managermutation_numberrunnertest_results_matrixoriginal_failed_testsrj   r,   
comparator)r4   
runner_clsr   r   r   r   r   disable_stdoutmutate_coveredr   	__class__s             r   r5   MutationController.__init__   s    *& 0,#11.A. !1!143F3FH[H[]kl#% %'"(*r   folderr   c                 8   [        U R                  R                  5      n/ nU R                  R                  R	                  5        H)  u  pE[        U5      nXb-  S-  nUR                  XG/5        M+     [        R                  " USS/S9R                  US-   SS9  g )Nr   r   per_test_scorecolumnsz/per_test.csvFindex)	r%   scorerg   rh   r   r   pd	DataFrameto_csv)r4   r   overall_killed
csv_scoresr   	operatorsra   r   s           r   save_per_test MutationController.save_per_test   s    TZZ99:
$(JJ$<$<$B$B$D I ^N+<sBNy9:	 %E 	Z+7G)HIPPQWZiQiqvPwr   c                 6   / nU R                   R                  R                  5        HG  u  p4X@R                   R                  -  S-  nUR	                  U R
                  [        U5      U/5        MI     [        R                  " U/ SQS9R                  US-   SS9  g )Nr   )test_suite_namemutantper_mutant_scorer   z/per_mutant.csvFr   )
r   ri   r   r(   r   r   strr   r   r   )r4   r   r   r   num_of_killedr   s         r   save_per_mutant"MutationController.save_per_mutant   s    
%)ZZ%@%@%F%F%H!F,zz/E/EEKt33S[BRST &I 	Z)Z[bbcil}c}  FKb  	Lr   c                    U R                   U R                  R                  5       U R                  U R                  R                  U R                  R
                  U R                  R
                  U R                  R                  -  S-  U R                  R                  U R                  R                  U R                  R                  -  S-  U R                  R                  U R                  R                  U R                  R                  -  S-  U R                  R                  U R                  R                  U R                  R                  -  S-  S.n[        R                  " U/5      R                  US-   SS9  g )Nr   )r   mutation_scoretime_elapsedr(   killedkilled_prctgsurvivedsurvived_prctg
incopetentincopetent_prctgtimeouttimeout_prctgz/per_suite.csvFr   )r   r   r   durationr(   ra   rd   rc   rb   r   r   r   )r4   r   	csv_scores      r   save_per_suite!MutationController.save_per_suite   s    $ 4 4"jj..0 MM::11jj// JJ55

8N8NNQTT

33"jj99DJJ<R<RRUXX::99 $

 > >AWAW WZ] ]zz11!ZZ77$**:P:PPSVV
	  	i[!((2B)B%(Pr   c                     [        U R                  R                  R                  5       5      S   R	                  S5      S   U l        U R                  U5        U R                  U5        U R                  U5        g )Nr   .)	r&   r   rh   keyssplitr   r   r   r   )r4   r   s     r   save_edaMutationController.save_eda  sh    #DJJ$<$<$A$A$CDQGMMcRSTU 	6" 	V$ 	F#r   c                 z   U R                  U R                  R                  U R                  R                  5         [        R
                  " 5       nU R                  5         UR                  5       U l        U R                  U R                  U R                  5        g ! [         a;  nU R                  UR                  5        [        R                  " S5         S nAg S nAf[        R                    aF  nU R#                  UR$                  UR&                  5        [        R                  " S5         S nAg S nAff = f)N)notify_initializer   namesr   r   Timerrun_mutation_processstopr   
notify_endr   rU   notify_original_tests_failrZ   sysexitModulesLoaderExceptionnotify_cant_loadname	exception)r4   timererrors      r   runMutationController.run   s    t11779I9I9O9OP
	KKME%%'!JJLDMOODJJ6" 	++ELL9HHRLL++ 	!!%**eoo>HHRLL	s$   A B 
D:'1CD:4<D55D:c                     U R                  5       u  pnU Vs/ sH  oDS   PM	     nnU VVs/ sH  ofR                   H  owPM     M     nnnU VVs/ sH  ofR                   H  owPM     M     n	nnU	 H&  n[        UR                  5      n
XpR
                  U
'   M(     U R                  X5        U R                  X5        U R                  5         [        5       U l
        [        U5      [        U	5      -   U R                  l        U R                  U R                  l        U R                  R                  U VVs/ sH  tpKUPM     snn5       H  u  pU R!                  XU5        M     g s  snf s  snnf s  snnf s  snnf ! ["         a     g f = fr   )load_and_check_testspassedfailedr   r  r   print_test_resultsnotify_passednotify_startr]   r   r%   rl   rk   r   r1   mutate_moduleKeyboardInterrupt)r4   test_modulestotal_durationnumber_of_testsmoduleresultsrestestr  r  r   _target_module	to_mutates                 r   r   'MutationController.run_mutation_process.  s[   	<@<U<U<W9L//;<|Vay|G<&-Egs**$d*dgFE&-Egs**$d*dgFE.tyy9	8<**95  ##F3 |=&DJ#&v;V#<DJJ $(OODJJ! -1,>,>,C,C^jDk^jPZPVV^jDk,l(""=^L -m) =EE$ El  		sE   E? E(E? E-	E? E3-CE? 8E9
#E? (E? ?
FFc                     / nSnSnU R                   R                  5        HR  u  pEU R                  XE5      u  pgUR                  XFXW45        UR                  U l        X&R                  5       -  nX7-  nMT     XU4$ r   )r   r1   run_testr   rk   	tests_run)r4   r  r  r  test_moduletarget_testrZ   r   s           r   r  'MutationController.load_and_check_testsL  s    (,(8(8(=(=(?$K#}}[FF
 k LM %//DO//11O&N! )@$ _<<r   c                 8    U R                   R                  X5      $ rX   )r   r"  )r4   r$  r%  s      r   r"  MutationController.run_testd  s    {{##K==r   c                 L   U R                  U5      nU R                  XA5      u  pVU(       a'  U R                  R                  " UR	                  5       6   U R
                  R                  XBUUS9 H  u  pxU R                  R                  S-   n	U R                  (       a,  U R                  U	:w  a  U R                  R                  5         M[  U R                  XX5        U R                  X5      n
U
(       a  U R                  X:Xv5        M  U R                  R                  5         M     g )Nr  rq   )create_target_astinject_coverager   r   
get_resultr   mutater(   r   r   notify_mutationcreate_mutant_modulerun_tests_with_mutant)r4   r  r  r  
target_astcoverage_injectorcoverage_result	mutations
mutant_astr   mutant_modules              r   r   MutationController.mutate_moduleg  s    ++M:
-1-A-A*-\*JJ&&(9(D(D(FG%)%:%:%A%A*YjIV &B &X!I"jj44q8O##(<(<(O

**,  ]W 55mPM**>)e

**,&Xr   c                 8    U R                   R                  X5      $ rX   )r   r,  )r4   r2  r  s      r   r,  "MutationController.inject_coveragez  s    {{**:EEr   c                     [        UR                  5       n[        R                  " UR	                  5       5      sS S S 5        $ ! , (       d  f       g = frX   )open__file__r   
create_astread)r4   r  target_files      r   r+  $MutationController.create_target_ast}  s5    -(()[##K$4$4$67 *))s   $A
Ac                      U R                      [        R                  " UUR                  S9sS S S 5        $ ! , (       d  f       g = f! [         a  nU R                  SUSS9   S nAg S nAff = f)N)ast_nodemodule_namer   )r#  )r   r   create_modulerJ   BaseExceptionnotify_incompetent)r4   r  r6  r  s       r   r0  'MutationController.create_mutant_module  s_    	$$**' - 6 6 %$$
  	##AyA#>	s1   A 7	A 
AA A 
A-A((A-c                 \   Ub  UR                   b  UR                   / :X  a  g UR                    Vs/ sH   o3R                  R                  S5      S   PM"     nnU R                  R                  R                  U Vs/ sH  oPR                  R                  U   PM     sn5        g s  snf s  snf )Nr9   r   )killerr  r   r   r   r   rk   )r4   rZ   r5  r  mut_killer_test_namests         r   update_apfd_list#MutationController.update_apfd_list  s    >V]]2fmmr6I FL]] S]T!5a!8] S 	

++22Wl4mWlRSZZ5J5J15MWl4mo !T 5ns   &B$;!B)c                 H   U R                  X5        U Vs/ sH  o3R                  R                  PM     nnU R                  R                  R                  U5        [        U5      nXPR                  R                  ;  a  SU R                  R                  U'   U R                  R                  U==   [        U5      -  ss'   Uc  g UR                   H  n[        UR                  5      nXpR                  ;   aG  U R                  U   R                  nUR                  n	U R                  R                  X5      (       a  Mn  XpR                  R                   ;  a  / U R                  R                   U'   U R                  R                   U   R                  U5        M     g s  snf r   )rM  operatorrJ   r   rg   r   r   ri   r%   rJ  r   r  r   long_messager   rA   rh   )
r4   rZ   r5  mutationmutated_operators	mutant_idrJ  full_test_namebefore_mutation_outafter_mutation_outs
             r   update_per_test_matrix)MutationController.update_per_test_matrix  sU   f0 IRR	H..77	R

$$++,=>)*	JJ77756DJJ''	2

##I.#6G2HH.>mmF/<N !;!;; '+&@&@&P&]&]#%+%8%8"??112EZZ ZZ%=%==;=

((8JJ$$^4;;<MN% $ Ss   Fc                     U R                   R                  XX45      u  pVU R                  XS5        U R                  XV5        g rX   )r   r1  rX  update_score_and_notify_views)r4   r  r7  r5  r4  rZ   r   s          r   r1  (MutationController.run_tests_with_mutant  s8    ;;<<^\ew##F6**6<r   c                     U(       d  U R                  U5        g UR                  (       a  U R                  X5        g UR                  (       a  U R	                  X5        g U R                  X5        g rX   )update_timeout_mutantis_incompetentupdate_incompetent_mutantis_survivedupdate_survived_mutantupdate_killed_mutant)r4   rZ   mutant_durations      r   r[  0MutationController.update_score_and_notify_views  sO    &&7""**6C''@%%f>r   c                 Z    U R                  U5        U R                  R                  5         g rX   )notify_timeoutr   r   )r4   r   s     r   r^  (MutationController.update_timeout_mutant  s     H%

 r   c                     U R                  X!R                  UR                  5        U R                  R	                  5         g rX   )rG  r  r#  r   r   r4   rZ   r   s      r   r`  ,MutationController.update_incompetent_mutant  s.    *:*:F<L<LM

""$r   c                 n    U R                  X!R                  5        U R                  R                  5         g rX   )notify_survivedr#  r   r   rj  s      r   rb  )MutationController.update_survived_mutant  s&    X'7'78

!r   c           	          U R                  U[        UR                   Vs/ sH  o3R                  PM     sn5      UR                  UR
                  5        U R                  R                  5         g s  snf rX   )notify_killedr   rJ  r  exception_tracebackr#  r   r   )r4   rZ   r   kills       r   rc  'MutationController.update_killed_mutant  sT    8S)N)))N%OQWQkQkmsm}m}~

 *Os   A0)rj   r   r   r   r   r   r   r   r   r   r   rk   r   r   r   )   FFN)rJ   rK   rL   rM   r5   r   r   r   r   r   r  r   r  r"  r   TimeRegisterr  r,  r+  r0  rM  rX  r1  r[  r^  r`  rb  rc  rN   __classcell__r   s   @r   r   r      s     `d+"
xC 
xD 
xLc Ld LQS QT Q($$<=0> - -$F 8 8 	 	
p%OP=
?!%"   r   r   c                   (    \ rS rSrSS jrSS jrSrg)HOMStrategyi  c                     Xl         g rX   order)r4   r|  s     r   r5   HOMStrategy.__init__  s    
r   c                 ^   U H  nUS S   H  nUR                   UR                   :X  dm  UR                   UR                   R                  ;   dI  UR                   UR                   R                  ;   d%  U(       a  Mn  UR                  UR                  :X  d  M  UR                  U5        M     M     g rX   )nodechildrenrP  remove)r4   mutations_to_applyavailable_mutationsallow_same_operatorsmutation_to_applyavailable_mutations         r   remove_bad_mutations HOMStrategy.remove_bad_mutations  s    !3&9!&<"$))-?-D-DD)..2D2I2I2R2RR*//3D3I3I3R3RR116G6P6PTfToTo6o'../AB '= "4r   r{  N)r   )T)rJ   rK   rL   rM   r5   r  rN   r   r   r   ry  ry    s    Cr   ry  c                       \ rS rSrSrS rSrg)FirstToLastHOMStrategyi  FIRST_TO_LASTc              #     #    US S  nU(       a  / nSnUS S  n[        U5      U R                  :  ax  U(       aq   UR                  U5      nUR                  U5        UR	                  U5        US:X  a  SOSnU R                  X$5        [        U5      U R                  :  a	  U(       a  Mq  Uv   U(       a  M  g g ! [
         a     M  f = f7f)Nr   r   r%   r|  popr   r  
IndexErrorr  )r4   r5  r  r   r  rR  s         r   generateFirstToLastHOMStrategy.generate  s     aL	!#E"+A,()DJJ6;N266u=H&--h7$$X.!&"A"E ))*<R ()DJJ6;N;N %$ i " s4   6C	=B8 61C	)C	6C	8
CC	CC	r   NrJ   rK   rL   rM   r  r  rN   r   r   r   r  r    s    D%r   r  c                       \ rS rSrSrS rSrg)EachChoiceHOMStrategyi  EACH_CHOICEc              #   ~  #    US S  nU(       a  / nUS S  n[        U5      U R                  :  an  U(       ag   UR                  S5      nUR                  U5        UR	                  U5        U R                  X#5        [        U5      U R                  :  a	  U(       a  Mg  Uv   U(       a  M  g g ! [
         a     M  f = f7fr   r  r4   r5  r  r  rR  s        r   r  EachChoiceHOMStrategy.generate  s     aL	!#"+A,()DJJ6;N266q9H&--h7$$X. ))*<R ()DJJ6;N;N %$ i " s4   4B=3B, *1B=B=*B=,
B:6B=9B::B=r   Nr  r   r   r   r  r    s    D%r   r  c                       \ rS rSrSrS rSrg)BetweenOperatorsHOMStrategyi  BETWEEN_OPERATORSc              #     ^#    U Vs0 sH  o"S_M     snmUS S  nU(       a  / nUS S  nUR                  U4S jS9  [        U5      U R                  :  a  U(       a|  UR                  S5      nUR	                  U5        TU   (       d  UR                  U5        TU==   S-  ss'   U R                  XESS9  [        U5      U R                  :  a	  U(       a  M|  Uv   U(       a  M  g g s  snf 7f)Nr   c                    > TU    $ rX   r   )r   usages    r   r   6BetweenOperatorsHOMStrategy.generate.<locals>.<lambda>$  s	    58r   )keyrq   F)r  )sortr%   r|  r  r   r  r  )r4   r5  rR  not_usedr  r  r  s         @r   r  $BetweenOperatorsHOMStrategy.generate  s     -67Y1Y7Q<!#"+A,$$);$<()DJJ6;N.2215"))(3XOOH-h1$))*<hm)n ()DJJ6;N;N %$ h 8s   C,C'CC,C,%C,r   Nr  r   r   r   r  r    s    D%r   r  c                   N   ^  \ rS rSrSr\R                  S.U 4S jjrS rSr	U =r
$ )RandomHOMStrategyi/  RANDOM)shufflerc                2   > [         TU ]  " U0 UD6  Xl        g rX   )r   r5   r  )r4   r  argskwargsr   s       r   r5   RandomHOMStrategy.__init__2  s    $)&) r   c              #     #    US S  nU R                  U5        U(       a  / nUS S  n[        U5      U R                  :  an  U(       ag   UR                  S5      nUR	                  U5        UR                  U5        U R                  X#5        [        U5      U R                  :  a	  U(       a  Mg  Uv   U(       a  M  g g ! [         a     M  f = f7fr   )r  r%   r|  r  r   r  r  r  r  s        r   r  RandomHOMStrategy.generate6  s     aL	i !#"+A,()DJJ6;N266q9H&--h7$$X. ))*<R ()DJJ6;N;N %$ i " s6   AC3B= ;1C.C;C=
CC
CC)rJ   rK   rL   rM   r  r   r   r5   r  rN   rv  rw  s   @r   r  r  /  s#    D'-~~ ! !% %r   r  c                   (    \ rS rSrSS jrSS jrSrg)FirstOrderMutatoriO  c                 F    Xl         [        R                  " U5      U l        g rX   )r   r   RandomSamplersampler)r4   r   
percentages      r   r5   FirstOrderMutator.__init__Q  s    "**:6r   Nc           	   #      #    [         R                  " U R                  5       H3  nU" 5       R                  XU R                  X4S9 H  u  pgU/U4v   M     M5     g 7fNr*  )r   sort_operatorsr   r.  r  )r4   r2  r  r3  r  oprR  r   s           r   r.  FirstOrderMutator.mutateU  sO     &&t~~6B$&DKK
t||UfK$v j&(( %w 7s   AA)r   r  )r   NNN)rJ   rK   rL   rM   r5   r.  rN   r   r   r   r  r  O  s    7)r   r  c                   F   ^  \ rS rSrSS.U 4S jjrSS jrS rS rSrU =r	$ )	HighOrderMutatori[  N)hom_strategyc                T   > [         TU ]  " U0 UD6  U=(       d	    [        SS9U l        g )Nr   r{  )r   r5   r  r  )r4   r  r  r  r   s       r   r5   HighOrderMutator.__init__]  s(    $)&)(K,B,Kr   c              #     #    U R                  X4X5      nU R                  R                  U5       H  n/ n/ nUn	U Hd  n
U
R                  5       R	                  U	UU R
                  UUU
S9n UR                  5       u  pUR                  U5        UR                  U5        Mf     X4v   U R                  U5        M     g ! [         a     S5       ef = f7f)N)r  r  r3  r  only_mutationzno mutations!)
generate_all_mutationsr  r  rP  r.  r  __next__StopIterationr   finish_generators)r4   r2  r  r3  r  r5  r  
generatorsapplied_mutationsr   rR  	generatornew_mutations                r   r.  HighOrderMutator.mutatea  s     //0A:a	"&"3"3"<"<Y"GJ "F.$--/66' LL&7!"* 7 	2+4+=+=+?(L "((6!!), / $++"":.) #H % 21/152s   A(C+B>=AC>CCc           	          / n[         R                  " U R                  5       H3  nU" 5       R                  X4S XS9 H  u  pxUR	                  U5        M     M5     U$ r  )r   r  r   r.  r   )	r4   r3  r  r2  r  r5  r  rR  r  s	            r   r  'HighOrderMutator.generate_all_mutationsy  sU    	&&t~~6B!t{{:$HY{i  *  j 7 r   c                 v    [        U5       H  n UR                  5          S5       e   g ! [         a     M+  f = f)Nztoo many mutations!)reversedr  r  )r4   r  r  s      r   r  "HighOrderMutator.finish_generators  sC    !*-I""$ 0//5 . ! s   *
88r  )
rJ   rK   rL   rM   r5   r.  r  r  rN   rv  rw  s   @r   r  r  [  s&    +/ L L/00 0r   r  )$r   r  timer   r   r	   r0   r/   pandasr   mutpyr   r   tupler   r   r   r*   r,   r1   r2   boolrA   	ExceptionrU   r]   ViewNotifierr   ry  r  r  r  r  hom_strategiesr  r  r   r   r   <module>r     s    
   	     U 
MHC! !> 4 4) zm zmzO ++ O dC C%[ %*%K %&%+ %(% %2  		) 	)+0( +0r   