
    Be                          d Z ddlZddlmZ ddlZ	  G d d      Z eeej                        Z edej                         Zd Zd Zd	 Zdd
Zy)z6
some helper functions that might be generally useful
    N)partialc                   "    e Zd ZdZd Zd Zd Zy)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.
    c                 J      fd}t         j                   d|       y )Nc                  N      i  t         j                  d fd        S )N	lazy_selfc                       S N )return_values   0lib/python3.12/site-packages/ruamel/yaml/util.py<lambda>z6LazyEval.__init__.<locals>.lazy_self.<locals>.<lambda>!   s    ,     object__setattr__)r   argsfunckwargsselfs   @r   r   z$LazyEval.__init__.<locals>.lazy_self   s+    00Lt[2FGr   r   r   )r   r   r   r   r   s   ```` r   __init__zLazyEval.__init__   s    	  	4i8r   c                 ^    t         j                  | d      }|dk(  r|S t         |       |      S )Nr   )r   __getattribute__getattr)r   namer   s      r   r   zLazyEval.__getattribute__&   s1    ++D+>	;y{D))r   c                 :    t        | j                         ||       y r
   )setattrr   )r   r   values      r   r   zLazyEval.__setattr__-   s     $.r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s    9*/r   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]))?))?)?$c           	         d}t        |       } t        |      }t        |      }|st        j                  | ||      S t        |      }t        |      }t        |      }d}|ra|d d }t        |      dk  r|dz  }t        |      dk  rt        |      }t        |      dkD  rt        |d         dkD  r|dz  }||kD  rd}n|}nd}d }|	rBt        |
      }
|rt        |      nd}t        j                  |
|||kD  rdnd      }|	dk(  r | }n||kD  rt        j                  d	       }t        j                  | ||||||      }|r||z  }|S )
Ni?B r      0      )hoursminutesseconds-)r*   )intdatetimedatelen	timedelta)yearmonthdaythourminutesecondfractiontztz_signtz_hour	tz_minuteMAX_FRACfracfrac_sdeltadatas                    r   create_timestamprB   C   sd   
 Ht9DJE
c(C}}T5#..t9D[F[FD"1&kAocMF &kAo6{x=1Xa[!1A!5AID(?HHEg,&/C	NQ	""94(?aPQ
 c>FE	##A.. T5#tVVXNDKr   c                    ddl m} d }t        | t              r| }n2t        | t              r| j                  d      }n| j                         }d}d}d}d}d}	|j                         D ]  }
|
j                         }|j                         }|j                  d      r8 ||
      }||	z
  }|dz   }|
|   dk(  r|dz  }|
|   dk(  r|
|   d	k(  re||	z
  } n^|$|"|r d}|
|   d
v r|dz  }|
|   d
v r||kD  r||z
  }|j                  d      r# ||
      }	d}|
|   dk(  r|dz  }|
|   dk(  r|}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'   )YAMLc                 n    d}|t        |       k  r$| |   dk(  r|dz  }|t        |       k  r	| |   dk(  r|S )Nr    r'   )r/   )lineidxs     r   leading_spacesz.load_yaml_guess_indent.<locals>.leading_spaces   sC    CIo$s)s"21HC CIo$s)s"2
r   zutf-8Nr   z- rF   #z -:)mainrD   
isinstancestrbytesdecoderead
splitlinesrstriplstrip
startswithendswithload)streamkwrD   rI   yaml_str
map_indentindentblock_seq_indentprev_line_key_only
key_indentrG   rlinellinel_srH   yamls                   r   load_yaml_guess_indentrd   }   s     &#	FE	"==);;=JFJ##% "D! &C"Z/'Cs)s"q s)s"CyC:%F"4"@UCs)t#q s)t#'' #55
>>#'-JCs)s"q s)s"!$!5"6 ~*06D499X$$f.>>>r   c              #     K   ddl m} t        | |      sJ | j                  D ]  }|j	                         s|  t        |       D ]  }|j	                         s|  | j                  D ]  }|j	                         s|  yw)zv
    walks over a ConfigObj (INI file with comments) generating
    corresponding YAML output (including comments
    r   )	ConfigObjN)	configobjrf   rM   initial_commentstrip_walk_sectionfinal_comment)cfgrf   css       r   configobj_walkerro      s      $c9%%   779G 3 779G  779Gs   4B	$B	%B	B	c              #     K   ddl m} t        | |      sJ d|z  }| j                  D ]  }| j                  |   D ]  }||j                         z     | |   }d|v r/|dz   }d|z   |j                         j                  dd|z         z   }nd|v rd|j                  dd      z   dz   }d	j                  |||      }| j                  |   }|r|d
|z   z  }|  | j                  D ]v  }| j                  |   D ]  }||j                         z     dj                  ||      }| j                  |   }|r|d
|z   z  }| t        | |   |dz         D ]  }	|	  x y w)Nr   )Sectionz  
z|
rK   'z''z{0}{1}: {2}rF   z{0}{1}:r'   )level)rg   rq   rM   scalarscommentsri   replaceformatinline_commentssectionsrj   )
rn   rt   rq   r\   r   rm   xirG   vals
             r   rj   rj      s    !a!!E\F		 D! 	%A1779$$	%dG19A	AGGI--dD1H==AAXaiiT**S0A##FD!4d#C!GOD
 

 	D! 	%A1779$$	%-d#C!GOD
 4	: 	CI		s   EE )r   )r"   r-   	functoolsr   retypingAnyDictOptionalListTextcompatStreamTextTyper   compileRegExpXtimestamp_regexprB   rd   ro   rj   r   r   r   <module>r      sf      	 	
/ /B 
2::	&	0 DD 2t=?@(r   