§
    q¸Àj&%  ã                  óØ   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddlZddlmZmZmZmZmZmZmZ  G d„ d¦  «        Z G d„ d	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        ZdS )u@  
Tier 1: Feature Coverage â€” Kinematics, Isometric Math, Wall-Sliding & Camera.
Covers Features 3, 4, 5, 6 from PROJECT.md Feature Inventory:
- Feature 3: 2.5D Isometric Math & Coordinates
- Feature 4: Zero-Residual Momentum Kinematics
- Feature 5: Wall-Sliding & A* Pathfinding
- Feature 6: Camera Lerp & Dynamic Zoom
é    )ÚannotationsN)ÚTuple)ÚTILE_HÚTILE_WÚPLAYER_SPEEDÚSimulatedCocosPlayerÚiso_to_worldÚresolve_heading_binÚworld_to_isoc                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	d
S )ÚTestTier1IsometricMathz?Feature 3: 2.5D Isometric Math & Coordinates (64x32 2:1 ratio).ÚreturnÚNonec                óÊ  — t          dddddd¬¦  «        \  }}d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nç        g      „@g     €v@)ÚcxÚcyÚvxÚvy©ú==©z%(py0)s == %(py3)sÚsx©Úpy0Úpy3úassert %(py5)sÚpy5Úsy©	r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Úselfr   r   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6s          úKC:\Projects\FreeExile\tests\e2e_cocos\test_tier1_kinematics_and_movement.pyÚ/test_t1_f3_origin_projection_at_viewport_centerzFTestTier1IsometricMath.test_t1_f3_origin_projection_at_viewport_center   s¨  € Ý˜c 3¨3°3¸5ÀUÐKÑKÔK‰ˆˆBØÐˆr�UŠ{ÐÐÐÕÔÐÐÐÐˆr�UÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�UÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆr�UŠ{ÐÐÐÕÔÐÐÐÐˆr�UÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�UÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐó    c                ó”  — t          dd¦  «        \  }}d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d
}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}||z  }d}||k    }|sÕt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}}d S )Nç      ð?r   ç      @@r   r   Úsx1r   r   r   ç      0@Úsy1ç       @)z(%(py0)s / %(py1)s) == %(py5)s©r   Úpy1r   úassert %(py7)sÚpy7r    )
r)   r4   r6   r*   r+   r,   r-   Ú@py_assert4Ú@py_assert3Ú@py_format8s
             r.   Ú&test_t1_f3_standard_tile_ratio_diamondz=TestTier1IsometricMath.test_t1_f3_standard_tile_ratio_diamond#   s¨  € å  SÑ)Ô)‰ˆˆSØÐˆs�dŠ{ÐÐÐÕÔÐÐÐÐˆs�dÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆs�dŠ{ÐÐÐÕÔÐÐÐÐˆs�dÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐà�S‰yÐ˜CÐˆy˜CÒÐÐÐÕÔÐÐÐÐˆy˜CÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÐÕÔÑÔÐÐÕÔ�SÑÔÐÕÔ�SÑÔÐÐÕÔ˜CÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr0   c                óÆ  — t          ddd¬¦  «        \  }}t          ddd¬¦  «        \  }}||k    }|sÂt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d }||z
  }d}	||	k    }
|
sÕt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}
}	d S )Nç      @r   )Úwzr7   r   )z%(py0)s == %(py2)sÚsx0r4   )r   Úpy2zassert %(py4)sÚpy4g      H@)z(%(py0)s - %(py1)s) == %(py5)sÚsy0r6   r8   r:   r;   r    )r)   rC   rF   r4   r6   r+   Ú@py_format3Ú@py_format5r*   r<   r=   r-   r>   s                r.   Útest_t1_f3_elevation_z_offsetz4TestTier1IsometricMath.test_t1_f3_elevation_z_offset+   s%  € å  S¨SÐ1Ñ1Ô1‰ˆˆSÝ  S¨SÐ1Ñ1Ô1‰ˆˆSØ�cŠzÐÐÐÕÔÐÐÐÐˆs�cÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÐÕÔÑÔÐÐÕÔ�cÑÔÐÕÔ�cÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐØ�S‰yÐ ˜DÐ ˆy˜DÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆy˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆsÑ Ô Ð Õ Ô ˆsÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �SÑ Ô Ð Õ Ô �SÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð Ð r0   c           
     óª  — g d¢}|D �]Ê\  }}t          ||ddddd¬¦  «        \  }}t          ||ddddd¬¦  «        \  }}t          j        }d}	 ||||	¬	¦  «        }
|
�s$d
dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}	}
t          j        }d}	 ||||	¬	¦  «        }
|
�s$d
dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}	}
�ŒÌd S )N))g®Gáz®(@g®Gáz®À)g     €FÀgHáz®ÇX@)çü©ñÒMbP?gü©ñÒMb`¿)ç      Y@g      i@ç      $@g      4Àg      Ž@g     à€@g      ô?)r   r   r   r   Úzoomçñhãˆµøä>©Úabs_tolúcassert %(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py3)s, %(py4)s, abs_tol=%(py6)s)
}ÚmathÚwxÚrev_x©r   rD   r   rE   Úpy6Úpy8ÚwyÚrev_y)r   r	   rS   Úiscloser#   r$   r!   r%   r&   r'   r(   )r)   Útest_coordsrT   rY   r   r   rU   rZ   r+   Ú@py_assert5Ú@py_assert7Ú@py_format9s               r.   Ú(test_t1_f3_roundtrip_precision_zero_lossz?TestTier1IsometricMath.test_t1_f3_roundtrip_precision_zero_loss2   sì  € ØWÐWÐWˆØ!ð 	9ñ 	9‰FˆB�Ý! " b¨T°eÀÈ%ÐVZÐ[Ñ[Ô[‰FˆB�Ý'¨¨B°4¸EÀeÐPUÐ\`ÐaÑaÔa‰LˆE�5Ý”<Ð8°4Ð8�<�<  E°4Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8•4Ñ8Ô8Ð8Õ8Ô8•4Ñ8Ô8Ð8Ð8Õ8Ô8�<Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 Ñ8Ô8Ð8Õ8Ô8 Ñ8Ô8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 EÑ8Ô8Ð8Õ8Ô8 EÑ8Ô8Ð8Ð8Õ8Ô8°4Ñ8Ô8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ý”<Ð8°4Ð8�<�<  E°4Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8•4Ñ8Ô8Ð8Õ8Ô8•4Ñ8Ô8Ð8Ð8Õ8Ô8�<Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 Ñ8Ô8Ð8Õ8Ô8 Ñ8Ô8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 EÑ8Ô8Ð8Õ8Ô8 EÑ8Ô8Ð8Ð8Õ8Ô8°4Ñ8Ô8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ñ8ð		9ð 	9r0   c           
     óö  — t          ddd¬¦  «        \  }}t          ddd¬¦  «        \  }}t          j        }d}||z  }d} ||||¬¦  «        }	|	�s7ddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }
t          t          j	        |
¦  «        ¦  «        ‚d x}x}x}x}}	t          j        }d}||z  }d} ||||¬¦  «        }	|	�s7ddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }
t          t          j	        |
¦  «        ¦  «        ‚d x}x}x}x}}	d S )Nr7   r2   )rN   ç      ø?rO   rP   zqassert %(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py3)s, (%(py4)s * %(py6)s), abs_tol=%(py9)s)
}rS   Úsx2r4   )r   rD   r   rE   rW   Úpy9Úpy11Úsy2r6   )
r   rS   r[   r#   r$   r!   r%   r&   r'   r(   )r)   r4   r6   rc   rf   r+   r]   r^   Ú@py_assert8Ú@py_assert10Ú@py_format12s              r.   Ú"test_t1_f3_zoom_scaling_uniformityz9TestTier1IsometricMath.test_t1_f3_zoom_scaling_uniformity:   s  € Ý  S¨sÐ3Ñ3Ô3‰ˆˆSÝ  S¨sÐ3Ñ3Ô3‰ˆˆSÝŒ|Ð9 sÐ9  s¡Ð9°DÐ9ˆ|ˆ|˜C °DÐ9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�tÑ9Ô9Ð9Õ9Ô9�tÑ9Ô9Ð9Ð9Õ9Ô9ˆ|Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9˜CÑ9Ô9Ð9Õ9Ô9˜CÑ9Ô9Ð9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 Ñ9Ô9Ð9Õ9Ô9 Ñ9Ô9Ð9Ð9Õ9Ô9 sÑ9Ô9Õ9Ô9°DÑ9Ô9Õ9Ô9Ð9Ñ9Ô9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ÝŒ|Ð9 sÐ9  s¡Ð9°DÐ9ˆ|ˆ|˜C °DÐ9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�tÑ9Ô9Ð9Õ9Ô9�tÑ9Ô9Ð9Ð9Õ9Ô9ˆ|Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9˜CÑ9Ô9Ð9Õ9Ô9˜CÑ9Ô9Ð9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 Ñ9Ô9Ð9Õ9Ô9 Ñ9Ô9Ð9Ð9Õ9Ô9 sÑ9Ô9Õ9Ô9°DÑ9Ô9Õ9Ô9Ð9Ñ9Ô9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r0   c           	     ó°  — t          dd¦  «        \  }}t          j        }d}d} ||||¬¦  «        }|sùddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}t          j        }d
}d} ||||¬¦  «        }|sùddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}d S )Nr3   r5   r2   rO   rP   úcassert %(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py3)s, %(py5)s, abs_tol=%(py7)s)
}rS   rT   ©r   rD   r   r   r;   rd   r   rY   )
r	   rS   r[   r#   r$   r!   r%   r&   r'   r(   )r)   rT   rY   r+   r<   Ú@py_assert6rg   Ú@py_format10s           r.   Ú1test_t1_f3_screen_to_world_unprojection_quadrantszHTestTier1IsometricMath.test_t1_f3_screen_to_world_unprojection_quadrants@   sU  € å˜d DÑ)Ô)‰ˆˆBÝŒ|Ð2 Ð2¨TÐ2ˆ|ˆ|˜B ¨TÐ2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2�tÑ2Ô2Ð2Õ2Ô2�tÑ2Ô2Ð2Ð2Õ2Ô2ˆ|Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2˜BÑ2Ô2Ð2Õ2Ô2˜BÑ2Ô2Ð2Ð2Õ2Ô2 Ñ2Ô2Õ2Ô2¨TÑ2Ô2Õ2Ô2Ð2Ñ2Ô2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ÝŒ|Ð2 Ð2¨TÐ2ˆ|ˆ|˜B ¨TÐ2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2�tÑ2Ô2Ð2Õ2Ô2�tÑ2Ô2Ð2Ð2Õ2Ô2ˆ|Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2˜BÑ2Ô2Ð2Õ2Ô2˜BÑ2Ô2Ð2Ð2Õ2Ô2 Ñ2Ô2Õ2Ô2¨TÑ2Ô2Õ2Ô2Ð2Ñ2Ô2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2r0   N©r   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r?   rI   r`   rj   rp   © r0   r.   r   r      s’   € € € € € ØIÐIðð ð ð ð
 ð  ð  ð  ð!ð !ð !ð !ð9ð 9ð 9ð 9ð:ð :ð :ð :ð3ð 3ð 3ð 3ð 3ð 3r0   r   c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd	„Zdd
„Zdd„Z	dS )ÚTestTier1ZeroResidualMomentumz-Feature 4: Zero-Residual Momentum Kinematics.Úsimulated_playerr   r   r   c                ó  — t          d¦  «        D ]}|                     ddd¬¦  «         Œ|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|                     ddd¬¦  «         |j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}d S )Né   r2   r   ç‘?©Údt©ú>©z)%(py2)s
{%(py2)s = %(py0)s.vx
} > %(py5)sry   ©r   rD   r   r:   r;   Úrunr   ©z2%(py2)s
{%(py2)s = %(py0)s.anim_state
} == %(py5)s©z*%(py2)s
{%(py2)s = %(py0)s.vx
} == %(py5)s©z*%(py2)s
{%(py2)s = %(py0)s.vy
} == %(py5)sÚidle)ÚrangeÚapply_inputr   r!   r"   r#   r$   r%   r&   r'   r(   Ú
anim_stater   )r)   ry   Ú_r+   r<   r=   r-   r>   s           r.   Ú+test_t1_f4_instant_digital_brake_frame_zerozITestTier1ZeroResidualMomentum.test_t1_f4_instant_digital_brake_frame_zeroJ   sÉ  € å�q‘”ð 	Bð 	BˆAØ×(Ò(¨¨c°jÐ(ÑAÔAÐAÐAØÔ"Ð( SÐ(Ð" SÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð" SÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ÐÑ(Ô(Ð(Õ(Ô(ÐÑ(Ô(Ð(Ð(Õ(Ô(Ð"Ñ(Ô(Õ(Ô( SÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ*Ð3¨eÐ3Ð*¨eÒ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð*¨eÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ÐÑ3Ô3Ð3Õ3Ô3ÐÑ3Ô3Ð3Ð3Õ3Ô3Ð*Ñ3Ô3Õ3Ô3¨eÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð 	×$Ò$ S¨#°*Ð$Ñ=Ô=Ð=ØÔ"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ*Ð4¨fÐ4Ð*¨fÒ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð*¨fÐ4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ÐÑ4Ô4Ð4Õ4Ô4ÐÑ4Ô4Ð4Ð4Õ4Ô4Ð*Ñ4Ô4Õ4Ô4¨fÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r0   c                ó¼  — |                      ddd¬¦  «         |j        }d}||k    }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|j
        }d}||k    }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d S )Ng¸…ëQ¸ž?g{®Gáz”?r|   r}   r   r   r…   ry   r‚   r:   r;   r†   r‡   r„   )r‰   r   r!   r"   r#   r$   r%   r&   r'   r(   r   rŠ   ©r)   ry   r+   r<   r=   r-   r>   s          r.   Ú#test_t1_f4_deadzone_threshold_guardzATestTier1ZeroResidualMomentum.test_t1_f4_deadzone_threshold_guardW   sÌ  € à×$Ò$ T¨4°JÐ$Ñ?Ô?Ð?ØÔ"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ*Ð4¨fÐ4Ð*¨fÒ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð*¨fÐ4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ÐÑ4Ô4Ð4Õ4Ô4ÐÑ4Ô4Ð4Ð4Õ4Ô4Ð*Ñ4Ô4Õ4Ô4¨fÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r0   c                óŠ  — |                      ddd¬¦  «         |j        }d}||v }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}|                      ddd¬¦  «         |j        }||k    }|sÕt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}}d S )Nr2   ç      ð¿çü©ñÒMb�?r}   )ÚEÚNEÚN©Úin)z%(py0)s in %(py3)sÚheading_beforer   r   r   r   r   )z/%(py2)s
{%(py2)s = %(py0)s.heading
} == %(py4)sry   )r   rD   rE   úassert %(py6)srW   )
r‰   Úheadingr!   r"   r#   r$   r%   r&   r'   r(   )
r)   ry   r˜   r*   r+   r,   r-   r=   rH   Ú@py_format7s
             r.   Ú%test_t1_f4_snap_freeze_rotation_anglezCTestTier1ZeroResidualMomentum.test_t1_f4_snap_freeze_rotation_angle^   s  € à×$Ò$ S¨$°5Ð$Ñ9Ô9Ð9Ø)Ô1ˆØ!1Ð1ˆ~Ð!1Ð1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1ˆ~Ð!1Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆ~Ñ1Ô1Ð1Õ1Ô1ˆ~Ñ1Ô1Ð1Ð1Õ1Ô1Ð!1Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1ð 	×$Ò$ S¨#°%Ð$Ñ8Ô8Ð8ØÔ'Ð9Ð'¨>Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð'¨>Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ÐÑ9Ô9Ð9Õ9Ô9ÐÑ9Ô9Ð9Ð9Õ9Ô9Ð'Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¨>Ñ9Ô9Ð9Õ9Ô9¨>Ñ9Ô9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r0   c           
     ó  — |                      ddd¬¦  «         t          dz  }t          j        }|j        }d} ||||¬¦  «        }|�s7ddt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        ndt          j	        |¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd	t          j	        |¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        nd
t          j	        |¦  «        t          j	        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}d S )Nr   r2   çš™™™™™¹?r}   ç-Cëâ6?rP   z}assert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py5)s
{%(py5)s = %(py3)s.wy
}, %(py6)s, abs_tol=%(py8)s)
}rS   ry   Úexpected_disp)r   rD   r   r   rW   rX   Úpy10)r‰   r   rS   r[   rY   r#   r$   r!   r%   r&   r'   r(   )r)   ry   r    r+   r<   r^   Ú@py_assert9Ú@py_format11s           r.   Ú4test_t1_f4_constant_velocity_during_continuous_inputzRTestTier1ZeroResidualMomentum.test_t1_f4_constant_velocity_during_continuous_inputh   sŒ  € Ø×$Ò$ S¨#°#Ð$Ñ6Ô6Ð6Ý$ sÑ*ˆÝŒ|ÐMÐ,Ô/ÐMÈÐMˆ|ˆ|Ð/°ÈÐMÑMÔMÐMÐMÑMÐMÐMÕMÔMÑMÔMÐMÐMÕMÔM�tÑMÔMÐMÕMÔM�tÑMÔMÐMÐMÕMÔMˆ|ÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔMÐ,ÑMÔMÐMÕMÔMÐ,ÑMÔMÐMÐMÕMÔMÐ/ÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔM°ÑMÔMÐMÕMÔM°ÑMÔMÐMÐMÕMÔMÈÑMÔMÕMÔMÐMÑMÔMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMr0   c           	     ó$  — |                      ddd¬¦  «         t          j        |j        |j        ¦  «        }t          j        }d} ||t          |¬¦  «        }|�s.ddt          j        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndd	t          j        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nr2   rž   r}   rŸ   rP   rR   rS   Úspeedr   rV   )r‰   rS   Úhypotr   r   r[   r   r#   r$   r!   r%   r&   r'   r(   )r)   ry   r¦   r+   r]   r^   r_   s          r.   Ú-test_t1_f4_diagonal_normalization_equal_speedzKTestTier1ZeroResidualMomentum.test_t1_f4_diagonal_normalization_equal_speedm   sz  € à×$Ò$ S¨#°#Ð$Ñ6Ô6Ð6Ý”
Ð+Ô.Ð0@Ô0CÑDÔDˆÝŒ|Ð>¸Ð>ˆ|ˆ|˜E¥<¸Ð>Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>�tÑ>Ô>Ð>Õ>Ô>�tÑ>Ô>Ð>Ð>Õ>Ô>ˆ|Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>˜EÑ>Ô>Ð>Õ>Ô>˜EÑ>Ô>Ð>Ð>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>¥<Ñ>Ô>Ð>Õ>Ô>¥<Ñ>Ô>Ð>Ð>Õ>Ô>¸Ñ>Ô>Õ>Ô>Ð>Ñ>Ô>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>r0   c                ój  — |                      ddd¬¦  «         |j        }d}||k    }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|                      ddd¬¦  «         |j        }d}||k     }|sªt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d S )Nr2   r   r’   r}   r   r�   ry   r‚   r:   r;   r‘   )ú<)z)%(py2)s
{%(py2)s = %(py0)s.vx
} < %(py5)s)
r‰   r   r!   r"   r#   r$   r%   r&   r'   r(   rŽ   s          r.   Ú(test_t1_f4_instant_reversal_without_skidzFTestTier1ZeroResidualMomentum.test_t1_f4_instant_reversal_without_skids   s  € Ø×$Ò$ S¨#°%Ð$Ñ8Ô8Ð8ØÔ"Ð( SÐ(Ð" SÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð" SÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ÐÑ(Ô(Ð(Õ(Ô(ÐÑ(Ô(Ð(Ð(Õ(Ô(Ð"Ñ(Ô(Õ(Ô( SÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(à×$Ò$ T¨3°5Ð$Ñ9Ô9Ð9ØÔ"Ð( SÐ(Ð" SÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð" SÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ÐÑ(Ô(Ð(Õ(Ô(ÐÑ(Ô(Ð(Ð(Õ(Ô(Ð"Ñ(Ô(Õ(Ô( SÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(r0   N)ry   r   r   r   )
rr   rs   rt   ru   rŒ   r�   rœ   r¤   r¨   r«   rv   r0   r.   rx   rx   G   s–   € € € € € Ø7Ð7ð5ð 5ð 5ð 5ð5ð 5ð 5ð 5ð:ð :ð :ð :ðNð Nð Nð Nð
?ð ?ð ?ð ?ð)ð )ð )ð )ð )ð )r0   rx   c                  óN   — e Zd ZdZ	 ddd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dS )Ú"TestTier1WallSlidingAndPathfindingz)Feature 5: Wall-Sliding & A* Pathfinding.çffffffÖ?rT   ÚfloatrY   ÚdxÚdyÚwall_xÚwall_yÚrr   úTuple[float, float]c                ó   ‡‡‡— dˆˆˆfd„} |||z   ||z   ¦  «        s
||z   ||z   fS  |||z   |¦  «         }	 ||||z   ¦  «         }
|	r0|
r.t          |¦  «        t          |¦  «        k    r||z   |fS |||z   fS |	r||z   |fS |
r|||z   fS ||fS )z4Simulates 2-axis circle-AABB wall sliding algorithm.Úxr¯   Úyr   Úboolc                ó¸   •— t          ‰t          | ‰dz   ¦  «        ¦  «        }t          ‰t          |‰dz   ¦  «        ¦  «        }| |z
  dz  ||z
  dz  z   ‰dz  k     S )Nr2   é   )ÚmaxÚmin)r·   r¸   r   r   r´   r²   r³   s       €€€r.   Ú
is_blockedzKTestTier1WallSlidingAndPathfinding._simulate_wall_slide.<locals>.is_blocked‚   sa   ø€ Ý�V�S  F¨S¡LÑ1Ô1Ñ2Ô2ˆBÝ�V�S  F¨S¡LÑ1Ô1Ñ2Ô2ˆBØ˜‘F˜q‘= A¨¡F¨q¡=Ñ0°1¸±6Ò9Ð9r0   )r·   r¯   r¸   r¯   r   r¹   )Úabs)r)   rT   rY   r°   r±   r²   r³   r´   r¾   Úx_clearÚy_clears        ```   r.   Ú_simulate_wall_slidez7TestTier1WallSlidingAndPathfinding._simulate_wall_slide~   s  øøø€ ð	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð ˆz˜"˜r™' 2¨¡7Ñ+Ô+ð 	$Ø˜‘7˜B ™GÐ#Ð#à �j  b¡¨"Ñ-Ô-Ð-ˆà �j  R¨"¡WÑ-Ô-Ð-ˆàð 	�wð 	Ý�2‰wŒw�#˜b™'œ'Ò!Ð!Ø˜B‘w �{Ð"Ø�r˜B‘w�;ÐØð 	Ø˜‘7˜B�;ÐØð 	Ø�r˜B‘w�;ÐØ�2ˆvˆr0   r   c                óB  — |                       dddddd¬¦  «        \  }}||f}d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t	          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nr   r2   rM   ©r²   r³   )r2   r2   r   )z%(py1)s == %(py4)s)r9   rE   r™   rW   )rÂ   r!   r"   r&   r'   r(   )r)   ÚnxÚnyÚ@py_assert0r=   r*   rH   r›   s           r.   Ú*test_t1_f5_free_movement_when_unobstructedzMTestTier1WallSlidingAndPathfinding.test_t1_f5_free_movement_when_unobstructed™   sÒ   € Ø×*Ò*¨3°°S¸#ÀdÐSWÐ*ÑXÔX‰ˆˆBØ�BˆxÐ%˜:Ð%ˆx˜:Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆx˜:Ð%Ñ%Ô%Õ%Ô%ˆxÑ%Ô%Õ%Ô%˜:Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%r0   c                óÖ  — |                       dddddd¬¦  «        \  }}d}||k    }|s—t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d}||k    }|s—t          j        d|fd	||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nç      à?çš™™™™™É?ç333333Ó?r   r2   rÄ   çffffffæ?r   r   rÅ   r   r   r   rÆ   ©	rÂ   r!   r"   r#   r$   r%   r&   r'   r(   ©r)   rÅ   rÆ   r*   r+   r,   r-   s          r.   Ú/test_t1_f5_x_axis_slide_against_horizontal_wallzRTestTier1WallSlidingAndPathfinding.test_t1_f5_x_axis_slide_against_horizontal_wall�   ó¯  € à×*Ò*¨3°°S¸#ÀcÐRUÐ*ÑVÔV‰ˆˆBØÐˆr�SŠyÐÐÐÕÔÐÐÐÐˆr�SÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�SÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆr�SŠyÐÐÐÕÔÐÐÐÐˆr�SÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�SÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr0   c                óÖ  — |                       dddddd¬¦  «        \  }}d}||k    }|s—t          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )NrÊ   rÌ   rË   r2   r   rÄ   r   r   rÅ   r   r   r   rÍ   rÆ   rÎ   rÏ   s          r.   Ú-test_t1_f5_y_axis_slide_against_vertical_wallzPTestTier1WallSlidingAndPathfinding.test_t1_f5_y_axis_slide_against_vertical_wall£   rÑ   r0   c                óŒ  — |                       dddddd¬¦  «        \  }}d}||k    }|s—t          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )NrÊ   gš™™™™™Ù?rž   r2   rÄ   çÍÌÌÌÌÌì?r   r   rÅ   r   r   r   rÎ   rÏ   s          r.   Ú1test_t1_f5_dominant_axis_selection_prevents_stickzTTestTier1WallSlidingAndPathfinding.test_t1_f5_dominant_axis_selection_prevents_stick©   sî   € à×*Ò*¨3°°S¸#ÀcÐRUÐ*ÑVÔV‰ˆˆBØÐˆr�SŠyÐÐÐÕÔÐÐÐÐˆr�SÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�SÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr0   c                ó@  — |                       dddddd¬¦  «        \  }}g }d}||k    }|}|r
d}||k    }|}|�sXt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	d	d
|	iz  }
|                     |
¦  «         |r‹t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}}d S )NrÕ   rË   r2   rÄ   r   )z%(py2)s == %(py5)srÅ   )rD   r   z%(py7)sr;   )z%(py9)s == %(py12)srÆ   )rd   Úpy12z%(py14)sÚpy14r   zassert %(py17)sÚpy17)rÂ   r!   r"   r#   r$   r%   r&   ÚappendÚ_format_boolopr'   r(   )r)   rÅ   rÆ   r+   r<   r=   rÇ   Ú@py_assert11rh   r-   r>   Ú@py_format13Ú@py_format15Ú@py_format16Ú@py_format18s                  r.   Ú-test_t1_f5_corner_stop_when_both_axes_blockedzPTestTier1WallSlidingAndPathfinding.test_t1_f5_corner_stop_when_both_axes_blocked®   s  € à×*Ò*¨3°°S¸#ÀcÐRUÐ*ÑVÔV‰ˆˆBØ&Ð&�SÐ&ˆr�SŠyÐ&Ð&Ð&Ð&Ð& 3Ð&˜R 3šYÐ&Ð&Ð&Ð&Ñ&Õ&Ô&Ð&Ð&Ð&Ð&ˆr�SÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆrÑ&Ô&Ð&Õ&Ô&ˆrÑ&Ô&Ð&Ð&Õ&Ô&�SÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&˜R 3Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜RÑ&Ô&Ð&Õ&Ô&˜RÑ&Ô&Ð&Ð&Õ&Ô& 3Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&×&Ò&Ð&Ñ&Ô&Ð&Õ&Ô&Ð&Ð&Ñ&Ô&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r0   c                óØ  — g }d\  }}}}||}}||k    r3||k    r-|                      ||f¦  «         |dz  }|dz  }||k    r||k    °-d}||v }	|	s—t          j        d|	fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }
dd	|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}}	d S )
N)r   r   é   rä   é   )r»   r»   r–   )z%(py1)s in %(py3)sÚcells_traversed)r9   r   r   r   )	rÛ   r!   r"   r&   r#   r$   r%   r'   r(   )r)   ræ   Úx0Úy0Úx1Úy1r·   r¸   rÇ   r*   r,   r-   s               r.   Ú%test_t1_f5_dda_supercover_los_raycastzHTestTier1WallSlidingAndPathfinding.test_t1_f5_dda_supercover_los_raycast³   s5  € àˆØ#‰ˆˆB��BØ�2ˆ1ˆØ�2Šgˆg˜!˜rš'˜'Ø×"Ò" A q 6Ñ*Ô*Ð*Ø�‰FˆAØ�‰FˆAð �2Šgˆg˜!˜rš'˜'ð Ð(ˆv˜Ð(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆv˜Ð(Ñ(Ô(Õ(Ô(ˆvÑ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜Ñ(Ô(Ð(Õ(Ô(˜Ñ(Ô(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(r0   N)r®   )rT   r¯   rY   r¯   r°   r¯   r±   r¯   r²   r¯   r³   r¯   r´   r¯   r   rµ   rq   )rr   rs   rt   ru   rÂ   rÈ   rÐ   rÓ   rÖ   râ   rë   rv   r0   r.   r­   r­   {   s²   € € € € € Ø3Ð3ð dhðð ð ð ð ð6&ð &ð &ð &ðð ð ð ðð ð ð ðð ð ð ð
'ð 'ð 'ð 'ð
	)ð 	)ð 	)ð 	)ð 	)ð 	)r0   r­   c                  ó:   — e Zd ZdZd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )ÚTestTier1CameraLerpAndZoomz&Feature 6: Camera Lerp & Dynamic Zoom.r   r   c           	     óŽ  — d\  }}d\  }}d}d}dt          j        | |z  ¦  «        z
  }|||z
  |z  z   }d}	|	|k     }
||k     }|
r|s×t          j        d|
|fd|	||f¦  «        t          j        |	¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}	x}
}t           j
        }d}d} ||||¬¦  «        }|sùddt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}d S )N)r   r   )rM   r   r’   g       @r2   r   ©rª   rª   )ú%(py1)s < %(py4)sz%(py4)s < %(py5)sÚnew_cxÚtarget_x)r9   rE   r   r:   r;   gRI�€&Â¾?rK   rP   rl   rS   Úfactorrm   )rS   Úexpr!   r"   r&   r#   r$   r%   r'   r(   r[   )r)   r   r   rò   Útarget_yr~   Úfollow_speedró   rñ   rÇ   r*   r=   r-   r>   r+   r<   rn   rg   ro   s                      r.   Ú-test_t1_f6_exponential_damping_follow_formulazHTestTier1CameraLerpAndZoom.test_t1_f6_exponential_damping_follow_formulaÂ   s‡  € Ø‰ˆˆBØ&Ñˆ�(ØˆØˆØ•t”x  °Ñ 2Ñ3Ô3Ñ3ˆØ�x "‘}¨Ñ.Ñ.ˆàÐ&ˆs�VÒ&Ð&�V˜hÒ&Ð&Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð&ˆs�V˜hÐ&Ñ&Ô&Õ&Ô&ˆsÑ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�VÑ&Ô&Ð&Õ&Ô&�VÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜hÑ&Ô&Ð&Õ&Ô&˜hÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ÝŒ|Ð: GÐ:°TÐ:ˆ|ˆ|˜F G°TÐ:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:�tÑ:Ô:Ð:Õ:Ô:�tÑ:Ô:Ð:Ð:Õ:Ô:ˆ|Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:˜FÑ:Ô:Ð:Õ:Ô:˜FÑ:Ô:Ð:Ð:Õ:Ô: GÑ:Ô:Õ:Ô:°TÑ:Ô:Õ:Ô:Ð:Ñ:Ô:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r0   c                óš  — d\  }}d\  }}t          j        ||z
  ||z
  ¦  «        }d}||k    }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}}d S )	N)rA   rA   rK   )ú<=)z%(py0)s <= %(py3)sÚdistr   r   r   )
rS   r§   r!   r"   r#   r$   r%   r&   r'   r(   )
r)   r   r   rò   rõ   rú   r*   r+   r,   r-   s
             r.   Ú)test_t1_f6_deadzone_suppression_at_targetzDTestTier1CameraLerpAndZoom.test_t1_f6_deadzone_suppression_at_targetÍ   sõ   € Ø‰ˆˆBØ%Ñˆ�(ÝŒz˜( R™-¨°B©Ñ7Ô7ˆàÐˆt�uŠ}ÐÐÐÕÔÐÐÐÐˆt�uÐÑÔÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔ�uÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr0   c                ó:  — d\  }}d\  }}d\  }}t          |t          ||¦  «        ¦  «        }t          |t          ||¦  «        ¦  «        }d}	||	k    }
|
s—t          j        d|
fd||	f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd	|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
}	d}	|	 }||k    }
|
s—t          j        d|
fd
||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
x}	}d S )N)g      YÀrL   )g     Àb@g      ^ÀrL   r   r   Ú	clamped_xr   r   r   )z%(py0)s == -%(py3)sÚ	clamped_yr™   rW   )
r¼   r½   r!   r"   r#   r$   r%   r&   r'   r(   )r)   Úmin_wxÚmax_wxÚmin_wyÚmax_wyÚ	raw_cam_xÚ	raw_cam_yrý   rþ   r*   r+   r,   r-   r<   rH   r›   s                   r.   Ú+test_t1_f6_boundary_clamping_to_zone_boundszFTestTier1CameraLerpAndZoom.test_t1_f6_boundary_clamping_to_zone_boundsÔ   sç  € Ø&‰ˆ�Ø&‰ˆ�Ø,Ñˆ	�9Ý˜¥ I¨vÑ 6Ô 6Ñ7Ô7ˆ	Ý˜¥ I¨vÑ 6Ô 6Ñ7Ô7ˆ	Ø!Ð!ˆy˜EÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆy˜EÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆyÑ!Ô!Ð!Õ!Ô!ˆyÑ!Ô!Ð!Ð!Õ!Ô!˜EÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ø"Ð"˜U˜FÐ"ˆy˜FÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆy˜FÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆyÑ"Ô"Ð"Õ"Ô"ˆyÑ"Ô"Ð"Ð"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"r0   c                ó  — d\  }}d}t          ||¦  «        }t          ||¦  «        }d}||k    }|�sžt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        d	t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}x}}d}t          ||¦  «        }t          ||¦  «        }d}||k    }|�sžt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        d	t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}x}}d}t          ||¦  «        }t          ||¦  «        }d}||k    }|�sžt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        d	t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}x}}d S )N)rÊ   rb   rË   rÊ   r   )za%(py9)s
{%(py9)s = %(py0)s(%(py1)s, %(py7)s
{%(py7)s = %(py2)s(%(py4)s, %(py5)s)
})
} == %(py12)sr¼   Úmin_zoomr½   Úmax_zoom)r   r9   rD   rE   r   r;   rd   rØ   zassert %(py14)srÙ   g      @rb   r2   )
r½   r¼   r!   r"   r#   r$   r%   r&   r'   r(   )
r)   r  r  r=   rn   rg   rÝ   rh   rÞ   rß   s
             r.   Ú&test_t1_f6_dynamic_zoom_clamping_rangezATestTier1CameraLerpAndZoom.test_t1_f6_dynamic_zoom_clamping_rangeÝ   sŽ  € Ø%Ñˆ�(Ø!$Ð7�S  hÑ/Ô/Ð7�s�8Ð/Ñ0Ô0Ð7°CÐ7Ð0°CÒ7Ð7Ð7Ñ7Õ7Ô7Ð7Ð7Ð7Ð7Ð0°CÐ7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�sÑ7Ô7Ð7Õ7Ô7�sÑ7Ô7Ð7Ð7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�8Ñ7Ô7Ð7Õ7Ô7�8Ñ7Ô7Ð7Ð7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�SÑ7Ô7Ð7Õ7Ô7�SÑ7Ô7Ð7Ð7Õ7Ô7 Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7 hÑ7Ô7Ð7Õ7Ô7 hÑ7Ô7Ð7Ð7Õ7Ô7Ð/Ñ7Ô7Õ7Ô7Ð0Ñ7Ô7Õ7Ô7°CÑ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø!$Ð7�S  hÑ/Ô/Ð7�s�8Ð/Ñ0Ô0Ð7°CÐ7Ð0°CÒ7Ð7Ð7Ñ7Õ7Ô7Ð7Ð7Ð7Ð7Ð0°CÐ7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�sÑ7Ô7Ð7Õ7Ô7�sÑ7Ô7Ð7Ð7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�8Ñ7Ô7Ð7Õ7Ô7�8Ñ7Ô7Ð7Ð7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�SÑ7Ô7Ð7Õ7Ô7�SÑ7Ô7Ð7Ð7Õ7Ô7 Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7 hÑ7Ô7Ð7Õ7Ô7 hÑ7Ô7Ð7Ð7Õ7Ô7Ð/Ñ7Ô7Õ7Ô7Ð0Ñ7Ô7Õ7Ô7°CÑ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø!$Ð7�S  hÑ/Ô/Ð7�s�8Ð/Ñ0Ô0Ð7°CÐ7Ð0°CÒ7Ð7Ð7Ñ7Õ7Ô7Ð7Ð7Ð7Ð7Ð0°CÐ7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�sÑ7Ô7Ð7Õ7Ô7�sÑ7Ô7Ð7Ð7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�8Ñ7Ô7Ð7Õ7Ô7�8Ñ7Ô7Ð7Ð7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�SÑ7Ô7Ð7Õ7Ô7�SÑ7Ô7Ð7Ð7Õ7Ô7 Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7 hÑ7Ô7Ð7Õ7Ô7 hÑ7Ô7Ð7Ð7Õ7Ô7Ð/Ñ7Ô7Õ7Ô7Ð0Ñ7Ô7Õ7Ô7°CÑ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7r0   c                óÎ  — d}dt          j        d|z  ¦  «        z
  }d}||k     }d}||k     }|r|s¬t          j        d||fd|||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd	|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}d S )
Nr2   g       Àr   rï   )rð   z%(py4)s < %(py6)sró   )r9   rE   rW   zassert %(py8)srX   )
rS   rô   r!   r"   r&   r#   r$   r%   r'   r(   )	r)   r~   ró   rÇ   r*   r]   r=   r›   r_   s	            r.   Ú)test_t1_f6_high_dt_stability_no_overshootzDTestTier1CameraLerpAndZoom.test_t1_f6_high_dt_stability_no_overshootã   s  € àˆØ•t”x  r¡	Ñ*Ô*Ñ*ˆØÐ!ˆs�VÒ!Ð!˜cÐ!�V˜cÒ!Ð!Ð!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!Ð!ˆs�V˜cÐ!Ñ!Ô!Õ!Ô!ˆsÑ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�VÑ!Ô!Ð!Õ!Ô!�VÑ!Ô!Ð!Ð!Õ!Ô!˜cÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r0   Nrq   )	rr   rs   rt   ru   r÷   rû   r  r	  r  rv   r0   r.   rí   rí   ¿   s~   € € € € € Ø0Ð0ð	;ð 	;ð 	;ð 	;ðð ð ð ð#ð #ð #ð #ð8ð 8ð 8ð 8ð"ð "ð "ð "ð "ð "r0   rí   )ru   Ú
__future__r   Úbuiltinsr#   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter!   rS   Útypingr   ÚpytestÚtests.e2e_cocos.conftestr   r   r   r   r	   r
   r   r   rx   r­   rí   rv   r0   r.   ú<module>r     sp  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø Ð Ð Ð Ð Ð Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð)3ð )3ð )3ð )3ð )3ñ )3ô )3ð )3ðX1)ð 1)ð 1)ð 1)ð 1)ñ 1)ô 1)ð 1)ðhA)ð A)ð A)ð A)ð A)ñ A)ô A)ð A)ðH("ð ("ð ("ð ("ð ("ñ ("ô ("ð ("ð ("ð ("r0   