
    c                          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dS )z6
some helper functions that might be generally useful
    N)partialF)AnyDictOptionalListText   )StreamTextTypec                   $    e Zd ZdZd Zd Z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.
    c                 V      fd}t                                d|           d S )Nc                  X      i  t                               d fd            S )N	lazy_selfc                       S N )return_values   0lib/python3.11/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@    4000Lt[2F2F2F2FGGGr   r   r   )r   r   r   r   r   s   ```` r   __init__zLazyEval.__init__   sN    	  	  	  	  	  	  	  	  	4i88888r   c                 x    t                               | d          }|dk    r|S t           |            |          S )Nr   )r   __getattribute__getattr)r   namer   s      r   r    zLazyEval.__getattribute__&   s@    ++D+>>	; 	yy{{D)))r   c                 L    t          |                                 ||           d S 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      sK         9 9 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}|r|d d         }t          |          dk     r|dz  }t          |          dk     t          |          }t          |          dk    rt          |d                   dk    r|dz  }||k    rd}n|}nd}d }|	rKt          |
          }
|rt          |          nd}t          j        |
|||k    rdnd          }|	dk    r| }n||k    rt          j        d	           }t          j        | ||||||          }|r||z  }|S )
Ni?B r      0   r	   )hoursminutesseconds-)r0   )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_timestamprH   C   s   
 Ht99DJJE
c((C /}T5#...t99D[[F[[FD "1"&kkAo 	cMF &kkAo 	6{{x==1 	Xa[!1!1A!5 	AID(? 	HHHHE 	/g,,&/6C	NNNQ	"94(?6QaaPQ
 
 
 c> 	FE	 /#A.... T5#tVVXNND Kr   c                 ,   ddl m} d }t          | t                    r| }n?t          | t                    r|                     d          }n|                                 }d}d}d}d}d}	|                                D ]}
|
                                }|	                                }|
                    d          rF ||
          }||	z
  }|dz   }|
|         dk    r|dz  }|
|         dk    |
|         d	k    r~||	z
  } nq|*|(|r&d}|
|         d
v r|dz  }|
|         d
v ||k    r||z
  }|                    d          r- ||
          }	d}|
|         dk    r|dz  }|
|         dk    |}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                     d}|t          |           k     r0| |         dk    r$|dz  }|t          |           k     r| |         dk    $|S )Nr    r	   )r5   )lineidxs     r   leading_spacesz.load_yaml_guess_indent.<locals>.leading_spaces   s[    CIIo 	$s)s"2 	1HC CIIo 	$s)s"2 	
r   zutf-8Nr   z- rL   #z -:)mainrJ   
isinstancestrbytesdecoderead
splitlinesrstriplstrip
startswithendswithload)streamkwrJ   rO   yaml_str
map_indentindentblock_seq_indentprev_line_key_only
key_indentrM   rlinellinel_srN   yamls                   r   load_yaml_guess_indentrj   }   sU       &# !	FE	"	" !==));;==JFJ##%% " "D!! 		 .&&C"Z/'Cs)s" q s)s" CyC :%FE 	6"4 	6U 	6Cs)t# q s)t# '' 6 #55
>># 	'--JCs)s" q s)s" !$! * 466D49X$$$$f.>>>r   c              #     K   ddl m} t          | |          sJ | j        D ]}|                                r|V  t          |           D ]}|                                r|V  | j        D ]}|                                r|V  dS )zv
    walks over a ConfigObj (INI file with comments) generating
    corresponding YAML output (including comments
    r   )	ConfigObjN)	configobjrl   rS   initial_commentstrip_walk_sectionfinal_comment)cfgrl   css       r   configobj_walkerru      s       $#####c9%%%%%   7799 	GGG3  7799 	GGG  7799 	GGG r   c              #     K   ddl m} t          | |          sJ d|z  }| j        D ]}| j        |         D ]}||                                z   V  | |         }d|v r7|dz   }d|z   |                                                    dd|z             z   }n d|v rd|                    dd          z   dz   }d	                    |||          }| j        |         }|r|d
|z   z  }|V  | j	        D ]}}| j        |         D ]}||                                z   V  d                    ||          }| j        |         }|r|d
|z   z  }|V  t          | |         |dz             D ]}	|	V  ~d S )Nr   )Sectionz  
z|
rQ   'z''z{0}{1}: {2}rL   z{0}{1}:r	   )level)rm   rw   rS   scalarscommentsro   replaceformatinline_commentssectionsrp   )
rt   rz   rw   rb   r"   rs   xirM   vals
             r   rp   rp      s     !!!!!!a!!!!!E\F	  D! 	% 	%A17799$$$$$dG19 	1A	AGGII--dD1H===AAAX 	1aiiT***S0A##FD!44d# 	C!GOD




 	 	D! 	% 	%A17799$$$$$--d# 	C!GOD


 4	::: 	 	CIIII		 	r   )r   )r)   r3   	functoolsr   retypingr   r   r   r   r   compatr
   r   compileRegExpXtimestamp_regexprH   rj   ru   rp   r   r   r   <module>r      s            				'
/ / / / / / / /B 
2:	&	&6	0 D  2 2 2t=? =? =?@  (     r   