Ë
    ´ŒjŒ  ã                  óP   — d dl mZ d dlZd dlZd dlmZmZ d dlmZ  G d„ d«      Z	y)é    )ÚannotationsN)ÚAnyÚOptional)ÚDocumentc                  óð   ‡ — e Zd ZU dZdZded<   	 dZded<   	 	 d	 	 	 	 	 dˆ fd„Zedd„«       Z	edd	„«       Z
dd
„Z	 	 d	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )ÚRecursiveJsonSplitteraž  Splits JSON data into smaller, structured chunks while preserving hierarchy.

    This class provides methods to split JSON data into smaller dictionaries or
    JSON-formatted strings based on configurable maximum and minimum chunk sizes.
    It supports nested JSON structures, optionally converts lists into dictionaries
    for better chunking, and allows the creation of document objects for further use.
    éÐ  ÚintÚmax_chunk_sizei  Úmin_chunk_sizec                ól   •— t         ‰| �  «        || _        |�|| _        yt        |dz
  d«      | _        y)a  Initialize the chunk size configuration for text processing.

        This constructor sets up the maximum and minimum chunk sizes, ensuring that
        the ``min_chunk_size`` defaults to a value slightly smaller than the
        ``max_chunk_size`` if not explicitly provided.

        Args:
            max_chunk_size: The maximum size for a chunk. Defaults to 2000.
            min_chunk_size: The minimum size for a chunk. If None,
                defaults to the maximum chunk size minus 200, with a lower bound of 50.
        NéÈ   é2   )ÚsuperÚ__init__r   Úmaxr   )Úselfr   r   Ú	__class__s      €úg/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_text_splitters/json.pyr   zRecursiveJsonSplitter.__init__   sF   ø€ ô 	‰ÑÔØ,ˆÔð Ð)ð ð 	Õô �^ cÑ)¨2Ó.ð 	Õó    c                ó>   — t        t        j                  | «      «      S )z1Calculate the size of the serialized JSON object.)ÚlenÚjsonÚdumps)Údatas    r   Ú
_json_sizez RecursiveJsonSplitter._json_size/   s   € ô ”4—:‘:˜dÓ#Ó$Ð$r   c                óL   — |dd D ]  }| j                  |i «      } Œ || |d   <   y)z;Set a value in a nested dictionary based on the given path.Néÿÿÿÿ)Ú
setdefault)ÚdÚpathÚvalueÚkeys       r   Ú_set_nested_dictz&RecursiveJsonSplitter._set_nested_dict4   s1   € ð ˜˜“9ˆCØ—‘˜S "Ó%‰Að àˆˆ$ˆr‰(Šr   c                ó2  — t        |t        «      r3|j                  «       D ��ci c]  \  }}|| j                  |«      “Œ c}}S t        |t        «      r7t        |«      D ��ci c]   \  }}t        |«      | j                  |«      “Œ" c}}S |S c c}}w c c}}w )N)Ú
isinstanceÚdictÚitemsÚ_list_to_dict_preprocessingÚlistÚ	enumerateÚstr)r   r   ÚkÚvÚiÚitems         r   r)   z1RecursiveJsonSplitter._list_to_dict_preprocessing;   s•   € Ü�dœDÔ!àGKÇzÁzÄ|ÔTÁ|¹t¸qÀ!�A�t×7Ñ7¸Ó:Ñ:À|ÒTÐTÜ�dœDÔ!ô  )¨œôá.‘G�A�tô �A“˜×8Ñ8¸Ó>Ñ>Ø.òð ð
 ˆùó Uùós   ¤BÁ"%Bc                ó¶  — |xs g }|�|ni g}t        |t        «      r¥|j                  «       D ]�  \  }}g |¢|‘}| j                  |d   «      }| j                  ||i«      }| j                  |z
  }	||	k  r| j                  |d   ||«       Œ^|| j                  k\  r|j                  i «       | j                  |||«       Œ’ |S | j                  |d   ||«       |S )zESplit json into maximum size dictionaries while preserving structure.r   )	r&   r'   r(   r   r   r$   r   ÚappendÚ_json_split)
r   r   Úcurrent_pathÚchunksr#   r"   Únew_pathÚ
chunk_sizeÚsizeÚ	remainings
             r   r3   z!RecursiveJsonSplitter._json_splitH   sí   € ð $Ò) rˆØ!Ð-‘°B°4ˆÜ�dœDÔ!Ø"Ÿj™jžl‘
��UØ/˜\Ð/¨3Ð/�Ø!Ÿ_™_¨V°B©ZÓ8�
Ø—‘¨¨U |Ó4�Ø ×/Ñ/°*Ñ<�	à˜)Ò#à×)Ñ)¨&°©*°hÀÕFà! T×%8Ñ%8Ò8àŸ™ bÔ)ð ×$Ñ$ U¨H°fÕ=ð +ð& ˆð ×!Ñ! &¨¡*¨l¸DÔAØˆr   c                ó˜   — |r!| j                  | j                  |«      «      }n| j                  |«      }|d   s|j                  «        |S )z'Splits JSON into a list of JSON chunks.r   )r3   r)   Úpop)r   Ú	json_dataÚconvert_listsr5   s       r   Ú
split_jsonz RecursiveJsonSplitter.split_jsong   sI   € ñ Ø×%Ñ% d×&FÑ&FÀyÓ&QÓR‰Fà×%Ñ% iÓ0ˆFð �bŠzØ�J‰JŒLØˆr   c                ó|   — | j                  ||¬«      }|D �cg c]  }t        j                  ||¬«      ‘Œ c}S c c}w )z2Splits JSON into a list of JSON formatted strings.)r<   r=   )Úensure_ascii)r>   r   r   )r   r<   r=   r@   r5   Úchunks         r   Ú
split_textz RecursiveJsonSplitter.split_textw   s=   € ð —‘¨9ÀM�ÓRˆñ KQÓQÉ&À”—
‘
˜5¨|Ö<È&ÑQÐQùÒQs   ˜9c                óô   — |xs i gt        |«      z  }g }t        |«      D ]T  \  }}| j                  |||¬«      D ]8  }	t        j                  ||   «      }
t        |	|
¬«      }|j                  |«       Œ: ŒV |S )z4Create documents from a list of json objects (Dict).)r<   r=   r@   )Úpage_contentÚmetadata)r   r+   rB   ÚcopyÚdeepcopyr   r2   )r   Útextsr=   r@   Ú	metadatasÚ
_metadatasÚ	documentsr/   ÚtextrA   rE   Únew_docs               r   Úcreate_documentsz&RecursiveJsonSplitter.create_documentsƒ   s†   € ð Ò3 2 $¬¨U«Ñ"3ˆ
Øˆ	Ü  Ö'‰GˆAˆtØŸ™Ø¨mÈ,ð )ö �ô  Ÿ=™=¨°A©Ó7�Ü"°ÀÔI�Ø× Ñ  Õ)ñð (ð Ðr   )r	   N)r   r
   r   zOptional[int]ÚreturnÚNone)r   údict[str, Any]rO   r
   )r    rQ   r!   ú	list[str]r"   r   rO   rP   )r   r   rO   r   )NN)r   r   r4   zOptional[list[str]]r5   zOptional[list[dict[str, Any]]]rO   úlist[dict[str, Any]])F)r<   rQ   r=   ÚboolrO   rS   )FT)r<   rQ   r=   rT   r@   rT   rO   rR   )FTN)
rH   rS   r=   rT   r@   rT   rI   zOptional[list[dict[Any, Any]]]rO   zlist[Document])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   Ústaticmethodr   r$   r)   r3   r>   rB   rN   Ú__classcell__)r   s   @r   r   r   
   sI  ø… ñð €N�CÓØ<Ø€N�CÓðð KOð
Ø!ð
Ø:Gð
à	õ
ð, ò%ó ð%ð òó ðóð  -1Ø15ð	àðð *ðð /ð	ð
 
óðD $ðà!ðð ðð 
ó	ð& $Ø!ð	
Rà!ð
Rð ð
Rð ð	
Rð
 
ó
Rð $Ø!Ø48ðà#ðð ðð ð	ð
 2ðð 
÷r   r   )
Ú
__future__r   rF   r   Útypingr   r   Úlangchain_core.documentsr   r   © r   r   Ú<module>r`      s    ðÝ "ã Û ß  å -÷Jò Jr   