§
    ŽÛ¾jT  ã                   ó¸   — d Z ddlZddlmc 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 )zŒ
Unit test suite for Viewport Frustum Culling Utilities.
Verifies AABB-Frustum intersection math, isometric projection, and entity culling.
é    N)ÚAABBÚEntityBoundsÚ	Frustum2DÚbenchmark_cullingÚcull_entitiesÚ
intersectsÚproject_isoc                   ó.   — e Zd Zdd„Zdd„Zdd„Zdd„ZdS )ÚTestAABBOperationsÚreturnNc                 ó0  — t          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 S )Nç      $@ç      4@ç      I@ç      T@©Úmin_xÚmin_yÚmax_xÚmax_yç      D@©ú==)z-%(py2)s
{%(py2)s = %(py0)s.width
} == %(py5)sÚbox©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7ç      N@)z.%(py2)s
{%(py2)s = %(py0)s.height
} == %(py5)s)r   ÚwidthÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚheight)Úselfr   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8s          ú9C:\Projects\FreeExile\tests\unit\test_viewport_culling.pyÚtest_aabb_propertiesz'TestAABBOperations.test_aabb_properties   sØ  € Ý˜ T°¸TÐBÑBÔBˆØŒyÐ ˜DÐ ˆy˜DÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆy˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆsÑ Ô Ð Õ Ô ˆsÑ Ô Ð Ð Õ Ô ˆyÑ Ô Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð ØŒzÐ!˜TÐ!ˆz˜TÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ó    c           	      óÂ
  — t          dddd¬¦  «        }|j        }d}d} |||¦  «        }d}||u }|sãt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}x}x}}|j        }d}d} |||¦  «        }d}||u }|sãt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}x}x}}|j        }d}d} |||¦  «        }d}||u }|sãt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}x}x}}|j        }d}| }d}
 |||
¦  «        }d}||u }|sãt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}x}
x}x}}|j        }d}d} |||¦  «        }d}||u }|sãt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}x}x}}d S )Nç        ç      Y@r   r   T©Úis)z^%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.contains_point
}(%(py4)s, %(py6)s)
} is %(py11)sr   )r   r   Úpy4Úpy6Úpy8Úpy11zassert %(py13)sÚpy13g      ð?F)z_%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.contains_point
}(-%(py4)s, %(py7)s)
} is %(py12)s)r   r   r:   r    Úpy9Úpy12zassert %(py14)sÚpy14ç     @Y@)
r   Úcontains_pointr#   r$   r%   r&   r'   r(   r)   r*   )r,   r   r-   r/   Ú@py_assert5Ú@py_assert7Ú@py_assert10Ú@py_assert9Ú@py_format12Ú@py_format14Ú@py_assert6Ú@py_assert8Ú@py_assert11Ú@py_format13Ú@py_format15s                  r2   Útest_aabb_contains_pointz+TestAABBOperations.test_aabb_contains_point   sR  € Ý˜ C¨u¸EÐBÑBÔBˆØÔ!Ð5 $Ð5¨Ð5Ð!Ð! $¨Ñ-Ô-Ð5°Ð5Ð-°Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð-°Ð5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆsÑ5Ô5Ð5Õ5Ô5ˆsÑ5Ô5Ð5Ð5Õ5Ô5Ð!Ñ5Ô5Õ5Ô5 $Ñ5Ô5Õ5Ô5¨Ñ5Ô5Õ5Ô5Ð-Ñ5Ô5Õ5Ô5°Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÔ!Ð3 #Ð3 sÐ3Ð!Ð! # sÑ+Ô+Ð3¨tÐ3Ð+¨tÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð+¨tÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Õ3Ô3ˆsÑ3Ô3Ð3Ð3Õ3Ô3Ð!Ñ3Ô3Õ3Ô3 #Ñ3Ô3Õ3Ô3 sÑ3Ô3Õ3Ô3Ð+Ñ3Ô3Õ3Ô3¨tÑ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Ð3Ð3Ð3Ð3Ð3Ð3ØÔ!Ð7 %Ð7¨Ð7Ð!Ð! %¨Ñ/Ô/Ð7°4Ð7Ð/°4Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð/°4Ð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Ô7Ð/Ñ7Ô7Õ7Ô7°4Ñ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Ð7ØÔ!Ð6 3Ð6 3 $Ð6¨Ð6Ð!Ð! $¨Ñ-Ô-Ð6°Ð6Ð-°Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð-°Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆsÑ6Ô6Ð6Õ6Ô6ˆsÑ6Ô6Ð6Ð6Õ6Ô6Ð!Ñ6Ô6Õ6Ô6 3Ñ6Ô6Õ6Ô6¨Ñ6Ô6Õ6Ô6Ð-Ñ6Ô6Õ6Ô6°Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØÔ!Ð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Ñ7Ô7Ð7Õ7Ô7ˆsÑ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Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7r4   c                 ó`	  — t          dddd¬¦  «        }t          dddd¬¦  «        }t          dddd¬¦  «        }|j        } ||¦  «        }d}||u }|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t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}}|j        } ||¦  «        }d}||u }|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t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}}|j        } ||¦  «        }d}||u }|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t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}}|j        } ||¦  «        }d}||u }|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t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}x}}d S )Nr6   r   r   ç      9@g     ÀR@r!   r7   Tr8   )zP%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.intersects
}(%(py3)s)
} is %(py8)sÚb1Úb2)r   r   Úpy3r   r<   zassert %(py10)sÚpy10FÚb3)
r   r   r#   r$   r%   r&   r'   r(   r)   r*   )
r,   rR   rS   rV   r-   r.   rE   rJ   Ú@py_format9Ú@py_format11s
             r2   Útest_aabb_intersectsz'TestAABBOperations.test_aabb_intersects!   s>  € Ý˜ 3¨d¸$Ð?Ñ?Ô?ˆÝ˜ D°¸DÐAÑAÔAˆÝ˜ D°¸UÐCÑCÔCˆàŒ}Ð(ˆ}ˆ}˜RÑ Ô Ð( DÐ(Ð  DÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆrÑ(Ô(Ð(Õ(Ô(ˆrÑ(Ô(Ð(Ð(Õ(Ô(ˆ}Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜RÑ(Ô(Ð(Õ(Ô(˜RÑ(Ô(Ð(Ð(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØŒ}Ð(ˆ}ˆ}˜RÑ Ô Ð( DÐ(Ð  DÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆrÑ(Ô(Ð(Õ(Ô(ˆrÑ(Ô(Ð(Ð(Õ(Ô(ˆ}Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜RÑ(Ô(Ð(Õ(Ô(˜RÑ(Ô(Ð(Ð(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØŒ}Ð)ˆ}ˆ}˜RÑ Ô Ð) EÐ)Ð  EÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Ð)Õ)Ô)ˆ}Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)˜RÑ)Ô)Ð)Õ)Ô)˜RÑ)Ô)Ð)Ð)Õ)Ô)Ð Ñ)Ô)Õ)Ô) EÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØŒ}Ð)ˆ}ˆ}˜RÑ Ô Ð) EÐ)Ð  EÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Ð)Õ)Ô)ˆ}Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)˜RÑ)Ô)Ð)Õ)Ô)˜RÑ)Ô)Ð)Ð)Õ)Ô)Ð Ñ)Ô)Õ)Ô) EÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)r4   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}}|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 )Nr   r   r   ç      @r   )z-%(py2)s
{%(py2)s = %(py0)s.min_x
} == %(py5)sÚpaddedr   r   r    )z-%(py2)s
{%(py2)s = %(py0)s.min_y
} == %(py5)srQ   ©z-%(py2)s
{%(py2)s = %(py0)s.max_x
} == %(py5)s©z-%(py2)s
{%(py2)s = %(py0)s.max_y
} == %(py5)s)r   Úexpandr   r#   r$   r%   r&   r'   r(   r)   r*   r   r   r   )r,   r   r\   r-   r.   r/   r0   r1   s           r2   Útest_aabb_expandz#TestAABBOperations.test_aabb_expand+   s¡  € Ý˜ T°¸TÐBÑBÔBˆØ—’˜C‘”ˆØŒ|Ð"˜sÐ"ˆ|˜sÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ|˜sÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆvÑ"Ô"Ð"Õ"Ô"ˆvÑ"Ô"Ð"Ð"Õ"Ô"ˆ|Ñ"Ô"Õ"Ô"˜sÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØŒ|Ð"˜sÐ"ˆ|˜sÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ|˜sÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆvÑ"Ô"Ð"Õ"Ô"ˆvÑ"Ô"Ð"Ð"Õ"Ô"ˆ|Ñ"Ô"Õ"Ô"˜sÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØŒ|Ð#˜tÐ#ˆ|˜tÒ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ|˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆvÑ#Ô#Ð#Õ#Ô#ˆvÑ#Ô#Ð#Ð#Õ#Ô#ˆ|Ñ#Ô#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØŒ|Ð#˜tÐ#ˆ|˜tÒ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ|˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆvÑ#Ô#Ð#Õ#Ô#ˆvÑ#Ô#Ð#Ð#Õ#Ô#ˆ|Ñ#Ô#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#r4   ©r   N)Ú__name__Ú
__module__Ú__qualname__r3   rO   rY   r`   © r4   r2   r   r      sd   € € € € € ð"ð "ð "ð "ð
8ð 8ð 8ð 8ð*ð *ð *ð *ð$ð $ð $ð $ð $ð $r4   r   c                   ó&   — e Zd Zdd„Zdd„Zdd„ZdS )ÚTestFrustumIntersectionr   Nc                 ór  — 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}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}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 )Nr6   r7   r   ©r   r   r   r   Úpaddingr   )z.%(py2)s
{%(py2)s = %(py0)s.min_x
} == -%(py5)sr   r   zassert %(py8)sr<   )z.%(py2)s
{%(py2)s = %(py0)s.min_y
} == -%(py5)sg     €[@r]   r   r    r^   )r   Úto_aabbr   r#   r$   r%   r&   r'   r(   r)   r*   r   r   r   )r,   Úfrustumr   r-   r.   rJ   r/   Ú@py_format7rW   r0   r1   s              r2   Útest_frustum_to_aabbz,TestFrustumIntersection.test_frustum_to_aabb5   s¾  € Ý #¨S¸ÀUÐTXÐYÑYÔYˆØ�oŠoÑÔˆØŒyÐ!˜TÐ!˜T˜EÐ!ˆy˜EÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆy˜EÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Ð!Õ!Ô!ˆyÑ!Ô!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØŒyÐ!˜TÐ!˜T˜EÐ!ˆy˜EÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆy˜EÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Ð!Õ!Ô!ˆyÑ!Ô!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØŒyÐ!˜EÐ!ˆy˜EÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆy˜EÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Ð!Õ!Ô!ˆyÑ!Ô!Õ!Ô!˜EÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØŒyÐ!˜EÐ!ˆy˜EÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆy˜EÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Õ!Ô!ˆsÑ!Ô!Ð!Ð!Õ!Ô!ˆyÑ!Ô!Õ!Ô!˜EÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r4   c                 ó  — t          ddddd¬¦  «        }d}d}d}d}t          ||||¦  «        }t          ||¦  «        }d}||u }	|	�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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœ
z  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}	}d}d}d}d}t          ||||¦  «        }t          ||¦  «        }d}||u }	|	�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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœ
z  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}	}d}d}d}d}t          ||||¦  «        }t          ||¦  «        }d}||u }	|	�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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœ
z  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}	}d}d}d}d}t          ||||¦  «        }t          ||¦  «        }d}||u }	|	�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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœ
z  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}	}d S )Nr6   r7   ri   r   r   Tr8   )zx%(py14)s
{%(py14)s = %(py0)s(%(py1)s, %(py12)s
{%(py12)s = %(py2)s(%(py4)s, %(py6)s, %(py8)s, %(py10)s)
})
} is %(py17)sr   rl   r   )
r   Úpy1r   r:   r;   r<   rU   r@   rA   Úpy17zassert %(py19)sÚpy19g     €V@g      ^@rB   r   g     Àb@r   F©r   r   r   r#   r$   r%   r&   r'   r(   r)   r*   )r,   rl   r/   rD   rE   rG   rL   Ú@py_assert13Ú@py_assert16Ú@py_assert15Ú@py_format18Ú@py_format20s               r2   Útest_frustum_intersects_boxz3TestFrustumIntersection.test_frustum_intersects_box=   sÅ  € Ý #¨S¸ÀUÐTWÐXÑXÔXˆà(,ÐH¨dÐH°DÐH¸$ÐH¥4¨¨d°D¸$Ñ#?Ô#?ÐH�z˜'Ð#?Ñ@Ô@ÐHÀDÐHÐ@ÀDÐHÐHÐHÑHÕHÔHÐHÐHÐHÐHÐ@ÀDÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH�zÑHÔHÐHÕHÔH�zÑHÔHÐHÐHÐHÕHÔHÑHÔHÐHÐHÕHÔH˜'ÑHÔHÐHÕHÔH˜'ÑHÔHÐHÐHÐHÕHÔHÑHÔHÐHÐHÕHÔH¥4ÑHÔHÐHÕHÔH¥4ÑHÔHÐHÐHÕHÔH¨ÑHÔHÕHÔH¨dÑHÔHÕHÔH°DÑHÔHÕHÔH¸$ÑHÔHÕHÔHÐ#?ÑHÔHÕHÔHÐ@ÑHÔHÕHÔHÀDÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHà(,ÐJ¨dÐJ°EÐJ¸5ÐJ¥4¨¨d°E¸5Ñ#AÔ#AÐJ�z˜'Ð#AÑBÔBÐJÀdÐJÐBÀdÐJÐJÐJÑJÕJÔJÐJÐJÐJÐJÐBÀdÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJ�zÑJÔJÐJÕJÔJ�zÑJÔJÐJÐJÐJÕJÔJÑJÔJÐJÐJÕJÔJ˜'ÑJÔJÐJÕJÔJ˜'ÑJÔJÐJÐJÐJÕJÔJÑJÔJÐJÐJÕJÔJ¥4ÑJÔJÐJÕJÔJ¥4ÑJÔJÐJÐJÕJÔJ¨ÑJÔJÕJÔJ¨dÑJÔJÕJÔJ°EÑJÔJÕJÔJ¸5ÑJÔJÕJÔJÐ#AÑJÔJÕJÔJÐBÑJÔJÕJÔJÀdÑJÔJÐJÐJÑJÐJÐJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJà(-ÐK¨tÐK°UÐK¸DÐK¥4¨¨t°U¸DÑ#AÔ#AÐK�z˜'Ð#AÑBÔBÐKÀeÐKÐBÀeÐKÐKÐKÑKÕKÔKÐKÐKÐKÐKÐBÀeÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK�zÑKÔKÐKÕKÔK�zÑKÔKÐKÐKÐKÕKÔKÑKÔKÐKÐKÕKÔK˜'ÑKÔKÐKÕKÔK˜'ÑKÔKÐKÐKÐKÕKÔKÑKÔKÐKÐKÕKÔK¥4ÑKÔKÐKÕKÔK¥4ÑKÔKÐKÐKÕKÔK¨ÑKÔKÕKÔK¨tÑKÔKÕKÔK°UÑKÔKÕKÔK¸DÑKÔKÕKÔKÐ#AÑKÔKÕKÔKÐBÑKÔKÕKÔKÀeÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKà(,ÐK¨eÐK°TÐK¸5ÐK¥4¨¨e°T¸5Ñ#AÔ#AÐK�z˜'Ð#AÑBÔBÐKÀeÐKÐBÀeÐKÐKÐKÑKÕKÔKÐKÐKÐKÐKÐBÀeÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK�zÑKÔKÐKÕKÔK�zÑKÔKÐKÐKÐKÕKÔKÑKÔKÐKÐKÕKÔK˜'ÑKÔKÐKÕKÔK˜'ÑKÔKÐKÐKÐKÕKÔKÑKÔKÐKÐKÕKÔK¥4ÑKÔKÐKÕKÔK¥4ÑKÔKÐKÐKÕKÔK¨ÑKÔKÕKÔK¨eÑKÔKÕKÔK°TÑKÔKÕKÔK¸5ÑKÔKÕKÔKÐ#AÑKÔKÕKÔKÐBÑKÔKÕKÔKÀeÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKr4   c                 ó¶  — t          ddddd¬¦  «        }t          ddddd¬¦  «        }t          dddd¦  «        }t          ||¦  «        }d	}||u }|�s0t          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        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}t          ||¦  «        }d}||u }|�s0t          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        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}d S )Nr6   r7   )rj   r   g     @Z@r   g     À\@g     €Q@Fr8   )z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} is %(py7)sr   Úfrustum_no_padr   )r   rp   r   r:   r    zassert %(py9)sr?   TÚfrustum_paddedrs   )	r,   r{   r|   r   r/   rJ   rD   r1   Ú@py_format10s	            r2   Útest_frustum_padding_inclusionz6TestFrustumIntersection.test_frustum_padding_inclusionH   s  € å" 3¨¨U°EÀ3ÐGÑGÔGˆÝ" 3¨¨U°EÀ4ÐHÑHÔHˆÝ�5˜$  tÑ,Ô,ˆå˜.¨#Ñ.Ô.Ð7°%Ð7Ð.°%Ð7Ð7Ð7Ñ7Õ7Ô7Ð7Ð7Ð7Ð7Ð.°%Ð7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�zÑ7Ô7Ð7Õ7Ô7�zÑ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Ô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Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ý˜.¨#Ñ.Ô.Ð6°$Ð6Ð.°$Ð6Ð6Ð6Ñ6Õ6Ô6Ð6Ð6Ð6Ð6Ð.°$Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6�zÑ6Ô6Ð6Õ6Ô6�zÑ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6˜.Ñ6Ô6Ð6Õ6Ô6˜.Ñ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨#Ñ6Ô6Ð6Õ6Ô6¨#Ñ6Ô6Ð6Ð6Õ6Ô6Ð.Ñ6Ô6Õ6Ô6°$Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6r4   ra   )rb   rc   rd   rn   ry   r~   re   r4   r2   rg   rg   4   sT   € € € € € ð"ð "ð "ð "ð	Lð 	Lð 	Lð 	Lð7ð 7ð 7ð 7ð 7ð 7r4   rg   c                   ó   — e Zd Zdd„Zdd„ZdS )ÚTestIsometricProjectionr   Nc                 óÂ  — t          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 )	Nr6   r   ©z%(py0)s == %(py3)sÚiso_x©r   rT   úassert %(py5)sr   Úiso_y©	r	   r#   r$   r%   r&   r'   r(   r)   r*   )r,   rƒ   r†   Ú@py_assert2r-   Ú@py_format4r0   s          r2   Útest_project_iso_originz/TestIsometricProjection.test_project_iso_originS   sŸ  € Ý" 3¨¨SÑ1Ô1‰ˆˆuØÐˆu˜Š|ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆu˜Š|ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr4   c                 ó2  — t          dddd¬¦  «        \  }}t          dddd¬¦  «        \  }}d}||z
  }||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 )Nr[   r6   g      8@)Úz_scaleç       @g      H@r   )z%(py0)s == (%(py2)s - %(py4)s)Ú
y_elevatedÚy_ground)r   r   r:   r   r    r‡   )	r,   Ú_r�   rŽ   r/   rD   r-   r0   r1   s	            r2   Ú!test_project_iso_elevation_offsetz9TestIsometricProjection.test_project_iso_elevation_offsetX   sG  € Ý! # s¨C¸Ð>Ñ>Ô>‰ˆˆ8Ý# C¨¨c¸4Ð@Ñ@Ô@‰ˆˆ:à(,Ð,˜X¨™_Ð,ˆz˜_Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆz˜_Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆzÑ,Ô,Ð,Õ,Ô,ˆzÑ,Ô,Ð,Ð,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,˜XÑ,Ô,Ð,Õ,Ô,˜XÑ,Ô,Ð,Ð,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r4   ra   )rb   rc   rd   rŠ   r‘   re   r4   r2   r€   r€   R   s<   € € € € € ðð ð ð ð
-ð -ð -ð -ð -ð -r4   r€   c                   ó&   — e Zd Zdd„Zdd„Zdd„ZdS )ÚTestCullEntitiesr   Nc                 óè  — t          ddd¬¦  «        t          ddd¬¦  «        t          ddd¬¦  «        t          d	d
d
¬¦  «        g}t          dd|d¬¦  «        }d„ |D ¦   «         }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}||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}||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	}||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Ú
center_mobr6   )Úworld_xÚworld_yÚ
nearby_mobr�   g      ð¿Úfar_mob_culledr   Únegative_far_culledg      IÀ©r6   r6   ©g      ‰@g     À‚@g      @@)Ú
camera_posÚviewport_sizeÚentitiesrj   c                 ó   — h | ]	}|j         ’Œ
S re   )Ú	entity_id)Ú.0Úes     r2   ú	<setcomp>z=TestCullEntities.test_cull_entities_filter.<locals>.<setcomp>o   s   € Ð0Ð0Ð0 1�1”;Ð0Ð0Ð0r4   )Úin)z%(py1)s in %(py3)sÚvis_ids)rp   rT   r…   r   )únot in)z%(py1)s not in %(py3)s)
r   r   r#   r$   r(   r%   r&   r'   r)   r*   )r,   rŸ   Úvisibler¦   Ú@py_assert0rˆ   r‰   r0   s           r2   Útest_cull_entities_filterz*TestCullEntities.test_cull_entities_filter`   sž  € å˜¨s¸CÐ@Ñ@Ô@Ý˜¨s¸DÐAÑAÔAÝÐ)°4ÀÐFÑFÔFÝÐ.¸ÀuÐMÑMÔMð	
ˆõ  Ø!Ø(ØØð	
ñ 
ô 
ˆð 1Ð0¨Ð0Ñ0Ô0ˆØÐ&ˆ|˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ|˜wÐ&Ñ&Ô&Õ&Ô&ˆ|Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ØÐ&ˆ|˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ|˜wÐ&Ñ&Ô&Õ&Ô&ˆ|Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ØÐ.Ð wÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð wÐ.Ñ.Ô.Õ.Ô.ÐÑ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. wÑ.Ô.Ð.Õ.Ô. wÑ.Ô.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ø$Ð3Ð$¨GÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð$¨GÐ3Ñ3Ô3Õ3Ô3Ð$Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3¨GÑ3Ô3Ð3Õ3Ô3¨GÑ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Ð3Ð3r4   c                 ór  — t          ddg ¦  «        }g }||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   r‚   r¨   r„   r…   r   )	r   r#   r$   r%   r&   r'   r(   r)   r*   )r,   r¨   rˆ   r-   r‰   r0   s         r2   Útest_cull_entities_empty_listz.TestCullEntities.test_cull_entities_empty_listu   sÚ   € Ý 
¨N¸BÑ?Ô?ˆØÐˆw˜"Š}ÐÐÐÕÔÐÐÐÐˆw˜"ÐÑÔÐÕÔÑÔÐÐÕÔˆwÑÔÐÕÔˆwÑÔÐÐÕÔ˜"ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr4   c                 óH  — t          dd¬¦  «        }|d         }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
         }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         }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         }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 )NéÈ   )g      ”@g     €†@)Únum_entitiesrž   Útotal_entitiesr   )z%(py1)s == %(py4)s)rp   r:   zassert %(py6)sr;   Úvisible_entitiesr   )ú>)z%(py1)s > %(py4)sÚculled_entitiesÚ
elapsed_msr   )ú<)z%(py1)s < %(py4)s)r   r#   r$   r(   r)   r*   )r,   Úresr©   r/   rˆ   Ú@py_format5rm   s          r2   Ú test_benchmark_culling_syntheticz1TestCullEntities.test_benchmark_culling_syntheticy   sÁ  € Ý¨SÀÐPÑPÔPˆØÐ#Ô$Ð+¨Ð+Ð$¨Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð$¨Ð+Ñ+Ô+Õ+Ô+Ð$Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÐ%Ô&Ð*¨Ð*Ð&¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð&¨Ð*Ñ*Ô*Õ*Ô*Ð&Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÐ$Ô%Ð)¨Ð)Ð%¨Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð%¨Ð)Ñ)Ô)Õ)Ô)Ð%Ñ)Ô)Õ)Ô)¨Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø�<Ô Ð' 4Ð'Ð  4Ò'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð  4Ð'Ñ'Ô'Õ'Ô'Ð Ñ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r4   ra   )rb   rc   rd   rª   r¬   r¸   re   r4   r2   r“   r“   _   sP   € € € € € ð4ð 4ð 4ð 4ð*ð ð ð ð(ð (ð (ð (ð (ð (r4   r“   )Ú__doc__Úbuiltinsr%   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter#   ÚpytestÚ+tools.asset_pipeline.viewport_culling_utilsr   r   r   r   r   r   r	   r   rg   r€   r“   re   r4   r2   ú<module>rÀ      s9  ððð ð
 € € € € € € € € € € € € €€€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ð $ð $ð $ð $ñ $ô $ð $ðB7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ð<
-ð 
-ð 
-ð 
-ð 
-ñ 
-ô 
-ð 
-ð(ð (ð (ð (ð (ñ (ô (ð (ð (ð (r4   