Ë
    Gï÷_'%  ã                   óØ  — d Z ddlmZ 	 ddlZ[ddlmZ ddl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mZmZ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!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z) dZ* ed«      Z+eede+f   ge+f   Z,	 e- d„ Z0da1e dd„«       Z2e dd„«       Z3e d d„«       Z4e d!d„«       Z5d„ Z6da7e d„ «       Z8e d„ «       Z9e d„ «       Z:y# e.$ r e/Z-Y ŒPw xY w# e;$ r ddlm<Z< dZ*Y yw xY w)"z
Hypothesis strategies.
é    )Úabsolute_importN)Úreader)ÚdirnameÚjoin)Úascii_lettersÚdigits)Ú
maxunicode)ÚCallableÚIterableÚListÚOptionalÚSequenceÚTextÚTypeVarÚcast)Úopené   )Ú
DecodedURLÚ
EncodedURL)Úassume)Ú	compositeÚintegersÚlistsÚsampled_fromÚtext)Ú	IDNAErrorÚcheck_labelÚencode)Údecoded_urlsÚencoded_urlsÚhostname_labelsÚ	hostnamesÚ	idna_textÚpathsÚport_numbersÚT.c                  ó  — t         sïg } t        t        t        «      d«      }t	        |«      5 }t        d„ |D «       d¬«      }t        |«       |D ]Š  }|\  }}}|dk7  rŒ|d   j                  dd«      }t        |«      dk(  r|j                  |d   «       d	„ |D «       \  }	}
t        |	|
dz   «      D ]'  }|t        kD  r Œo| j                  t        |«      «       Œ) ŒŒ 	 d
d
d
«       dj                  | «      a t         S # 1 sw Y   Œ xY w)z>
        Returns a string containing IDNA characters.
        zidna-tables-properties.csv.gzc              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)úutf-8N)Údecode)Ú.0Úlines     ú6/usr/lib/python3/dist-packages/hyperlink/hypothesis.pyú	<genexpr>z"idna_characters.<locals>.<genexpr>Q   s   è ø€ Ò?¨d�T—[‘[ ×)Ñ?ùs   ‚ú,)Ú	delimiterÚPVALIDr   ú-r   c              3   ó4   K  — | ]  }t        |d «      –— Œ y­w)é   N)Úint)r+   Úis     r-   r.   z"idna_characters.<locals>.<genexpr>b   s   è ø€ Ò!?°¤# a¨§*Ñ!?ùs   ‚NÚ )Ú_idnaCharactersr   r   Ú__file__Ú	open_gzipÚ
csv_readerÚnextÚsplitÚlenÚappendÚranger	   Úunichr)ÚresultÚdataFileNameÚdataFiler   ÚrowÚcodesÚpropÚdescriptionÚstartEndÚstartÚendr6   s               r-   Úidna_charactersrL   ?   s  € õ ØˆFô
  ÜœÓ!Ð#BóˆLô ˜<Ó(ð 1¨HÜ#Ù?°hÔ?Ø!ô�ô �V”Ø!ò 1�CØ/2Ñ,�E˜4 à˜xÒ'ð !à" 1™vŸ|™|¨C°Ó3�HÜ˜8“}¨Ò)à Ÿ™¨°©Ô4Ù!?°hÔ!?‘J�E˜3ä" 5¨#°©'Ó2ò 1˜Øœzš>Ù!ØŸ™¤f¨Q£iÕ0ñ1ñ1÷1ð4 "Ÿh™h vÓ.ˆOäÐ÷91ð 1ús   ­B/C<Ã<Dr7   c           
      óÌ   — t        «       }|dk\  sJ ‚|�|dk\  sJ ‚t        t         | t        |||¬«      «      «      }	 t	        |«       |S # t
        $ r t        d«       Y |S w xY w)a(  
        A strategy which generates IDNA-encodable text.

        @param min_size: The minimum number of characters in the text.
            C{None} is treated as C{0}.

        @param max_size: The maximum number of characters in the text.
            Use C{None} for an unbounded size.
        r   ©Úmin_sizeÚmax_sizeÚalphabetF)rL   r   r   r   Úidna_encoder   r   )ÚdrawrO   rP   rQ   rB   s        r-   r#   r#   o   sy   € ô #Ó$ˆà˜1Š}Ðˆ}àÐØ˜q’=Ð �=äÜÙ”˜x°(ÀXÔNÓOó
ˆð	Ü˜Ôð ˆøô ò 	Ü�5�Màˆð	ús   ¾A ÁA#Á"A#c           	      óR   — |rd}nd}t        t         | t        |d¬«      «      «      S )z†
        A strategy which generates port numbers.

        @param allow_zero: Whether to allow port C{0} as a possible value.
        r   r   iÿÿ  )Ú	min_valueÚ	max_value)r   r5   r   )rS   Ú
allow_zerorU   s      r-   r%   r%   �   s*   € ñ Ø‰IàˆIä”C™œh°ÀeÔLÓMÓNÐNó    c                 ó   — |r4t        t         | t        dd¬«      «      «      }	 |j                  d«       n9t        t         | t        ddt        t        t        z   d	z   «      ¬
«      «      «      }	 t        |«       |S # t        $ r[ t        |j                  d«      «      dt        d«      z
  kD  r/|dd }t        |j                  d«      «      dt        d«      z
  kD  rŒ/Y Œqw xY w# t        $ r t        d«       Y |S w xY w)zÀ
        A strategy which generates host name labels.

        @param allow_idn: Whether to allow non-ASCII characters as allowed by
            internationalized domain names (IDNs).
        r   é?   ©rO   rP   ÚasciiÚpunycodezxn--Néÿÿÿÿr2   rN   F)r   r   r#   r   ÚUnicodeEncodeErrorr>   r   r   r   r   ÚUnicodeErrorr   )rS   Ú	allow_idnÚlabels      r-   r!   r!   Ÿ   sø   € ñ Üœ™t¤I°qÀ2Ô$FÓGÓHˆEð
'Ø—‘˜WÕ%ô ÜÙÜØ!"Ø!#Ü!%¤m´fÑ&<¸tÑ&CÓ!Dôóó	ˆEð	Ü˜Ôð ˆøô= &ò 'ô ˜%Ÿ,™, zÓ2Ó3°b¼3¸v»;Ñ6FÒFð " # 2˜J�Eô	 ˜%Ÿ,™, zÓ2Ó3°b¼3¸v»;Ñ6FÓFùð	'ûô6 ò 	Ü�5�Màˆð	ús$   ¥A> Á1C% Á>A C"Ã!C"Ã%C=Ã<C=c                 ó”  ‡— t        t         | t        |¬«      j                  ˆfd„«      «      «      g}|t        t        t            | t        t        |¬«      dd¬«      «      «      z  }t        d„ |D «       «      t        |«      z   dz
  dkD  r*|dd	 }t        d„ |D «       «      t        |«      z   dz
  dkD  rŒ*d
j                  |«      S )aD  
        A strategy which generates host names.

        @param allow_leading_digit: Whether to allow a leading digit in host
            names; they were not allowed prior to RFC 1123.

        @param allow_idn: Whether to allow non-ASCII characters as allowed by
            internationalized domain names (IDNs).
        )ra   c                 ó"   •— ‰rdS | d   t         vS )NTr   )r   )ÚlÚallow_leading_digits    €r-   ú<lambda>zhostnames.<locals>.<lambda>ß   s   ø€ Ù$7˜Dð Ø=>¸q¹TÌÐ=Oð rX   r   é   r[   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)r>   )r+   rb   s     r-   r.   zhostnames.<locals>.<genexpr>ô   s   è ø€ Ò1 ”#�e—*Ñ1ùs   ‚éü   Nr^   ú.)	r   r   r!   Úfilterr   r   Úsumr>   r   )rS   rf   ra   Úlabelss    `  r-   r"   r"   Í   sÑ   ø€ ô ÜÙÜ#¨iÔ8×?Ñ?óóóó	ð
ˆð 	”$Ü”‰JÙÜÜ#¨iÔ8ØØôóó	
ñ 		
ˆô Ñ1¨&Ô1Ó1´C¸³KÑ?À!ÑCÀcÒIØ˜C˜R�[ˆFô Ñ1¨&Ô1Ó1´C¸³KÑ?À!ÑCÀcÓIð �y‰y˜Ó Ð rX   c                  óL   — t         €d„ } dj                   | «       «      a t         S )zH
        Returns a string containing valid URL path characters.
        c               3   óž   K  — t        t        «      D ](  } t        | «      }|dv rŒ	 |j                  d«       |–— Œ* y # t        $ r Y Œ7w xY w­w)Nz#/?r)   )r@   r	   rA   r   r_   )r6   Úcs     r-   Úcharszpath_characters.<locals>.chars  sZ   è ø€ äœzÓ*ò �AÜ˜q›	�Að ˜E‘zØ ð!ØŸ™ Ô)ð “Gñøô .ò !Ù ð!üs%   ‚#A¦>·A¾	A
ÁAÁ	A
Á
Ar7   )Ú_path_charactersr   )rr   s    r-   Úpath_charactersrt   ù   s(   € ô Ð#òð"  "Ÿw™w¡u£wÓ/ÐäÐrX   c                 óx   — t        t        t            | t        t	        dt        «       ¬«      d¬«      «      «      S )Nr   )rO   rQ   é
   )rP   )r   r   r   r   r   rt   ©rS   s    r-   r$   r$     s4   € ô Ü”‰JÙÜ”d A´Ó0AÔBÈRÔPóó
ð 	
rX   c           
      ó<  — t        t        t            | t        d¬«      «      «      }t        t         | t        «       «      «      }t        t        t            | t        «       «      «      }|dk(  rd}t        t        t         | t        d«      «      «      |||¬«      S )z£
        A strategy which generates L{EncodedURL}s.
        Call the L{EncodedURL.to_uri} method on each URL to get an HTTP
        protocol-friendly URI.
        T)rW   r   N)ÚhttpÚhttps)ÚschemeÚhostÚportÚpath)
r   r   r5   r%   r   r"   r   r$   r   r   )rS   r}   r|   r~   s       r-   r    r    #  s~   € ô ”HœS‘M¡4¬ÀÔ(EÓ#FÓGˆÜ”D™$œy›{Ó+Ó,ˆÜ”HœT‘N¡D¬«£MÓ2ˆà�1Š9ØˆDäÜœ™d¤<Ð0CÓ#DÓEÓFØØØô	
ð 	
rX   c                 ó4   — t         | t        «       «      «      S )z£
        A strategy which generates L{DecodedURL}s.
        Call the L{EncodedURL.to_uri} method on each URL to get an HTTP
        protocol-friendly URI.
        )r   r    rw   s    r-   r   r   9  s   € ô ™$œ|›~Ó.Ó/Ð/rX   )ÚTuple© )r   N)F)T)TT)=Ú__doc__Ú
__future__r   Ú
hypothesisÚcsvr   r;   Úos.pathr   r   Ústringr   r   Úsysr	   Útypingr
   r   r   r   r   r   r   r   Úgzipr   r:   r7   r   r   r   Úhypothesis.strategiesr   r   r   r   r   Úidnar   r   r   rR   Ú__all__r&   ÚDrawCallablerA   Ú	NameErrorÚchrrL   r8   r#   r%   r!   r"   rt   rs   r$   r    r   ÚImportErrorr€   r�   rX   r-   ú<module>r’      sb  ðñõ 'ðz0Ûàõ )ß%ß,Ý÷	÷ 	ó 	õ 'ç(å!÷õ ÷ CÑBð€Gñ 	�‹€AØ˜X c¨1 fÑ-Ð.°Ð1Ñ2€LðÙò,ð\ €Oàòó ðð@ òOó ðOð ò+ó ð+ðZ ò)!ó ð)!òV ð< Ðàñ
ó ð
ð ñ
ó ð
ð* ñ0ó ñ0øð} ò ØŠðûðc ò Ýà‚Gðús#   ŠC ÂC ÃCÃCÃC)Ã(C)