
    MiH                        S r SSKJr  SSKJrJr  SSKJrJr  SSK	J
r
  SSSSSSSSSSS.
                       SS jjrSS
 jr " S S	\5      rg)a  Implementation of baseline chunking.

This is the "plain-vanilla" chunking strategy. All the fundamental chunking behaviors are present in
this strategy and also in all other strategies. Those are:

- Maximally fill each chunk with sequential elements.
- Isolate oversized elements and divide (only) those chunks by text-splitting.
- Overlap when requested.

"Fancier" strategies add higher-level semantic-unit boundaries to be respected. For example, in the
by-title strategy, section boundaries are respected, meaning a chunk never contains text from two
different sections. When a new section is detected the current chunk is closed and a new one
started.
    )annotations)IterableOptional)ChunkingOptions
PreChunker)ElementN
include_orig_elementsmax_characters
max_tokensnew_after_n_charsnew_after_n_tokensoverlapoverlap_all	tokenizerrepeat_table_headersskip_table_chunkingc       
        P    [         R                  UUUUUUUUU	U
S9
n[        X5      $ )a  Combine sequential `elements` into chunks, respecting specified text-length limits.

Produces a sequence of `CompositeElement`, `Table`, and `TableChunk` elements (chunks).

Parameters
----------
elements
    A list of unstructured elements. Usually the output of a partition function.
include_orig_elements
    When `True` (default), add elements from pre-chunk to the `.metadata.orig_elements` field
    of the chunk(s) formed from that pre-chunk. Among other things, this allows access to
    original-element metadata that cannot be consolidated and is dropped in the course of
    chunking.
max_characters
    Hard maximum chunk length. No chunk will exceed this length. A single element that exceeds
    this length will be divided into two or more chunks using text-splitting. Mutually
    exclusive with `max_tokens`.
max_tokens
    Hard maximum chunk token count. No chunk will exceed this token count. Requires `tokenizer`
    to be specified. Mutually exclusive with `max_characters`.
new_after_n_chars
    A chunk that of this length or greater is not extended to include the next element, even if
    that element would fit without exceeding `max_characters`. A "soft max" length that can be
    used in conjunction with `max_characters` to limit most chunks to a preferred length while
    still allowing larger elements to be included in a single chunk without resorting to
    text-splitting. Defaults to `max_characters` when not specified, which effectively disables
    any soft window. Specifying 0 for this argument causes each element to appear in a chunk by
    itself (although an element with text longer than `max_characters` will be still be split
    into two or more chunks).
new_after_n_tokens
    Token-based equivalent of `new_after_n_chars`. A chunk with this token count or greater is
    not extended. Requires `max_tokens` and `tokenizer` to be specified.
overlap
    Specifies the length of a string ("tail") to be drawn from each chunk and prefixed to the
    next chunk as a context-preserving mechanism. By default, this only applies to split-chunks
    where an oversized element is divided into multiple chunks by text-splitting.
overlap_all
    Default: `False`. When `True`, apply overlap between "normal" chunks formed from whole
    elements and not subject to text-splitting. Use this with caution as it produces a certain
    level of "pollution" of otherwise clean semantic chunk boundaries.
tokenizer
    The tokenizer to use for token-based chunking. Can be either an encoding name (e.g.,
    "cl100k_base") or a model name (e.g., "gpt-4"). Required when using `max_tokens`.
repeat_table_headers
    Default: `True`. When `True`, repeated table-header behavior is enabled for chunked table
    continuations. Specify `False` to opt out and preserve legacy table-chunk behavior.
skip_table_chunking
    Default: `False`. When `True`, `Table` elements are passed through unchanged without
    being split into `TableChunk` elements, regardless of their size.
r	   )_BasicChunkingOptionsnew_chunk_elements)elementsr
   r   r   r   r   r   r   r   r   r   optss               u/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/unstructured/chunking/basic.pychunk_elementsr      sE    B !$$3%+-1/ % D 8**    r   c                    [         R                  " X5       VVs/ s H  nUR                  5         H  nUPM     M     snn$ s  snnf )z(Implementation of actual basic chunking.)r   iter_pre_chunksiter_chunks)r   r   	pre_chunkchunks       r   r   r   i   sJ     $33HCCI**,E 	, 	C  s   $Ac                      \ rS rSrSrSrg)r   t   zOptions for `basic` chunking. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r$   r   r   r   r   t   s    'r   )r   Iterable[Element]r
   Optional[bool]r   Optional[int]r   r-   r   r-   r   r-   r   r-   r   r,   r   zOptional[str]r   r,   r   r,   returnlist[Element])r   r+   r   r   r.   r/   )r)   
__future__r   typingr   r   unstructured.chunking.baser   r   unstructured.documents.elementsr   r   r   r   r$   r   r   <module>r4      s    # % B 3 -1$( $'+(,!"&#+/*.N+N+ *N+ "	N+
 N+ %N+ &N+ N+  N+ N+ )N+ (N+ N+b(O (r   