Ë
    iKêj£  ã                   óœ   — d dl mZmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ  ej                  d«      Z G d„ d«      Z G d	„ d
ee   «      Zy)é    )ÚHashableÚIterableÚSequence)ÚAny)Úutils)ÚConjectureData)ÚSearchStrategyzfeature flagc            
       óf   — e Zd ZdZ	 	 	 	 ddedz  dee   dee   dee   fd„Z	ded	e
fd
„Zd	efd„Zy)ÚFeatureFlagsa$  Object that can be used to control a number of feature flags for a
    given test run.

    This enables an approach to data generation called swarm testing (
    see Groce, Alex, et al. "Swarm testing." Proceedings of the 2012
    International Symposium on Software Testing and Analysis. ACM, 2012), in
    which generation is biased by selectively turning some features off for
    each test case generated. When there are many interacting features this can
    find bugs that a pure generation strategy would otherwise have missed.

    FeatureFlags are designed to "shrink open", so that during shrinking they
    become less restrictive. This allows us to potentially shrink to smaller
    test cases that were forbidden during the generation phase because they
    required disabled features.
    NÚdataÚenabledÚdisabledÚat_least_one_ofc                 ó  — || _         i | _        |D ]  }d| j                  |<   Œ |D ]  }d| j                  |<   Œ | j                   �%| j                   j                  dd«      dz  | _        nd| _        t	        |«      | _        y )NFTr   éþ   éÿ   g        )Ú_FeatureFlags__dataÚ_FeatureFlags__is_disabledÚdraw_integerÚ_FeatureFlags__p_disabledÚsetÚ_FeatureFlags__at_least_one_of)Úselfr   r   r   r   Úfs         úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/hypothesis/strategies/_internal/featureflags.pyÚ__init__zFeatureFlags.__init__&   s–   € ð ˆŒØˆÔàò 	*ˆAØ$)ˆD×Ñ˜qÒ!ð	*ð ò 	)ˆAØ$(ˆD×Ñ˜qÒ!ð	)ð �;‰;Ð"Ø $§¡× 8Ñ 8¸¸CÓ @À3Ñ FˆDÕð
 !$ˆDÔô
 "% _Ó!5ˆÕó    ÚnameÚreturnc                 ó  — | j                   �| j                   j                  r| j                  j                  |d«       S | j                   }|j	                  t
        ¬«       | j                  }| j                   j                  | j                  t        |«      dk(  r||v rdn| j                  j                  |«      ¬«      }|| j                  |<   ||v r|s|j                  «        |j                  |«       |j                  «        | S )zTTests whether the feature named ``name`` should be enabled on this
        test run.F)Úlabelé   )Úforced)r   Úfrozenr   ÚgetÚ
start_spanÚFEATURE_LABELr   Údraw_booleanr   ÚlenÚclearÚdiscardÚ	stop_span)r   r   r   ÚoneofÚis_disableds        r   Ú
is_enabledzFeatureFlags.is_enabledM   sì   € ð �;‰;Ð $§+¡+×"4Ò"4ð ×)Ñ)×-Ñ-¨d°EÓ:Ð:Ð:à�{‰{ˆà�‰œmˆÔ,ð ×&Ñ&ˆØ—k‘k×.Ñ.Ø×Ñô �u“: ’? t¨u¡}ñ à×'Ñ'×+Ñ+¨DÓ1ð /ó 
ˆð $/ˆ×Ñ˜4Ñ Ø�5‰=¡Ø�K‰KŒMØ�‰�dÔØ�‰ÔØˆÐr   c                 óª   — g }g }| j                   j                  «       D ]*  \  }}|r|j                  |«       Œ|j                  |«       Œ, d|›d|›d�S )NzFeatureFlags(enabled=z, disabled=ú))r   ÚitemsÚappend)r   r   r   r   r.   s        r   Ú__repr__zFeatureFlags.__repr__s   sa   € ØˆØˆØ!%×!3Ñ!3×!9Ñ!9Ó!;ò 	%ÑˆD�+ÙØ—‘ Õ%à—‘˜tÕ$ð		%ð
 (˜w˜j¨¨8¨+°QÐ7Ð7r   )N© r5   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   Úboolr/   Ústrr4   r5   r   r   r   r      ss   „ ñð$ '+Ø!#Ø"$Ø.0ñ%6à˜tÑ#ð%6ð ˜#‘ð%6ð ˜3‘-ð	%6ð
 " (Ñ+ó%6ðN$˜sð $ tó $ðL8˜#ô 8r   r   c                   ó<   ‡ — e Zd Zddee   fˆ fd„Zdedefd„Zˆ xZ	S )ÚFeatureStrategyr   c                 óB   •— t         ‰| �  «        t        |«      | _        y )N)Úsuperr   Ú	frozensetÚ_at_least_one_of)r   r   Ú	__class__s     €r   r   zFeatureStrategy.__init__   s   ø€ Ü‰ÑÔÜ )¨/Ó :ˆÕr   r   r   c                 ó0   — t        || j                  ¬«      S )N)r   )r   rA   )r   r   s     r   Údo_drawzFeatureStrategy.do_drawƒ   s   € Ü˜D°$×2GÑ2GÔHÐHr   )r5   )
r6   r7   r8   r   r   r   r   r   rD   Ú__classcell__)rB   s   @r   r=   r=   ~   s*   ø„ ñ;¨°Ñ(:õ ;ðI˜Nð I¨|÷ Ir   r=   N)Úcollections.abcr   r   r   Útypingr   Úhypothesis.internal.conjecturer   ÚcuÚ#hypothesis.internal.conjecture.datar   Ú*hypothesis.strategies._internal.strategiesr	   Úcalc_label_from_namer'   r   r=   r5   r   r   ú<module>rM      sK   ð÷ 9Ñ 8Ý å 6Ý >Ý Eà'�×'Ñ'¨Ó7€÷f8ñ f8ôRI�n \Ñ2õ Ir   