U
    e»{jª¾ ã                   @   sè   d dl mZ d dlZd dl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 d dlmZmZ d dlmZmZmZmZmZmZ G dd„ dƒZG dd	„ d	ƒZ G d
d„ dƒZ!G dd„ dƒZ"G dd„ dƒZ#G dd„ dƒZ$dS )é    N)ÚSpectralCoord)	ÚCompoundBoundingBoxÚModelBoundingBoxÚ_BaseIntervalÚ_BaseSelectorArgumentÚ_BoundingDomainÚ_ignored_intervalÚ	_IntervalÚ_SelectorArgumentÚ_SelectorArguments)ÚModelÚ
fix_inputs)Ú
Gaussian1DÚ
Gaussian2DÚIdentityÚPolynomial2DÚScaleÚShiftc                   @   sT   e Z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 )ÚTest_Intervalc                 C   sv   t  ¡ }t  ¡ }t||ƒ}t|tƒs(t‚|j|ks6t‚|j|ksDt‚|||fksTt‚| ¡ d|› d|› d�ksrt‚d S )NzInterval(lower=z, upper=ú))	ÚmkÚ	MagicMockr	   Ú
isinstancer   ÚAssertionErrorÚlowerÚupperÚ__repr__©Úselfr   r   Úinterval© r    úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/modeling/tests/test_bounding_box.pyÚtest_create    s    
zTest_Interval.test_createc                 C   s†   t ddƒ}| ¡ }||kst‚t|ƒt|ƒks2t‚|j|jksBt‚t|jƒt|jƒksZt‚|j|jksjt‚t|jƒt|jƒks‚t‚d S )Nç      à?g      ø?)r	   Úcopyr   Úidr   r   )r   r   r$   r    r    r!   Ú	test_copy+   s    
zTest_Interval.test_copyc              	   C   s¦  d}t  ¡ }t  ¡ }t||ƒ}| d¡ | ddg¡ | dtj dtj f¡ | dtj dtj g¡ | d¡ | ddgf¡ | dg¡ | ddgg¡ | dtj dtj ff¡ | dtj dtj gf¡ | dtj dtj fg¡ | dtj dtj gg¡ | t  ¡ t  ¡ f¡ | t  ¡ t  ¡ g¡ | t ddg¡t dd	g¡f¡ | t ddd
g¡t dd	dg¡f¡ tj	t
|d�� | d¡ W 5 Q R X tj	t
|d�� | dddg¡ W 5 Q R X tj	t
|d��  | dddgdddgg¡ W 5 Q R X tj	t
|d�� | d¡ W 5 Q R X tj	t
|d��( | dtj dtj dtj f¡ W 5 Q R X tj	t
|d��( | dtj dtj dtj g¡ W 5 Q R X tj	t
|d��D | dtj dtj dtj gdtj dtj dtj gg¡ W 5 Q R X tj	t
|d�� | dtj ¡ W 5 Q R X tj	t
|d��4 | t ddg¡t dd	g¡t ddg¡f¡ W 5 Q R X tj	t
|d��" | t ddg¡dd	gf¡ W 5 Q R X d S )Nú5An interval must be some sort of sequence of length 2©é   é   r)   r*   ©r(   ç      Àç      Àç      @ç      @ç      Àç      @©Úmatch©r)   r*   é   r5   é   é   é   )r   r   r	   Z_validate_shapeÚuÚmÚnpÚarrayÚpytestÚraisesÚ
ValueError)r   ÚMESSAGEr   r   r   r    r    r!   Útest__validate_shape:   s\    


"ÿ$,,6ÿ&ÿz"Test_Interval.test__validate_shapec              	   C   sø   t  dd¡dkst‚t  dtj dtj ¡dtj dtj fksDt‚t  t ddg¡t ddg¡¡}|jt ddg¡k ¡ s€t‚|j	t ddg¡k ¡ sœt‚t
jtdd	�� t  dd¡ W 5 Q R X t
jtd
d	�� t  dtj dtj ¡ W 5 Q R X d S )Nr)   r*   r(   r,   r-   r.   r/   zEInvalid interval: upper bound 1 is strictly less than lower bound 2\.r2   zOInvalid interval: upper bound 1\.0 m is strictly less than lower bound 2\.0 m\.)r	   Z_validate_boundsr   r9   r:   r;   r<   r   Úallr   r=   ÚwarnsÚRuntimeWarning©r   r   r    r    r!   Útest__validate_boundsx   s$    0 ÿþþz#Test_Interval.test__validate_boundsc              	   C   sÊ  t  d¡dkst‚t  ddg¡dks(t‚t  dtj dtj f¡dtj dtj fksZt‚t  dtj dtj g¡dtj dtj fksŒt‚t  d¡dksžt‚t  ddgf¡dks¶t‚t  dg¡dksÊt‚t  ddgg¡dksât‚t  dtj dtj ff¡dtj dtj fk�st‚t  dtj dtj gf¡dtj dtj fk�sNt‚t  dtj dtj fg¡dtj dtj fk�s„t‚t  dtj dtj gg¡dtj dtj fk�sºt‚t  t ddg¡t ddg¡f¡}|jt ddg¡k ¡ �sút‚|j	t ddg¡k ¡ �st‚t  t ddd	g¡t ddd
g¡f¡}|jt ddd	g¡k ¡ �s^t‚|j	t ddd
g¡k ¡ �s~t‚d}t
jt|d�� t  d¡ W 5 Q R X t
 t¡� t  d¡ W 5 Q R X d S )Nr(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r'   r2   r4   )r*   r)   )r	   Úvalidater   r9   r:   r;   r<   r   rB   r   r=   r>   r?   rC   rD   )r   r   r@   r    r    r!   Útest_validate‘   s2    226666"ÿ  zTest_Interval.test_validatec                 C   sH   t  d¡}| t ddd¡¡dddddddddddddgk ¡ sDt‚d S )N©r   r)   éÿÿÿÿr*   é   TF)r	   rG   Úoutsider;   ÚlinspacerB   r   rE   r    r    r!   Útest_outside³   s$    
          ýÿÿzTest_Interval.test_outsidec                 C   s.   t  d¡}| d¡t ddd¡k ¡ s*t‚d S )NrI   ç      Ð?r   r)   r7   )r	   rG   Údomainr;   rM   rB   r   rE   r    r    r!   Útest_domainÁ   s    
zTest_Interval.test_domainc                 C   s    t jtj kst‚t jtjks"t‚dddddd dd  fD ]^}|t d k rPt‚|t d ks`t‚|t d krpt‚|t d k s€t‚t  t |g¡¡ ¡ r<t‚q<d S )Nr   rJ   iœÿÿÿg…ëQ¸	@é
   éd   r)   )	r   r   r;   Úinfr   r   rL   r<   rB   )r   Únumr    r    r!   Útest__ignored_intervalÅ   s    z$Test_Interval.test__ignored_intervalc                 C   sF   t dtjƒ}t dtjƒ}t ||f¡}|j|ks4t‚|j|ksBt‚dS )z Regression test for issue #12439r)   rR   N)r   r9   Zumr	   rG   r   r   r   r   r    r    r!   Ú test_validate_with_SpectralCoordÒ   s
    z.Test_Interval.test_validate_with_SpectralCoordN)Ú__name__Ú
__module__Ú__qualname__r"   r&   rA   rF   rH   rN   rQ   rV   rW   r    r    r    r!   r      s   >"r   c                   @   sÄ   e Z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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 )0ÚTest_BoundingDomainc                 C   s   G dd„ dt ƒ}|| _d S )Nc                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )z8Test_BoundingDomain.setup_method.<locals>.BoundingDomainc                    s   t ƒ j||d� d S )N)Úfixed_inputs)Úsuperr   )r   Úmodelr   ©Ú	__class__r    r!   r   à   s    zCTest_BoundingDomain.setup_method.<locals>.BoundingDomain.fix_inputsc                    s   t ƒ  ||¡ d S ©N)r]   Úprepare_inputs)r   Úinput_shapeÚinputsr_   r    r!   rb   ã   s    zGTest_BoundingDomain.setup_method.<locals>.BoundingDomain.prepare_inputs)rX   rY   rZ   r   rb   Ú__classcell__r    r    r_   r!   ÚBoundingDomainß   s   rf   )r   rf   )r   rf   r    r    r!   Úsetup_methodÞ   s    z Test_BoundingDomain.setup_methodc              	   C   sÖ   t  ¡ }|  |¡}|j|ks t‚|jg ks.t‚|jdks<t‚| j|dd�}|j|ksXt‚|jg ksft‚|jdkstt‚|  tƒ dg¡}|jdgks”t‚|jdks¢t‚d}tj	t
|d�� | j|t  ¡ d� W 5 Q R X d S )NÚCÚF©ÚorderÚxr   ú.order must be either 'C' .* or 'F' .*, got: .*r2   )r   r   rf   Ú_modelr   Ú_ignoredÚ_orderr   r=   r>   r?   ©r   r^   Úbounding_boxr@   r    r    r!   r"   è   s    
zTest_BoundingDomain.test_createc                 C   s2   t  ¡ }|  |¡}|j|ks t‚|j|ks.t‚d S ra   )r   r   rf   rn   r   r^   ©r   r^   rr   r    r    r!   Ú
test_modelý   s    
zTest_BoundingDomain.test_modelc                 C   st   | j t ¡ dd�}|jdks t‚|jdks.t‚| j t ¡ dd�}|jdksNt‚|jdks\t‚d|_|jdkspt‚d S )Nrh   rj   ri   Útest)rf   r   r   rp   r   rk   ©r   rr   r    r    r!   Ú
test_order  s    zTest_BoundingDomain.test_orderc                 C   sJ   dg}t  ¡ }d|_dg|_| j||d�}|j|ks8t‚|j|ksFt‚d S )Nr   r)   rl   ©Úignored)r   r   Ún_inputsrd   rf   ro   r   ry   )r   ry   r^   rr   r    r    r!   Útest_ignored  s    z Test_BoundingDomain.test_ignoredc              	   C   sÈ   |   t ¡ ¡}|jdkst‚| ¡ dks,t‚| d¡dks>t‚| d¡dksPt‚d|_|jdksdt‚| ¡ dkstt‚| d¡dks†t‚| d¡dks˜t‚d}tjt|d�� | t ¡ ¡ W 5 Q R X d S )Nrh   ri   rm   r2   )	rf   r   r   rp   r   Z
_get_orderr=   r>   r?   ©r   rr   r@   r    r    r!   Útest__get_order  s    z#Test_BoundingDomain.test__get_orderc              	   C   s¬  |   tƒ ¡}| d¡dkst‚| d¡dks0t‚d}tjt|d�� | d¡ W 5 Q R X | d¡dksjt‚| d¡dks|t‚| t d¡¡dks”t‚| t d¡¡dks¬t‚| t 	d¡¡dksÄt‚| t 	d¡¡dksÜt‚d}tjt
|d�� | d	¡ W 5 Q R X tjt
|d�� | t d	¡¡ W 5 Q R X tjt
|d�� | t 	d	¡¡ W 5 Q R X tjt
|d�� | d
¡ W 5 Q R X d}tjt|d�� | t ¡ ¡ W 5 Q R X d S )Nrl   r   Úyr)   z 'z' is not one of the inputs: .*r2   Úzz,Integer key: .* must be non-negative and < 2r*   rJ   ú'Key value: .* must be string or integer)rf   r   Z
_get_indexr   r=   r>   r?   r;   Úint32Úint64Ú
IndexErrorr   r   r|   r    r    r!   Útest__get_index.  s0    z#Test_BoundingDomain.test__get_indexc                 C   st   t  ¡ }d|_dg|_|  |¡}t  ¡ }t  ¡ }t  ¡ |_||jj_| |¡|ksVt‚|jjj	t  
|¡gkspt‚d S )Nr)   rl   )r   r   rz   rd   rf   Ú__getitem__Úreturn_valueZ	_get_namer   Úcall_args_listÚcall)r   r^   rr   ÚindexÚnamer    r    r!   Útest__get_nameR  s    


z"Test_BoundingDomain.test__get_namec                 C   sÊ   t  ¡ }ttddƒƒ}d|_dd„ tdƒD ƒ|_| j||d�}|j}t|tƒsRt	‚t
|ƒD ],\}}||jkspt	‚|j|d  |ksZt	‚qZt
|jƒD ]2\}}||kr¸||d  |ksÄt	‚q’|dk s’t	‚q’d S )Nr6   é   c                 S   s   g | ]}t  ¡ ‘qS r    ©r   r   ©Ú.0Ú_r    r    r!   Ú
<listcomp>c  s     z;Test_BoundingDomain.test_ignored_inputs.<locals>.<listcomp>rx   )r   r   ÚlistÚrangerz   rd   rf   Úignored_inputsr   r   Ú	enumerate)r   r^   ry   rr   rd   r‰   Ú_inputr    r    r!   Útest_ignored_inputs_  s    z'Test_BoundingDomain.test_ignored_inputsc              	   C   sN  |   tƒ ¡}| d ¡g kst‚| ddg¡ddgks8t‚| ddg¡ddgksRt‚| t d¡t d¡g¡ddgksxt‚tjt	dd�� | t
 ¡ g¡ W 5 Q R X tjt	dd�� | dg¡ W 5 Q R X d	}tjt|d�� | d
g¡ W 5 Q R X tjt|d�� | t d
¡g¡ W 5 Q R X tjt|d�� | t d
¡g¡ W 5 Q R X d S )Nrl   r~   r   r)   r€   r2   ú!'.*' is not one of the inputs: .*r   z+Integer key: 3 must be non-negative and < 2r5   )rf   r   Z_validate_ignoredr   r;   r�   r‚   r=   r>   r?   r   r   rƒ   r|   r    r    r!   Útest__validate_ignoredq  s&    & ÿz*Test_BoundingDomain.test__validate_ignoredc              	   C   sb   |   t ¡ ¡}tdd„ tdƒD ƒƒ}dd„ tdƒD ƒ}d}tjt|d�� |||Ž W 5 Q R X d S )Nc                 s   s   | ]}t  ¡ V  qd S ra   r�   rŽ   r    r    r!   Ú	<genexpr>�  s     z4Test_BoundingDomain.test___call__.<locals>.<genexpr>r5   c                 S   s   i | ]}d |› �t  ¡ “qS )ru   r�   ©r�   Úidxr    r    r!   Ú
<dictcomp>Ž  s      z5Test_BoundingDomain.test___call__.<locals>.<dictcomp>zOThis bounding box is fixed by the model and does not have adjustable parametersr2   )rf   r   r   Útupler“   r=   r>   ÚRuntimeError)r   rr   ÚargsÚkwargsr@   r    r    r!   Útest___call__Š  s    ÿz!Test_BoundingDomain.test___call__c              	   C   sH   |   t ¡ ¡}t ¡ }t ¡ }tjtdd�� | ||¡ W 5 Q R X d S )Nz+This should be implemented by a child classr2   )rf   r   r   r=   r>   ÚNotImplementedErrorr   )r   rr   r^   r\   r    r    r!   Útest_fix_inputs—  s     ÿz#Test_BoundingDomain.test_fix_inputsc              	   C   s@   |   t ¡ ¡}tjtdd�� | t ¡ t ¡ ¡ W 5 Q R X d S )Nz0This has not been implemented for BoundingDomainr2   )rf   r   r   r=   r>   r£   rb   rv   r    r    r!   Útest__prepare_inputs¡  s    þz(Test_BoundingDomain.test__prepare_inputsc                 C   s"  |   t ¡ ¡}d}| |d¡}|dk ¡ s.t‚|j|ks<t‚| |tj¡}t 	|¡ ¡ s\t‚|j|ksjt‚| |d¡}|dk ¡ s†t‚|j|ks”t‚d}| |d¡}|dk ¡ s´t‚|j|ksÂt‚| |tj¡}t 	|¡ ¡ sât‚|j|ksðt‚| |d¡}|dk ¡ �st‚|j|k�st‚d S )N©rK   r   é   ©rK   é   )
rf   r   r   Ú_base_outputrB   r   Úshaper;   ÚnanÚisnan)r   rr   rc   Úoutputr    r    r!   Útest__base_ouputª  s*    z$Test_BoundingDomain.test__base_ouputc                 C   s¶   t  ¡ }|  |¡}d|_d}| |d¡\}}t |¡dk ¡ sBt‚t |¡j	dksVt‚|d ksbt‚d|_d}| |d¡\}}t |¡dk ¡ s’t‚t |¡j	dks¦t‚|d ks²t‚d S )Nr)   r¦   r   )r)   rK   r8   r¨   )r8   rK   r©   )
r   r   rf   Ú	n_outputsÚ_all_out_outputr;   r<   rB   r   r«   )r   r^   rr   rc   r®   Zoutput_unitr    r    r!   Útest__all_out_outputÅ  s    
z(Test_BoundingDomain.test__all_out_outputc                 C   s$  |   t ¡ ¡}t ¡ }t ¡ }t ¡ }tjjtddt d¡d��L}t dddg¡| 	dddg|||¡k 
¡ spt‚|jt ||¡gksˆt‚W 5 Q R X tjjtddt ddddd	d
g¡d��b}t dddddd
g¡| 	dddgt dddgg¡||¡k 
¡ süt‚|jt ||¡gk�st‚W 5 Q R X d S )Nrª   Tr   ©Úautospecr†   r)   r*   r5   r6   r7   r8   r©   rŒ   é	   )rf   r   r   ÚpatchÚobjectr   r;   Ú
asanyarrayr<   Ú_modify_outputrB   r   r‡   rˆ   )r   rr   Úvalid_indexrc   Ú
fill_valueZmkBaser    r    r!   Útest__modify_outputÙ  sL    ü   ÿÿÿ"ü   ÿÿÿz'Test_BoundingDomain.test__modify_outputc              	      s®   |   t ¡ ¡‰ t ¡ ‰t ¡ ‰t ¡ ‰dd„ tdƒD ƒ‰dd„ tdƒD ƒ}tjjtdd|d��F}|ˆ  ˆˆˆˆ¡ksxt‚|j	‡ ‡‡‡‡fdd„tdƒD ƒks t‚W 5 Q R X d S )	Nc                 S   s   g | ]}t  ¡ ‘qS r    r�   rŽ   r    r    r!   r‘     s     z=Test_BoundingDomain.test__prepare_outputs.<locals>.<listcomp>r5   c                 S   s   g | ]}t  ¡ ‘qS r    r�   rŽ   r    r    r!   r‘     s     r¹   T©r´   Zside_effectc              	      s"   g | ]}t  ˆ ˆ| ˆˆˆ¡‘qS r    )r   rˆ   r›   ©rr   r»   rc   rº   Úvalid_outputsr    r!   r‘     s   ùû)
rf   r   r   r“   r¶   r·   r   Ú_prepare_outputsr   r‡   )r   ÚeffectsZmkModifyr    r¾   r!   Útest__prepare_outputsý  s,       ÿ   ÿ
øz)Test_BoundingDomain.test__prepare_outputsc              	   C   sÚ   t  ¡ }|  |¡}t  ¡ }t  ¡ }t  ¡ }t  ¡ }t jjtddd��Œ}d|_|j| ||||¡ksft	‚|j
t  ||g|||¡gks†t	‚| ¡  d|_|j| ||||¡ks®t	‚|j
t  |||||¡gksÌt	‚W 5 Q R X d S )NrÀ   T©r´   r)   r*   )r   r   rf   r¶   r·   r   r°   r†   Úprepare_outputsr   r‡   rˆ   Ú
reset_mock)r   r^   rr   r¿   rº   rc   r»   Ú	mkPreparer    r    r!   Útest_prepare_outputs  sZ    
  ÿ   ÿ
    ÿÿ
   ÿ
    ÿÿz(Test_BoundingDomain.test_prepare_outputsc                 C   sZ   |   t ¡ ¡}| t ¡ d¡d ks&t‚| dd¡d ks:t‚| dtj d¡tjksVt‚d S )NFr©   Té   )rf   r   r   Ú_get_valid_outputs_unitr   r9   r:   rv   r    r    r!   Útest__get_valid_outputs_unit9  s    z0Test_BoundingDomain.test__get_valid_outputs_unitc           
   
   C   sò   |   t ¡ ¡}t ¡ }t ¡ }t ¡ }t ¡ }t ¡ }t ¡ }tjjtddd��˜}tjjtddd��z}	| ||||||¡|	j|jfksŠt‚|	j	t 
||j|||¡gksªt‚|j	t 
|j|¡gksÄt‚|j	t 
|¡gksÚt‚W 5 Q R X W 5 Q R X d S )NrÉ   TrÃ   rÄ   )rf   r   r   r¶   r·   r   Ú_evaluate_modelr†   r   r‡   rˆ   )
r   rr   ÚevaluateÚvalid_inputsrc   rº   r»   Ú
with_unitsÚmkGetrÆ   r    r    r!   Útest__evaluate_modelE  sT      ÿ  ÿú
ùûÿ
	ÿ
z(Test_BoundingDomain.test__evaluate_modelc                 C   sœ  |   t ¡ ¡}t ¡ }t ¡ }t ¡ }t ¡ }t ¡ }t ¡ }t ¡ }||df||dfg}	tjj| j dd|	d��� }
tjjtddd��� }tjjtddd��â}| |||||¡|jksºt‚|j	t 
|||¡gksÔt‚|j	g ksât‚|
j	t 
|||¡gksüt‚| ¡  |
 ¡  | |||||¡|jk�s*t‚|j	g k�s:t‚|j	t 
|||||||¡gk�s^t‚|
j	t 
|||¡gk�szt‚W 5 Q R X W 5 Q R X W 5 Q R X d S )NTFrb   r½   r±   rÃ   rË   )rf   r   r   r¶   r·   r   Ú	_evaluater†   r   r‡   rˆ   rÅ   )r   rr   rÌ   rd   rc   r»   rÎ   rÍ   rº   rÁ   rÆ   ZmkAllÚ
mkEvaluater    r    r!   Útest__evaluatek  s”    þ   ÿ  ÿ  ÿ    ÿýÿÿ
ÿ
    ÿýÿùÿÿz"Test_BoundingDomain.test__evaluatec                 C   sB   |   t ¡ ¡}d| dd ¡ks"t‚dtj | dtj¡ks>t‚d S )Né   )rf   r   r   Ú_set_outputs_unitr   r9   r:   rv   r    r    r!   Útest__set_outputs_unit­  s    z*Test_BoundingDomain.test__set_outputs_unitc                 C   sF  |   tƒ ¡}t ¡ }t ¡ }t ¡ }t ¡ }t ¡ }||f}tjjtdd|d��ì}tjjtddd��Î}	tjjtddd��°}
tjjtdtjd���}t	|	j
ƒ| |||¡ks¬t‚|	jt ||¡gksÄt‚|jt ||||
j
||j
¡gksèt‚|
jt |j|¡gk�st‚|jt ¡ gk�st‚W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )	NrÑ   Tr³   rÕ   rÃ   rc   Zbbox_with_units)Znew_callable)rf   r   r   r   r¶   r·   r   r   ZPropertyMockrž   r†   rÌ   r   r‡   rˆ   rn   )r   rr   rÌ   rd   r»   ÚoutputsZvalid_outputs_unitÚvaluerÒ   ZmkSetZmkShapeZmkUnitsr    r    r!   Útest_evaluate¶  sb       ÿ  ÿ  ÿ  ÿ

ÿ
úÿ

ÿz!Test_BoundingDomain.test_evaluateN)rX   rY   rZ   rg   r"   rt   rw   r{   r}   r„   r‹   r—   r™   r¢   r¤   r¥   r¯   r²   r¼   rÂ   rÇ   rÊ   rÐ   rÓ   rÖ   rÙ   r    r    r    r!   r[   Ý   s.   

$
	$#&B	r[   c                   @   sÔ   e Z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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/d0„ Zd1d2„ Zd3S )4ÚTestModelBoundingBoxc                 C   s  d}t  ¡ }t||ƒ}t|tƒs$t‚|ji ks2t‚|j|ks@t‚|jg ksNt‚|j	dks\t‚i }t  ¡ }t||dd�}t|tƒs„t‚|ji ks’t‚|j|ks t‚|jg ks®t‚|j	dks¼t‚d}t  ¡ }d|_
dg|_t||ƒ}t|tƒsît‚|jddik�st‚|j|k�st‚d}t  ¡ }d	|_
dd
g|_t||dgd�}t|tƒ�sNt‚|jddik�sbt‚|j|k�srt‚|jdgk�s„t‚d}t  ¡ }d|_
dd
dg|_t||d	gdd�}t|tƒ�sÄt‚|jdddœk�sÚt‚|j|k�sêt‚|jd	gk�süt‚|j	dk�st‚d S )Nr    rh   ri   rj   r(   r)   rl   r   r*   r~   rx   )r(   ©r5   r6   r5   r   )ry   rk   rÛ   rI   )r   r   r   r   r   r   Ú
_intervalsrn   ro   rp   rz   rd   ©r   Ú	intervalsr^   rr   r    r    r!   r"   á  sV    


z TestModelBoundingBox.test_createc                 C   s”  t  tƒ d¡}| ¡ }||ks"t‚t|ƒt|ƒks6t‚|j|jksFt‚t|jƒt|jƒks^t‚|j|jksnt‚t|jƒt|jƒks†t‚|j|jks–t‚t|jƒt|jƒks®t‚|j	 
¡ D ]¢\}}||j	| ksÒt‚t|ƒt|j	| ƒksìt‚|j|j	| jk�st‚t|jƒt|j	| jƒk�s$t‚|j|j	| jk�s<t‚t|jƒt|j	| jƒks¸t‚q¸t|j	ƒt|j	ƒk�svt‚|j	 ¡ |j	 ¡ k�s�t‚d S )N))r0   r1   )gffffffö¿gffffffö?)r   rG   r   r$   r   r%   ry   rn   rp   rÞ   Úitemsr   r   ÚlenÚkeys)r   rr   r$   r‰   r   r    r    r!   r&     s,     ÿ  zTestModelBoundingBox.test_copyc                 C   sN   dt ddƒi}t ¡ }d|_dg|_t||ƒ}|j|ks<t‚|j|ksJt‚d S )Nr   r)   r*   rl   )	r	   r   r   rz   rd   r   rÜ   r   rÞ   rÝ   r    r    r!   Útest_intervals=  s    
z#TestModelBoundingBox.test_intervalsc                 C   sÎ   dd„ t dƒD ƒ}t ¡ }d|_dd„ t dƒD ƒ|_t||ƒ}|j}t|tƒsRt	‚| 
¡ D ].\}}||jkspt	‚||j |¡ |ksZt	‚qZt|jƒD ]4\}}||ks¨t	‚||ks´t	‚|| || ks”t	‚q”d S )Nc                 S   s   i | ]}|t ||d  ƒ“qS ©r)   )r	   r›   r    r    r!   r�   H  s      z=TestModelBoundingBox.test_named_intervals.<locals>.<dictcomp>r6   c                 S   s   g | ]}t  ¡ ‘qS r    r�   rŽ   r    r    r!   r‘   K  s     z=TestModelBoundingBox.test_named_intervals.<locals>.<listcomp>)r“   r   r   rz   rd   r   Únamed_intervalsr   Údictr   rß   r‰   r•   )r   rÞ   r^   rr   ÚnamedrŠ   r   r‰   r    r    r!   Útest_named_intervalsG  s    
z)TestModelBoundingBox.test_named_intervalsc                 C   sr   t ddƒt ddƒdœ}tƒ }t ||¡}| ¡ dks8t‚dt ddƒi}tƒ }tj||dgd	�}| ¡ d
ksnt‚d S )NrJ   r)   éüÿÿÿr6   rI   z­ModelBoundingBox(
    intervals={
        x: Interval(lower=-1, upper=1)
        y: Interval(lower=-4, upper=4)
    }
    model=Gaussian2D(inputs=('x', 'y'))
    order='C'
)r   r~   rx   z˜ModelBoundingBox(
    intervals={
        x: Interval(lower=-1, upper=1)
    }
    ignored=['y']
    model=Gaussian2D(inputs=('x', 'y'))
    order='C'
))r	   r   r   rG   r   r   rÝ   r    r    r!   Útest___repr__X  s    
ÿ
ÿz"TestModelBoundingBox.test___repr__c                 C   s¾   dt ddƒi}tƒ }t ||¡}t|ƒd  kr>t|jƒksDn t‚t ddƒt ddƒdœ}tƒ }t ||¡}t|ƒd  krŠt|jƒks�n t‚i |_t|ƒd  kr´t|jƒksºn t‚d S ©Nr   rJ   r)   rè   r6   rI   r*   )r	   r   r   rG   rà   rÜ   r   r   rÝ   r    r    r!   Útest___len__w  s    $$z!TestModelBoundingBox.test___len__c                 C   sÒ   t ddƒt ddƒdœ}tƒ }t ||¡}d|ks4t‚d|ks@t‚d|ksLt‚d	|ksXt‚d|ksdt‚d
|kspt‚t ¡ |ks€t‚|d= d|ks’t‚d|ksžt‚d|ksªt‚d	|ks¶t‚d|ksÂt‚d
|ksÎt‚d S )NrJ   r)   rè   r6   rI   rl   r~   r   r   r*   )r	   r   r   rG   r   r   r   rÝ   r    r    r!   Útest___contains__…  s"    z&TestModelBoundingBox.test___contains__c              	   C   s°  t ddƒt ddƒdœ}tƒ }t ||¡}|d dks8t‚|d d	ksHt‚tjtd
d�� |d  W 5 Q R X |d dkszt‚|d d	ksŠt‚|t 	d¡ dks t‚|t 	d¡ d	ks¶t‚|t 
d¡ dksÌt‚|t 
d¡ d	ksât‚d}tjt|d�� |d  W 5 Q R X tjt|d�� |t 	d¡  W 5 Q R X tjt|d�� |t 
d¡  W 5 Q R X |d= |d tk�spt‚|d d	k�s‚t‚|d= |d tk�sšt‚|d tk�s¬t‚d S )NrJ   r)   rè   r6   rI   rl   ©rJ   r)   r~   ©rè   r6   r˜   r2   r   r   z+Integer key: 2 must be non-negative and < 2r*   )r	   r   r   rG   r   r=   r>   r?   r;   r�   r‚   rƒ   r   ©r   rÞ   r^   rr   r@   r    r    r!   Útest___getitem__¤  s4    z%TestModelBoundingBox.test___getitem__c                 C   s  t ƒ }tj|i dgd�}| ¡ tj tjfks2t‚| d¡tj tjfksNt‚| d¡tj tjfksjt‚dtddƒi}t ƒ }t ||¡}| ¡ dksšt‚| t 	¡ ¡dks°t‚tddƒtd	d
ƒdœ}t
ƒ }t ||¡}| ¡ dksèt‚| d¡dksút‚| d¡dk�st‚d S )Nrl   rx   rh   ri   r   rJ   r)   rí   rè   r6   rI   ©rî   rí   ©rí   rî   )r   r   rG   rr   r;   rT   r   r	   r   r   r   ©r   r^   rr   rÞ   r    r    r!   Útest_bounding_boxË  s     z&TestModelBoundingBox.test_bounding_boxc                 C   sp  dt ddƒi}tƒ }t | ¡ | ¡ ¡}||ks4t‚|t | ¡ | ¡ ¡ksPt‚|dks\t‚|t ¡ krlt‚|dkrxt‚|t |dt ddƒi¡kr–t‚t ddƒt dd	ƒd
œ}tƒ }t ||¡}tj||dd�}|j	dksÜt‚|dksèt‚|dkrôt‚|j	dk�st‚|dk�rt‚|dk�s t‚||k�s.t‚tƒ }t ¡ g|_
t ¡ g|_
|j
|j
k�s^t‚||k�rlt‚d S )Nr   rJ   r)   rí   ©éþÿÿÿr*   rö   r*   rè   r6   rI   ri   rj   rh   rñ   rò   )r	   r   r   rG   r$   r   r   r   r   rp   ro   )r   rÞ   r^   rr   Úbounding_box_1Úbounding_box_2r    r    r!   Útest___eq__â  s4    ÿz TestModelBoundingBox.test___eq__c                 C   sP  t ƒ }tj|i ddgd�}|jddgks,t‚d|jks:t‚d|jksHt‚tddƒ|d< d|jksdt‚d|jksrt‚t|d tƒs„t‚|d dks”t‚d|jks¢t‚d|jks°t‚tddƒ|d	< d|jksÌt‚d|jksÚt‚t|d	 tƒsìt‚|d	 d
ksüt‚|d= |d	= d|jk�st‚d|jk�s(t‚tddƒ|d< d|jk�sFt‚d|jk�sVt‚t|d tƒ�sjt‚|d dk�s|t‚d|jk�sŒt‚d|jk�sœt‚tddƒ|d< d|jk�sºt‚d|jk�sÊt‚t|d tƒ�sÞt‚|d d
k�sðt‚|d= |d= d|jk�st‚d|jk�st‚d|d< d|jk�s4t‚d|jk�sDt‚t|d tƒ�sXt‚|d dk�sjt‚d|jk�szt‚d|jk�sŠt‚d
|d	< d|jk�s¢t‚d|jk�s²t‚t|d	 tƒ�sÆt‚|d	 d
k�sØt‚|d= |d	= d|jk�sôt‚d|jk�st‚d|d< d|jk�st‚d|jk�s,t‚t|d tƒ�s@t‚|d dk�sRt‚d|jk�sbt‚d|jk�srt‚d
|d< d|jk�sŠt‚d|jk�sšt‚t|d tƒ�s®t‚|d d
k�sÀt‚t	ddgddgddgdd�}ti |ƒ}d|k�sôt‚tt
 ddg¡t
 ddg¡ƒ|d< d|k�s$t‚t|d tƒ�s8t‚|d jt
 ddg¡k ¡ �sZt‚|d jt
 ddg¡k ¡ �s|t‚i |_d|k�s�t‚tt
 ddg¡t
 ddg¡ƒ|d< d|k�sÀt‚t|d tƒ�sÔt‚|d jt
 ddg¡k ¡ �söt‚|d jt
 ddg¡k ¡ �st‚i |_d|k�s,t‚t
 ddg¡t
 ddg¡f|d< d|k�sZt‚t|d tƒ�snt‚|d jt
 ddg¡k ¡ �s�t‚|d jt
 ddg¡k ¡ �s²t‚i |_d|k�sÆt‚t
 ddg¡t
 ddg¡f|d< d|k�sôt‚t|d tƒ�st‚|d jt
 ddg¡k ¡ �s*t‚|d jt
 ddg¡k ¡ �sLt‚d S )Nr   r)   rx   rJ   rl   rí   rè   r6   r~   rî   çš™™™™™¹?çš™™™™™É?r7   r©   r*   ©Zn_modelsrö   )r   r   rG   ro   r   rÞ   ry   r	   r   r   r;   r<   r   rB   r   rÜ   rs   r    r    r!   Útest__setitem__  s¼    
"""""" "" "z$TestModelBoundingBox.test__setitem__c              	   C   sN  t ddƒt ddƒdœ}tƒ }t ||¡}d|jks6t‚d|jksDt‚d|ksPt‚d|ks\t‚|d= d|jkspt‚d|jks~t‚d|ksŠt‚d|ks–t‚tjt	dd	�� |d= W 5 Q R X d|jksÄt‚d|jksÒt‚d|ksÞt‚d
|ksêt‚|d
= d|jksþt‚d|jk�st‚d|k�st‚d
|k�s*t‚tjt	dd	�� |d
= W 5 Q R X d S )NrJ   r)   rè   r6   rI   r   rl   zCannot delete ignored input: 0!r2   r~   zCannot delete ignored input: y!)
r	   r   r   rG   rÞ   r   ry   r=   r>   rŸ   rÝ   r    r    r!   Útest___delitem__€  s2    z%TestModelBoundingBox.test___delitem__c                 C   sf  t ƒ }ti |ƒ}tddƒtddƒdœ}d|ks2t‚d|ks>t‚| |¡ d|ksTt‚|d dksdt‚d|kspt‚|d d	ks€t‚t|jƒd
ks’t‚i |_tddƒtddƒdœ}d|ksºt‚d|ksÆt‚| |¡ d|ksÜt‚|d dksìt‚d|ksøt‚|d d	k�s
t‚t|jƒd
k�st‚tddgddgddgd
d�}ti |ƒ}dtt	 
ddg¡t	 
dd
g¡ƒi}d|k�stt‚| |¡ d|k�sŒt‚|d jt	 
ddg¡k ¡ �s®t‚|d jt	 
dd
g¡k ¡ �sÐt‚i |_dtt	 
ddg¡t	 
dd
g¡ƒi}d|k�st‚| |¡ d|k�st‚|d jt	 
ddg¡k ¡ �s@t‚|d jt	 
dd
g¡k ¡ �sbt‚d S )NrJ   r)   rè   r6   ©rl   r~   rl   r~   rí   rî   r*   rI   r   rú   rû   r7   r©   rü   rö   )r   r   r	   r   Z_validate_dictrà   rÞ   rÜ   r   r;   r<   r   rB   r   ró   r    r    r!   Útest__validate_dict£  sH    



"
"""
"z(TestModelBoundingBox.test__validate_dictc              	   C   sü  t ƒ }ti |ƒ}d|kst‚d|ks(t‚| d¡ d|ks>t‚|d dksNt‚d|ksZt‚|d dksjt‚t|jƒdks|t‚i |_d|ksŽt‚d|ksšt‚|jddd� d|ks´t‚|d dksÄt‚d|ksÐt‚|d dksàt‚t|jƒdksòt‚i |_d|k�st‚d|k�st‚|jdd	d� d|k�s0t‚|d dk�sBt‚d|k�sPt‚|d dk�sbt‚t|jƒdk�svt‚i |_d|k�sŠt‚d|k�s˜t‚d
}tjt	|d�� |jdt
 ¡ d� W 5 Q R X d|k�sÖt‚d|k�sät‚t|jƒdk�søt‚d S )Nrl   r~   rñ   rí   rî   r*   rh   rj   ri   rm   r2   r   )r   r   r   Z_validate_sequencerà   rÞ   rÜ   r=   r>   r?   r   r   rq   r    r    r!   Útest__validate_sequenceÑ  sJ    

z,TestModelBoundingBox.test__validate_sequencec                 C   s¤   t ƒ }tddƒtddƒdœ}t ||¡}|jdks6t‚dtddƒi}tj||dgd	�}|jdksdt‚tj|i d
dgd	�}|jdks†t‚d
ddg|_|jdks t‚d S )NrJ   r)   rè   r6   rI   r*   r   r~   rx   rl   r   )r   r	   r   rG   Z	_n_inputsr   ro   )r   r^   rÞ   rr   r    r    r!   Útest__n_inputs  s    z#TestModelBoundingBox.test__n_inputsc              	   C   s:  t ƒ }ti |ƒ}d|kst‚d|ks(t‚| d¡ d|ks>t‚|d dksNt‚d|ksZt‚|d dksjt‚t|jƒdks|t‚i |_d|ksŽt‚d|ksšt‚|jddd� d|ks´t‚|d dksÄt‚d|ksÐt‚|d dksàt‚t|jƒdksòt‚i |_td	d
ƒtddƒdœ}d|k�st‚d
|k�s*t‚| |¡ d|k�sBt‚|d dk�sTt‚d
|k�sbt‚|d
 dk�stt‚t|jƒdk�sˆt‚i |_d
g|_dtd	d
ƒi}d|jk�s´t‚| |¡ d|jk�sÎt‚|d dk�sàt‚d}i |_g |_d|k�sþt‚d|k�st‚t	j
t| dd¡d�� | d¡ W 5 Q R X t|jƒdk�sLt‚d|k�sZt‚d|k�sht‚d
g|_td	d
ƒtddƒdœ}t	j
t| dd
¡d�� | |¡ W 5 Q R X t|jƒdk�sÆt‚g |_dtd	d
ƒi}t	j
t| d
d¡d�� | |¡ W 5 Q R X d|k�st‚d|k�s"t‚t|jƒdk�s6t‚d S )Nrl   r~   rñ   rí   rî   r*   ri   rj   rJ   r)   rè   r6   rI   r   z,Found {} intervals, but must have exactly {}r5   r2   )rî   rí   ©éýÿÿÿr5   )r   r   r   Z_validate_iterablerà   rÞ   rÜ   r	   ro   r=   r>   r?   Úformat)r   r^   rr   rÞ   r@   r    r    r!   Útest__validate_iterable  st    



z,TestModelBoundingBox.test__validate_iterablec                 C   s"  t ƒ }ti |ƒ}d|kst‚d|ks(t‚| d¡ d|ks>t‚|d dksNt‚d|ksZt‚|d dksjt‚t|jƒdks|t‚i |_d|ksŽt‚d|ksšt‚|jddd� d|ks´t‚|d dksÄt‚d|ksÐt‚|d dksàt‚t|jƒdksòt‚i |_td	d
ƒtddƒdœ}d|k�st‚d|k�s*t‚| |¡ d|k�sBt‚|d dk�sTt‚d
|k�sbt‚|d
 dk�stt‚t|jƒdk�sˆt‚dtd	d
ƒi}ti |d
gd�}d|jk�s¶t‚d
|jk�sÆt‚| |¡ d|jk�sàt‚|d dk�sòt‚d
|jk�st‚t|jƒd
k�st‚tƒ }ti |ƒ}d|k�s4t‚| d¡ d|k�sLt‚|d dk�s^t‚t|jƒd
k�srt‚tddgddgddgdd�}ti |ƒ}t	 
d	dg¡t	 
d
dg¡f}d|k�sÂt‚| |¡ d|k�sÚt‚|d jt	 
d	dg¡k ¡ �süt‚|d jt	 
d
dg¡k ¡ �st‚d S )Nrl   r~   rñ   rí   rî   r*   ri   rj   rJ   r)   rè   r6   rI   r   rx   rú   rû   r7   r©   rü   rö   )r   r   r   Ú	_validaterà   rÞ   rÜ   r	   r   r;   r<   r   rB   r   )r   r^   rr   rÞ   Úsequencer    r    r!   Útest__validateX  sj    







"z#TestModelBoundingBox.test__validatec                 C   sÆ  t ƒ }dt ¡ i}tj|df|Ž}|jj|jk ¡ s8t‚d|ksDt‚|d dksTt‚d|ks`t‚|d dkspt‚t	|j
ƒdks‚t‚tj|dfdd	i|—Ž}|jj|jk ¡ s°t‚d|ks¼t‚|d dksÌt‚d|ksØt‚|d dksèt‚t	|j
ƒdksút‚td
dƒtddƒdœ}tj||fdd	i|—Ž}|jj|jk ¡ �s@t‚d|k�sNt‚|d dk�s`t‚d|k�snt‚|d dk�s€t‚t	|j
ƒdk�s”t‚|jd	k�s¤t‚|}tj||f|Ž}|jj|jk ¡ �sÐt‚d|k�sÞt‚|d dk�sðt‚d|k�sþt‚|d dk�st‚t	|j
ƒdk�s$t‚|jd	k�s4t‚dtd
dƒi}tj||fddgi|—Ž}|jj|jk ¡ �stt‚d|k�s‚t‚|d dk�s”t‚d|k�s¢t‚|d tk�s´t‚t	|j
ƒdk�sÈt‚tjtƒ df|Ž}|jjtƒ jk ¡ �sôt‚d|k�st‚|d dk�st‚t	|j
ƒdk�s(t‚tddgddgddgdd�}t d
dg¡t ddg¡f}tj||f|Ž}d|k�s~t‚|d jt d
dg¡k ¡ �s t‚|d jt ddg¡k ¡ �sÂt‚d S )Nru   rñ   rl   rí   r~   rî   r*   rk   ri   rJ   r)   rè   r6   rI   r   ry   rú   rû   r7   r©   rü   rö   )r   r   r   r   rG   rn   Ú
parametersrB   r   rà   rÞ   r	   rk   r   r   r;   r<   r   r   )r   r^   r¡   rr   rÞ   Úbboxr  r    r    r!   rH   �  s†     ÿÿÿ ÿÿÿ"z"TestModelBoundingBox.test_validatec                 C   s0  t  tƒ d¡}| tƒ dt ¡ i¡}||kr0t‚|jj	tƒ j	k 
¡ sHt‚d|ksTt‚|d dksdt‚d|kspt‚t|jƒdks‚t‚|jg ks�t‚|jtƒ dt ¡ idd�}||kr¶t‚|jj	tƒ j	k 
¡ sÎt‚d|ksÚt‚|d dksêt‚d|ksöt‚d|jk�st‚t|jƒdk�st‚|jdgk�s,t‚d S )Nrñ   r)   rl   rí   r~   T)Z_keep_ignored)r   rG   r   r   r   r   r   r   rn   r
  rB   rà   rÞ   ry   r”   )r   rr   Únew_bounding_boxr    r    r!   r¤   æ  s,     
 ÿz$TestModelBoundingBox.test_fix_inputsc                 C   s¸   dt ddƒi}tƒ }t ||¡}|jd  kr<t|jƒksBn t‚t ddƒt ddƒdœ}tƒ }t ||¡}|jd  kr†t|jƒksŒn t‚i |_|jd  kr®t|jƒks´n t‚d S rê   )	r	   r   r   rG   Ú	dimensionrà   rÜ   r   r   rÝ   r    r    r!   Útest_dimension  s    ""z#TestModelBoundingBox.test_dimensionc              	   C   s  t ddƒt ddƒdœ}tƒ }t ||¡}t | d¡¡t t ddd¡t ddd¡g¡k ¡ sbt	‚t | dd¡¡t t ddd¡t ddd¡g¡k ¡ sžt	‚t | dd	¡¡t t ddd¡t ddd¡g¡k ¡ sÚt	‚d
}t
jt|d�� | dt ¡ ¡ W 5 Q R X d S )NrJ   r)   r   r*   rI   rO   rµ   rh   ri   rm   r2   )r	   r   r   rG   r;   r<   rP   rM   rB   r   r=   r>   r?   r   r   rï   r    r    r!   rQ     s$     ÿÿ ÿÿ ÿÿz TestModelBoundingBox.test_domainc           
      C   s  t ddƒt ddƒdœ}tƒ }t ||¡}t ddd¡}t ddd¡}|j}||f}| ||¡\}}	|dd„ tdƒD ƒk 	¡ s€t
‚|	sŽt|	tƒs’t
‚t d	dd¡}t dd
d¡}|j}||f}| ||¡\}}	|dddddddddddddgk 	¡ söt
‚|	�st|	tƒ�st
‚t dd
d¡}t d	dd¡}|j}||f}| ||¡\}}	|dd„ tdƒD ƒk 	¡ �sft
‚|	�rxt|	tƒ�s|t
‚d}d}| ||¡\}}	|dgk 	¡ �s¨t
‚|	�sºt|	tƒ�s¾t
‚d}d}| ||¡\}}	|dgk 	¡ �sêt
‚|	�rüt|	tƒ�s t
‚d S )NrJ   r)   r   r*   rI   rK   c                 S   s   g | ]}d ‘qS )Fr    rŽ   r    r    r!   r‘   7  s     z6TestModelBoundingBox.test__outside.<locals>.<listcomp>rö   r5   TFc                 S   s   g | ]}d ‘qS )Tr    rŽ   r    r    r!   r‘   R  s     ©r#   r#   rã   ©r*   rJ   )r	   r   r   rG   r;   rM   r«   Z_outsider“   rB   r   r   Úbool)
r   rÞ   r^   rr   rl   r~   rc   rd   Zoutside_indexÚall_outr    r    r!   Útest__outside,  sd              ýÿÿ	 z"TestModelBoundingBox.test__outsidec           
      C   sP  t ddƒt ddƒdœ}tƒ }t ||¡}t ddd¡}t ddd¡}|j}||f}| ||¡\}}	t|ƒdksrt	‚|d dd„ t
dƒD ƒk ¡ s”t	‚|	s¢t|	tƒs¦t	‚t d	dd¡}t dd
d¡}|j}||f}| ||¡\}}	t|ƒdksðt	‚|d dddddgk ¡ �st	‚|	�s"t|	tƒ�s&t	‚t dd
d¡}t d	dd¡}|j}||f}| ||¡\}}	t|ƒdk�srt	‚|d g k ¡ �sˆt	‚|	�ršt|	tƒ�sžt	‚d}d}| ||¡\}}	t|ƒdk�sÈt	‚|d dgk ¡ �sàt	‚|	�sòt|	tƒ�söt	‚d}d}| ||¡\}}	t|ƒdk�s t	‚|d g k ¡ �s6t	‚|	�rHt|	tƒ�sLt	‚d S )NrJ   r)   r   r*   rI   rK   c                 S   s   g | ]}|‘qS r    r    r›   r    r    r!   r‘   o  s     z:TestModelBoundingBox.test__valid_index.<locals>.<listcomp>rö   r5   r6   r7   r8   r©   rŒ   r  rã   r  )r	   r   r   rG   r;   rM   r«   Z_valid_indexrà   r   r“   rB   r   r  )
r   rÞ   r^   rr   rl   r~   rc   rd   rº   r  r    r    r!   Útest__valid_indexc  sN    " z&TestModelBoundingBox.test__valid_indexc              
   C   s  t ddƒt ddƒdœ}tƒ }t ||¡}t ddd¡}t ddd¡}|j}||f}| ||¡\}}	}
t |¡t |¡k 	¡ s€t
‚t|	ƒdks�t
‚|	d dd„ tdƒD ƒk 	¡ s²t
‚|
sÀt|
tƒsÄt
‚t d	dd¡}t dd
d¡}|j}||f}| ||¡\}}	}
t |¡t |d |d |d |d |d g|d |d |d |d |d gg¡k 	¡ �s^t
‚t|	ƒdk�spt
‚|	d dddddgk 	¡ �s�t
‚|
�s¢t|
tƒ�s¦t
‚t dd
d¡}t d	dd¡}|j}||f}| ||¡\}}	}
|dk�sðt
‚t|	ƒdk�st
‚|	d g k 	¡ �st
‚|
�r*t|
tƒ�s.t
‚d}d}| ||¡\}}	}
t |¡t dgdgg¡k 	¡ �snt
‚t|	ƒdk�s€t
‚|	d dgk 	¡ �s˜t
‚|
�sªt|
tƒ�s®t
‚d}d}| ||¡\}}	}
|dk�sÖt
‚t|	ƒdk�sèt
‚|	d g k 	¡ �sþt
‚|
�rt|
tƒ�st
‚d S )NrJ   r)   r   r*   rI   rK   c                 S   s   g | ]}|‘qS r    r    r›   r    r    r!   r‘   ¥  s     z<TestModelBoundingBox.test_prepare_inputs.<locals>.<listcomp>rö   r5   r6   r7   r8   r©   rŒ   r    r  rã   r#   r  )r	   r   r   rG   r;   rM   r«   rb   r<   rB   r   rà   r“   r   r  )r   rÞ   r^   rr   rl   r~   rc   rd   Z
new_inputsrº   r  r    r    r!   Útest_prepare_inputs–  s„     ÿ
" ÿ
  þÿÿÿ	  ÿ
 ÿ
& ÿ
z(TestModelBoundingBox.test_prepare_inputsc                 C   sL   t dtdƒdgd�}|jdgks$t‚t dtdƒdgd�}|jdgksHt‚dS )zRegression test for #13028)rµ   rR   r)   rl   rx   )é   é   r~   N)r   r   r”   r   )r   Zbbox_xZbbox_yr    r    r!   Útest_bounding_box_ignoreà  s    z-TestModelBoundingBox.test_bounding_box_ignoreN)rX   rY   rZ   r"   r&   râ   rç   ré   rë   rì   rð   rô   rù   rý   rþ   r   r  r  r  r	  rH   r¤   r  rQ   r  r  r  r  r    r    r    r!   rÚ   à  s2   9#
'%y#.0FEI73JrÚ   c                   @   sL   e Z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 )ÚTest_SelectorArgumentc                 C   sX   t  ¡ }t  ¡ }t||ƒ}t|tƒs(t‚|j|ks6t‚|j|ksDt‚|||fksTt‚d S ra   )r   r   r
   r   r   r   r‰   Úignore)r   r‰   r  Úargumentr    r    r!   r"   ë  s    
z!Test_SelectorArgument.test_createc              	   C   s@  t ƒ }t |d¡dkst‚t |d¡dks.t‚t |d¡dksBt‚t |d¡dksVt‚t ¡ }t |d|¡d|fksxt‚t |d|¡d|fks’t‚t |d|¡d|fks¬t‚t |d|¡d|fksÆt‚tjtdd�� t |d	¡ W 5 Q R X tjtd
d�� t |t ¡ ¡ W 5 Q R X tjt	dd�� t |d¡ W 5 Q R X d S )Nr   ©r   Tr)   ©r)   Trl   r~   r˜   r2   r   z(Key value: .* must be string or integer.ú-Integer key: .* must be non-negative and < .*r*   )
r   r
   rG   r   r   r   r=   r>   r?   rƒ   )r   r^   r  r    r    r!   rH   õ  s,     ÿ ÿz#Test_SelectorArgument.test_validatec                 C   s  dd„ t dƒD ƒ}t dƒD ]$}t|t ¡ ƒj|Ž || kst‚qdd„ t dƒD ƒ}t dƒD ]$}t|t ¡ ƒj|Ž || ksZt‚qZdd„ t dƒD ƒ}t dƒD ]$}t|t ¡ ƒj|Ž || ksšt‚qšdd„ t dƒD ƒ}t dƒD ](}t|t ¡ ƒj|Ž t|| ƒksÚt‚qÚd S )Nc                 S   s   g | ]}|d  ‘qS )é   r    r›   r    r    r!   r‘     s     z;Test_SelectorArgument.test_get_selector.<locals>.<listcomp>r5   c                 S   s   g | ]}t  |d  g¡‘qS )r  ©r;   r<   r›   r    r    r!   r‘     s     c                 S   s   g | ]}t  |d  ¡‘qS r¦   )r;   r¸   r›   r    r    r!   r‘   %  s     c                 S   s"   g | ]}t  |d  |d g¡‘qS )rÔ   é   r   r›   r    r    r!   r‘   -  s     )r“   r
   r   r   Úget_selectorr   rž   )r   rd   r‰   r    r    r!   Útest_get_selector  s2    ÿÿÿÿÿÿÿ
þz'Test_SelectorArgument.test_get_selectorc                 C   s<   t ƒ }t|jƒD ]&}t|t ¡ ƒ |¡|j| kst‚qd S ra   )	r   r“   rz   r
   r   r   rŠ   rd   r   )r   r^   r‰   r    r    r!   Ú	test_name3  s    ÿÿzTest_SelectorArgument.test_namec                 C   sj   t ƒ }tddƒ |¡dkst‚tddƒ |¡dks6t‚tddƒ |¡dksNt‚tddƒ |¡dksft‚d S )	Nr   Fz Argument(name='x', ignore=False)TzArgument(name='x', ignore=True)r)   z Argument(name='y', ignore=False)zArgument(name='y', ignore=True))r   r
   Úpretty_reprr   ©r   r^   r    r    r!   Útest_pretty_repr;  s"    ÿÿÿÿÿÿÿÿz&Test_SelectorArgument.test_pretty_reprc              	   C   s„   t ƒ }dddœ}tdt ¡ ƒ ||¡dks.t‚tdt ¡ ƒ ||¡dksLt‚d}tjt|d��}tddƒ |ddi¡ W 5 Q R X d S )	Nr7   r©   ©r   r~   r   r)   z.* was not found in .*r2   T)	r   r
   r   r   Zget_fixed_valuer   r=   r>   rŸ   )r   r^   Úvaluesr@   Úerrr    r    r!   Útest_get_fixed_valueO  s    
z*Test_SelectorArgument.test_get_fixed_valuec              	   C   sÜ   t ƒ }t |d¡}| |d¡dks&t‚| |d¡dks:t‚| |d¡dksNt‚| |d¡dksbt‚tjtdd�� | |d	¡ W 5 Q R X tjtd
d�� | |t 	¡ ¡ W 5 Q R X tjt
dd�� | |d¡ W 5 Q R X d S )Nr   Trl   r)   Fr~   r˜   r2   r   r€   r  r*   )r   r
   rG   Úis_argumentr   r=   r>   r?   r   r   rƒ   )r   r^   r  r    r    r!   Útest_is_argument^  s$     ÿ ÿz&Test_SelectorArgument.test_is_argumentc                 C   sD   t ƒ }t|jƒD ].}t ¡ }t||ƒ |¡|j| |fkst‚qd S ra   )	r   r“   rz   r   r   r
   Únamed_tuplerd   r   )r   r^   r‰   r  r    r    r!   Útest_named_tuplev  s    þz&Test_SelectorArgument.test_named_tupleN)rX   rY   rZ   r"   rH   r#  r$  r'  r+  r-  r/  r    r    r    r!   r  ê  s   
 r  c                   @   sl   e Z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 )ÚTest_SelectorArgumentsc                 C   sŽ   t tddƒtddƒfƒ}t|t ƒs&t‚|dks2t‚|jg ks@t‚t ¡ }t tddƒtddƒf|ƒ}t|t ƒspt‚|dks|t‚|j|ksŠt‚d S )Nr   Tr)   F©r  ©r)   F)r   r
   r   r   Ú_kept_ignorer   r   )r   Ú	argumentsÚkept_ignorer    r    r!   r"   �  s    ÿ ÿz"Test_SelectorArguments.test_createc                 C   s4   t ƒ }ttddƒtddƒfƒ}| |¡dks0t‚d S )Nr   Tr)   Fz]SelectorArguments(
    Argument(name='x', ignore=True)
    Argument(name='y', ignore=False)
))r   r   r
   r%  r   ©r   r^   r4  r    r    r!   r'  ‘  s    ÿÿz'Test_SelectorArguments.test_pretty_reprc                 C   sð   t tddƒtddƒfƒjddgks&t‚t tddƒtddƒfddgƒjddddgksVt‚t tddƒtddƒfƒjdgkszt‚t tddƒtddƒfƒjdgksžt‚t tddƒtddƒfƒjg ksÀt‚t tddƒtddƒfddgƒjddgksìt‚d S )	Nr   Tr)   rK   r6   Fr  r§   )r   r
   r  r   ©r   r    r    r!   Útest_ignorež  sB    ÿþ ÿ
þÿþÿþÿýÿ ÿþz"Test_SelectorArguments.test_ignorec              	   C   s  t  tƒ d¡}t|t ƒst‚|dks(t‚|jg ks6t‚t  tƒ d¡}t|t ƒsRt‚|dks^t‚|jg kslt‚t  tƒ d¡}t|t ƒsˆt‚|dks”t‚|jg ks¢t‚t  tƒ |dddg¡}t|t ƒsÆt‚|dksÒt‚|jdddgksæt‚dd	d
g|_t  tƒ |¡}t|t ƒ�st‚|dk�st‚|jdd	d
gk�s4t‚tjt	dd�� t  tƒ d¡ W 5 Q R X tjt	dd��  t  tƒ t
 ¡ dfdf¡ W 5 Q R X tjtdd�� t  tƒ d¡ W 5 Q R X tjt	dd�� t  tƒ d¡ W 5 Q R X tjt	dd�� t  tƒ d¡ W 5 Q R X d S )Nr1  ©©r   rã   )r  r  ©)rl   T)r~   Fr  r7   rŒ   rK   r  r§   r˜   r2   )r  )r   Fr€   Tr2  r  )r  )r*   FzInput: 'x' has been repeated)r  ©r   Fz,There must be at least one selector argumentr    )r   rG   r   r   r   r5  r3  r=   r>   r?   r   r   rƒ   )r   r4  Únew_argumentsr    r    r!   rH   µ  s\     ÿ ÿ ÿ ÿ ÿz$Test_SelectorArguments.test_validatec                 C   s´   dd„ t dƒD ƒ}t tƒ d¡j|Ž t|d d… ƒks:t‚t tƒ d¡j|Ž t|d d… d d d… ƒkslt‚t tƒ d¡j|Ž |d	 fksŽt‚t tƒ d
¡j|Ž |d fks°t‚d S )Nc                 S   s   g | ]}|d  ‘qS )é   r    r›   r    r    r!   r‘   ï  s     z<Test_SelectorArguments.test_get_selector.<locals>.<listcomp>r6   r1  r*   ©r  r<  rJ   ©r2  r)   ©r  r   )r“   r   rG   r   r"  rž   r   )r   rd   r    r    r!   r#  î  s6     ÿþþ ÿþþÿþÿþz(Test_SelectorArguments.test_get_selectorc                 C   s¬   t  tƒ d¡ d¡st‚t  tƒ d¡ d¡s0t‚t  tƒ d¡ d¡rHt‚t  tƒ d¡ d¡r`t‚t  tƒ d¡ d¡rxt‚t  tƒ d¡ d¡r�t‚t  tƒ d¡ d¡r¨t‚d S )Nr1  )r#   r.   rA  )r#   )r#   r.   r/   r#   r.   )r   rG   r   Zis_selectorr   r7  r    r    r!   Útest_is_selectorþ  sB     ÿþÿ ÿþ ÿþ ÿþÿÿz'Test_SelectorArguments.test_is_selectorc                 C   s’   t ƒ }t |d¡ |dddœ¡dks(t‚t |d¡ |dddœ¡d	ksJt‚t |d¡ |d
ddœ¡dkslt‚t |d¡ |dddœ¡dksŽt‚d S )Nr1  r  r©   rI   )r  r©   r7   é/   r(  )r7   rC  r*   rµ   rÿ   )r*   rµ   r  r>  )rl   r)   )r  r>  )r   r   rG   Zget_fixed_valuesr   r&  r    r    r!   Útest_get_fixed_values  sJ     ÿ þþ ÿ þþ ÿ þþ ÿ þþz,Test_SelectorArguments.test_get_fixed_valuesc                 C   s"  t ƒ }t |d¡}| |d¡dks&t‚| |d¡dks:t‚| |d¡dksNt‚| |d¡dksbt‚t |d¡}| |d¡dks‚t‚| |d¡dks–t‚| |d¡dksªt‚| |d¡dks¾t‚t |d	¡}| |d¡dksÞt‚| |d¡dksòt‚| |d¡dk�st‚| |d¡dk�st‚d S )
Nr1  r   Trl   r)   r~   rA  Fr@  )r   r   rG   r,  r   r6  r    r    r!   r-  (  s     z'Test_SelectorArguments.test_is_argumentc              	   C   sô   t ƒ }t |d¡}| |d¡dks&t‚| |d¡dks:t‚| |d¡dksNt‚| |d¡dksbt‚t |d¡}| |d¡dks‚t‚| |d¡dks–t‚| |d¡dksªt‚| |d¡dks¾t‚t |d¡}tjtdd	�� | |d¡ W 5 Q R X d S )
Nr1  r   rl   r)   r~   r?  rA  z.y does not correspond to any selector argumentr2   )r   r   rG   Zselector_indexr   r=   r>   r?   r6  r    r    r!   Útest_selector_index?  s"     ÿz*Test_SelectorArguments.test_selector_indexc              	   C   sð   t ƒ }t |d¡}|dkst‚|jg ks,t‚| |d¡}||ksDt‚|jdgksTt‚|jg ksbt‚|jg kspt‚| |d¡}||  kr�|ks–n t‚|jdgks¦t‚|jddgks¸t‚|jg ksÆt‚tjtdd�� | |d¡ W 5 Q R X d S )NrA  r)   r~   z/0: is a selector argument and cannot be ignoredr2   r   )	r   r   rG   r   r3  Z
add_ignorer=   r>   r?   )r   r^   r4  Znew_arguments0Znew_arguments1r    r    r!   Útest_add_ignoreU  s&     ÿz&Test_SelectorArguments.test_add_ignorec                 C   s,  t ƒ }t |d¡}| |d¡}t|tƒs,t‚|dks8t‚|jdgksHt‚|jg ksVt‚| |d¡}t|tƒspt‚|dks|t‚|jdgksŒt‚|jg ksšt‚| |d¡}t|tƒs´t‚|dksÀt‚|jdgksÐt‚|jg ksÞt‚| |d¡}t|tƒsøt‚|dk�st‚|jdgk�st‚|jg k�s(t‚d S )Nr1  r   r@  rl   r)   rA  r~   )r   r   rG   Úreducer   r   r3  )r   r^   r4  r=  r    r    r!   Útest_reducen  s,    z"Test_SelectorArguments.test_reducec                 C   s(   t ƒ }t |d¡}| |¡dks$t‚d S )Nr1  r;  )r   r   rG   r.  r   r6  r    r    r!   r/  ‹  s    z'Test_SelectorArguments.test_named_tupleN)rX   rY   rZ   r"   r'  r8  rH   r#  rB  rD  r-  rE  rF  rH  r/  r    r    r    r!   r0  €  s   9r0  c                   @   s´   e Z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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 ),ÚTestCompoundBoundingBoxc                 C   sð   t ƒ }d}dddœ}t ¡ }t||||dd�}|jj|jk ¡ sDt‚|j|ksRt‚| 	¡ D ](\}}||j
kspt‚|j
| |ksZt‚qZ|j
 	¡ D ]2\}}||ks¢t‚|| |ks²t‚t|tƒsŽt‚qŽ|j
|ksÐt‚|j|ksÞt‚|jdksìt‚d S )NrA  rí   rõ   ©rã   ©r*   ri   rj   )r   r   r   r   rn   r
  rB   r   Ú_selector_argsrß   Ú_bounding_boxesr   r   Ú_create_selectorrp   )r   r^   Úselector_argsÚbounding_boxesÚcreate_selectorrr   Ú	_selectorr  r    r    r!   r"   “  s.    
    ÿz#TestCompoundBoundingBox.test_createc                 C   sÆ  t  tƒ dddœdt ¡ ¡}| ¡ }||ks0t‚t|ƒt|ƒksDt‚|j|jksTt‚t|jƒt|jƒkslt‚|j	|j	ks|t‚t|j	ƒt|j	ƒks”t‚|j
|j
ks¤t‚t|j
ƒt|j
ƒks¼t‚t|jƒD ]¢\}}||j| ksàt‚t|ƒt|j| ƒksút‚|j|j| jk�st‚t|jƒt|j| jƒk�s2t‚|j|j| jk�sJt‚t|jƒt|j| jƒksÆt‚qÆt|jƒt|jƒk�s„t‚|j ¡ D �]ü\}}||j| k�s¬t‚t|ƒt|j| ƒk�sÈt‚|j|j| jk�sàt‚t|jƒt|j| jƒk�s t‚|j|j| jk�st‚t|jƒt|j| jƒk�s8t‚|j	|j| j	k�sPt‚t|j	ƒt|j| j	ƒk�spt‚|j ¡ D ]Î\}}||j| j| k�sœt‚t|ƒt|j| j| ƒk�s¾t‚|j|j| j| jk�sÜt‚t|jƒt|j| j| jƒk�st‚|j|j| j| jk�s t‚t|jƒt|j| j| jƒk�szt‚�qzt|jƒt|j| jƒk�sjt‚|j ¡ |j| j ¡ k�sŽt‚�qŽt|jƒt|jƒk�s¨t‚|j ¡ |j ¡ k�sÂt‚d S )N)g      ø¿çÍÌÌÌÌÌô?)gš™™™™™Àg333333@rJ  rA  )r   rG   r   r   r   r$   r   r%   rn   rp   rN  r•   rO  r‰   r  rà   rP  rß   ry   rÞ   r   r   rá   )r   rr   r$   r‰   r  Úselectorr  r   r    r    r!   r&   ©  sp    ü     ÿÿÿ
ÿÿÿ
ÿ ÿz!TestCompoundBoundingBox.test_copyc                 C   s4   t ƒ }d}dddœ}t|||ƒ}| ¡ dks0t‚d S )NrA  rí   rõ   rJ  a†  CompoundBoundingBox(
    bounding_boxes={
        (1,) = ModelBoundingBox(
                intervals={
                    y: Interval(lower=-1, upper=1)
                }
                ignored=['x']
                model=Gaussian2D(inputs=('x', 'y'))
                order='C'
            )
        (2,) = ModelBoundingBox(
                intervals={
                    y: Interval(lower=-2, upper=2)
                }
                ignored=['x']
                model=Gaussian2D(inputs=('x', 'y'))
                order='C'
            )
    }
    selector_args = SelectorArguments(
            Argument(name='x', ignore=True)
        )
))r   r   r   r   ©r   r^   rO  rP  rr   r    r    r!   ré   ý  s    

ÿz%TestCompoundBoundingBox.test___repr__c                 C   s@   t ƒ }d}dddœ}t|||ƒ}|j|ks.t‚|j|ks<t‚d S ©NrA  rí   rõ   rJ  )r   r   rM  r   rP  rU  r    r    r!   Útest_bounding_boxes	  s    
z+TestCompoundBoundingBox.test_bounding_boxesc              	   C   sv   t ƒ }d}ti ||ƒ}|j|ks$t‚|j|ks2t‚d}tjtdd�� ||_W 5 Q R X |j|ksdt‚|j|ksrt‚d S )NrA  r@  zOverriding selector_args.*r2   )r   r   rL  r   rO  r=   rC   rD   )r   r^   rO  rr   r    r    r!   Útest_selector_args&	  s    z*TestCompoundBoundingBox.test_selector_argsc                 C   s<   t ƒ }t ¡ }ti |d|ƒ}|j|ks*t‚|j|ks8t‚d S )N)rã   )r   r   r   r   rN  r   rQ  )r   r^   rQ  rr   r    r    r!   Útest_create_selector6	  s
    z,TestCompoundBoundingBox.test_create_selectorc                 C   sÒ   t i tƒ dƒ}t|jƒdks t‚| d¡dks2t‚| d¡dksDt‚| dg¡dksXt‚| t d¡¡dkspt‚| t dg¡¡dksŠt‚| d¡dksœt‚| ddg¡dks²t‚| t ddg¡¡dksÎt‚d S )N©r  r   r7   )r7   )r7   r>  r>  )	r   r   rà   rP  r   Z_get_selector_keyr;   r¸   r<   rv   r    r    r!   Útest__get_selector_key>	  s    z.TestCompoundBoundingBox.test__get_selector_keyc              	   C   sn  t ƒ }ti |ddd�}t|jƒdks(t‚d|d< t|jƒdksBt‚d|jksPt‚t|jd tƒsdt‚|jd dksvt‚|jd jdksŠt‚d|jks˜t‚t	j
td	d
�� d|d< W 5 Q R X d|jksÈt‚t|jƒdksÚt‚d|jksèt‚t	j
tdd
�� d|d< W 5 Q R X d|jk�st‚t|jƒdk�s.t‚ti |ddd�}t|jƒdk�sRt‚d|d< t|jƒdk�snt‚d|jk�s~t‚t|jd tƒ�s”t‚|jd dk�s¨t‚|jd jdk�s¾t‚d|jk�sÎt‚t	j
td	d
�� d|d< W 5 Q R X d|jk�s t‚t|jƒdk�st‚d|jk�s$t‚t	j
tdd
�� d|d< W 5 Q R X d|jk�sVt‚t|jƒdk�sjt‚d S )NrZ  ri   rj   r   ©iñÿÿÿé   ©r]  r)   )r©   rK   z.* is not a selector!r2   ©iùÿÿÿr©   rK   r'   )©ióÿÿÿrK   r  r¦   r@  )r\  )iúÿÿÿr8   )r§   r  )r_  )iôÿÿÿr  r`  )r   r   rà   rP  r   rM  r   r   rk   r=   r>   r?   rs   r    r    r!   Útest___setitem__N	  sV     ÿ ÿz(TestCompoundBoundingBox.test___setitem__c                 C   s¬   t ƒ }d}dddœ}ti ||ƒ}| |¡ | ¡ D ](\}}||jksHt‚|j| |ks2t‚q2|j ¡ D ]2\}}||kszt‚|| |ksŠt‚t|tƒsft‚qf|j|ks¨t‚d S rV  )r   r   r  rß   rM  r   r   r   )r   r^   rO  rP  rr   rR  r  r    r    r!   r	  ƒ	  s    

z&TestCompoundBoundingBox.test__validatec                 C   sÎ   t dddœtƒ dƒ}t dddœtƒ dƒ}||ks4t‚|t ¡ krDt‚|t ¡ krTt‚d|d< ||krht‚|jd= ||ks|t‚t tƒ d¡|_||kr˜t‚t tƒ d¡|_||ks´t‚t ¡ |_	||krÊt‚d S )Nrí   rõ   rJ  rA  r\  r^  ©r<  )
r   r   r   r   r   rM  r   rG   rL  rN  )r   r÷   rø   r    r    r!   rù   ”	  s:      ÿ  ÿ ÿ ÿ
z#TestCompoundBoundingBox.test___eq__c              	   C   s8  t ƒ }d}dddœ}t ¡ }d}tjt|d�� t ||¡ W 5 Q R X tj||||dd�}|jj	|j	k 
¡ spt‚|j|ks~t‚|j|ksŒt‚|j|ksšt‚|jdks¨t‚t ||¡}||ksÀt‚|jdksÎt‚t ||||¡}|jj	|j	k 
¡ sôt‚|j|k�st‚|j|k�st‚|j|k�s$t‚|jd	k�s4t‚d S )
NrA  rí   rõ   rJ  z&Selector arguments must be provided .*r2   ri   rj   rh   )r   r   r   r=   r>   r?   r   rG   rn   r
  rB   r   rL  rM  rN  rp   )r   r^   rO  rP  rQ  r@   rr   r  r    r    r!   rH   ·	  sB    
    ÿ   ÿz%TestCompoundBoundingBox.test_validatec                 C   s`   t ƒ }d}dddœ}t|||ƒ}d|ks,t‚d|ks8t‚d|ksDt‚d|ksPt‚d	|ks\t‚d S )
NrA  rí   rõ   rJ  rã   rK  ©r5   r)   r*   )r   r   r   rU  r    r    r!   rì   Û	  s    
z)TestCompoundBoundingBox.test___contains__c              	   C   sÆ   t ƒ }t ¡ }ti |d|ƒ}d|_t|jƒdks4t‚| d¡}t	|t
ƒsLt‚|dksXt‚t|jƒdksjt‚d|ksvt‚t	|d t
ƒsˆt‚|d |ks˜t‚d|_tjtdd�� | d	¡ W 5 Q R X d S )
Nr@  )r\  )iéÿÿÿé   r   )r©   r)   )iÖÿÿÿé*   r'   r2   )rÔ   )r   r   r   r   r†   rà   rM  r   Ú_create_bounding_boxr   r   r=   r>   r?   )r   r^   rQ  rr   r  r    r    r!   Útest__create_bounding_boxè	  s$    
 ÿz1TestCompoundBoundingBox.test__create_bounding_boxc              	   C   s"  t ƒ }d}dddœ}t|||ƒ}t|d tƒs2t‚|d dksBt‚t|d tƒsTt‚|d dksdt‚t|d tƒsvt‚|d dks†t‚t|d tƒs˜t‚|d dks¨t‚tjtd	d
�� |d  W 5 Q R X t 	¡ |_
tjjtddd��2}|d |jksút‚|jt |d¡gk�st‚W 5 Q R X d S )NrA  rí   rõ   rJ  r)   rK  r*   rã   z+No bounding box is defined for selector: .*r2   rc  rf  TrÃ   )r   r   r   r   r   r=   r>   rŸ   r   r   rN  r¶   r·   r†   r‡   rˆ   )r   r^   rO  rP  rr   ZmkCreater    r    r!   rð   ÿ	  s4    
 ÿ
  ÿz(TestCompoundBoundingBox.test___getitem__c              
   C   s¾   t ƒ }d}dddœ}t|||ƒ}dd„ tdƒD ƒ}tjjtdd	d
��p}tjjtdd	d
��R}| |¡|jksnt	‚|j
t ||j¡gksˆt	‚|j
tj|jf|žŽ gks¦t	‚W 5 Q R X W 5 Q R X d S )NrA  rí   rõ   rJ  c                 S   s   g | ]}t  ¡ ‘qS r    r�   rŽ   r    r    r!   r‘   #
  s     zETestCompoundBoundingBox.test__select_bounding_box.<locals>.<listcomp>r5   r"  TrÃ   r…   )r   r   r“   r   r¶   r·   r   Z_select_bounding_boxr†   r   r‡   rˆ   rO  )r   r^   rO  rP  rr   rd   Z
mkSelectorrÏ   r    r    r!   Útest__select_bounding_box
  s0    
  ÿ  ÿÿ
ÿz1TestCompoundBoundingBox.test__select_bounding_boxc              	   C   sÚ   t ƒ }d}dddœ}t|||ƒ}t ¡ }tjjtddd��–}| |dd	d
g¡|jksXt	‚|j
t |d |dd	d
g¡gks|t	‚| ¡  | |d	d	d
g¡|jks t	‚|j
t |d |d	d	d
g¡gksÄt	‚| ¡  W 5 Q R X d S )NrA  rí   rõ   rJ  rb   TrÃ   r)   r*   r5   rã   rK  )r   r   r   r   r¶   r·   r   rb   r†   r   r‡   rˆ   rÅ   )r   r^   rO  rP  rr   rc   rÆ   r    r    r!   r  2
  s6    
  ÿÿÿÿ
ÿÿÿ
z+TestCompoundBoundingBox.test_prepare_inputsc           	   	   C   s<  d}ddddœ}t |tƒ |ƒ}dD ]¶}| d|¡}t|tƒs@t‚d|ksLt‚|d }t|tƒsbt‚|jjtƒ jk 	¡ szt‚d|ks†t‚d|j
ks”t‚d	|ks t‚|d	 | |fks¶t‚t|jƒd
ksÈt‚|jdgks"t‚q"d}ddddœ}t |tƒ |ƒ}dD �]®}| d|¡}t|tƒ�st‚d| f|k�s2t‚|d| f }t|tƒ�sPt‚|jjtƒ jk 	¡ �sjt‚d|k�sxt‚d|j
k�sˆt‚d	|k�s–t‚|d	 | |fk�s®t‚t|jƒd
k�sÂt‚|jdgk�sÔt‚| d	|¡}t|tƒ�sðt‚d| f|k�st‚|d| f }t|tƒ�s"t‚|jjtƒ jk 	¡ �s<t‚d	|k�sJt‚d	|j
k�sZt‚d|k�sht‚|d d|  d| fk�sˆt‚t|jƒd
k�sœt‚|jd
gksüt‚qütd
ƒtdƒ@ td
ƒ@ }d|_dddœ}t j||dgdd�}| dd¡}t|tƒ�st‚d|k�st‚|d }t|tƒ�s,t‚|jj|jk 	¡ �sDt‚|j
dgk�sVt‚|jdddœk�slt‚|jdk�s|t‚| dd
¡}t|tƒ�s˜t‚d|k�s¦t‚|d }t|tƒ�s¾t‚|jj|jk 	¡ �sÖt‚|j
dgk�sèt‚|jdddœk�sþt‚|jdk�st‚d}tjt|d�� | dd¡ W 5 Q R X d S ) Nrb  ©rí   rõ   ©rõ   r  ©r  rî   ©rã   rK  rc  r4   rl   r    r~   r)   r   ©r<  r2  ©)r)   r5   )r*   r*   )r5   r)   r6   r7   r*   ©rl   r~   Úslit_id©©ç      à¿g     ^�@©rs  g     þŸ@©©rs  g     Ï§@©rs  g     Ÿ¯@r9  ©rp  Tri   ©rO  rk   rp  rr  rt  rÿ   rv  rw  zQAttempting to fix input .*, but there are no bounding boxes for argument value .*r2   )r   r   Z_matching_bounding_boxesr   rå   r   r   rn   r
  rB   r”   rà   rÞ   ry   r   r   r   rd   rG   rä   rk   r=   r>   r?   )	r   rO  rP  rr   rØ   Zmatchingr  r^   r@   r    r    r!   Útest__matching_bounding_boxesM
  s¦    ýý
 þ   ÿÿz5TestCompoundBoundingBox.test__matching_bounding_boxesc                 C   sö  d}ddddœ}t |tƒ |ƒ}dD ]”}| d|¡}t|tƒs@t‚|jjtƒ jk ¡ sXt‚d|ksdt‚d|j	ksrt‚d|ks~t‚|d | |fks”t‚t
|jƒd	ks¦t‚|jd
gks"t‚q"d}ddddœ}t |tƒ |ƒ}dD �] }| d|¡}t|t ƒsút‚|jjtƒ jk ¡ �st‚|jdk�s$t‚d| f|k�s8t‚|d| f }t|tƒ�sVt‚|jjtƒ jk ¡ �spt‚d|k�s~t‚d|j	k�sŽt‚d|k�sœt‚|d | |fk�s´t‚t
|jƒd	k�sÈt‚|jd
gk�sÚt‚| d|¡}t|t ƒ�söt‚|jjtƒ jk ¡ �st‚|jdk�s t‚d| f|k�s4t‚|d| f }t|tƒ�sRt‚|jjtƒ jk ¡ �slt‚d|k�szt‚d|j	k�sŠt‚d|k�s˜t‚|d d|  d| fk�s¸t‚t
|jƒd	k�sÌt‚|jd	gksÚt‚qÚtd	ƒtdƒ@ td	ƒ@ }d|_dddœ}t j||dgdd�}| dd
¡}t|tƒ�s6t‚|jj|jk ¡ �sNt‚|j	dgk�s`t‚|jdddœk�svt‚|jdk�s†t‚| dd	¡}t|tƒ�s¢t‚|jj|jk ¡ �sºt‚|j	dgk�sÌt‚|jdddœk�sât‚|jdk�sòt‚d S )Nrb  ri  rj  rk  rl  r4   rl   r~   r)   r   rm  rn  r@  r6   r7   r*   ro  rq  ru  r9  rx  ri   ry  rp  rr  rt  rÿ   rv  rw  )r   r   Z_fix_input_selector_argr   r   r   rn   r
  rB   r”   rà   rÞ   ry   rO  r   r   r   rd   rG   rä   rk   )r   rO  rP  rr   rØ   r  Zbbox_selectorr^   r    r    r!   Útest__fix_input_selector_arg°
  s”    ýý
 þ   ÿz4TestCompoundBoundingBox.test__fix_input_selector_argc                 C   sV  t dƒtdƒ@ tdƒ@ }d|_dddœ}tj||dgdd	�}| d
d¡}t|tƒsVt‚|j	j
|j
k ¡ slt‚|jdkszt‚|jjdgksŒt‚|jd dksžt‚|jd dks°t‚t|jƒdksÂt‚| dd¡}t|tƒsÜt‚|j	j
|j
k ¡ sòt‚|jdk�st‚|jjdgk�st‚|jd dk�s*t‚|jd dk�s>t‚t|jƒdk�sRt‚d S )Nr)   r*   ro  rq  ru  r9  rx  ri   ry  rl   r7   ))r*   Tr   r:  rt  rã   rw  r~   rr  rv  )r   r   r   rd   r   rG   Z_fix_input_bbox_argr   r   rn   r
  rB   rO  r3  rM  rà   )r   r^   rP  rr   r  r    r    r!   Útest__fix_input_bbox_arg  s6    þ   ÿz0TestCompoundBoundingBox.test__fix_input_bbox_argc                 C   sÜ  t dƒtdƒ@ tdƒ@ }d|_dddœ}tj||dgdd	�}||_t|d
diƒ}|j}t|t	ƒsdt
‚|jj|jk ¡ szt
‚|jg ksˆt
‚|jdddœksœt
‚|jdksªt
‚t|ddiƒ}|j}t|tƒsÌt
‚|jj|jk ¡ sât
‚|jdksðt
‚|jjg k�st
‚|jd dk�st
‚|jd jdk�s,t
‚|jd dk�s@t
‚|jd jdk�sVt
‚t|jƒdk�sjt
‚t|ddiƒ}|j}t|tƒ�sŽt
‚|jj|jk ¡ �s¦t
‚|jdk�s¶t
‚|jjg k�sÈt
‚|jd dk�sÜt
‚|jd jdk�sòt
‚|jd dk�st
‚|jd jdk�st
‚t|jƒdk�s0t
‚t|dddœƒ}|j}t|t	ƒ�sVt
‚|jj|jk ¡ �snt
‚|jg k�s~t
‚|jddik�s’t
‚|jdk�s¢t
‚t|dddœƒ}|j}t|t	ƒ�sÈt
‚|jj|jk ¡ �sàt
‚|jg k�sðt
‚|jddik�st
‚|jdk�st
‚t|dddœƒ}|j}t|tƒ�s:t
‚|jdk�sJt
‚|jjg k�s\t
‚|jd tj tjfk�szt
‚|jd jdk�s�t
‚|jd tj tjfk�s®t
‚|jd jdk�sÄt
‚t|jƒdk�sØt
‚d S )Nr)   r*   ro  rq  ru  r9  rx  ri   ry  rp  r   rr  rt  rÿ   rl   r7   rZ  r:  rã   rw  r~   rv  )rp  rl   )r~   rp  r©   rA  )r   r   r   rd   r   rG   rr   r   r   r   r   rn   r
  rB   r”   rä   rk   rO  r3  rM  rà   r;   rT   )r   r^   rP  rr   Z	new_modelr  r    r    r!   r¤   #  s‚    þ   ÿz'TestCompoundBoundingBox.test_fix_inputsc                 C   sd   t dƒ}dddœ}d}t |||¡}|d td|ddgd	�ksBt‚|d
 td|ddgd	�ks`t‚d S )Nr6   )rí   r  )r  rí   )©r.   rS  ©r.   g®Gáz®@))Úx0T)Úx1Tr}  r  r€  rx   r~  )r   r   rG   r   r   )r   r^   rP  rO  r  r    r    r!   Ú"test_complex_compound_bounding_boxl  s     þ  ÿ  ÿz:TestCompoundBoundingBox.test_complex_compound_bounding_boxN)rX   rY   rZ   r"   r&   ré   rW  rX  rY  r[  ra  r	  rù   rH   rì   rg  rð   rh  r  rz  r{  r|  r¤   r�  r    r    r    r!   rI  ’  s*   T 	5#$cVIrI  )%Zunittest.mockZmockr   Únumpyr;   r=   Zastropy.unitsZunitsr9   Zastropy.coordinatesr   Zastropy.modeling.bounding_boxr   r   r   r   r   r   r	   r
   r   Zastropy.modeling.corer   r   Zastropy.modeling.modelsr   r   r   r   r   r   r   r[   rÚ   r  r0  rI  r    r    r    r!   Ú<module>   s:   , 
 ?               