a
    khi!                     @   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   S/var/www/auris/lib/python3.9/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g dtg d}ttdddtdddttdddg dd	 tdd|tdgdgdggksJ tg ddd|tdgdgdggksJ tddd|tdgdgdggksJ tddg dtdgdgdggks"J tdddtdgdgdggksJJ tddtdgdgdggksrJ tdd d
tdgdgdggksJ tdd d
ttdddtdddksJ td d
ttdddttddtdddtd d ksJ td d
ttdddtdddksDJ t| | d
ttdddt| | | | td td| d  d|d   d  ksJ tdd d
dksJ tddttdddg ddksJ t	tdddddsJ t	tdddddsJ 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   )r$   r$   r$   r   r   r$   Znormal_vectorZplaneHzG?d      lw ^7    l     I5    )r$   r$   r#   )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 r0   r1   r   r!   r"   r   r   r   J   r   c                      s   t d  S r0   r1   r   )ir!   r"   r4   r   r   r   K   r   c                      s   t  S r0   r1   r   )r!   r"   r4   r   r   r   L   r   )r   r   r   r   r   r   r   r   r   aer   
ValueError	TypeError)n1n2r   r   )r2   r6   r!   r"   r3   r4   r   test_refraction_angle   s    
0

F

r<   c                  C   s   t dd ttdddg dD s(J t dd ttdddg dD sPJ td	} td
dd}t dd ttd| |g dD sJ ddgddgg}td|| }t||D ]0\}}t| |D ]\}}t||dsJ qqd S )Nc                 s   s   | ]\}}t ||d V  qdS r/   Nr7   .0r6   jr   r   r   	<genexpr>P   r   z,test_fresnel_coefficients.<locals>.<genexpr>r.   r$   r(   )g@ȓ?g ſgn?g?c                 s   s   | ]\}}t ||d V  qdS r=   r>   r?   r   r   r   rB   S   r   )gHIOǳgHȰ7?g}iƢ?gIVF?r!   r"   r-   r   c                 s   s   | ]\}}t ||d V  qdS r=   r>   r?   r   r   r   rB   X   r   g333333?)gW}W?gHPֿg.Ue?g?gm)οg~:3Pg: ?gҩ+yg333333?r/   )allzipr   r   Zas_real_imagr7   )r!   r"   Zansgotr6   rA   r   r   r   r   r   test_fresnel_coefficientsO   s&    





rG   c                  C   st  t d\} }ttdddtddd}tg d}tg d}ttdddtddd}ttdddg dd}t|dd|ddksJ t|dd|d	dksJ t|dd
|d	dd dk sJ t|dd
|ddd dk sJ t|dd|d	d u sJ t|ddg dddksJ tg dddg dddks<J ttdddddsVJ ttdddddspJ d S )Nr    r#   r$   r   r%   )r#   r#   r#   r&   )normalr'   g?r+   gX9v?gMbP?r(   r.   r-   gпr/   g=!7?)r   r   r   r   r   r   Zevalfr7   )r:   r;   r4   r   r6   r3   r2   r   r   r   test_deviationb   s    """rI   c                  C   sz   t ddd} t ddd}tt| |dds.J t dtdd} t dtdd}tt| |dds`J ttddddsvJ d S )	Nr!   r$   rC   r"   r(   g(\?r-   Zpermittivityr   )r   r7   r   r   r5   r   r   r   test_brewster_anglet   s    rK   c                  C   s2   t ddd} t ddd}tt|| dds.J d S )Nr!   r$   rC   r"   r(   g333333?r-   )r   r7   r   r5   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sJJ tt||ddd
dsdJ ttdddddds~J d S )Nr    r!   r$   rJ   r"   r(   r   g      @gfffff&4r-   gL.@)r   r   r   r	   r7   r:   r;   r!   r"   r   r   r   test_lens_makers_formula   s    "rO   c                      sb  t d\ t d      ks0J t d      ksRJ td   ksrJ ttdksJ tttdtu sJ ttd ksJ ttdksJ tttdtu sJ t td ksJ ttd ksJ tttdtu sJ t td ks0J ttd ksHJ 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
   r   r   r8   r   r   rX   r   test_mirror_formula   s    "" rZ   c                      s^  t d\ t d     ks.J t d     ksNJ td   ksnJ ttdksJ tttdtu sJ ttdksJ ttd ksJ tttdt u sJ ttdksJ t td  ksJ tttdtu sJ ttdks.J t td ksDJ 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   r   r   r8   r   r   rX   r   test_lens_formula   s       r[   c                  C   sN   t d\} }}t| ||d| d ||  ks0J ttddddddsJJ d S )Nzf, N, crY   Ncr-   r.      gF%uk?gq=
ף"@)r   r   r7   r\   r   r   r   test_hyperfocal_distance   s    "r`   c                  C   s:   t d\} }t| ||  | ks$J tdddks6J d S )Nzsi, so      r,   )r   r   )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sFJ t| |dddd	|dd|  d|  |   | |   ksJ d S )Nr    r!   r$   rJ   r"   r(   r   rM   )dgR3r-   r#   g?g       @)r   r   r   r7   r	   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	sBJ t| |dtd
| | |  ksdJ d S )Nr    r!   r$   rJ   r"   r(   r   gfffff&Dr-   g      $@)r   r   r   r7   r	   r   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
	