a
    Ø
þdè  ã                   @   s\   d Z ddlmZ ddlmZ ddlmZ G dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZ	dS )zÜRepresents the state of Python objects being formatted.

Objects (e.g., list comprehensions, dictionaries, etc.) have specific
requirements on how they're formatted. These state objects keep track of these
requirements.
é    )Ú	lru_cache)Ústyle)Úsubtypesc                   @   s`   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚComprehensionStatea¹  Maintains the state of list comprehension formatting decisions.

  A stack of ComprehensionState objects are kept to ensure that list
  comprehensions are wrapped with well-defined rules.

  Attributes:
    expr_token: The first token in the comprehension.
    for_token: The first 'for' token of the comprehension.
    opening_bracket: The opening bracket of the list comprehension.
    closing_bracket: The closing bracket of the list comprehension.
    has_split_at_for: Whether there is a newline immediately before the
      for_token.
    has_interior_split: Whether there is a newline within the comprehension.
      That is, a split somewhere after expr_token or before closing_bracket.
  c                 C   s   || _ d | _d| _d| _d S ©NF)Ú
expr_tokenÚ	for_tokenÚhas_split_at_forÚhas_interior_split)Úselfr   © r   úb/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/yapf/yapflib/object_state.pyÚ__init__,   s    zComprehensionState.__init__c                 C   s   | j jjdkS )zBReturns whether the comp_expr is "trivial" i.e. is a single token.Úfor)r   Ú
next_tokenÚvalue©r   r   r   r   ÚHasTrivialExpr2   s    z!ComprehensionState.HasTrivialExprc                 C   s   | j jS ©N)r   Zprevious_tokenr   r   r   r   Úopening_bracket6   s    z"ComprehensionState.opening_bracketc                 C   s   | j jS r   ©r   Úmatching_bracketr   r   r   r   Úclosing_bracket:   s    z"ComprehensionState.closing_bracketc                 C   s&   t | jƒ}| j|_| j|_| j|_|S r   )r   r   r   r	   r
   ©r   Úcloner   r   r   ÚClone>   s
    
zComprehensionState.Clonec                 C   s   d| j | j| j| j|  ¡ f S )Nzh[opening_bracket::%s, for_token::%s, has_split_at_for::%s, has_interior_split::%s, has_trivial_expr::%s])r   r   r	   r
   r   r   r   r   r   Ú__repr__E   s
    
ÿþzComprehensionState.__repr__c                 C   s   t | ƒt |ƒkS r   ©Úhash©r   Úotherr   r   r   Ú__eq__K   s    zComprehensionState.__eq__c                 C   s
   | |k S r   r   r   r   r   r   Ú__ne__N   s    zComprehensionState.__ne__c                 O   s   t | j| j| j| jfƒS r   )r   r   r   r	   r
   ©r   ÚargsÚkwargsr   r   r   Ú__hash__Q   s    ÿzComprehensionState.__hash__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr   r   r   r   r!   r"   r&   r   r   r   r   r      s   

r   c                   @   sª   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZeeƒ dd	„ ƒƒZ	eeƒ d
d„ ƒƒZ
eeƒ dd„ ƒƒZeƒ dd„ ƒZeƒ dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚParameterListStateaH  Maintains the state of function parameter list formatting decisions.

  Attributes:
    opening_bracket: The opening bracket of the parameter list.
    closing_bracket: The closing bracket of the parameter list.
    has_typed_return: True if the function definition has a typed return.
    ends_in_comma: True if the parameter list ends in a comma.
    last_token: Returns the last token of the function declaration.
    has_default_values: True if the parameters have default values.
    has_split_before_first_param: Whether there is a newline before the first
      parameter.
    opening_column: The position of the opening parameter before a newline.
    parameters: A list of parameter objects (Parameter).
    split_before_closing_bracket: Split before the closing bracket. Sometimes
      needed if the indentation would collide.
  c                 C   s$   || _ || _|| _|j| _d| _d S r   )r   Úhas_split_before_first_paramÚopening_columnÚ
parametersÚsplit_before_closing_bracket)r   r   Únewliner.   r   r   r   r   h   s
    zParameterListState.__init__c                 C   s   | j jS r   r   r   r   r   r   r   o   s    z"ParameterListState.closing_bracketc                 C   s   | j jjdkS )Nz->)r   r   r   r   r   r   r   Úhas_typed_returns   s    z#ParameterListState.has_typed_returnc                 C   s   t dd„ | jD ƒƒS )Nc                 s   s   | ]}|j V  qd S r   )Úhas_default_value©Ú.0Úparamr   r   r   Ú	<genexpr>z   ó    z8ParameterListState.has_default_values.<locals>.<genexpr>)Úanyr/   r   r   r   r   Úhas_default_valuesw   s    z%ParameterListState.has_default_valuesc                 C   s   | j s
dS | j d jjjdkS )NFéÿÿÿÿú,)r/   Ú
last_tokenr   r   r   r   r   r   Úends_in_comma|   s    z ParameterListState.ends_in_commac                 C   s    | j j}|js|jr|j}q|S r   )r   r   Z
is_commentr   )r   Útokenr   r   r   r=   ƒ   s    zParameterListState.last_tokenc                 C   sN   | j s
dS | jsdS | jj}| jd j}||jt|jƒ 8 }|| t d¡kS )z8Return true if the last parameter fits on a single line.FTr;   ÚCOLUMN_LIMIT)	r2   r/   r=   Útotal_lengthÚfirst_tokenÚlenr   r   ÚGet©r   ÚindentrA   Z
last_paramr   r   r   ÚLastParamFitsOnLine‹   s    z&ParameterListState.LastParamFitsOnLinec                 C   s\   t  d¡rdS | jrdS | js"dS | jj}| jd j}||jt|jƒ 8 }|| t  d¡kS )z:Return true if there's a split before the closing bracket.ZDEDENT_CLOSING_BRACKETSTFr;   r@   )	r   rD   r>   r/   r=   rA   rB   rC   r   rE   r   r   r   ÚSplitBeforeClosingBracket—   s    
z,ParameterListState.SplitBeforeClosingBracketc                 C   s0   t | j| j| jƒ}| j|_dd„ | jD ƒ|_|S )Nc                 S   s   g | ]}|  ¡ ‘qS r   )r   r4   r   r   r   Ú
<listcomp>ª   r8   z,ParameterListState.Clone.<locals>.<listcomp>)r,   r   r-   r.   r0   r/   r   r   r   r   r   ¥   s    þzParameterListState.Clonec                 C   s   d| j | j| jf S )NzK[opening_bracket::%s, has_split_before_first_param::%s, opening_column::%d])r   r-   r.   r   r   r   r   r   ­   s
    ÿþzParameterListState.__repr__c                 C   s   t | ƒt |ƒkS r   r   r   r   r   r   r!   ³   s    zParameterListState.__eq__c                 C   s
   | |k S r   r   r   r   r   r   r"   ¶   s    zParameterListState.__ne__c                 O   s"   t | j| j| jdd„ | jD ƒfƒS )Nc                 s   s   | ]}t |ƒV  qd S r   r   r4   r   r   r   r7   ¼   r8   z.ParameterListState.__hash__.<locals>.<genexpr>)r   r   r-   r.   r/   r#   r   r   r   r&   ¹   s
    ÿÿzParameterListState.__hash__N)r'   r(   r)   r*   r   r+   r   r2   r   r:   r>   r=   rG   rH   r   r   r!   r"   r&   r   r   r   r   r,   V   s0   



r,   c                   @   sR   e Zd ZdZdd„ Zeeƒ dd„ ƒƒZdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ ZdS )Ú	Parametera  A parameter in a parameter list.

  Attributes:
    first_token: (format_token.FormatToken) First token of parameter.
    last_token: (format_token.FormatToken) Last token of parameter.
    has_default_value: (boolean) True if the parameter has a default value
  c                 C   s   || _ || _d S r   ©rB   r=   )r   rB   r=   r   r   r   r   È   s    zParameter.__init__c                 C   s:   | j }|| jkr6tj|jv r dS | ¡ r.|jn|j}qdS )z2Returns true if the parameter has a default value.TF)rB   r=   r   ZDEFAULT_OR_NAMED_ASSIGNZ
OpensScoper   r   )r   Útokr   r   r   r3   Ì   s    
zParameter.has_default_valuec                 C   s   t | j| jƒS r   )rJ   rB   r=   r   r   r   r   r   ×   s    zParameter.Clonec                 C   s   d| j | jf S )Nz [first_token::%s, last_token:%s]rK   r   r   r   r   r   Ú   s    ÿzParameter.__repr__c                 C   s   t | ƒt |ƒkS r   r   r   r   r   r   r!   Þ   s    zParameter.__eq__c                 C   s
   | |k S r   r   r   r   r   r   r"   á   s    zParameter.__ne__c                 O   s   t | j| jfƒS r   )r   rB   r=   r#   r   r   r   r&   ä   s    zParameter.__hash__N)r'   r(   r)   r*   r   r+   r   r3   r   r   r!   r"   r&   r   r   r   r   rJ   ¿   s   	rJ   N)
r*   Ú	functoolsr   Zyapf.yapflibr   r   Úobjectr   r,   rJ   r   r   r   r   Ú<module>   s   ;i