�
�f1��t�dZddlZddlZejZGd�dej��ZGd�dej��ZdS)z7Internal classes used by the gzip, lzma and bz2 modules�Nc�*�eZdZdZd�Zd�Zd�Zd�ZdS)�
BaseStreamzMode-checking helper functions.c�2�|jrtd���dS)NzI/O operation on closed file)�closed�
ValueError��selfs �3/opt/alt/python311/lib64/python3.11/_compression.py�_check_not_closedzBaseStream._check_not_closeds%���;� =��;�<�<�<� =� =�c�V�|���stjd���dS)NzFile not open for reading)�readable�io�UnsupportedOperationrs r
�_check_can_readzBaseStream._check_can_read�1���}�}��� G��)�*E�F�F�F� G� Grc�V�|���stjd���dS)NzFile not open for writing)�writablerrrs r
�_check_can_writezBaseStream._check_can_writerrc��|���stjd���|���stjd���dS)Nz3Seeking is only supported on files open for readingz3The underlying file object does not support seeking)rrr�seekablers r
�_check_can_seekzBaseStream._check_can_seeksl���}�}��� G��)�+F�G�G�
G��}�}��� F��)�+E�F�F�
F� F� FrN)�__name__�
__module__�__qualname__�__doc__rrrr�rr
rr sa������)�)�=�=�=�G�G�G�G�G�G�F�F�F�F�Frrc�j��eZdZdZd�Zdd�Z�fd�Zd�Zd�Zdd �Z d
�Z
d�Zej
fd�Zd
�Z�xZS)�DecompressReaderz5Adapts the decompressor API to a RawIOBase reader APIc��dS)NTrrs r
rzDecompressReader.readable$s���trrc��||_d|_d|_d|_||_||_|jdi|j��|_||_dS)NFr���r)�_fp�_eof�_pos�_size�_decomp_factory�_decomp_args�
_decompressor�_trailing_error)r �fp�decomp_factory�trailing_error�decomp_argss r
�__init__zDecompressReader.__init__'s`������� ��� ���
� .���'���1�T�1�F�F�D�4E�F�F��� .����rc�R��d|_t�����S�N)r)�super�close)r � __class__s �r
r3zDecompressReader.close;s���!����w�w�}�}���rc�4�|j���Sr1)r#rrs r
rzDecompressReader.seekable?s���x� � �"�"�"rc�4�t|��5}|�d��5}|�t|����}||dt|���<ddd��n#1swxYwYddd��n#1swxYwYt|��S)N�B)�
memoryview�cast�read�len)r �b�view� byte_view�datas r
�readintozDecompressReader.readintoBs���
��]�]� )�d�D�I�I�c�N�N� )�i��9�9�S��^�^�,�,�D�$(�I�j�s�4�y�y�j�!� )� )� )� )� )� )� )� )� )� )� )���� )� )� )� )� )� )� )� )� )� )� )� )� )� )� )���� )� )� )� )��4�y�y�s4�B�7A)�B�)A- �-B�0A- �1B�B�Br"c�v�|dkr|���S|r|jrdSd} |jjrr|jjp|j�t��}|sn�|jdi|j ��|_ |j�
||��}nj#|j$rYnbwxYw|jjr1|j�t��}|std���nd}|j�
||��}|rn��|sd|_|j|_dS|xjt!|��z
c_|S)NrrTzACompressed file ended before the end-of-stream marker was reachedr)�readallr$r)�eof�unused_datar#r:�BUFFER_SIZEr'r(�
decompressr*�needs_input�EOFErrorr%r&r;)r �sizer?�rawblocks r
r:zDecompressReader.readHs����!�8�8��<�<�>�>�!�� �t�y� ��3��� ��!�%�
E� �.�:�7� �H�M�M�+�6�6�����%9�T�%9�&)�&)��'�&)�&)��"���-�8�8��4�H�H�D�D���+�����E������%�1�#�#�x�}�}�[�9�9�H�#�K�&�(J�K�K�K�K� #�H��)�4�4�X�t�D�D���
��1 �2� ��D�I���D�J��3�� � �S��Y�Y�� � ��s�;B�
B$�#B$c���g}|�tj��x}r6|�|��|�tj��x}�6d�|��S)Nr)r:�sys�maxsize�append�join)r �chunksr?s r
rBzDecompressReader.readallqsg�����i�i���,�,�,�d� ��M�M�$�����i�i���,�,�,�d� ��x�x����rc��|j�d��d|_d|_|jdi|j��|_dS)NrFr)r#�seekr$r%r'r(r)rs r
�_rewindzDecompressReader._rewind|sH����
�
�a������ ��� �1�T�1�F�F�D�4E�F�F����rc�f�|tjkrn�|tjkr|j|z}n�|tjkrU|jdkr?|�tj��r |�tj��� |j|z}n"td� |�����||jkr|�
��n
||jz}|dkrH|�ttj|����}|sn|t|��z}|dk�H|jS)NrzInvalid value for whence: {})
r�SEEK_SET�SEEK_CURr%�SEEK_ENDr&r:�DEFAULT_BUFFER_SIZEr�formatrS�minr;)r �offset�whencer?s r
rRzDecompressReader.seek�s&���R�[� � ��
�r�{�
"�
"��Y��'�F�F�
�r�{�
"�
"��z�A�~�~��i�i�� 6�7�7����i�i�� 6�7�7���Z�&�(�F�F��;�B�B�6�J�J�K�K�K��D�I����L�L�N�N�N�N��d�i��F��q�j�j��9�9�S��!7��@�@�A�A�D��
���c�$�i�i��F� �q�j�j��y�rc��|jS)z!Return the current file position.)r%rs r
�tellzDecompressReader.tell�s
���y�r)r)r")rrrrrr/r3rr@r:rBrSrrUrRr^�
__classcell__)r4s@r
rr!s��������?�?����.�.�.�.�(�����#�#�#����'�'�'�'�R � � �G�G�G�#%�+�����<������rr) rrrLrXrE�BufferedIOBaser� RawIOBaserrrr
�<module>rbs���=�=� � � � �
�
�
�
��$��F�F�F�F�F��"�F�F�F�0A�A�A�A�A�r�|�A�A�A�A�Ar |