o
    .d`                     @  sl  d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!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'e' Z(G d"d# d#e&Z)e) Z*G d$d% d%e&Z+e+ Z,G d&d' d'e&Z-e- Z.ed(Z/G d)d* d*e&ee/ Z0G d+d, d,e0e1 Z2e2d-Z3e2d.Z4G d/d0 d0e0e5 Z6G d1d2 d2e0e7 Z8G d3d4 d4e0e9 Z:G d5d6 d6e&Z;G d7d8 d8e0ee7e5f  Z<eee<d9f  Z=eee5d:f d;f Z>G d<d9 d9e&Z?G d=d> d>e&Z@G d?d@ d@e&ZAG dAdB dBZBG dCdD dDe&ZCG dEdF dFe&ZDG dGdH dHeDZEG dIdJ dJe&ZFee8e:e?e-e'f ZGe&ZHG dKdL dLe&ZIee7e9f ZJdadTdUZKdbdXdYZLdcd[d\ZMddd]d^ZNddd_d`ZOdS )ezLiquid expression objects.    )annotationsN)ABC)abstractmethod)abc)Decimal)islice)Any)	Awaitable)Callable)Dict)Generic)Iterable)Iterator)List)Mapping)Optional)Tuple)TypeVar)Union)Markup)Context)FutureContext)Error)FilterValueErrorLiquidTypeError)NoSuchFilterFunc)to_intc                   @  s2   e Zd ZdZedddZddd	ZdddZdS )
Expression contextr   returnobjectc                 C     dS )z/Evaluate the expression with the given context.Nr   selfr    r   r   I/var/www/Matress/matenv/lib/python3.10/site-packages/liquid/expression.pyevaluate'   s    zExpression.evaluatec                   s   |  |S )z<An async version of `liquid.expression.Expression.evaluate`.r'   r$   r   r   r&   evaluate_async+   s   
zExpression.evaluate_asyncList[Expression]c                 C  s   t | jj d)z#Return a list of child expressions.z	.children)NotImplementedError	__class____name__r%   r   r   r&   children/   s   zExpression.childrenNr    r   r!   r"   r!   r*   )r-   
__module____qualname__	__slots__r   r'   r)   r/   r   r   r   r&   r   $   s    
r   c                   @  B   e Zd ZdZdddZdd	d
ZdddZdddZdddZdS )Nilr   otherr"   r!   boolc                 C  s   |d u pt |tS N)
isinstancer6   r%   r7   r   r   r&   __eq__7      z
Nil.__eq__strc                 C  r#   )NzNIL()r   r.   r   r   r&   __repr__:      zNil.__repr__c                 C  r#   N r   r.   r   r   r&   __str__=   r@   zNil.__str___r   Nonec                 C  s   d S r9   r   r%   rD   r   r   r&   r'   @   r@   zNil.evaluater*   c                 C     g S r9   r   r.   r   r   r&   r/   C   r@   zNil.childrenNr7   r"   r!   r8   r!   r>   )rD   r   r!   rE   r1   	r-   r2   r3   r4   r<   r?   rC   r'   r/   r   r   r   r&   r6   4   s    



r6   c                   @  B   e Zd ZdZdddZdd	d
ZdddZdddZdddZdS )Emptyr   r7   r"   r!   r8   c                 C  s*   t |trdS t |tttfr|sdS dS NTF)r:   rL   listdictr>   r;   r   r   r&   r<   M   s
   
zEmpty.__eq__r>   c                 C  r#   )NzEmpty()r   r.   r   r   r&   r?   T   r@   zEmpty.__repr__c                 C  r#   )Nemptyr   r.   r   r   r&   rC   W   r@   zEmpty.__str__rD   r   c                 C     | S r9   r   rF   r   r   r&   r'   Z   r@   zEmpty.evaluater*   c                 C  rG   r9   r   r.   r   r   r&   r/   ]   r@   zEmpty.childrenNrH   rI   )rD   r   r!   rL   r1   rJ   r   r   r   r&   rL   J   s    



rL   c                   @  rK   )Blankr   r7   r"   r!   r8   c                 C  sB   t |tr|r| rdS t |ttfr|sdS t |trdS dS rM   )r:   r>   isspacerN   rO   rR   r;   r   r   r&   r<   g   s   
zBlank.__eq__r>   c                 C  r#   )NzBlank()r   r.   r   r   r&   r?   p   r@   zBlank.__repr__c                 C  r#   )Nblankr   r.   r   r   r&   rC   s   r@   zBlank.__str__rD   r   c                 C  rQ   r9   r   rF   r   r   r&   r'   v   r@   zBlank.evaluater*   c                 C  rG   r9   r   r.   r   r   r&   r/   y   r@   zBlank.childrenNrH   rI   )rD   r   r!   rR   r1   rJ   r   r   r   r&   rR   d   s    

	

rR   c                   @  r5   )Continuer   r7   r"   r!   r8   c                 C  s   t |trdS dS rM   )r:   rU   r;   r   r   r&   r<      s   
zContinue.__eq__r>   c                 C  r#   )Nz
Continue()r   r.   r   r   r&   r?      r@   zContinue.__repr__c                 C  r#   )Ncontinuer   r.   r   r   r&   rC      r@   zContinue.__str__rD   r   intc                 C  r#   )Nr   r   rF   r   r   r&   r'      r@   zContinue.evaluater*   c                 C  rG   r9   r   r.   r   r   r&   r/      r@   zContinue.childrenNrH   rI   )rD   r   r!   rW   r1   rJ   r   r   r   r&   rU      s    



rU   Tc                   @  sV   e Zd ZdZdddZddd	ZdddZdddZdddZd ddZ	d!ddZ
dS )"Literalvaluer[   rX   c                 C  
   || _ d S r9   rZ   r%   r[   r   r   r&   __init__      
zLiteral.__init__r!   r>   c                 C  
   t | jS r9   )reprr[   r.   r   r   r&   rC      r_   zLiteral.__str__r7   r"   r8   c                 C  s
   | j |kS r9   rZ   r;   r   r   r&   r<      r_   zLiteral.__eq__rW   c                 C  r`   r9   hashr[   r.   r   r   r&   __hash__   r_   zLiteral.__hash__c                 C     t | jS r9   sys	getsizeofr[   r.   r   r   r&   
__sizeof__      zLiteral.__sizeof__rD   r   c                 C  s   | j S r9   rZ   rF   r   r   r&   r'      s   zLiteral.evaluater*   c                 C  rG   r9   r   r.   r   r   r&   r/      r@   zLiteral.childrenN)r[   rX   rI   rH   r!   rW   )rD   r   r!   r"   r1   )r-   r2   r3   r4   r^   rC   r<   rd   ri   r'   r/   r   r   r   r&   rY      s    





rY   c                      s6   e Zd ZdZd fddZdd	d
ZdddZ  ZS )Booleanr   r[   r8   c                      t  | d S r9   superr^   r]   r,   r   r&   r^         zBoolean.__init__r7   r"   r!   c                 C     t |to
| j|jkS r9   )r:   rl   r[   r;   r   r   r&   r<         zBoolean.__eq__r>   c                 C     d| j  dS )NzBoolean(value=)rZ   r.   r   r   r&   r?         zBoolean.__repr__)r[   r8   rH   rI   r-   r2   r3   r4   r^   r<   r?   __classcell__r   r   rp   r&   rl      
    
rl   TFc                      sT   e Zd ZdZd fddZdd
dZdddZdddZdddZdddZ	  Z
S )StringLiteralr   r[   r>   c                   rm   r9   rn   r]   rp   r   r&   r^      rq   zStringLiteral.__init__r7   r"   r!   r8   c                 C  rr   r9   )r:   rz   r[   r;   r   r   r&   r<      rs   zStringLiteral.__eq__rW   c                 C  r`   r9   rb   r.   r   r   r&   rd      r_   zStringLiteral.__hash__c                 C  rt   )NzStringLiteral(value='z')rZ   r.   r   r   r&   r?      rv   zStringLiteral.__repr__c                 C  re   r9   rf   r.   r   r   r&   ri      rj   zStringLiteral.__sizeof__r    r   Union[str, Markup]c                 C  s   |j rt| jS | jS r9   )
autoescaper   r[   r$   r   r   r&   r'      s   
zStringLiteral.evaluate)r[   r>   rH   rk   rI   )r    r   r!   r{   )r-   r2   r3   r4   r^   r<   rd   r?   ri   r'   rx   r   r   rp   r&   rz      s    



rz   c                      s@   e Zd ZdZd fddZdd
dZdddZdddZ  ZS )IntegerLiteralr   r[   rW   c                   rm   r9   rn   r]   rp   r   r&   r^      rq   zIntegerLiteral.__init__r7   r"   r!   r8   c                 C  rr   r9   )r:   r}   r[   r;   r   r   r&   r<      rs   zIntegerLiteral.__eq__c                 C  r`   r9   rb   r.   r   r   r&   rd      r_   zIntegerLiteral.__hash__r>   c                 C  rt   )NzIntegerLiteral(value=ru   rZ   r.   r   r   r&   r?      rv   zIntegerLiteral.__repr__)r[   rW   rH   rk   rI   )	r-   r2   r3   r4   r^   r<   rd   r?   rx   r   r   rp   r&   r}      s    

r}   c                      s6   e Zd ZdZd fddZdd
dZdddZ  ZS )FloatLiteralr   r[   floatc                   rm   r9   rn   r]   rp   r   r&   r^      rq   zFloatLiteral.__init__r7   r"   r!   r8   c                 C  rr   r9   )r:   r~   r[   r;   r   r   r&   r<      rs   zFloatLiteral.__eq__r>   c                 C  rt   )NzFloatLiteral(value=ru   rZ   r.   r   r   r&   r?      rv   zFloatLiteral.__repr__)r[   r   rH   rI   rw   r   r   rp   r&   r~      ry   r~   c                      s|   e Zd ZdZd$ddZd%ddZd&ddZd&ddZd'ddZd' fddZ	d(ddZ
d)ddZd)dd Zd*d"d#Z  ZS )+RangeLiteralstartstopr   r   r   c                 C     || _ || _d S r9   r   r%   r   r   r   r   r&   r^         
zRangeLiteral.__init__r7   r"   r!   r8   c                 C  "   t |to| j|jko| j|jkS r9   )r:   r   r   r   r;   r   r   r&   r<     
   


zRangeLiteral.__eq__r>   c                 C     d| j  d| j dS )N(z..ru   r   r.   r   r   r&   rC     rs   zRangeLiteral.__str__c                 C  r   )NzRangeLiteral(start=z, stop=ru   r   r.   r   r   r&   r?     rs   zRangeLiteral.__repr__rW   c                 C  s   t | j| jfS r9   )rc   r   r   r.   r   r   r&   rd     rq   zRangeLiteral.__hash__c                   s"   t   t| j t| j S r9   )ro   ri   rg   rh   r   r   r.   rp   r   r&   ri     s    zRangeLiteral.__sizeof__r   rangec                 C  sf   zt |}W n ty   d}Y nw zt |}W n ty#   d}Y nw ||kr,tdS t||d S )Nr      )r   
ValueErrorr   r   r   r   r&   _make_range  s   zRangeLiteral._make_ranger    r   c                 C  s   |  | j|| j|S r9   )r   r   r'   r   r$   r   r   r&   r'   '  s   zRangeLiteral.evaluatec                   s*   |  | j|I d H | j|I d H S r9   )r   r   r)   r   r$   r   r   r&   r)   ,  s
   zRangeLiteral.evaluate_asyncr*   c                 C     | j | jgS r9   r   r.   r   r   r&   r/   2  rj   zRangeLiteral.children)r   r   r   r   rH   rI   rk   )r   r   r   r   r!   r   )r    r   r!   r   r1   )r-   r2   r3   r4   r^   r<   rC   r?   rd   ri   r   r'   r)   r/   rx   r   r   rp   r&   r      s    







r   c                   @  s8   e Zd ZdZdddZdd	d
ZdddZdddZdS )IdentifierPathElementr   r7   r"   r!   r8   c                 C  rr   r9   )r:   r   r[   r;   r   r   r&   r<   9  rs   zIdentifierPathElement.__eq__rW   c                 C  r`   r9   rb   r.   r   r   r&   rd   <  r_   zIdentifierPathElement.__hash__r>   c                 C  rt   )NzIdentifierPathElement(value=ru   rZ   r.   r   r   r&   r?   ?  rv   zIdentifierPathElement.__repr__c                 C  r`   r9   )r>   r[   r.   r   r   r&   rC   B  r_   zIdentifierPathElement.__str__NrH   rk   rI   )r-   r2   r3   r4   r<   rd   r?   rC   r   r   r   r&   r   6  s    


r   
IdentifierIdentifierTuple.c                      s|   e Zd ZdZd"ddZd#d
dZd$ddZd$ddZd%ddZd&ddZ	d& fddZ
d'ddZd'ddZd(d d!Z  ZS ))r   pathr   IdentifierPathc                 C  r\   r9   r   )r%   r   r   r   r&   r^   M  r_   zIdentifier.__init__r7   r"   r!   r8   c                 C  rr   r9   )r:   r   r   r;   r   r   r&   r<   P  rs   zIdentifier.__eq__r>   c                 C  rt   )NzIdentifier(path=ru   r   r.   r   r   r&   r?   S  rv   zIdentifier.__repr__c                 C  sr   g }| j D ]*}t|tr|d| d qt|}d|v r(|d| d q|t| qd|ddS )N[].z["z"]z.[)r   r:   r   appendr>   joinreplace)r%   bufelem_strr   r   r&   rC   V  s   

zIdentifier.__str__r   c                 C  s@   g }| j D ]}t|tr||  q|t| qt|S )z)Return this identifier's path as a tuple.)r   r:   r   r   as_tupler>   tuple)r%   partsr   r   r   r&   r   c  s   

zIdentifier.as_tuplerW   c                 C  s   t t| jS r9   )rc   r   r   r.   r   r   r&   rd   m  rv   zIdentifier.__hash__c                   s   t   t| j S r9   )ro   ri   rg   rh   r   r.   rp   r   r&   ri   p  rs   zIdentifier.__sizeof__r    r   c                   s    fdd| j D } |S )Nc                      g | ]}|  qS r   r(   .0r   r    r   r&   
<listcomp>t      z'Identifier.evaluate.<locals>.<listcomp>)r   getr%   r    r   r   r   r&   r'   s  s   
zIdentifier.evaluatec                   s,    fdd| j D I d H } |I d H S )Nc                      g | ]
}|  I d H qS r9   r)   r   r   r   r&   r   x      z-Identifier.evaluate_async.<locals>.<listcomp>)r   	get_asyncr   r   r   r&   r)   w  s   zIdentifier.evaluate_asyncr*   c                 C  s   dd | j D S )Nc                 S  s   g | ]	}t |tr|qS r   )r:   r   )r   elr   r   r&   r   |  s    z'Identifier.children.<locals>.<listcomp>r   r.   r   r   r&   r/   {  rq   zIdentifier.children)r   r   rH   rI   )r!   r   rk   r0   r1   )r-   r2   r3   r4   r^   r<   r?   rC   r   rd   ri   r'   r)   r/   rx   r   r   rp   r&   r   J  s    








c                   @  s`   e Zd ZdZdddZd ddZd!ddZd!ddZd"ddZd#ddZ	d#ddZ
d$ddZdS )%PrefixExpressionoperatorrightr   r>   r   r   c                 C  r   r9   r   )r%   r   r   r   r   r&   r^     r   zPrefixExpression.__init__r7   r"   r!   r8   c                 C  r   r9   )r:   r   r   r   r;   r   r   r&   r<     r   zPrefixExpression.__eq__c                 C     d| j  d| jdS )NzPrefixExpression(operator='	', right=ru   r   r.   r   r   r&   r?     rs   zPrefixExpression.__repr__c                 C  s   d| j  | j dS Nr   ru   r   r.   r   r   r&   rC     s   zPrefixExpression.__str__Union[int, float]c                 C  sX   | j dkr
t| S | j dkr$t|ttfr| S td| j  | j td| j  )Nnot-unknown operator )r   	is_truthyr:   rW   r   r   r   )r%   r   r   r   r&   	_evaluate  s   


zPrefixExpression._evaluater    r   c                 C  s   |  | j|S r9   )r   r   r'   r$   r   r   r&   r'     r=   zPrefixExpression.evaluatec                   s   |  | j|I d H S r9   )r   r   r)   r$   r   r   r&   r)     s   zPrefixExpression.evaluate_asyncr*   c                 C     | j gS r9   )r   r.   r   r   r&   r/        zPrefixExpression.childrenN)r   r>   r   r   rH   rI   )r   r"   r!   r   r0   r1   )r-   r2   r3   r4   r^   r<   r?   rC   r   r'   r)   r/   r   r   r   r&   r     s    







r   c                   @  sV   e Zd ZdZdddZdddZdddZdddZd ddZd ddZ	d!ddZ
dS )"InfixExpressionleftr   r   r   r   r   r>   r   c                 C  s   || _ || _|| _d S r9   r   )r%   r   r   r   r   r   r&   r^     s   
zInfixExpression.__init__r7   r"   r!   r8   c                 C  .   t |to| j|jko| j|jko| j|jkS r9   )r:   r   r   r   r   r;   r   r   r&   r<        



zInfixExpression.__eq__c                 C  s   d| j d| j d| jdS )NzInfixExpression(left=z, operator='r   ru   r   r.   r   r   r&   r?     s   
zInfixExpression.__repr__c                 C  s   d| j  d| j d| j dS )Nr    ru   r   r.   r   r   r&   rC        zInfixExpression.__str__r    r   c                 C  s   t | j|| j| j|S r9   )comparer   r'   r   r   r$   r   r   r&   r'     s   zInfixExpression.evaluatec                   s,   t | j|I d H | j| j|I d H S r9   )r   r   r)   r   r   r$   r   r   r&   r)     s   zInfixExpression.evaluate_asyncr*   c                 C  r   r9   )r   r   r.   r   r   r&   r/     rj   zInfixExpression.childrenN)r   r   r   r>   r   r   rH   rI   r0   r1   )r-   r2   r3   r4   r^   r<   r?   rC   r'   r)   r/   r   r   r   r&   r     s    






r   c                   @  sd   e Zd ZdZ	d!d"d	d
Zd#ddZd$ddZd$ddZd%ddZd%ddZ	d&ddZ
d&dd ZdS )'FilternameargskwargsNr   r>   r   r*   r   "Optional[Mapping[str, Expression]]c                 C  s   || _ || _|p	i | _d S r9   r   )r%   r   r   r   r   r   r&   r^     s   zFilter.__init__r7   r"   r!   r8   c                 C  r   r9   )r:   r   r   r   r   r;   r   r   r&   r<     r   zFilter.__eq__c                 C  s   d| j  d| j d| j dS )NzFilter(name='z', args=z	, kwargs=ru   r   r.   r   r   r&   r?     r   zFilter.__repr__c                 C  sj   | j g}ddd | jD }|r|d|  ddd | j D }|r0|d|  d|S )Nz, c                 S     g | ]}t |qS r   r>   r   argr   r   r&   r         z"Filter.__str__.<locals>.<listcomp>: c                 S  s   g | ]\}}| d | qS )r   r   r   kvr   r   r&   r     s    rB   )r   r   r   r   r   items)r%   r   args_str
kwargs_strr   r   r&   rC     s   
zFilter.__str__r    r   List[object]c                   s    fdd| j D S )zCReturn a list of filter arguments evaluated with the given context.c                   r   r   r(   r   r   r   r&   r     r   z(Filter.evaluate_args.<locals>.<listcomp>r   r$   r   r   r&   evaluate_args  s   zFilter.evaluate_argsc                   s    fdd| j D I dH S )z$An async version of `evaluate_args`.c                   r   r9   r   r   r   r   r&   r      r   z.Filter.evaluate_args_async.<locals>.<listcomp>Nr   r$   r   r   r&   evaluate_args_async  s   zFilter.evaluate_args_asyncDict[str, object]c                   s"   | j si S  fdd| j  D S )z3Return evaluated keyword arguments for this filter.c                   s   i | ]
\}}||  qS r   r(   r   r   r   r&   
<dictcomp>  s    z*Filter.evaluate_kwargs.<locals>.<dictcomp>r   r   r$   r   r   r&   evaluate_kwargs  s   zFilter.evaluate_kwargsc                   s*   | j si S  fdd| j  D I dH S )z&An async version of `evaluate_kwargs`.c                   s$   i | ]\}}||  I d H qS r9   r   r   r   r   r&   r     s   " z0Filter.evaluate_kwargs_async.<locals>.<dictcomp>Nr   r$   r   r   r&   evaluate_kwargs_async	  s   zFilter.evaluate_kwargs_asyncr9   )r   r>   r   r*   r   r   rH   rI   )r    r   r!   r   )r    r   r!   r   )r-   r2   r3   r4   r^   r<   r?   rC   r   r   r   r   r   r   r   r&   r     s    






r   c                   @  sV   e Zd ZdZdddZdd
dZdddZdddZdddZdddZ	dddZ
dS ) BooleanExpression
expressionr   r   c                 C  r\   r9   r   )r%   r   r   r   r&   r^     r_   zBooleanExpression.__init__r7   r"   r!   r8   c                 C  rr   r9   )r:   r   r   r;   r   r   r&   r<        zBooleanExpression.__eq__r>   c                 C  s$   t | j}|dsd| dS |S r   )r>   r   
startswith)r%   expr_strr   r   r&   rC     s   

zBooleanExpression.__str__c                 C  s   d| j dS )NzBooleanExpression(expression=ru   r   r.   r   r   r&   r?   "  rv   zBooleanExpression.__repr__r    r   c                 C  s   t | j|S r9   )r   r   r'   r$   r   r   r&   r'   %  rq   zBooleanExpression.evaluatec                   s   t | j|I d H S r9   )r   r   r)   r$   r   r   r&   r)   (  s   z BooleanExpression.evaluate_asyncr*   c                 C  r   r9   r   r.   r   r   r&   r/   +  r   zBooleanExpression.childrenN)r   r   rH   rI   )r    r   r!   r8   r1   r-   r2   r3   r4   r^   r<   rC   r?   r'   r)   r/   r   r   r   r&   r     s    





r   c                   @  s   e Zd ZdZd,d-ddZd.ddZd/ddZd/ddZd0ddZd0ddZ	d1d d!Z
d2d#d$Zd3d%d&Zd3d'd(Zd4d*d+ZdS )5FilteredExpressionr   filtersNr   r   r   Optional[List[Filter]]c                 C  s   || _ |pg | _d S r9   r   )r%   r   r   r   r   r&   r^   2  s   zFilteredExpression.__init__r7   r"   r!   r8   c                 C  r   r9   )r:   r   r   r   r;   r   r   r&   r<   6  r   zFilteredExpression.__eq__r>   c                 C  s4   d dd | jD }|r| j d| S t| jS )N | c                 S  r   r   r   r   _filterr   r   r&   r   >  r   z.FilteredExpression.__str__.<locals>.<listcomp>)r   r   r   r>   )r%   
filter_strr   r   r&   rC   =  s   
zFilteredExpression.__str__c                 C  s   d| j d| j dS )NzFilteredExpression(expression=
, filters=ru   r   r.   r   r   r&   r?   D  s   
zFilteredExpression.__repr__r   Iterable[Filter]r    r   c                 C  s   |}|D ]p}z| |j}W n ty   |jjr Y qw z0|js)|js)||}n#|jr;|js;||g||R  }n||g||R i ||}W q t	yV   Y q t
y]     tyt } zt
d|j d| |d}~ww |S )JReturn the result of applying all filters in this expression to an object.filter '': unexpected error: N)filterr   r   envstrict_filtersr   r   r   r   r   r   	Exceptionr%   r   r   r    rvr   funcerrr   r   r&   apply_filtersJ  sF   
z FilteredExpression.apply_filtersc                   s   |}|D ]_}z| |j}W n ty   |jjr Y qw zt|dr1| |||j|I dH }n| ||||I dH }W q t	yF   Y q t
yM     tyd } zt
d|j d| |d}~ww |S )r   filter_asyncNr   r   )r   r   r   r   r   hasattr_await_filter_asyncr   _call_filter_asyncr   r   r   r   r   r   r&   apply_filters_asyncs  s<   

z&FilteredExpression.apply_filters_asyncr   r   r   Callable[..., object]c                   sl   |j s|js||S |j r|js||g||I dH R  S ||g||I dH R i ||I dH S )z-Call a filter with async evaluated arguments.Nr   r   r   r   r%   r   r   r   r    r   r   r&   r    s   z%FilteredExpression._call_filter_async%Callable[[object], Awaitable[object]]c                   s~   |j s|js||I dH S |j r%|js%||g||I dH R  I dH S ||g||I dH R i ||I dH I dH S )zAwait an async filter.Nr  r  r   r   r&   r     s   "z&FilteredExpression._await_filter_asyncc                 C  s   |  | j|| j|S r9   )r   r   r'   r   r$   r   r   r&   r'     s
   
zFilteredExpression.evaluatec                   s&   |  | j|I d H | j|I d H S r9   )r  r   r)   r   r$   r   r   r&   r)     s   
z!FilteredExpression.evaluate_asyncr*   c                 C  s4   | j g}| jD ]}||j ||j  q|S r9   )r   r   extendr   r   valuesr%   	_childrenr   r   r   r&   r/     s
   
zFilteredExpression.childrenr9   )r   r   r   r   rH   rI   )r   r"   r   r   r    r   r!   r"   )
r   r"   r   r   r   r  r    r   r!   r"   )
r   r"   r   r   r   r  r    r   r!   r"   r0   r1   )r-   r2   r3   r4   r^   r<   rC   r?   r   r  r  r   r'   r)   r/   r   r   r   r&   r   /  s    




)
%


r   c                      sf   e Zd ZdZ			d d! fd
dZd"ddZd#ddZd#ddZd$ddZd$ddZ	d%ddZ
  ZS )&ConditionalExpression)	conditionalternativeNr   r   r   r   r  Optional[Expression]r  c                   s.   t  || || _|| _|| _|pg | _d S r9   )ro   r^   r   r  r  r   )r%   r   r   r  r  rp   r   r&   r^     s
   zConditionalExpression.__init__r7   r"   r!   r8   c                 C  s:   t |to| j|jko| j|jko| j|jko| j|jkS r9   )r:   r  r   r  r  r   r;   r   r   r&   r<     s   




zConditionalExpression.__eq__r>   c                 C  s   t | jg}| jr|d |t | j | jr&|d |t | j | jr<|d |ddd | jD  d|S )Nifelse|r   c                 S  r   r   r   r   r   r   r&   r     r   z1ConditionalExpression.__str__.<locals>.<listcomp>r   )r>   r   r  r   r  r   r   r%   r   r   r   r&   rC     s   



zConditionalExpression.__str__c              	   C  s&   d| j d| j d| j d| j d	S )Nz!ConditionalExpression(expression=z, condition=z, alternative=r   ru   )r   r  r  r   r.   r   r   r&   r?     s   
zConditionalExpression.__repr__r    r   c                 C  sl   | j r#t| j |r| j|}n| jr| j|}n|jd}n| j|}| jr4| || j|}|S rA   )	r  r   r'   r   r  r   	undefinedr   r   r%   r    resultr   r   r&   r'     s   zConditionalExpression.evaluatec                   s   | j r-t| j |I d H r| j|I d H }n| jr&| j|I d H }n|jd}n	| j|I d H }| jrD| || j|I d H }|S rA   )	r  r   r)   r   r  r   r  r   r  r  r   r   r&   r)     s   z$ConditionalExpression.evaluate_asyncr*   c                 C  s`   | j g}| jd ur|| j | jd ur|| j | jD ]}||j ||j  q|S r9   )	r   r  r   r  r   r  r   r   r  r	  r   r   r&   r/   )  s   


zConditionalExpression.children)NNN)r   r   r   r   r  r  r  r  rH   rI   r0   r1   )r-   r2   r3   r4   r^   r<   rC   r?   r'   r)   r/   rx   r   r   rp   r&   r    s    

	


r  c                   @  sV   e Zd ZdZdddZdddZdddZdddZdddZdddZ	d ddZ
dS )!AssignmentExpressionr   r   r   r>   r   r   c                 C  r   r9   r  )r%   r   r   r   r   r&   r^   <  r   zAssignmentExpression.__init__r7   r"   r!   r8   c                 C  r   r9   )r:   r  r   r   r;   r   r   r&   r<   @  r   zAssignmentExpression.__eq__c                 C  s   | j  d| j S )Nz = r  r.   r   r   r&   rC   G  r=   zAssignmentExpression.__str__c                 C  r   )NzAssignmentExpression(name='z', expression=ru   r  r.   r   r   r&   r?   J  r   zAssignmentExpression.__repr__r    r   c                 C  s   |j | j| j|d dS N)keyvalrB   )assignr   r   r'   r$   r   r   r&   r'   O  s   zAssignmentExpression.evaluatec                   s$   |j | j| j|I d H d dS r  )r  r   r   r)   r$   r   r   r&   r)   S  s   z#AssignmentExpression.evaluate_asyncr*   c                 C  r   r9   r   r.   r   r   r&   r/   Z  r   zAssignmentExpression.childrenN)r   r>   r   r   rH   rI   )r    r   r!   r>   r1   r   r   r   r   r&   r  9  s    





r  c                   @  s   e Zd ZdZdZeeedfd3ddZd4ddZd5ddZd5ddZ	d6d"d#Z
d7d%d&Zd8d)d*Zd9d+d,Zd9d-d.Zd:d0d1Zd2S );LoopExpressiona(  Loop expression tree/object model, as returned by parse_loop_expression.

    Start, stop, limit and offset can be integer literals or identifiers
    that resolve to an integer at render time.

    `cols` is used by the built-in tag `tablerow` only. It will be ignored
    by the `for` tag.
    r   iterablelimitoffsetcolsreversedFr   r>   r  LoopIterabler  LoopArgumentr   r!  	reversed_r8   c                 C  s(   || _ || _|| _|| _|| _|| _d S r9   r  )r%   r   r  r  r   r!  r%  r   r   r&   r^   }  s   	
zLoopExpression.__init__r7   r"   r!   c                 C  sR   t |to(| j|jko(| j|jko(| j|jko(| j|jko(| j|jko(| j|jkS r9   )r:   r  r   r  r  r   r!  r"  r;   r   r   r&   r<     s   






zLoopExpression.__eq__c                 C  s   | j  dt| jg}| jtkr|d| j  | jtkr'|d| j  | jtkr5|d| j  | jr=|d d	|S )Nz inzlimit:zoffset:zcols:r"  r   )
r   r>   r  r  NILr   r   r!  r"  r   r  r   r   r&   rC     s   




zLoopExpression.__str__c                 C  s6   d| j  d| j d| j d| j d| j d| j dS )NzLoopExpression(name='z', iterable=z, limit=z	, offset=z, cols=z, reversed=ru   r  r.   r   r   r&   r?     s   zLoopExpression.__repr__itIterator[Any]sizerW   Optional[int]Optional[int | Continue]r    r   Tuple[Iterator[Any], int]c           	      C  s  |}d | jt| jg}|du r+|du r+|j||d | jr'tt||fS ||fS |tkr=|j|d}t|| d}n|durTt	|t
sMJ d|t|| d}|dur]t||}|rc|| n|}|j||d t|||}| jr}tt||fS ||fS )z6Slice iterable `it` according to `limit` and `offset`.r   N)r  index)r  r   zfound )r   r   r>   r  	stopindexr"  rN   CONTINUEmaxr:   rW   minr   )	r%   r'  r)  r  r   r    length
offset_keyr   r   r   r&   _limit_and_offset  s*   	

z LoopExpression._limit_and_offsetobjc                 C  s   t |tjrt| t|fS t |trt|t|fS t |tr.t |tr.t|gdfS t |tj	r<t|t|fS t
d| j dt| d)Nr   zexpected array or hash at 'z
', found '')r:   r   r   iterr   lenr   r>   r   Sequencer   r  )r%   r5  r    r   r   r&   _obj_to_iter  s   
zLoopExpression._obj_to_iterr   rE   c                 C  s(   |d urt |tstd|d S d S )Nz$expected an integer argument, found )r:   rW   r   )r%   r   r   r   r&   _raise_for_invalid_argument  s   z*LoopExpression._raise_for_invalid_argumentc                 C  s   | j |}| ||\}}| j|}| | t|ts$|d u s$J | jtkr@| j|}| | t|ts?|d u s?J n
| j}t|t	sJJ | j
|||||dS N)r)  r  r   r    )r  r'   r:  r  r;  r:   rW   r   r/  rU   r4  r%   r    r5  r'  r2  r  r   r   r   r&   r'     s&   


zLoopExpression.evaluatec                   s   | j |I d H }| ||\}}| j|I d H }| | t|ts+|d u s+J | jtkrJ| j|I d H }| | t|tsI|d u sIJ n
| j}t|t	sTJ | j
|||||dS r<  )r  r)   r:  r  r;  r:   rW   r   r/  rU   r4  r=  r   r   r&   r)     s(   


zLoopExpression.evaluate_asyncr*   c                 C  s   | j | j| j| jgS r9   )r  r  r   r!  r.   r   r   r&   r/     s
   zLoopExpression.childrenN)r   r>   r  r#  r  r$  r   r$  r!  r$  r%  r8   rH   rI   )r'  r(  r)  rW   r  r*  r   r+  r    r   r!   r,  )r5  r"   r    r   r!   r,  )r   r"   r!   rE   )r    r   r!   r,  r1   )r-   r2   r3   __doc__r4   r&  r^   r<   rC   r?   r4  r:  r;  r'   r)   r/   r   r   r   r&   r  j  s"    	




-


r  r   Numberr   r>   r   r!   r8   c                 C  sZ   |dkr| |kS |dkr| |kS |dkr| |k S |dkr | |kS t d|  d| d| )zCReturn the result of comparing two numbers with the given operator.<=>=<>r   r   r   r   r   r   r&   eval_number_expression+  s   rD  r5  r"   c                 C  s   t | t ot | tttfS r9   )r:   r8   rW   r   r   r5  r   r   r&   _is_py_falsy_number9  s   rF  r   c                 C  s"   t | dr	|  } t| p| dvS )z1Return True if the given object is Liquid truthy.
__liquid__)FN)r   rG  rF  rE  r   r   r&   r   >  s   
r   c                 C  s   t | tr	t|st |tr/t| r/|dv rdS |dv rdS tdt|  d| dt| |dkr9t| |kS |dv rCt| |kS |dv rIdS tdt|  d| dt| )	z%Compare an object to a boolean value.)==rB  rC  r@  rA  Fz!=z<>Tunknown operator: r   rH  )rB  rC  r@  rA  )r:   r8   rF  r   typer   r   r   r&   compare_boolE  s&   "rL  c                 C  sz  |dkrt | ot |S |dkrt | pt |S t| dr!|  } t|dr*| }t|ttfr6|| } }t| ts@t|trFt| ||S |dkrPt| |kS |dv rZt| |kS |dkrtt| trit|| v S t| t	t
frt|| v S d| |fv r|dS t| ttfv rt|ttfv rt| ||S t| t|krtd	t|  d
| d
t| dtdt|  d
| d
t| )z@Return the result of a comparison operation between two objects.andorrG  rH  rI  containsNFzinvalid operator for types 'r   r6  rJ  )r   r   rG  r:   rL   rR   r8   rL  r>   rN   rO   rK  rW   r   rD  r   r   r   r   r&   r   \  s<   



 "r   )r   r?  r   r>   r   r?  r!   r8   )r5  r"   r!   r8   )r5  r   r!   r8   )r   r   r   r>   r   r   r!   r8   )Pr>  
__future__r   rg   r   r   r   collectionsdecimalr   	itertoolsr   typingr   r	   r
   r   r   r   r   r   r   r   r   r   r   liquidr   liquid.contextr   r   liquid.exceptionsr   r   r   r   liquid.limitsr   r   r6   r&  rL   EMPTYrR   BLANKrU   r/  rX   rY   r8   rl   TRUEFALSEr>   rz   rW   r}   r   r~   r   r   r   r   r   r   r   r   r   r   r  r  r$  r#  r  r?  rD  rF  r   rL  r   r   r   r   r&   <module>   s    <5(.< $g%	 ?



