o
    2g/'                     @  s   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZmZmZmZ G dd	 d	eZd
S )z<Test cases for the constraint solver used in type inference.    )annotations)
SUBTYPE_OFSUPERTYPE_OF
Constraint)BoundsGraphsolve_constraintstransitive_closure)Suiteassert_equal)TypeFixture)Type	TypeVarIdTypeVarLikeTypeTypeVarTypec                   @  s   e Zd ZdPddZdPddZdPddZdPd	d
ZdPddZdPddZdPddZ	dPddZ
dPddZdPddZdPddZdPddZdPddZdPddZdPdd ZdPd!d"ZdPd#d$ZdPd%d&ZdPd'd(ZdPd)d*ZdPd+d,ZdPd-d.ZdPd/d0Z	1	2dQdRd=d>ZdSdEdFZdTdLdMZdTdNdOZd1S )U
SolveSuitereturnNonec                 C  s   t  | _d S N)r   fxself r   K/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/test/testsolve.pysetUp      zSolveSuite.setUpc                 C  s   |  g g g  d S r   )assert_solver   r   r   r   test_empty_input   s   zSolveSuite.test_empty_inputc                 C  sn   |  | jjg| | jj| jjg| jjg |  | jjg| | jj| jj| | jj| jjg| jjg d S r   )r   r   tsupcabr   r   r   r   !test_simple_supertype_constraints      ,&z,SolveSuite.test_simple_supertype_constraintsc                 C  sn   |  | jjg| | jj| jjg| jjg |  | jjg| | jj| jj| | jj| jjg| jjg d S r   )r   r   r   subcr    r!   r   r   r   r   test_simple_subtype_constraints   r#   z*SolveSuite.test_simple_subtype_constraintsc                 C  sB   |  | jjg| | jj| jj| | jj| jjg| jjg d S r   )r   r   r   r   r!   r$   r    r   r   r   r   test_both_kinds_of_constraints#   
   &z)SolveSuite.test_both_kinds_of_constraintsc                 C  s>   |  | jjg| | jj| jj| | jj| jjgd g d S r   )r   r   r   r   r    r$   r!   r   r   r   r   test_unsatisfiable_constraints*   s   2z)SolveSuite.test_unsatisfiable_constraintsc                 C  sB   |  | jjg| | jj| jj| | jj| jjg| jjg d S r   )r   r   r   r   r!   r$   r   r   r   r   test_exactly_specified_result0   r'   z(SolveSuite.test_exactly_specified_resultc              	   C  s`   |  | jj| jjg| | jj| jj| | jj| jj| | jj| jjg| jj| jjg d S r   )	r   r   r   sr   r!   cr$   r    r   r   r   r   test_multiple_variables7   s   z"SolveSuite.test_multiple_variablesc                 C  s|   |  | jjgg | jjg |  | jj| jjgg | jj| jjg |  | jj| jjg| | jj| jjg| jj| jjg d S r   )r   r   r   uninhabitedr*   r   r    r   r   r   r   test_no_constraints_for_varB   s   &z&SolveSuite.test_no_constraints_for_varc                 C  s  |  | jjg| | jj| jjg| jjg |  | jjg| | jj| jj| | jj| jjg| jjg |  | jjg| | jj| jj| | jj| jjg| jjg |  | jjg| | jj| jjg| jjg |  | jjg| | jj| jj| | jj| jjg| jjg d S r   )r   r   r   r   anytr    r$   r   r   r   r   )test_simple_constraints_with_dynamic_typeK   s"   ,&&,&z4SolveSuite.test_simple_constraints_with_dynamic_typec                 C  s   |  | jjg| | jj| jj| | jj| jjg| jjg |  | jjg| | jj| jj| | jj| jjg| jjg d S r   )r   r   r   r   r    r$   r/   r   r   r   r   )test_both_normal_and_any_types_in_resultsd   s   &&z4SolveSuite.test_both_normal_and_any_types_in_resultsc                 C  s.   | j | jj| jjgg | jj| jjgdd d S NTallow_polymorphic)r   r   r   ur-   r   r   r   r   test_poly_no_constraintss   s   
z#SolveSuite.test_poly_no_constraintsc                 C  sH   | j | jj| jjg| | jj| jjg| jj| jjg| jjgdd d S r2   )r   r   r   r5   r$   r    r   r   r   r   test_poly_trivial_free{      
z!SolveSuite.test_poly_trivial_freec                 C  sH   | j | jj| jjg| | jj| jjg| jj| jjg| jjgdd d S r2   )r   r   r   r5   r$   r   r   r   r   test_poly_free_pair   r8   zSolveSuite.test_poly_free_pairc                 C  sP   | j jj| j jd}| j| j j| j jg| | j j| j jg||g|gdd d S )N)upper_boundTr3   )r   r   copy_modifiedr!   r   ubr$   )r   t_primer   r   r   test_poly_free_pair_with_bounds   s   
z*SolveSuite.test_poly_free_pair_with_boundsc                 C  sB   | j | jj| jjg| | jj| jjg| jj| jjgg dd d S r2   )r   r   r<   ucr$   r-   r   r   r   r   +test_poly_free_pair_with_bounds_uninhabited   s   
z6SolveSuite.test_poly_free_pair_with_bounds_uninhabitedc              	   C  s   | j | jj| jj| jjg| | jj| jj| | jj| jj| | jj| jj| | jj| jjg| jj| jj| jjgdd d S r2   )	r   r   r   r5   r*   r   r!   r$   r    r   r   r   r   test_poly_bounded_chain   s   
z"SolveSuite.test_poly_bounded_chainc                 C  sd   | j | jj| jjg| | jj| jj| | jj| jj| | jj| jjg| jj| jjgdd d S r2   )r   r   r   r*   r$   r    r   r!   r   r   r   r   #test_poly_reverse_overlapping_chain      
z.SolveSuite.test_poly_reverse_overlapping_chainc                 C  sd   | j | jj| jjg| | jj| jj| | jj| jj| | jj| jjg| jj| jjgdd d S r2   )r   r   r   r*   r$   r!   r   r    r   r   r   r   test_poly_reverse_split_chain   rC   z(SolveSuite.test_poly_reverse_split_chainc              	   C  st   | j | jj| jj| jjg| | jj| jj| | jj| jj| | jj| jj| | jj| jjgg ddd d S )N)NNNTr3   )	r   r   r   r5   r*   r   r    r$   r!   r   r   r   r   test_poly_unsolvable_chain   s   
z%SolveSuite.test_poly_unsolvable_chainc              
   C  s   |  | jjj| jjjg| | jj| jj| | jj| jj| | jj| jjg| jjj| jjjfh| jjj| jjh| jjj| jjhi| jjj| jjh| jjj| jjhi d S r   )	assert_transitive_closurer   r   idr*   r   r!   r$   r    r   r   r   r   test_simple_chain_closure   s   ""z$SolveSuite.test_simple_chain_closurec              
   C  s   |  | jjj| jjjg| | jj| jj| | jj| jj| | jj| jjg| jjj| jjjfh| jjjt	 | jjj| jjhi| jjj| jjh| jjjt	 i d S r   )
rF   r   r   rG   r*   r$   r    r   r!   setr   r   r   r   test_reverse_chain_closure   s   z%SolveSuite.test_reverse_chain_closurec              
   C  s   |  | jjj| jjjg| | jj| jj| | jj| jjgt	 | jjjt	 | jjj| jjhi| jjj| jj
h| jjj| jjhi d S r   )rF   r   r   rG   r*   r   gtr$   garI   r    r   r   r   r   !test_secondary_constraint_closure   s   &"z,SolveSuite.test_secondary_constraint_closureNFvarslist[TypeVarLikeType]constraintslist[Constraint]resultslist[None | Type]	free_varslist[TypeVarLikeType] | Noner4   boolc                 C  s6   |d u rg }t |||d\}}t|| t|| d S )Nr3   )r   r   )r   rN   rP   rR   rT   r4   actualactual_freer   r   r   r      s   

zSolveSuite.assert_solvelist[TypeVarId]graphr   lowersr   uppersc           
      C  sR   t ||\}}}|D ]	}	||	|	f q
t|| tt|| tt|| d S r   )r	   addr   dict)
r   rN   rP   rZ   r[   r\   actual_graphactual_lowersactual_uppersvr   r   r   rF   	  s   
z$SolveSuite.assert_transitive_closuretype_varr   boundr   r   c                 C     t |t|S r   )r   r   r   rc   rd   r   r   r   r     r   zSolveSuite.supcc                 C  re   r   )r   r   rf   r   r   r   r$     r   zSolveSuite.subc)r   r   )NF)rN   rO   rP   rQ   rR   rS   rT   rU   r4   rV   r   r   )rN   rY   rP   rQ   rZ   r   r[   r   r\   r   r   r   )rc   r   rd   r   r   r   )__name__
__module____qualname__r   r   r"   r%   r&   r(   r)   r,   r.   r0   r1   r6   r7   r9   r>   r@   rA   rB   rD   rE   rH   rJ   rM   r   rF   r   r$   r   r   r   r   r      s<    









	



	
	


	







r   N)__doc__
__future__r   mypy.constraintsr   r   r   
mypy.solver   r   r   r	   mypy.test.helpersr
   r   mypy.test.typefixturer   
mypy.typesr   r   r   r   r   r   r   r   r   <module>   s    