o
    jqi                      @  s   d Z ddlmZ ddlZddlmZ ddlZ	 G d	d
 d
ZeeejZedejZd*ddZd+d d!Zd,d#d$Zd-d.d(d)ZdS )/z6
some helper functions that might be generally useful
    )annotationsN)partialF)AnyDictOptionalListTextCallableUnion   )StreamTextTypec                   @  s.   e Zd ZdZdd	d
ZdddZdddZdS )LazyEvala  
    Lightweight wrapper around lazily evaluated func(*args, **kwargs).

    func is only evaluated when any attribute of its return value is accessed.
    Every attribute access is passed through to the wrapped value.
    (This only excludes special cases like method-wrappers, e.g., __hash__.)
    The sole additional attribute is the lazy_self function which holds the
    return value (or, prior to evaluation, func and arguments), in its closure.
    funcCallable[..., Any]argsr   kwargsreturnNonec                   s&   d fdd}t d| d S )Nr   r   c                     s(   i  t d fdd  S )N	lazy_selfc                     s    S N r   return_valuer   W/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/ruamel/yaml/util.py<lambda>!   s    z6LazyEval.__init__.<locals>.lazy_self.<locals>.<lambda>object__setattr__r   r   r   r   selfr   r   r      s   z$LazyEval.__init__.<locals>.lazy_selfr   )r   r   r   )r   r   r   r   r   r   r   r   __init__   s   zLazyEval.__init__namestrc                 C  s$   t | d}|dkr|S t| |S )Nr   )r   __getattribute__getattr)r   r!   r   r   r   r   r#   &   s   zLazyEval.__getattribute__valuec                 C  s   t |  || d S r   )setattrr   )r   r!   r%   r   r   r   r   ,   s   zLazyEval.__setattr__N)r   r   r   r   r   r   r   r   )r!   r"   r   r   )r!   r"   r%   r   r   r   )__name__
__module____qualname____doc__r    r#   r   r   r   r   r   r      s
    


r   a  ^(?P<year>[0-9][0-9][0-9][0-9])
       -(?P<month>[0-9][0-9]?)
       -(?P<day>[0-9][0-9]?)
       (?:((?P<t>[Tt])|[ \t]+)   # explictly not retaining extra spaces
       (?P<hour>[0-9][0-9]?)
       :(?P<minute>[0-9][0-9])
       :(?P<second>[0-9][0-9])
       (?:\.(?P<fraction>[0-9]*))?
        (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
       (?::(?P<tz_minute>[0-9][0-9]))?))?)?$yearr   monthdaythourminutesecondfractiontztz_signtz_hour	tz_minuter   'Union[datetime.datetime, datetime.date]c              
   C  sn  d}t | } t |}t |}|d u rt| ||S t |}t |}t |}d}|r_|d d }t|dk r?|d7 }t|dk s5t |}t|dkrUt |d dkrU|d7 }||kr\d}n|}nd}d }d }|	rt |
}
|rqt |nd}tj|
|d}|	dkr| }tj||d	}n|d
krtjtjdd|d	}||krtjdd }t| |||||||}|r||8 }|S )Ni?B r      0   r   )hoursminutes-)r!   Z)r;   )seconds)intdatetimedatelen	timedeltatimezone)r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   ZMAX_FRACfracZfrac_stzinfodeltatddatar   r   r   create_timestampA   sR   	rK   streamr   kwc                 K  s  ddl m} ddd}t| tr| }nt| tr| d	}n|  }d
}d
}d
}d
}d}	| D ]|}
|
 }|	 }|
drh||
}||	 }|d }|
| dkr[|d7 }|
| dksQ|
| dkrbq0||	 } nE|d
u r|d
ur|rd}|
| dv r|d7 }|
| dv sz||kr|| }|dr||
}	d}|
| dkr|d7 }|
| dks|}q0d
}q0|d
u r|d
ur|}d|vr| n|d}|j|fi |||fS )at  guess the indent and block sequence indent of yaml stream/string

    returns round_trip_loaded stream, indent level, block sequence indent
    - block sequence indent is the number of spaces before a dash relative to previous indent
    - if there are no block sequences, indent is taken from nested mappings, block sequence
      indent is unset (None) in that case
    r   )YAMLliner   r   r@   c                 S  s@   d}|t | k r| | dkr|d7 }|t | k r| | dks|S )Nr    r   )rC   )rO   idxr   r   r   leading_spaces   s
   z.load_yaml_guess_indent.<locals>.leading_spaceszutf-8Nr   z- rP   #z -:yaml)rO   r   r   r@   )mainrN   
isinstancer"   bytesdecoderead
splitlinesrstriplstrip
startswithendswithpopload)rL   rM   rN   rR   Zyaml_strZ
map_indentindentZblock_seq_indentZprev_line_key_onlyZ
key_indentrO   ZrlineZllineZl_srQ   rU   r   r   r   load_yaml_guess_indent   s\   




rc   cfgc                 c  sp    ddl m} t| |sJ | jD ]	}| r|V  qt| D ]	}| r(|V  q| jD ]	}| r5|V  q,dS )zv
    walks over a ConfigObj (INI file with comments) generating
    corresponding YAML output (including comments
    r   )	ConfigObjN)	configobjre   rW   Zinitial_commentstrip_walk_sectionZfinal_comment)rd   re   csr   r   r   configobj_walker   s    

rk   rj   levelr@   c           
      c  sN   ddl m} t| |sJ d| }| jD ]S}| j| D ]	}||  V  q| | }d|v rA|d }d| | dd|  }nd|v rOd|dd d }| | d	| }| j| }|re|d
| 7 }|V  q| jD ]8}| j| D ]	}||  V  qs| | d}| j| }|r|d
| 7 }|V  t	| | |d dD ]}	|	V  qqld S )Nr   )Sectionz  
z|
rT   'z''z: rP   r   )rl   )
rf   rm   rW   Zscalarscommentsrg   replaceZinline_commentssectionsrh   )
rj   rl   rm   rb   r!   ri   xirO   valr   r   r   rh      s<   



rh   )r+   r   r,   r   r-   r   r.   r   r/   r   r0   r   r1   r   r2   r   r3   r   r4   r   r5   r   r6   r   r   r7   )rL   r   rM   r   r   r   )rd   r   r   r   )r   )rj   r   rl   r@   r   r   )r*   
__future__r   rA   	functoolsr   retypingr   r   r   r   r   r	   r
   compatr   r   compileZRegExpXZtimestamp_regexprK   rc   rk   rh   r   r   r   r   <module>   s    


H
>