File: //lib/python3/dist-packages/hyperlink/__pycache__/hypothesis.cpython-310.pyc
o
    G�_'%  �                   @   s�  d Z ddlmZ zddlZ[W n ey!   ddlmZ dZY dS w ddlm	Z
 ddlmZm
Z
 ddlmZmZ dd	lmZ dd
lmZmZmZmZmZmZmZmZ ddlmZ dd
lmZm Z  ddlm!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z, dZed�Z-eede-f ge-f Z.ze/ W n e0y�   e1Z/Y nw dd� Z2da3e#d)dd��Z4e#d*dd��Z5e#d+dd��Z6e#d,dd ��Z7d!d"� Z8da9e#d#d$� �Z:e#d%d&� �Z;e#d'd(� �Z<dS )-z
Hypothesis strategies.
�    )�absolute_importN)�Tuple� )�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                  C   s�   t swg } ttt�d�}t|��[}tdd� |D �dd�}t|� |D ]A}|\}}}|dkr-q!|d �dd	�}t|�d	krB|�	|d � d
d� |D �\}	}
t
|	|
d	 �D ]}|tkrZ n| �	t|�� qRq!W d  � n1 smw   Y  d�| �a t S )
z>
        Returns a string containing IDNA characters.
        zidna-tables-properties.csv.gzc                 s   s   � | ]}|� d �V  qdS )�utf-8N)�decode)�.0�liner   r   �6/usr/lib/python3/dist-packages/hyperlink/hypothesis.py�	<genexpr>Q   �   � z"idna_characters.<locals>.<genexpr>�,)�	delimiter�PVALIDr   �-r   c                 s   s   � | ]}t |d �V  qdS )�   N)�int)r*   �ir   r   r,   r-   b   r.   N� )
�_idnaCharactersr   r   �__file__�	open_gzip�
csv_reader�next�split�len�append�ranger
   �unichr)�result�dataFileName�dataFiler   �row�codes�prop�description�startEnd�start�endr5   r   r   r,   �idna_characters?   s8   �
�
���
rK   r6   c                 C   sj   t � }|dks	J �|dur|dksJ �tt| t|||d���}zt|� W |S  ty4   td� Y |S 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   N��min_size�max_size�alphabetF)rK   r   r   r   �idna_encoder   r   )�drawrM   rN   rO   rA   r   r   r,   r$   o   s   �
�
�r$   Fc                 C   s$   |rd}nd}t t| t|dd���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   r4   r   )rQ   �
allow_zerorR   r   r   r,   r&