
    3g                         d dl Z d dlZd dlZd dlmZ  G d de      Z G d d      Zd Z G d d	      Z	 G d
 de	      Z
y)    N)utilsc                       e Zd Zy)MutationResignN)__name__
__module____qualname__     /home/xtuchyna/.var/app/com.visualstudio.code/data/virtualenvs/gen-test-bench-v8TMe8KL/lib/python3.12/site-packages/mutpy/operators/base.pyr   r      s    r
   r   c                       e Zd ZddZy)MutationNc                 .    || _         || _        || _        y Noperatornodevisitor)selfr   r   r   s       r   __init__zMutation.__init__   s     	r
   r   )r   r   r   r   r	   r
   r   r   r      s    r
   r   c                       fd}|S )Nc                     t        j                  |t        |j                        |j                  i      } | |      S )N)memo)copydeepcopyidparent)r   r   copied_nodemutates      r   fzcopy_node.<locals>.f   s8    mmDt{{OT[[0
  dK((r
   r	   )r   r   s   ` r   	copy_noder       s    ) Hr
   c                   x    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZddZed        Zed        Zy)MutationOperatorNc              #      K   || _         || _        || _        || _        || _        | j                  |      D ]2  }t        | j                  | j                  | j                        |f 4 y w)Nr   )
	to_mutatesampleronly_mutationcoverage_injectormodulevisitr   	__class__current_noder   )r   r   r$   r%   r'   r(   r&   new_nodes           r   r   zMutationOperator.mutate   sd     "*!2

4(HDNN9J9JTXT`T`ackkk )s   A+A-c              #     K   | j                  |      s'| j                  r| j                  j                  |      sy | j                  r<| j                  j                  |k7  r#| j                  j                  |j
                  vry | j                  |       | j                  |      }|r|D ]  }	 | j                  r | j                  j                         st        | j                  rB| j                  j                  |k7  s#| j                  j                  |j                  k7  rt         ||      }|j                  | _        || _        | j                  ||       t        j                   |       | | j#                  |      D ]  }|   y | j#                  |      D ]  }|  y # t        $ r Y Cw xY w# | j#                  |      D ]  }|  w xY wwr   )has_notmutater'   
is_coveredr&   r   children
fix_linenofind_visitorsr%   is_mutation_timer   r   r   r+   fix_node_internalsastfix_missing_locationsgeneric_visit)r   r   visitorsr   r,   s        r   r)   zMutationOperator.visit'   s    d#(>(>tG]G]GhGhimGn$"4"4"9"9T"AdFXFXF]F]eiererFr%%d+#'||DLL,I,I,K,,))!//44<@R@R@Z@Z^e^n^n@n,,&t}H#*#3#3DL(,D%++D(;--h7"N %)$6$6t$<& %=! $& !..t4 5 &  %)$6$6t$<& %=s7   B+G.CF+38G+	F74F:6F77F::GGc              #      K   t        j                  |      D ]b  \  }}t        |t              r| j	                  |      }n0t        |t         j
                        r| j                  |||      }ng }|D ]  }|  d y wr   )r5   iter_fields
isinstancelistgeneric_visit_listASTgeneric_visit_real_node)r   r   field	old_value	generator_s         r   r7   zMutationOperator.generic_visitE   sn      # 5E9)T* 33I>	Isww/ 88uiP		
  !6s   A<A>c              #     K   |d d  }t        |      D ]m  \  }}t        |t        j                        s!| j	                  |      D ]9  }t        |t        j                        s	||||dz    n|||= n|||<   d  ||d d  ; o y w)N   )	enumerater;   r5   r>   r)   )r   rA   old_values_copypositionvalue	new_values         r   r=   z#MutationOperator.generic_visit_listQ   s     #A,(9OHe%)!%E!2I%i9;D	(8a<8%h/.7	(+#2IaL "3  :s   1BABc              #      K   | j                  |      D ]/  }|t        ||       nt        |||       d  t        |||       1 y wr   )r)   delattrsetattr)r   r   r@   rA   r,   s        r   r?   z(MutationOperator.generic_visit_real_node`   sD     

9-He$eX.D%+ .s   AAc                     	 |j                   D ]+  }|j                  t        j                  j                  k(  s+ y y# t
        $ r Y yw xY w)NTF)decorator_listr   r   	notmutater   AttributeError)r   r   	decorators      r   r.   zMutationOperator.has_notmutatei   sG    	!00	<<5??#;#;; 1  		s   6= = = 	A	A	c                     t        |d      sAt        |dd       3t        |j                  d      r|j                  j                  |_        y y y y )Nlinenor   )hasattrgetattrr   rT   r   r   s     r   r1   zMutationOperator.fix_linenor   sJ    tX&744+H+TY`aealalnvYw++,,DK Zx+T&r
   c                     t        |d      s"|j                  |_        |j                  |_        t        |d      st        |d      r|j                  |_        t        |d      r|j                  |_        y y )Nr   rT   marker)rU   r0   r   rT   rY   )r   old_noder,   s      r   r4   z#MutationOperator.fix_node_internalsv   s]    x* ( 1 1H&ooHOx*wx/J&ooHO8X&&ooHO 'r
   c                 V    d|j                   j                  z   }| j                  |      S )Nmutate_)r*   r   getattrs_like)r   r   method_prefixs      r   r2   zMutationOperator.find_visitors   s'    !DNN$;$;;!!-00r
   c                     t        j                  |dz         }t        |       D cg c]   }|j                  |      st	        | |      " c}S c c}w )Nz($|(_\w+)+$))recompiledirmatchrV   )ob	attr_likepatternattrs       r   r]   zMutationOperator.getattrs_like   sC    **Y78.1"gMgdt9LD!gMMMs
   AAc                 `    t        j                  |      D ]  }t        |d      s||_         y )NrT   )r5   walkrU   rT   )r   r   rT   ns       r   
set_linenozMutationOperator.set_lineno   s%    $Aq(#!  r
   c                 >    |D ]  }t        j                  ||        y r   )r5   increment_lineno)r   nodesshift_byr   s       r   shift_lineszMutationOperator.shift_lines   s    D  x0 r
   c                     dj                  | j                  D cg c]  }t        j                  |      s| c}      S c c}w )N )joinr   strisupper)clscs     r   namezMutationOperator.name   s1    ww3<<B<a3;;q><BCCBs
   A A c           	          dj                  t        t        j                  t	        j
                  d| j                        dd d               S )N z([A-Z][a-z]*)rE      )rs   maprt   lowerr`   splitr   )rv   s    r   	long_namezMutationOperator.long_name   s:    xxCII#,,(OPQPTSTPT(UWXXr
   )NNNNN)rE   )r   r   r   r   r)   r7   r=   r?   r.   r1   r4   r2   r]   rk   rp   classmethodrx   r   r	   r
   r   r"   r"      sl    l<
3,-.1N"
1 D D Y Yr
   r"   c                       e Zd Zd Zy)AbstractUnaryOperatorDeletionc                 v    t        |j                  | j                               r|j                  S t	               r   )r;   opget_operator_typeoperandr   rW   s     r   mutate_UnaryOpz,AbstractUnaryOperatorDeletion.mutate_UnaryOp   s,    dggt5578<<r
   N)r   r   r   r   r	   r
   r   r   r      s    r
   r   )r5   r   r`   mutpyr   	Exceptionr   r   r    r"   r   r	   r
   r   <module>r      sH    
  	 	Y 	 yY yYx$4 r
   