U
    ZÊ¹j~  ã                   @   s¼   d dl mZ d dl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mZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! d	d
„ Z"dd„ Z#dS )é    )ÚN)ÚFloatÚIÚooÚpi)Úsymbols)Úsqrt)Úatan2)ÚMatrix)Úfactor)ÚBeamParameterÚCurvedMirrorÚCurvedRefractionÚ
FlatMirrorÚFlatRefractionÚ	FreeSpaceÚGeometricRayÚRayTransferMatrixÚThinLensÚconjugate_gauss_beamsÚgaussian_conjÚgeometric_conj_abÚgeometric_conj_afÚgeometric_conj_bfÚrayleigh2waistÚwaist2rayleighc                 C   s   t | ƒt |ƒkS )N)Ústr)ÚaÚb© r   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/optics/tests/test_gaussopt.pyÚstreq   s    r!   c               	   C   sÆ  t ddddƒ} | tddgddggƒks*t‚| t tddgddggƒƒksJt‚| j| j| j| jgddddgksnt‚tdƒ\}}}}}}t|ƒ}|tddgd| dggƒksªt‚|jd| ks¼t‚t	|ƒtd|gddggƒksÜt‚t
||ƒtddgd|| ggƒk�st‚t|||ƒtddg|| ||  || ggƒk�s:t‚tƒ tddgddggƒk�sZt‚t|ƒtddgd| dggƒk�s€t‚t|ƒtddgd| dggƒk�s¦t‚t|ƒt	|ƒ }tddgd| dggƒtd|gddggƒ }	|j|	d	 k�söt‚|j|	d
 k�s
t‚|j|	d k�st‚|j|	d k�s2t‚tdƒ}
t||
ƒt|g|
ggƒk�sZt‚t	|ƒt||
ƒ t|
| | g|
ggƒk�sŠt‚tt|f|
ffƒƒt|g|
ggƒk�s´t‚t	|ƒt||
ƒ j|
| | k�sÚt‚t	|ƒt||
ƒ j|
k�søt‚tdddd�}t|jddt t  ƒ�s$t‚tt|jƒddt  ƒ�sBt‚tt|jƒtdƒƒ�s\t‚tt|jƒtdƒƒ�svt‚t	dƒ}|| }tt|jƒtdƒƒ�s t‚tt|jƒtdƒƒ�sºt‚tdƒ\}}t||ƒt|d  | k�sæt‚tdƒ\}}t||ƒt|| ƒttƒ k�st‚tdƒ\}}}t||ƒ|| ||  k�sDt‚t||ƒ|| ||  k�sdt‚t ||ƒ|| ||  k�s„t‚tt!|ƒ|k�s˜t‚t|t!ƒ|k�s¬t‚tdƒ\}}}t"|||ƒd dd||d | |    d|   k�söt‚t"|||ƒd |d|d |d   |d |d    k�s4t‚t"|||ƒd dtd|d |d   |d |d   ƒ k�svt‚tdƒ\}}}}t#||||d�d |t|d |d  td |d  |d |d    ƒ d  k�sÞt‚t$t#||||d�d ƒ||d  |d |d  t|d |d  td |d  |d |d    ƒ  |d  k�sTt‚t#||||d�d |k�srt‚tddd�\}}}t|||d�}|j%|td |d  |d |d   d  k�sÆt‚|j|t|d |d  td |d   d ƒ k�sþt‚|j|k�st‚|j&|t|  k�s&t‚|j't(|t|d  | ƒk�sHt‚|j)d| t k�s`t‚tddddd �}t|jdd!t t  ƒ�sŽt‚tt|jƒtd"ƒƒ�s¨t‚tt|jƒtdƒƒ�sÂt‚d S )#Né   é   é   é   zd f h n1 n2 Rr   éÿÿÿÿéþÿÿÿ)r   r   )r   r"   )r"   r   )r"   r"   Úangleg 4PSªÈ¡>gü©ñÒMbP?)Úwg´ìsHM0þ?g      ð?gÒ”ªJËµ@é
   g“µ’’�P?g(1E£ÜDa?z	w wavelenzz_r wavelenza b fzs_in z_r_in fzl w_i w_o f)Úfzz l w_0T)Zpositive)r)   Úng´ìsHM0@gÝ”ªJËµ'@)*r   r
   ÚAssertionErrorÚAÚBÚCÚDr   r   r   r   r   r   r   r   Úheightr(   r   r!   Úqr   r   r   Úw_0r   Úz_rr)   r   r   r   r   r   r   r   r   r   r   ZradiusZ
divergenceZgouyr	   Zwaist_approximation_limit)ZmatÚdr+   ÚhZn1Zn2ÚRZlensÚmulZmul_matr(   ÚpÚfsÚp1r)   Zwavelenr5   r   r   Zs_inZz_r_inÚlZw_iZw_oÚzr4   r   r   r    Útest_gauss_opt   sÖ     $  (  ÿ"ÿ
 &&, ÿÿÿ
*& $     ÿÿ$ÿ
  ÿÿ&ÿ
  ÿÿ*ÿ
8ÿ Bÿÿ48"r?   N)$Zsympy.core.evalfr   Zsympy.core.numbersr   r   r   r   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr	   Zsympy.matrices.denser
   Zsympy.polys.polytoolsr   Zsympy.physics.opticsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r?   r   r   r   r    Ú<module>   s   H