U
    ZÊ¹ji!  ã                   @   s$  d dl mZmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dl mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlm Z  dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&dd„ Z'dd„ Z(dd„ Z)dd „ Z*d!d"„ Z+d#d$„ Z,d%d&„ Z-d'S )(é    )ÚcompÚRational)
Úrefraction_angleÚfresnel_coefficientsÚ	deviationÚbrewster_angleÚcritical_angleÚlens_makers_formulaÚmirror_formulaÚlens_formulaÚhyperfocal_distanceÚtransverse_magnification)ÚMedium)Úe0)Úoo)Úsymbols)Úsqrt)ÚMatrix)ÚPoint3D)ÚRay3D)ÚPlane)Úraisesc                 C   s   t | |d|  ƒS )Né
   )r   )ÚaÚbÚn© r   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/optics/tests/test_utils.pyÚ<lambda>   ó    r   c                     sˆ  t dƒ\} }tdƒ‰tdƒ‰ttdddƒtdddƒƒ‰tdddgƒ‰tdddgƒ}ttdddƒtdddƒƒ‰ttdddƒdddgd�‰ tˆdd|ƒtdgdgdggƒks¬t‚tdddgdd|ƒtdgdgdggƒksØt‚tddd|ƒtdgdgdggƒksþt‚tˆdddddgƒtdgdgdggƒk�s,t‚tˆddd	ƒtdgdgdggƒk�sTt‚tˆddˆƒtdgdgdggƒk�s|t‚tˆddˆ d
�tdgdgdggƒk�s¦t‚tˆddˆ d
�ttdddƒtdddƒƒk�sÖt‚tˆˆdˆ d
�ttdddƒttddƒtddƒdt	dƒ d ƒƒk�st‚tˆdˆˆ d
�ttdddƒtdddƒƒk�sNt‚tˆ| |ˆ d
�ttdddƒt| | | | t	dƒ t	d| d  d|d   d ƒ ƒƒk�s¬t‚tˆddˆ d
�dk�sÆt‚tˆddˆƒttdddƒdddgd�k�sôt‚t
tdddƒddƒ�st‚t
tdddƒddƒ�s(t‚tt‡ ‡‡‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡‡‡fdd„ƒ tt‡‡‡fdd„ƒ d S )Nún1, n2Úm1Úm2éÿÿÿÿé   r   ©Znormal_vector)r$   r$   r$   )r   r   r$   ©ZplaneçHáz®Gõ?éd   é…   lüÿÿÿw ›^½7 é   l     �Iú5 éþÿÿÿé   )Zdirection_ratioç      à?g@Þ«V&üÎ?é   gžê�›á†ô?c                      s   t ˆˆˆˆˆ ƒS ©N©r   r   )ÚPr!   r"   Ú
normal_rayÚr1r   r   r   I   r   z'test_refraction_angle.<locals>.<lambda>c                      s   t ˆ ˆ ˆƒS r/   r0   r   ©r!   r"   r   r   r   J   r   c                      s   t ˆˆˆd ˆ ƒS r/   r0   r   )Úir!   r"   r3   r   r   r   K   r   c                      s   t ˆˆ ˆˆƒS r/   r0   r   )r!   r"   r3   r   r   r   L   r   )r   r   r   r   r   r   r   ÚAssertionErrorr   r   Úaer   Ú
ValueErrorÚ	TypeError)Ún1Ún2r   r   )r1   r5   r!   r"   r2   r3   r   Útest_refraction_angle   s‚    ýýýýýýýÿ
0ÿ
ÿ
Fÿ
ÿ
r<   c                  C   sô   t dd„ ttdddƒdddd	gƒD ƒƒs,t‚t d
d„ ttdddƒddddgƒD ƒƒsXt‚tdƒ} tddd�}t dd„ ttd| |ƒddddgƒD ƒƒs˜t‚ddgddgg}td|| ƒ}t||ƒD ]0\}}t| ¡ |ƒD ]\}}t||dƒsÔt‚qÔq¾d S )Nc                 s   s   | ]\}}t ||d ƒV  qdS ©r.   N©r7   ©Ú.0r5   Újr   r   r   Ú	<genexpr>P   s     z,test_fresnel_coefficients.<locals>.<genexpr>r-   r$   r'   g‡¢@ŸÈ“¼?g ˜£ÇïÅ¿g­nõœô¾ê?gù÷„ê?c                 s   s   | ]\}}t ||d ƒV  qdS r=   r>   r?   r   r   r   rB   S   s     gHùIµOÇ³¿gHŠÈ°Š7Ê?g}iÆ¢ó?gIVñFó?r!   r"   r,   ©r   c                 s   s   | ]\}}t ||d ƒV  qdS r=   r>   r?   r   r   r   rB   X   s     g333333Ó?gºW•}WÔ?gŽðHPÖ¿g.ÅUeßå?g¹ü‡ôÛ×ä?gðmú³)Î¿g~:3Pï¿g�Ñ:ªš ê?gÒ©+Ÿåyâ¿g333333ã?r.   )ÚallÚzipr   r6   r   Zas_real_imagr7   )r!   r"   ZansÚgotr5   rA   r   r   r   r   r   Útest_fresnel_coefficientsO   s&    


þ


þ


þrG   c                  C   s‚  t dƒ\} }ttdddƒtdddƒƒ}tdddgƒ}tdddgƒ}ttdddƒtdddƒƒ}ttdddƒdddgd�}t|dd|d�dksŽt‚t|dd|d�dks¦t‚t|dd|d� d	¡d
 dk sÈt‚t|dd|d� d	¡d
 dk sêt‚t|dd|d�d k�st‚t|dddddgd�dk�s$t‚tdddgdddddgd�dk�sJt‚ttdddƒddƒ�sdt‚ttdddƒddƒ�s~t‚d S )Nr    r#   r$   r   r%   )Únormalr&   gš™™™™™ñ?r*   gX9´Èv¾?gü©ñÒMbP?r'   r-   r,   gàªÔì�Ð¿r.   g=Õ!7Ãé?)	r   r   r   r   r   r   r6   Zevalfr7   )r:   r;   r3   r   r5   r2   r1   r   r   r   Útest_deviationb   s    "" &rI   c                  C   sz   t ddd�} t ddd�}tt| |ƒddƒs.t‚t dtdd�} t dtdd�}tt| |ƒddƒs`t‚ttddƒddƒsvt‚d S )	Nr!   r$   rC   r"   r'   gÃõ(\�Âí?r,   ©Zpermittivityr   )r   r7   r   r6   r   r4   r   r   r   Útest_brewster_anglet   s    rK   c                  C   s2   t ddd�} t ddd�}tt|| ƒddƒs.t‚d S )Nr!   r$   rC   r"   r'   g333333ë?r,   )r   r7   r   r6   r4   r   r   r   Útest_critical_angle~   s    rL   c                  C   s‚   t dƒ\} }tdtdd�}tdtdd�}t| |ddƒd	| | |  ksJt‚tt||ddƒd
dƒsdt‚ttddddƒddƒs~t‚d S )Nr    r!   r$   rJ   r"   r'   r   éöÿÿÿg      @gfffff&4Àr,   gÍÌÌÌÌL.@)r   r   r   r	   r6   r7   ©r:   r;   r!   r"   r   r   r   Útest_lens_makers_formula„   s    "rO   c                      sb  t dƒ\‰‰‰ tˆ ˆd�ˆ ˆ ˆ  ˆ  ks0t‚tˆ ˆd�ˆ ˆ ˆ  ˆ  ksRt‚tˆˆd�ˆˆ ˆˆ  ksrt‚ttˆd�ˆks†t‚tttd�tksšt‚ttˆd�ˆ ks°t‚tˆtd�ˆksÄt‚tttd�tksØt‚tˆ td�ˆ ksìt‚ttˆd�ˆ k�st‚tttd�tk�st‚tˆ td�ˆ k�s0t‚ttˆd�ˆ k�sHt‚tt‡ ‡‡fdd„ƒ d S )Núu, v, f©Úfocal_lengthÚu©rR   Úv©rS   rU   c                      s   t ˆ ˆˆd�S ©N)rR   rS   rU   )r
   r   ©ÚfrS   rU   r   r   r   œ   r   z%test_mirror_formula.<locals>.<lambda>)r   r
   r6   r   r   r8   r   r   rX   r   Útest_mirror_formula�   s    "" rZ   c                      s^  t dƒ\‰‰‰ tˆ ˆd�ˆ ˆ ˆ ˆ  ks.t‚tˆ ˆd�ˆ ˆ ˆ ˆ  ksNt‚tˆˆd�ˆˆ ˆˆ  ksnt‚ttˆd�ˆks‚t‚tttd�tks–t‚ttˆd�ˆksªt‚tˆtd�ˆ ksÀt‚tttd�t ksÖt‚ttˆd�ˆksêt‚tˆ td�ˆ  k�st‚tttd�tk�st‚ttˆd�ˆk�s.t‚tˆ td�ˆ k�sDt‚tt‡ ‡‡fdd„ƒ d S )NrP   rQ   rT   rV   c                      s   t ˆ ˆˆd�S rW   )r   r   rX   r   r   r   ®   r   z#test_lens_formula.<locals>.<lambda>)r   r   r6   r   r   r8   r   r   rX   r   Útest_lens_formulaŸ   s       r[   c                  C   sN   t dƒ\} }}t| ||d�| d ||  ks0t‚ttdddd�ddƒsJt‚d S )Nzf, N, c©rY   ÚNÚcr,   r-   é   gF%ušk?gq=
×£ð"@)r   r   r6   r7   r\   r   r   r   Útest_hyperfocal_distance±   s    "r`   c                  C   s:   t dƒ\} }t| |ƒ|  | ks$t‚tddƒdks6t‚d S )Nzsi, soé   é   r+   )r   r   r6   )ÚsiÚsor   r   r   Útest_transverse_magnification·   s    re   c                  C   s„   t dƒ\} }tdtdd�}tdtdd�}tt||dddd	�d
dƒsFt‚t| |dddd	�|dd|  d|  |   | |   ks€t‚d S )Nr    r!   r$   rJ   r"   r'   r   rM   )ÚdgR¸…ëÑ3Àr,   r#   gš™™™™™¹?g       @)r   r   r   r7   r	   r6   rN   r   r   r   Ú#test_lens_makers_formula_thick_lens½   s
    rg   c                  C   sh   t dƒ\} }tdtdd�}tdtdd�}tt||dtƒdd	ƒsBt‚t| |dtƒd
| | |  ksdt‚d S )Nr    r!   r$   rJ   r"   r'   r   gfffff&DÀr,   g      $@)r   r   r   r7   r	   r   r6   rN   r   r   r   Ú#test_lens_makers_formula_plano_lensÅ   s
    rh   N).Zsympy.core.numbersr   r   Zsympy.physics.optics.utilsr   r   r   r   r   r	   r
   r   r   r   Zsympy.physics.optics.mediumr   Zsympy.physics.unitsr   r   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   Zsympy.matrices.denser   Zsympy.geometry.pointr   Zsympy.geometry.liner   Zsympy.geometry.planer   Zsympy.testing.pytestr   r7   r<   rG   rI   rK   rL   rO   rZ   r[   r`   re   rg   rh   r   r   r   r   Ú<module>   s0   08
	