o
    -wi                  
   @   sF   d dl mZmZmZ 	d	deeef dedeeeef  fddZdS )
    )AnyDictIterable   files	max_bytesreturnc                 #   s   i }d}dd   fdd}dd } fdd	}g }|   D ])\}}	t|	tr;|	D ]}
|||
d
 |
d d q*q|||	d
 |	d d q|r| }|d |v rb|| |V  i }d}qI||}|| }||kr|d
 |d d||d < ||7 }n;|||}|s|sd}|r|||\}}|d
 |d d||d < || |V  i }d}qI|| |V  i }d}qI||kr|V  i }d}qI|sK|r|V  dS dS )a  Split a file's dict (see `files` arg) into smaller dicts.

    Each smaller dict will have at most `MAX_BYTES` size.

    This method is used in `FileStreamAPI._send()` to limit the size of post requests
    sent to wandb server.

    Args:
    files (dict): `dict` of form {file_name: {'content': ".....", 'offset': 0}}
        The key `file_name` can also be mapped to a List [{"offset": int, "content": str}]
    `max_bytes`: max size for chunk in bytes
    r   c                 S   s    t | tr	t| S t| dS )Nzutf-8)
isinstancebyteslenencode)x r   \/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/wandb/sdk/lib/file_stream_utils.py	_str_size   s    zsplit_files.<locals>._str_sizec                    s0   |  d}|d u rtt | d }|| d< |S )N_sizecontent)getsummap)filesizer   r   r   
_file_size   s
   
zsplit_files.<locals>._file_sizec                 S   sL   | d }| d }| d }||d | |d}|| ||d  |d}||fS )Noffsetr   name)r   r   r   r   )r   	num_linesr   r   r   f1f2r   r   r   _split_file!   s   
z split_files.<locals>._split_filec                    sR   d}d}| d }|t |k r'| || 7 }||kr	 |S |d7 }|t |k s|S )Nr   r      )r   )r   	num_bytesr   r   r   r   r   r   _num_lines_from_num_bytes-   s   z.split_files.<locals>._num_lines_from_num_bytesr   r   )r   r   r   r   )r   r   r    N)itemsr	   listappendpop)r   r   current_volumecurrent_sizer   r   r"   files_stackkvitemffsizeremr   r   r   r   r   r   split_files   sx   





1
r0   N)r   )typingr   r   r   strintr0   r   r   r   r   <module>   s   
