
    IR-e                    2   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          Z G d d	          Z  G d
 d          Z! G d d          Z" G d d          Z# G 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                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )Test_Intervalc                 *   t          j                    }t          j                    }t          ||          }t          |t                    sJ |j        |k    sJ |j        |k    sJ |||fk    sJ |                                d| d| dk    sJ d S )NzInterval(lower=z, upper=))mk	MagicMockr
   
isinstancer   lowerupper__repr__selfr   r   intervals       Hlib/python3.11/site-packages/astropy/modeling/tests/test_bounding_box.pytest_createzTest_Interval.test_create    s    UE**(M22222~&&&&~&&&&E5>))))  ""&O&O&Ou&O&O&OOOOOOO    c                    t          dd          }|                                }||k    sJ t          |          t          |          k    sJ |j        |j        k    sJ t          |j                  t          |j                  k    sJ |j        |j        k    sJ t          |j                  t          |j                  k    sJ d S )N      ?g      ?)r
   copyidr   r   )r    r!   r'   s      r"   	test_copyzTest_Interval.test_copy+   s    S#&&}}4(||r$xx'''' ~++++(.!!R
^^3333 ~++++(.!!R
^^333333r$   c           	         d}t          j                    }t          j                    }t          ||          }|                    d           |                    ddg           |                    dt          j        z  dt          j        z  f           |                    dt          j        z  dt          j        z  g           |                    d           |                    ddgf           |                    dg           |                    ddgg           |                    dt          j        z  dt          j        z  ff           |                    dt          j        z  dt          j        z  gf           |                    dt          j        z  dt          j        z  fg           |                    dt          j        z  dt          j        z  gg           |                    t          j                    t          j                    f           |                    t          j                    t          j                    g           |                    t          j        ddg          t          j        dd	g          f           |                    t          j        g d
          t          j        g d          f           t          j	        t          |          5  |                    d           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    g d           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    g dg dg           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    d           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    dt          j        z  dt          j        z  dt          j        z  f           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    dt          j        z  dt          j        z  dt          j        z  g           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    dt          j        z  dt          j        z  dt          j        z  gdt          j        z  dt          j        z  dt          j        z  gg           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    dt          j        z             d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    t          j        ddg          t          j        dd	g          t          j        ddg          f           d d d            n# 1 swxY w Y   t          j	        t          |          5  |                    t          j        ddg          dd	gf           d d d            d S # 1 swxY w Y   d S )N5An interval must be some sort of sequence of length 2      r-   r.   r,                     @      @r0   r1         r2   r3         @matchr-   r.      )         r;   r<   r=   r>   )r   r   r
   _validate_shapeumnparraypytestraises
ValueError)r    MESSAGEr   r   r!   s        r"   test__validate_shapez"Test_Interval.test__validate_shape:   sw   JUE** 	  (((  !Q(((  !ac'1qs7!3444  !ac'1qs7!3444 	  +++  1a&+++  &***  1a&***  1qs7AG"4!6777  1qs7AG"4!6777  1qs7AG"4!5666  1qs7AG"4!5666 	  ",..",..!ABBB  ",..",..!ABBB 	  "(D$<"8"8"(C::N:N!OPPP  X((())28OOO+D+DE	
 	
 	

 ]:W555 	0 	0$$Y///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]:W555 	0 	0$$YYY///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]:W555 	= 	=$$iii%;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=]:W555 	( 	($$Q'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ]:W555 	B 	B$$a!#gq13wAC%@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B]:W555 	B 	B$$a!#gq13wAC%@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B]:W555 	 	$$ac'1qs7AG,q13wACQS.IJ  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:W555 	. 	.$$QW---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. ]:W555 	 	$$4,''3*)=)=rxA?O?OP  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:W555 	K 	K$$bhd|&<&<sCj%IJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   5LLL=M!!M%(M%N//N36N3O77O;>O;A Q))Q-0Q-A SS"SA,U99U= U=#WWW4AYYY;.Z66Z:=Z:c                 z   t          j        dd          dk    sJ t          j        dt          j        z  dt          j        z            dt          j        z  dt          j        z  fk    sJ t          j        t	          j        ddg          t	          j        ddg                    }|j        t	          j        ddg          k                                    sJ |j        t	          j        ddg          k                                    sJ t          j
        t          d	          5  t          j        dd           d d d            n# 1 swxY w Y   t          j
        t          d
	          5  t          j        dt          j        z  dt          j        z             d d d            d S # 1 swxY w Y   d S )Nr-   r.   r,   r0   r1   r2   r3   zEInvalid interval: upper bound 1 is strictly less than lower bound 2\.r8   zOInvalid interval: upper bound 1\.0 m is strictly less than lower bound 2\.0 m\.)r
   _validate_boundsr@   rA   rB   rC   r   allr   rD   warnsRuntimeWarningr    r!   s     r"   test__validate_boundsz#Test_Interval.test__validate_boundsx   s   )!Q//69999)!ac'1qs7;;ACQS?QQQQQ-HdD\""BHc3Z$8$8
 
 "(D$<"8"88==?????"(C:"6"66;;===== \)
 
 
 	- 	-
 &q!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- \.
 
 
 	9 	9
 &q13wAC888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s$   +EEE30F00F47F4c                    t          j        d          dk    sJ t          j        ddg          dk    sJ t          j        dt          j        z  dt          j        z  f          dt          j        z  dt          j        z  fk    sJ t          j        dt          j        z  dt          j        z  g          dt          j        z  dt          j        z  fk    sJ t          j        d          dk    sJ t          j        ddgf          dk    sJ t          j        dg          dk    sJ t          j        ddgg          dk    sJ t          j        dt          j        z  dt          j        z  ff          dt          j        z  dt          j        z  fk    sJ t          j        dt          j        z  dt          j        z  gf          dt          j        z  dt          j        z  fk    sJ t          j        dt          j        z  dt          j        z  fg          dt          j        z  dt          j        z  fk    sJ t          j        dt          j        z  dt          j        z  gg          dt          j        z  dt          j        z  fk    sJ t          j        t	          j        ddg          t	          j        ddg          f          }|j        t	          j        ddg          k                                    sJ |j        t	          j        ddg          k                                    sJ t          j        t	          j        g d	          t	          j        g d
          f          }|j        t	          j        g d	          k                                    sJ |j        t	          j        g d
          k                                    sJ d}t          j
        t          |          5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nr,   r-   r.   r/   r0   r1   r2   r3   r4   r6   r+   r8   r:   )r.   r-   )r
   validater@   rA   rB   rC   r   rK   r   rD   rE   rF   rL   rM   )r    r!   rG   s      r"   test_validatezTest_Interval.test_validate   si   !&))V3333!1a&))V3333!1qs7AG"455!ac'1qs79KKKKK!1qs7AG"455!ac'1qs79KKKKK!),,6666!Aq6),,6666!6(++v5555!Aq6(++v5555!AGQW#5"788QWa!#g<NNNNN!AGQW#5"788QWa!#g<NNNNN!AGQW#5"677AGQW;MMMMM!AGQW#5"677AGQW;MMMMM%rxt'='=rxc
?S?S&TUU"(D$<"8"88==?????"(C:"6"66;;=====%X((())28OOO+D+DE
 
 "(+=+=+=">">>CCEEEEE"(???";";;@@BBBBB K]:W555 	* 	*y)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* \.)) 	' 	'v&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's$   ;PP #P  Q""Q&)Q&c                     t          j        d          }|                    t          j        ddd                    g dk                                    sJ d S )Nr   r-   r.      TTTTFFFFFTTTT)r
   rQ   outsiderB   linspacerK   rN   s     r"   test_outsidezTest_Interval.test_outside   sk    %f-- R[Q3344   #%%	 	 	 	 	r$   c                     t          j        d          }|                    d          t          j        ddd          k                                    sJ d S )NrT         ?r   r-   r=   )r
   rQ   domainrB   rY   rK   rN   s     r"   test_domainzTest_Interval.test_domain   sO    %f--%%Q1)=)==BBDDDDDDDr$   c                    t           j        t          j         k    sJ t           j        t          j        k    sJ ddddddz  ddz   fD ]}|t           d         k     rJ |t           d         k    sJ |t           d         k    rJ |t           d         k     sJ t          j        t          j        |g                                                    rJ d S )Nr   rU   igQ	@
   d   r-   )r	   r   rB   infr   rX   rC   rK   )r    nums     r"   test__ignored_intervalz$Test_Interval.test__ignored_interval   s     &26'1111 &"&0000r4r3w"c'
; 	J 	JC.q11111*1-----.q11111*1-----)1"(C5//BBGGIIIIII	J 	Jr$   c                     t          dt          j                  }t          dt          j                  }t          j        ||f          }|j        |k    sJ |j        |k    sJ dS )z Regression test for issue #12439r-   r`   N)r   r@   umr
   rQ   r   r   r   s       r"    test_validate_with_SpectralCoordz.Test_Interval.test_validate_with_SpectralCoord   sf     a&&b!$''%uen55~&&&&~&&&&&&r$   N)__name__
__module____qualname__r#   r)   rH   rO   rR   rZ   r^   rd   rg    r$   r"   r   r      s        	P 	P 	P4 4 4<K <K <K|9 9 92 '  '  'D  E E EJ J J' ' ' ' 'r$   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )Test_BoundingDomainc                 :     G d dt                     }|| _        d S )Nc                   (     e Zd Z fdZ fdZ xZS )8Test_BoundingDomain.setup_method.<locals>.BoundingDomainc                 N    t                                          ||           d S )N)fixed_inputs)superr   )r    modelr   	__class__s      r"   r   zCTest_BoundingDomain.setup_method.<locals>.BoundingDomain.fix_inputs   s&    ""5z"BBBBBr$   c                 L    t                                          ||           d S N)rs   prepare_inputs)r    input_shapeinputsru   s      r"   rx   zGTest_BoundingDomain.setup_method.<locals>.BoundingDomain.prepare_inputs   s#    &&{F;;;;;r$   )rh   ri   rj   r   rx   __classcell__)ru   s   @r"   BoundingDomainrp      sV        C C C C C< < < < < < < < <r$   r|   )r   r|   )r    r|   s     r"   setup_methodz Test_BoundingDomain.setup_method   s<    	< 	< 	< 	< 	<_ 	< 	< 	< -r$   c                 X   t          j                    }|                     |          }|j        |k    sJ |j        g k    sJ |j        dk    sJ |                     |d          }|j        |k    sJ |j        g k    sJ |j        dk    sJ |                     t                      dg          }|j        dgk    sJ |j        dk    sJ d}t          j        t          |          5  |                     |t          j                               d d d            d S # 1 swxY w Y   d S )NCForderxr   .order must be either 'C' .* or 'F' .*, got: .*r8   )
r   r   r|   _model_ignored_orderr   rD   rE   rF   r    rt   bounding_boxrG   s       r"   r#   zTest_BoundingDomain.test_create   s   **511"e++++$****"c))))**5*<<"e++++$****"c))))**:<<#??$++++"c)))) D]:W555 	= 	=R\^^<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   ))DD#&D#c                     t          j                    }|                     |          }|j        |k    sJ |j        |k    sJ d S rw   )r   r   r|   r   rt   r    rt   r   s      r"   
test_modelzTest_BoundingDomain.test_model   sN    **511"e++++!U******r$   c                 6   |                      t          j                    d          }|j        dk    sJ |j        dk    sJ |                      t          j                    d          }|j        dk    sJ |j        dk    sJ d|_        |j        dk    sJ d S )Nr   r   r   test)r|   r   r   r   r   r    r   s     r"   
test_orderzTest_BoundingDomain.test_order  s    **2<>>*EE"c))))!S((((**2<>>*EE"c))))!S(((($!V++++++r$   c                     dg}t          j                    }d|_        dg|_        |                     ||          }|j        |k    sJ |j        |k    sJ d S )Nr   r-   r   ignored)r   r   n_inputsrz   r|   r   r   )r    r   rt   r   s       r"   test_ignoredz Test_BoundingDomain.test_ignored  sj    #u**5'*BB$////#w......r$   c                    |                      t          j                              }|j        dk    sJ |                                dk    sJ |                    d          dk    sJ |                    d          dk    sJ d|_        |j        dk    sJ |                                dk    sJ |                    d          dk    sJ |                    d          dk    sJ d}t          j        t          |          5  |                    t          j                               d d d            d S # 1 swxY w Y   d S )Nr   r   r   r8   )r|   r   r   r   
_get_orderrD   rE   rF   r    r   rG   s      r"   test__get_orderz#Test_BoundingDomain.test__get_order  s   **2<>>:: "c))))&&((C////&&s++s2222&&s++s2222 ""c))))&&((C////&&s++s2222&&s++s2222 D]:W555 	4 	4##BLNN333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   'D99D= D=c                 `   |                      t                                }|                    d          dk    sJ |                    d          dk    sJ d}t          j        t
          |          5  |                    d           d d d            n# 1 swxY w Y   |                    d          dk    sJ |                    d          dk    sJ |                    t          j        d                    dk    sJ |                    t          j        d                    dk    sJ |                    t          j        d                    dk    sJ |                    t          j        d                    dk    sJ d}t          j        t          |          5  |                    d	           d d d            n# 1 swxY w Y   t          j        t          |          5  |                    t          j        d	                     d d d            n# 1 swxY w Y   t          j        t          |          5  |                    t          j        d	                     d d d            n# 1 swxY w Y   t          j        t          |          5  |                    d
           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  |                    t          j                               d d d            d S # 1 swxY w Y   d S )Nr   r   yr-   z 'z' is not one of the inputs: .*r8   zz,Integer key: .* must be non-negative and < 2r.   rU   'Key value: .* must be string or integer)r|   r   
_get_indexrD   rE   rF   rB   int32int64
IndexErrorr   r   r   s      r"   test__get_indexz#Test_BoundingDomain.test__get_index.  sd   **:<<88 &&s++q0000&&s++q0000 6]:W555 	) 	)##C(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) &&q))Q....&&q))Q....&&rx{{33q8888&&rx{{33q8888&&rx{{33q8888&&rx{{33q8888 B]:W555 	' 	'##A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']:W555 	1 	1##BHQKK000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1]:W555 	1 	1##BHQKK000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1]:W555 	( 	(##B'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( =]:W555 	4 	4##BLNN333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4sl   5BBB)GGG1(H%%H),H)(I??JJ%KKK/'L##L'*L'c                    t          j                    }d|_        dg|_        |                     |          }t          j                    }t          j                    }t          j                    |_        ||j        j        _        |                    |          |k    sJ |j        j        j        t          j	        |          gk    sJ d S )Nr-   r   )
r   r   r   rz   r|   __getitem__return_value	_get_namecall_args_listcall)r    rt   r   indexnames        r"   test__get_namez"Test_BoundingDomain.test__get_nameR  s    u**511|~~|~~04 -%%e,,4444|'6275>>:JJJJJJJr$   c                    t          j                    }t          t          dd                    }d|_        d t          d          D             |_        |                     ||          }|j        }t          |t                    sJ t          |          D ]&\  }}||j        v sJ |j        |dz            |k    sJ 't          |j                  D ]#\  }}||v r||dz
           |k    sJ |dk     sJ $d S )Nr<      c                 4    g | ]}t          j                    S rk   r   r   .0_s     r"   
<listcomp>z;Test_BoundingDomain.test_ignored_inputs.<locals>.<listcomp>c      9991999r$   r   )
r   r   listranger   rz   r|   ignored_inputsr   	enumerate)r    rt   r   r   rz   r   _inputs          r"   test_ignored_inputsz'Test_BoundingDomain.test_ignored_inputs_  s%   uQ{{##99a999**5'*BB,&$'''''&v.. 	5 	5ME6U\))))<	*f44444&u|44 	! 	!ME6eai(F22222qyyyyy		! 	!r$   c                    |                      t                                }|                    d           g k    sJ |                    ddg          ddgk    sJ |                    ddg          ddgk    sJ |                    t          j        d          t          j        d          g          ddgk    sJ t          j        t          d          5  |                    t          j
                    g           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    dg           d d d            n# 1 swxY w Y   d	}t          j        t          |          5  |                    d
g           d d d            n# 1 swxY w Y   t          j        t          |          5  |                    t          j        d
          g           d d d            n# 1 swxY w Y   t          j        t          |          5  |                    t          j        d
          g           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r-   r   r8   !'.*' is not one of the inputs: .*r   z+Integer key: 3 must be non-negative and < 2r;   )r|   r   _validate_ignoredrB   r   r   rD   rE   rF   r   r   r   r   s      r"   test__validate_ignoredz*Test_BoundingDomain.test__validate_ignoredq  s~   **:<<88 --d33r9999--sCj99aVCCCC--q!f55!Q????--rx{{BHQKK.HIIaQRVSSSS ]H
 
 
 	= 	= **BLNN+;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= ]:-QRRR 	2 	2**C5111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 A]:W555 	0 	0**A3///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0]:W555 	: 	:**BHQKK=999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:]:W555 	: 	:**BHQKK=999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sZ   (DDD3EEE>F!!F%(F%)G<<H H ")IIIc                 L   |                      t          j                              }t          d t	          d          D                       }d t	          d          D             }d}t          j        t          |          5   ||i | d d d            d S # 1 swxY w Y   d S )Nc              3   <   K   | ]}t          j                    V  d S rw   r   r   s     r"   	<genexpr>z4Test_BoundingDomain.test___call__.<locals>.<genexpr>  s(      66R\^^666666r$   r;   c                 <    i | ]}d | t          j                    S )r   r   r   idxs     r"   
<dictcomp>z5Test_BoundingDomain.test___call__.<locals>.<dictcomp>  s&    CCC3,,,CCCr$   zOThis bounding box is fixed by the model and does not have adjustable parametersr8   )r|   r   r   tupler   rD   rE   RuntimeError)r    r   argskwargsrG   s        r"   test___call__z!Test_BoundingDomain.test___call__  s    **2<>>::66U1XX66666CC%((CCC 	 ]<w777 	* 	*L$)&)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   	BB Bc                 2   |                      t          j                              }t          j                    }t          j                    }t          j        t
          d          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nz+This should be implemented by a child classr8   )r|   r   r   rD   rE   NotImplementedErrorr   )r    r   rt   rr   s       r"   test_fix_inputsz#Test_BoundingDomain.test_fix_inputs  s    **2<>>::|~~]'U
 
 
 	9 	9 ##E<888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   (BBBc                 *   |                      t          j                              }t          j        t
          d          5  |                    t          j                    t          j                               d d d            d S # 1 swxY w Y   d S )Nz0This has not been implemented for BoundingDomainr8   )r|   r   r   rD   rE   r   rx   r   s     r"   test__prepare_inputsz(Test_BoundingDomain.test__prepare_inputs  s    **2<>>::]E
 
 
 	H 	H ''GGG		H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   9BBBc                    |                      t          j                              }d}|                    |d          }|dk                                    sJ |j        |k    sJ |                    |t          j                  }t          j        |                                          sJ |j        |k    sJ |                    |d          }|dk                                    sJ |j        |k    sJ d}|                    |d          }|dk                                    sJ |j        |k    sJ |                    |t          j                  }t          j        |                                          sJ |j        |k    sJ |                    |d          }|dk                                    sJ |j        |k    sJ d S )NrV   r      rV      )	r|   r   r   _base_outputrK   shaperB   nanisnan)r    r   ry   outputs       r"   test__base_ouputz$Test_BoundingDomain.test__base_ouput  s   **2<>>:: **;::!  """""|{******;??  %%'''''|{******;;;"!!#####|{**** **;::!  """""|{******;??  %%'''''|{******;;;"!!#####|{******r$   c                    t          j                    }|                     |          }d|_        d}|                    |d          \  }}t          j        |          dk                                    sJ t          j        |          j        dk    sJ |J d|_        d}|                    |d          \  }}t          j        |          dk                                    sJ t          j        |          j        dk    sJ |J d S )Nr-   r   r   )r-   rV   r>   r   )r>   rV   r   )	r   r   r|   	n_outputs_all_out_outputrB   rC   rK   r   )r    rt   r   ry   r   output_units         r"   test__all_out_outputz(Test_BoundingDomain.test__all_out_output  s   **511 *::;JJ  A%**,,,,,x%0000""" *::;JJ  A%**,,,,,x%3333"""""r$   c           	         |                      t          j                              }t          j                    }t          j                    }t          j                    }t          j                            t
          ddt          j        d                    5 }t          j        g d          |	                    g d|||          k    
                                sJ |j        t          j        ||          gk    sJ 	 d d d            n# 1 swxY w Y   t          j                            t
          ddt          j        g d                    5 }t          j        g d          |	                    g dt          j        g d	g          ||          k    
                                sJ |j        t          j        ||          gk    sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr   Tr   autospecr   r:   )r-   r.   r;   r<   r=   r>   )r   r.   r   r<   	   r>   )r   r   r   )r   r.   r<   )r|   r   r   patchobjectr   rB   
asanyarrayrC   _modify_outputrK   r   r   )r    r   valid_indexry   
fill_valuemkBases         r"   test__modify_outputz'Test_BoundingDomain.test__modify_output  s   **2<>>::lnnlnn\^^
 X__q))	  
 
 	O
 ##..II{K  cee   (RW[*-M-M,NNNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O X__"4"4"455	  
 
 	O
 +++,,..IIrx44k:  cee   (RW[*-M-M,NNNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os&   A(DDDA=G!!G%(G%c                 F   |                      t          j                              t          j                    t          j                    t          j                    d t          d          D             d t          d          D             }t          j                            t          dd|          5 }|                              k    sJ |j        fdt          d          D             k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                 4    g | ]}t          j                    S rk   r   r   s     r"   r   z=Test_BoundingDomain.test__prepare_outputs.<locals>.<listcomp>  s    :::A:::r$   r;   c                 4    g | ]}t          j                    S rk   r   r   s     r"   r   z=Test_BoundingDomain.test__prepare_outputs.<locals>.<listcomp>  s    444a2<>>444r$   r   Tr   side_effectc           	      L    g | ] }t          j        |                   !S rk   )r   r   )r   r   r   r   ry   r   valid_outputss     r"   r   z=Test_BoundingDomain.test__prepare_outputs.<locals>.<listcomp>  sK     	/ 	/ 	/   !#& 	/ 	/ 	/r$   )	r|   r   r   r   r   r   r   _prepare_outputsr   )r    effectsmkModifyr   r   ry   r   r   s      @@@@@r"   test__prepare_outputsz)Test_BoundingDomain.test__prepare_outputs  s   **2<>>::lnnlnn\^^
::q:::44588444X__-'  
 
 	l;;{K      * 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ !88	/ 	/ 	/ 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ?A	DDDc           	         t          j                    }|                     |          }t          j                    }t          j                    }t          j                    }t          j                    }t           j                            t
          dd          5 }d|_        |j        |                    ||||          k    sJ |j	        t          j
        ||g|||          gk    sJ |                                 d|_        |j        |                    ||||          k    sJ |j	        t          j
        |||||          gk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   Tr   r-   r.   )r   r   r|   r   r   r   r   r   prepare_outputsr   r   
reset_mock)r    rt   r   r   r   ry   r   	mkPrepares           r"   test_prepare_outputsz(Test_BoundingDomain.test_prepare_outputs  s   **511lnnlnn\^^
X__/$  
 
 	EO)\-I-I{K. .     + =/;Z 0    
   """  EO)\-I-I{K. .     + -k: 0     )	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B2EE #E c                 :   |                      t          j                              }|                    t          j                    d          J |                    dd          J |                    dt          j        z  d          t          j        k    sJ d S )NFr   T   )r|   r   r   _get_valid_outputs_unitr@   rA   r   s     r"   test__get_valid_outputs_unitz0Test_BoundingDomain.test__get_valid_outputs_unit9  s    **2<>>:: 33BLNNEJJRRR 33At<<DDD 33BHdCCqsJJJJJJr$   c           
      l   |                      t          j                              }t          j                    }t          j                    }t          j                    }t          j                    }t          j                    }t          j                    }t          j                            t
          dd          5 }t          j                            t
          dd          5 }	|                    ||||||          |	j        |j        fk    sJ |	j        t          j	        ||j        |||          gk    sJ |j        t          j	        |j        |          gk    sJ |j        t          j	        |          gk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tr   r   )
r|   r   r   r   r   r   _evaluate_modelr   r   r   )
r    r   evaluatevalid_inputsry   r   r   
with_unitsmkGetr   s
             r"   test__evaluate_modelz(Test_BoundingDomain.test__evaluate_modelE  sc   **2<>>::<>>|~~lnnlnn\^^
\^^
X__6  
 
 	J!2T !   J#33    ,e.@AB B B B !/G$ -##" 4     +GH1:>>0      .27<3H3H2IIIIII/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s7    (F)(BFF)F	F)F	F))F-0F-c                    |                      t          j                              }t          j                    }t          j                    }t          j                    }t          j                    }t          j                    }t          j                    }t          j                    }||df||dfg}	t          j                            | j         dd|	          5 }
t          j                            t
          dd          5 }t          j                            t
          dd          5 }|                    |||||          |j        k    sJ |j        t          j	        |||          gk    sJ |j        g k    sJ |
j        t          j	        |||          gk    sJ |
                                 |

                                 |                    |||||          |j        k    sJ |j        g k    sJ |j        t          j	        |||||||          gk    sJ |
j        t          j	        |||          gk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTFrx   r   r   r   r  )r|   r   r   r   r   r   	_evaluater   r   r   r   )r    r   r  rz   ry   r   r  r  r   r   r   mkAll
mkEvaluates                r"   test__evaluatez"Test_BoundingDomain.test__evaluatek  s   **2<>>::<>>lnn\^^
\^^
|~~lnn ;-;.
 X__!1Dg  
 
 0	!2T !   -X__#%6 %   * %..$fk:z  !-. . . .
 !/k:FF4     &4::::$3k6BB8     $$&&&((*** %..$fk:z  &23 3 3 3
 !/25555%4($(''&& 
9 
 
 
 
 %3k6BB8     Q* * * * * * * * * * * * * * *- - - - - - - - - - - - - - -0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	s[   (J(I).DII)II)II)J)I-	-J0I-	1JJJc                     |                      t          j                              }|                    dd           dk    sJ |                    dt          j                  dt          j        z  k    sJ d S )N   )r|   r   r   _set_outputs_unitr@   rA   r   s     r"   test__set_outputs_unitz*Test_BoundingDomain.test__set_outputs_unit  so    **2<>>:: --b$772==== --b!#66"qs(BBBBBBr$   c                    |                      t                                }t          j                    }t          j                    }t          j                    }t          j                    }t          j                    }||f}t          j                            t          dd|          5 }t          j                            t          dd          5 }	t          j                            t          dd          5 }
t          j                            t          dt          j                  5 }t          |	j
                  |                    |||          k    sJ |	j        t          j        ||          gk    sJ |j        t          j        ||||
j
        ||j
                  gk    sJ |
j        t          j        |j        |          gk    sJ |j        t          j                    gk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr	  Tr   r  r   ry   bbox_with_units)new_callable)r|   r   r   r   r   r   r   r   PropertyMockr   r   r  r   r   r   )r    r   r  rz   r   outputsvalid_outputs_unitvaluer  mkSetmkShapemkUnitss               r"   test_evaluatez!Test_BoundingDomain.test_evaluate  s   **:<<88<>>\^^
,..\^^,-X__[4e  
 
 	E!4t !   EX__UMD_II EW0r )   E $U%788L<Q<Q$fj= =          %3GG-?@@8          *8G , ( & ' 4 * ' 4 	= 	  	  	  	   '5GL$7@@:          '5"'))DDDDD-E E E E E E E E E E E E E E EE E E E E E E E E E E E E E EE E E E E E E E E E E E E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   -(I(H/=2H/CH	5HHHH	HH/HH/H H/#I/H3	3I6H3	7IIIN)rh   ri   rj   r}   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rk   r$   r"   rm   rm      s       - - -= = =*+ + +
, 
, 
,/ / /4 4 4*"4 "4 "4HK K K! ! !$: : :2* * *9 9 9H H H+ + +6# # #("O "O "OH  2! ! !F
K 
K 
K$J $J $JL@ @ @DC C C'E 'E 'E 'E 'Er$   rm   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestModelBoundingBoxc                    d}t          j                    }t          ||          }t          |t                    sJ |j        i k    sJ |j        |k    sJ |j        g k    sJ |j        dk    sJ i }t          j                    }t          ||d          }t          |t                    sJ |j        i k    sJ |j        |k    sJ |j        g k    sJ |j        dk    sJ d}t          j                    }d|_	        dg|_
        t          ||          }t          |t                    sJ |j        ddik    sJ |j        |k    sJ d}t          j                    }d	|_	        dd
g|_
        t          ||dg          }t          |t                    sJ |j        ddik    sJ |j        |k    sJ |j        dgk    sJ d}t          j                    }d|_	        g d|_
        t          ||d	gd          }t          |t                    sJ |j        dddk    sJ |j        |k    sJ |j        d	gk    sJ |j        dk    sJ d S )Nrk   r   r   r   r,   r-   r   r   r.   r   r   )r,   r;   r<   r;   r   r   r   )r   r   r  rT   )r   r   r   r   r   
_intervalsr   r   r   r   rz   r    	intervalsrt   r   s       r"   r#   z TestModelBoundingBox.test_create  s   	'	599,88888&",,,,"e++++$****"c)))) 	'	5DDD,88888&",,,,"e++++$****"c)))) 	u'	599,88888&1f+5555"e++++ 	Sz'	51#FFF,88888&1f+5555"e++++$++++$	&'	51#SQQQ,88888&f*@*@@@@@"e++++$++++"c))))))r$   c                 
   t          j        t                      d          }|                                }||k    sJ t	          |          t	          |          k    sJ |j        |j        k    sJ t	          |j                  t	          |j                  k    sJ |j        |j        k    sJ t	          |j                  t	          |j                  k    sJ |j        |j        k    sJ t	          |j                  t	          |j                  k    sJ |j        	                                D ]\  }}||j        |         k    sJ t	          |          t	          |j        |                   k    sJ |j
        |j        |         j
        k    sJ t	          |j
                  t	          |j        |         j
                  k    sJ |j        |j        |         j        k    sJ t	          |j                  t	          |j        |         j                  k    sJ t          |j                  t          |j                  k    sJ |j                                        |j                                        k    sJ d S )N))r5   r7   )gffffffgffffff?)r   rQ   r   r'   r(   r   r   r   r#  itemsr   r   lenkeys)r    r   r'   r   r!   s        r"   r)   zTestModelBoundingBox.test_copy  sn   '0LL4
 
   ""t####,2d88++++#t|3333,&''2dl+;+;;;;; "dk1111,%&&"T[//9999 "dk1111,%&&"T[//9999  ,5;;== 
	I 
	IOE8t~e44444h<<2dnU&;#<#<<<<< >T^E%:%@@@@@hn%%DN5,A,G)H)HHHHH >T^E%:%@@@@@hn%%DN5,A,G)H)HHHHHH<)**c$..A.AAAAA%**,,0C0C0E0EEEEEEEr$   c                     dt          dd          i}t          j                    }d|_        dg|_        t          ||          }|j        |k    sJ |j        |k    sJ d S )Nr   r-   r.   r   )r
   r   r   r   rz   r   r!  r#  r"  s       r"   test_intervalsz#TestModelBoundingBox.test_intervals=  sl    	!Q(	u'	599&)3333%222222r$   c                    d t          d          D             }t          j                    }d|_        d t          d          D             |_        t          ||          }|j        }t          |t                    sJ |	                                D ]6\  }}||j        v sJ ||j        
                    |                   |k    sJ 7t          |j                  D ]%\  }}||v sJ ||v sJ ||         ||         k    sJ &d S )Nc                 6    i | ]}|t          ||d z             S r-   )r
   r   s     r"   r   z=TestModelBoundingBox.test_named_intervals.<locals>.<dictcomp>H  s(    FFFcS)Cq11FFFr$   r<   c                 4    g | ]}t          j                    S rk   r   r   s     r"   r   z=TestModelBoundingBox.test_named_intervals.<locals>.<listcomp>K  r   r$   )r   r   r   r   rz   r   named_intervalsr   dictr%  r   r   )r    r#  rt   r   namedr   r!   r   s           r"   test_named_intervalsz)TestModelBoundingBox.test_named_intervalsG  s0   FFU1XXFFF	99a999'	599,%&&&&&#kkmm 	C 	CND(5<''''U\//556(BBBBB$U\22 	3 	3KE4I%%%%5====U#uT{22222	3 	3r$   c                 f   t          dd          t          dd          d}t                      }t          j        ||          }|                                dk    sJ dt          dd          i}t                      }t          j        ||dg	          }|                                d
k    sJ d S )NrU   r-   r<   rT   zModelBoundingBox(
    intervals={
        x: Interval(lower=-1, upper=1)
        y: Interval(lower=-4, upper=4)
    }
    model=Gaussian2D(inputs=('x', 'y'))
    order='C'
)r   r   r   zModelBoundingBox(
    intervals={
        x: Interval(lower=-1, upper=1)
    }
    ignored=['y']
    model=Gaussian2D(inputs=('x', 'y'))
    order='C'
))r
   r   r   rQ   r   r"  s       r"   test___repr__z"TestModelBoundingBox.test___repr__X  s    !"a((Yr1-=-=>>	'0	BB !!## (     	"a(()	'0	C5QQQ !!## (      r$   c                 &   dt          dd          i}t                      }t          j        ||          }t	          |          dcxk    rt	          |j                  k    sn J t          dd          t          dd          d}t                      }t          j        ||          }t	          |          dcxk    rt	          |j                  k    sn J i |_        t	          |          dcxk    rt	          |j                  k    sn J d S Nr   rU   r-   r3  r<   rT   r.   )r
   r   r   rQ   r&  r!  r   r"  s       r"   test___len__z!TestModelBoundingBox.test___len__w  s#   	"a(()	'0	BB<  AEEEE\-D)E)EEEEEEE!"a((Yr1-=-=>>	'0	BB<  AEEEE\-D)E)EEEEEEE"$<  AEEEE\-D)E)EEEEEEEEEr$   c                 R   t          dd          t          dd          d}t                      }t          j        ||          }d|v sJ d|v sJ d|vsJ d	|v sJ d|v sJ d
|vsJ t	          j                    |vsJ |d= d|v sJ d|v sJ d|vsJ d	|v sJ d|v sJ d
|vsJ d S )NrU   r-   r3  r<   rT   r   r   r   r   r.   )r
   r   r   rQ   r   r   r"  s       r"   test___contains__z&TestModelBoundingBox.test___contains__  s;   !"a((Yr1-=-=>>	'0	BB l""""l"""",&&&& L    L    $$$$ |~~\1111  l""""l"""",&&&& L    L    $$$$$$r$   c                    t          dd          t          dd          d}t                      }t          j        ||          }|d         dk    sJ |d         d	k    sJ t	          j        t          d
          5  |d          d d d            n# 1 swxY w Y   |d         dk    sJ |d         d	k    sJ |t          j        d                   dk    sJ |t          j        d                   d	k    sJ |t          j	        d                   dk    sJ |t          j	        d                   d	k    sJ d}t	          j        t          |          5  |d          d d d            n# 1 swxY w Y   t	          j        t          |          5  |t          j        d                    d d d            n# 1 swxY w Y   t	          j        t          |          5  |t          j	        d                    d d d            n# 1 swxY w Y   |d= |d         t          k    sJ |d         d	k    sJ |d= |d         t          k    sJ |d         t          k    sJ d S )NrU   r-   r3  r<   rT   r   rU   r-   r   r3  r<   r   r8   r   r   z+Integer key: 2 must be non-negative and < 2r.   )r
   r   r   rQ   rD   rE   rF   rB   r   r   r   r	   r    r#  rt   r   rG   s        r"   test___getitem__z%TestModelBoundingBox.test___getitem__  sj   !"a((Yr1-=-=>>	'0	BB C G++++C G++++ ]:-QRRR 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 A'))))A'))))BHQKK(G3333BHQKK(G3333BHQKK(G3333BHQKK(G3333 A]:W555 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:W555 	& 	&!%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&]:W555 	& 	&!%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& OA"33333A'))))OA"33333A"3333333sH   <	BBB	E**E.1E.F77F;>F;HHHc                    t                      }t          j        |i dg          }|                                t          j         t          j        fk    sJ |                    d          t          j         t          j        fk    sJ |                    d          t          j         t          j        fk    sJ dt          dd          i}t                      }t          j        ||          }|                                dk    sJ |                    t          j                              dk    sJ t          dd          t          d	d
          d}t                      }t          j        ||          }|                                dk    sJ |                    d          dk    sJ |                    d          dk    sJ d S )Nr   r   r   r   r   rU   r-   r;  r3  r<   rT   r<  r;  r;  r<  )
r   r   rQ   r   rB   rb   r
   r   r   r   r    rt   r   r#  s       r"   test_bounding_boxz&TestModelBoundingBox.test_bounding_box  s   '0SEJJJ((**w.?????((--26'261BBBBB((--26'261BBBBB 	"a(()	'0	BB((**g5555((88GCCCC ""a((Yr1-=-=>>	'0	BB((**.@@@@@((--1CCCCC((--1CCCCCCCr$   c           	         dt          dd          i}t                      }t          j        |                                |                                          }||k    sJ |t          j        |                                |                                          k    sJ |dk    sJ |t          j                    k    rJ |dk    rJ |t          j        |dt          dd          i          k    rJ t          dd          t          dd	          d
}t                      }t          j        ||          }t          j        ||d          }|j        dk    sJ |dk    sJ |dk    rJ |j        dk    sJ |dk    rJ |dk    sJ ||k    sJ t                      }t          j                    g|_	        t          j                    g|_	        |j	        |j	        k    sJ ||k    rJ d S )Nr   rU   r-   r;  r.   rF  r.   r3  r<   rT   r   r   r   r@  rA  )
r
   r   r   rQ   r'   r   r   r   r   r   )r    r#  rt   r   bounding_box_1bounding_box_2s         r"   test___eq__z TestModelBoundingBox.test___eq__  s   	"a(()	'0y~~?O?OPP|++++/8y~~GWGWXXXXXXw&&&& BLNN2222 G++++,5ea2qAQAQ=RSSSSSS ""a((Yr1-=-=>>	)25)DD)25)3OOO$++++!33333"&88888$++++"&88888!33333//// #%<>>"2#%<>>"2&.*AAAAA"n444444r$   c                    t                      }t          j        |i ddg          }|j        ddgk    sJ d|j        vsJ d|j        v sJ t          dd          |d<   d|j        v sJ d|j        vsJ t          |d         t                    sJ |d         dk    sJ d|j        vsJ d|j        v sJ t          dd          |d	<   d|j        v sJ d|j        vsJ t          |d	         t                    sJ |d	         d
k    sJ |d= |d	= d|j        vsJ d|j        v sJ t          dd          |d<   d|j        v sJ d|j        vsJ t          |d         t                    sJ |d         dk    sJ d|j        vsJ d|j        v sJ t          dd          |d<   d|j        v sJ d|j        vsJ t          |d         t                    sJ |d         d
k    sJ |d= |d= d|j        vsJ d|j        v sJ d|d<   d|j        v sJ d|j        vsJ t          |d         t                    sJ |d         dk    sJ d|j        vsJ d|j        v sJ d
|d	<   d|j        v sJ d|j        vsJ t          |d	         t                    sJ |d	         d
k    sJ |d= |d	= d|j        vsJ d|j        v sJ d|d<   d|j        v sJ d|j        vsJ t          |d         t                    sJ |d         dk    sJ d|j        vsJ d|j        v sJ d
|d<   d|j        v sJ d|j        vsJ t          |d         t                    sJ |d         d
k    sJ t          ddgddgddgd          }t          i |          }d|vsJ t          t          j
        ddg          t          j
        ddg                    |d<   d|v sJ t          |d         t                    sJ |d         j        t          j
        ddg          k                                    sJ |d         j        t          j
        ddg          k                                    sJ i |_        d|vsJ t          t          j
        ddg          t          j
        ddg                    |d<   d|v sJ t          |d         t                    sJ |d         j        t          j
        ddg          k                                    sJ |d         j        t          j
        ddg          k                                    sJ i |_        d|vsJ t          j
        ddg          t          j
        ddg          f|d<   d|v sJ t          |d         t                    sJ |d         j        t          j
        ddg          k                                    sJ |d         j        t          j
        ddg          k                                    sJ i |_        d|vsJ t          j
        ddg          t          j
        ddg          f|d<   d|v sJ t          |d         t                    sJ |d         j        t          j
        ddg          k                                    sJ |d         j        t          j
        ddg          k                                    sJ d S )Nr   r-   r   rU   r   r;  r3  r<   r   r<  皙?皙?r=   r   r.   n_modelsrF  )r   r   rQ   r   r#  r   r
   r   r   rB   rC   r   rK   r   r!  r   s      r"   test__setitem__z$TestModelBoundingBox.test__setitem__  sw   '0QFKKK$A.... .....L(((((%b!,,SL*****,,,,,,s+Y77777C G++++.....L(((((%b!,,SL*****,,,,,,s+Y77777C G++++ .....L(((((#B**QL*****,,,,,,q/955555A')))).....L(((((#B**QL*****,,,,,,q/955555A'))))OO .....L(((((#SL*****,,,,,,s+Y77777C G++++.....L(((((#SL*****,,,,,,s+Y77777C G++++ .....L(((((!QL*****,,,,,,q/955555A')))).....L(((((!QL*****,,,,,,q/955555A')))) C:1v1vBBB'E22 ,&&&&%bhBx&8&8"(Aq6:J:JKKSl"""",s+Y77777S!'28RH+=+==BBDDDDDS!'28QF+;+;;@@BBBBB"$$$$$#BHb"X$6$6!Q8H8HIIQL    ,q/955555Q%2r(););;@@BBBBBQ%1a&)9)99>>@@@@@ #%,&&&&Xr2h//1a&1A1ABSl"""",s+Y77777S!'28RH+=+==BBDDDDDS!'28QF+;+;;@@BBBBB"$$$$$8RH--rxA/?/?@QL    ,q/955555Q%2r(););;@@BBBBBQ%1a&)9)99>>@@@@@@@r$   c                    t          dd          t          dd          d}t                      }t          j        ||          }d|j        v sJ d|j        vsJ d|v sJ d|v sJ |d= d|j        vsJ d|j        v sJ d|v sJ d|v sJ t          j        t          d	          5  |d= d d d            n# 1 swxY w Y   d|j        v sJ d|j        vsJ d|v sJ d
|v sJ |d
= d|j        vsJ d|j        v sJ d|v sJ d
|v sJ t          j        t          d	          5  |d
= d d d            d S # 1 swxY w Y   d S )NrU   r-   r3  r<   rT   r   r   zCannot delete ignored input: 0!r8   r   zCannot delete ignored input: y!)	r
   r   r   rQ   r#  r   rD   rE   r   r"  s       r"   test___delitem__z%TestModelBoundingBox.test___delitem__  sq   !"a((Yr1-=-=>>	'0	BB L*****,,,,,L    l""""O.....L(((((L    l"""" ]</QRRR 	  	 Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  L*****,,,,,L    l"""".....L(((((L    l"""" ]</QRRR 	" 	"S!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s$   'B77B;>B;$D55D9<D9c                    t                      }t          i |          }t          dd          t          dd          d}d|vsJ d|vsJ |                    |           d|v sJ |d         dk    sJ d|v sJ |d         d	k    sJ t	          |j                  d
k    sJ i |_        t          dd          t          dd          d}d|vsJ d|vsJ |                    |           d|v sJ |d         dk    sJ d|v sJ |d         d	k    sJ t	          |j                  d
k    sJ t          ddgddgddgd
          }t          i |          }dt          t          j	        ddg          t          j	        dd
g                    i}d|vsJ |                    |           d|v sJ |d         j
        t          j	        ddg          k                                    sJ |d         j        t          j	        dd
g          k                                    sJ i |_        dt          t          j	        ddg          t          j	        dd
g                    i}d|vsJ |                    |           d|v sJ |d         j
        t          j	        ddg          k                                    sJ |d         j        t          j	        dd
g          k                                    sJ d S )NrU   r-   r3  r<   r   r   r   r   r;  r<  r.   rT   r   rK  rL  r=   r   rM  rF  )r   r   r
   _validate_dictr&  r#  r!  r   rB   rC   r   rK   r   rB  s       r"   test__validate_dictz(TestModelBoundingBox.test__validate_dict  s}   'E22 $B**2q1A1ABB	,&&&&,&&&&##I...l""""C G++++l""""C G++++<)**a//// #%!"a((Yr1-=-=>>	$$$$$$$$##I...L    A'))))L    A'))))<)**a//// C:1v1vBBB'E22)BHb"X$6$6!Q8H8HIIJ	,&&&&##I...l""""S!'28RH+=+==BBDDDDDS!'28QF+;+;;@@BBBBB"$	"(B8"4"4bh1v6F6FGGH	$$$$##I...L    Q%2r(););;@@BBBBBQ%1a&)9)99>>@@@@@@@r$   c                    t                      }t          i |          }d|vsJ d|vsJ |                    d           d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j                  dk    sJ i |_        d|vsJ d|vsJ |                    dd           d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j                  dk    sJ i |_        d|vsJ d|vsJ |                    dd	           d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j                  dk    sJ i |_        d|vsJ d|vsJ d
}t          j        t          |          5  |                    dt          j
                               d d d            n# 1 swxY w Y   d|vsJ d|vsJ t          |j                  dk    sJ d S )Nr   r   r@  r;  r<  r.   r   r   r   r   r8   r   )r   r   _validate_sequencer&  r#  r!  rD   rE   rF   r   r   r   s       r"   test__validate_sequencez,TestModelBoundingBox.test__validate_sequence  s-   'E22 ,&&&&,&&&&''(:;;;l""""C G++++l""""C G++++<)**a//// #%,&&&&,&&&&''(:#'FFFl""""C G++++l""""C G++++<)**a//// #%,&&&&,&&&&''(:#'FFFl""""C G++++l""""C G++++<)**a//// #%,&&&&,&&&&C]:W555 	V 	V++,>blnn+UUU	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V,&&&&,&&&&<)**a//////s   
)F??GGc                    t                      }t          dd          t          dd          d}t          j        ||          }|j        dk    sJ dt          dd          i}t          j        ||dg	          }|j        dk    sJ t          j        |i d
dg	          }|j        dk    sJ g d|_        |j        dk    sJ d S )NrU   r-   r3  r<   rT   r.   r   r   r   r   r   )r   r
   r   rQ   	_n_inputsr   )r    rt   r#  r   s       r"   test__n_inputsz#TestModelBoundingBox.test__n_inputs  s    !"a((Yr1-=-=>>	'0	BB%****	"a(()	'0	C5QQQ%****'0S#JOOO%**** /%******r$   c                 Z   t                      }t          i |          }d|vsJ d|vsJ |                    d           d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j                  dk    sJ i |_        d|vsJ d|vsJ |                    dd           d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j                  dk    sJ i |_        t          d	d
          t          dd          d}d|vsJ d
|vsJ |                    |           d|v sJ |d         dk    sJ d
|v sJ |d
         dk    sJ t          |j                  dk    sJ i |_        d
g|_        dt          d	d
          i}d|j        vsJ |                    |           d|j        v sJ |d         dk    sJ d}i |_        g |_        d|vsJ d|vsJ t          j	        t          |                    dd                    5  |                    d           d d d            n# 1 swxY w Y   t          |j                  dk    sJ d|vsJ d|vsJ d
g|_        t          d	d
          t          dd          d}t          j	        t          |                    dd
                    5  |                    |           d d d            n# 1 swxY w Y   t          |j                  dk    sJ g |_        dt          d	d
          i}t          j	        t          |                    d
d                    5  |                    |           d d d            n# 1 swxY w Y   d|vsJ d|vsJ t          |j                  dk    sJ d S )Nr   r   r@  r;  r<  r.   r   r   rU   r-   r3  r<   rT   r   z,Found {} intervals, but must have exactly {}r;   r8   )r<  r;  r;   )r   r   _validate_iterabler&  r#  r!  r
   r   rD   rE   rF   format)r    rt   r   r#  rG   s        r"   test__validate_iterablez,TestModelBoundingBox.test__validate_iterable  s   'E22 ,&&&&,&&&&''(:;;;l""""C G++++l""""C G++++<)**a//// #%,&&&&,&&&&''(:#'FFFl""""C G++++l""""C G++++<)**a//// #%!"a((Yr1-=-=>>	$$$$$$$$''	222L    A'))))L    A'))))<)**a//// #%!"	"a(()	.....''	222L*****A')))) A"$ ",&&&&,&&&&]:W^^Aq-A-ABBB 	I 	I++,GHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I<)**a////,&&&&,&&&&!"!"a((Yr1-=-=>>	]:W^^Aq-A-ABBB 	7 	7++I666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7<)**a//// "	"a(()	]:W^^Aq-A-ABBB 	7 	7++I666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7,&&&&,&&&&<)**a//////s6   I  II	K++K/2K/M::M>M>c                    t                      }t          i |          }d|vsJ d|vsJ |                    d           d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j                  dk    sJ i |_        d|vsJ d|vsJ |                    dd           d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j                  dk    sJ i |_        t          d	d
          t          dd          d}d|vsJ d|vsJ |                    |           d|v sJ |d         dk    sJ d
|v sJ |d
         dk    sJ t          |j                  dk    sJ dt          d	d
          i}t          i |d
g          }d|j        vsJ d
|j        vsJ |                    |           d|j        v sJ |d         dk    sJ d
|j        vsJ t          |j                  d
k    sJ t                      }t          i |          }d|vsJ |                    d           d|v sJ |d         dk    sJ t          |j                  d
k    sJ t          ddgddgddgd          }t          i |          }t          j	        d	dg          t          j	        d
dg          f}d|vsJ |                    |           d|v sJ |d         j
        t          j	        d	dg          k                                    sJ |d         j        t          j	        d
dg          k                                    sJ d S )Nr   r   r@  r;  r<  r.   r   r   rU   r-   r3  r<   rT   r   r   rK  rL  r=   r   rM  rF  )r   r   	_validater&  r#  r!  r
   r   rB   rC   r   rK   r   )r    rt   r   r#  sequences        r"   test__validatez#TestModelBoundingBox.test__validateX  st   'E22 ,&&&&,&&&&1222l""""C G++++l""""C G++++<)**a//// #%,&&&&,&&&&1===l""""C G++++l""""C G++++<)**a//// #%!"a((Yr1-=-=>>	,&&&&,&&&&y)))L    A'))))L    A'))))<)**a//// 	"a(()	'EA3???..........y)))L*****A')))).....<)**a//// 'E22,&&&&w'''l""""C G++++<)**a//// C:1v1vBBB'E22Hb"X&&!Q(8(89,&&&&x(((l""""S!'28RH+=+==BBDDDDDS!'28QF+;+;;@@BBBBBBBr$   c                    t                      }dt          j                    i}t          j        |dfi |}|j        j        |j        k                                    sJ d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j	                  dk    sJ t          j        |dfdd	i|}|j        j        |j        k                                    sJ d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j	                  dk    sJ t          d
d          t          dd          d}t          j        ||fdd	i|}|j        j        |j        k                                    sJ d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j	                  dk    sJ |j        d	k    sJ |}t          j        ||fi |}|j        j        |j        k                                    sJ d|v sJ |d         dk    sJ d|v sJ |d         dk    sJ t          |j	                  dk    sJ |j        d	k    sJ dt          d
d          i}t          j        ||fddgi|}|j        j        |j        k                                    sJ d|v sJ |d         dk    sJ d|v sJ |d         t          k    sJ t          |j	                  dk    sJ t          j        t                      dfi |}|j        j        t                      j        k                                    sJ d|v sJ |d         dk    sJ t          |j	                  dk    sJ t          ddgddgddgd          }t          j        d
dg          t          j        ddg          f}t          j        ||fi |}d|v sJ |d         j        t          j        d
dg          k                                    sJ |d         j        t          j        ddg          k                                    sJ d S )Nr   r@  r   r;  r   r<  r.   r   r   rU   r-   r3  r<   rT   r   r   rK  rL  r=   r   rM  rF  )r   r   r   r   rQ   r   
parametersrK   r&  r#  r
   r   r	   r   rB   rC   r   r   )r    rt   r   r   r#  bboxrd  s          r"   rR   z"TestModelBoundingBox.test_validate  sv   ",..) (08JUUfUU#.%2BBGGIIIIIl""""C G++++l""""C G++++<)**a//// (0%
 
-0
4:
 
 #.%2BBGGIIIIIl""""C G++++l""""C G++++<)**a//// ""a((Yr1-=-=>>	'0	WWWPVWW#.%2BBGGIIIIIL    A'))))L    A'))))<)**a////!S(((( '0GGGG#.%2BBGGIIIIIL    A'))))L    A'))))<)**a////!S(((( 	"a(()	'09
 
'*e
/5
 
 #.%2BBGGIIIIIl""""C G++++l""""C $55555<)**a//// (0wQQ&QQ#.*,,2IINNPPPPPl""""C G++++<)**a//// C:1v1vBBBHb"X&&!Q(8(89'0KKFKKl""""S!'28RH+=+==BBDDDDDS!'28QF+;+;;@@BBBBBBBr$   c                 0   t          j        t                      d          }|                    t	                      dt          j                    i          }||k    rJ |j        j        t	                      j        k    	                                sJ d|v sJ |d         dk    sJ d|vsJ t          |j                  dk    sJ |j        g k    sJ |                    t                      dt          j                    id          }||k    rJ |j        j        t                      j        k    	                                sJ d|v sJ |d         dk    sJ d|v sJ d|j        v sJ t          |j                  dk    sJ |j        dgk    sJ d S )Nr@  r-   r   r;  r   T)_keep_ignored)r   rQ   r   r   r   r   r   r   rg  rK   r&  r#  r   r   )r    r   new_bounding_boxs      r"   r   z$TestModelBoundingBox.test_fix_inputs  s   '0?QRR (22:<<!R\^^ATUU $44444 '2jll6MMRRTTTTT&&&&&$////*****#-..!3333'2---- (22LL1blnn-T 3 
 
 !$44444 '2jll6MMRRTTTTT&&&&&$////&&&&&&55555#-..!3333'A3......r$   c                    dt          dd          i}t                      }t          j        ||          }|j        dcxk    rt          |j                  k    sn J t          dd          t          dd          d}t                      }t          j        ||          }|j        dcxk    rt          |j                  k    sn J i |_        |j        dcxk    rt          |j                  k    sn J d S r6  )r
   r   r   rQ   	dimensionr&  r!  r   r"  s       r"   test_dimensionz#TestModelBoundingBox.test_dimension  s   	"a(()	'0	BB%JJJJc,2I.J.JJJJJJJ!"a((Yr1-=-=>>	'0	BB%JJJJc,2I.J.JJJJJJJ"$%JJJJc,2I.J.JJJJJJJJJr$   c           	      .   t          dd          t          dd          d}t                      }t          j        ||          }t	          j        |                    d                    t	          j        t	          j        ddd          t	          j        ddd          g          k                                    sJ t	          j        |                    dd                    t	          j        t	          j        ddd          t	          j        ddd          g          k                                    sJ t	          j        |                    dd	                    t	          j        t	          j        ddd          t	          j        ddd          g          k                                    sJ d
}t          j
        t          |          5  |                    dt          j                               d d d            d S # 1 swxY w Y   d S )NrU   r-   r   r.   rT   r\   r   r   r   r   r8   )r
   r   r   rQ   rB   rC   r]   rY   rK   rD   rE   rF   r   r   r=  s        r"   r^   z TestModelBoundingBox.test_domain  s   !"a((Yq!__==	'0	BB H\((..//xQ1--r{2q!/D/DEFFG
#%%	 	 	 H\((s3344xQ1--r{2q!/D/DEFFG
#%%	 	 	 H\((s3344xRA..Aq!0D0DEFFG
#%%	 	 	 D]:W555 	6 	6blnn555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   (H

HHc                 D   t          dd          t          dd          d}t                      }t          j        ||          }t	          j        ddd          }t	          j        ddd          }|j        }||f}|                    ||          \  }}	|d t          d          D             k    	                                sJ |	st          |	t                    sJ t	          j        ddd          }t	          j        dd	d          }|j        }||f}|                    ||          \  }}	|g d
k    	                                sJ |	st          |	t                    sJ t	          j        dd	d          }t	          j        ddd          }|j        }||f}|                    ||          \  }}	|d t          d          D             k    	                                sJ |	rt          |	t                    sJ d}d}|                    ||          \  }}	|dgk    	                                sJ |	st          |	t                    sJ d}d}|                    ||          \  }}	|dgk    	                                sJ |	rt          |	t                    sJ d S )NrU   r-   r   r.   rT   rV   c                     g | ]}d S )Frk   r   s     r"   r   z6TestModelBoundingBox.test__outside.<locals>.<listcomp>7  s    !;!;!;A%!;!;!;r$   rF  r;   rW   c                     g | ]}d S )Trk   r   s     r"   r   z6TestModelBoundingBox.test__outside.<locals>.<listcomp>R  s    !:!:!:1$!:!:!:r$   r&   r&   r,  Fr.   rU   T)r
   r   r   rQ   rB   rY   r   _outsider   rK   r   bool)
r    r#  rt   r   r   r   ry   rz   outside_indexall_outs
             r"   test__outsidez"TestModelBoundingBox.test__outside,  s   !"a((Yq!__==	'0	BB KAr""K1b!!gQ!-!6!6{F!K!Kw!;!;r!;!;!;;@@BBBBB8z'488888 KAr""K1b!!gQ!-!6!6{F!K!Kw    #%%	 	 	 8z'488888 K1b!!KB##gQ!-!6!6{F!K!Kw!:!:b		!:!:!::??AAAAA4:gt44444 !-!6!6{F!K!Kw%(--/////8z'488888 !-!6!6{F!K!Kw$',,.....4:gt4444444r$   c                 "   t          dd          t          dd          d}t                      }t          j        ||          }t	          j        ddd          }t	          j        ddd          }|j        }||f}|                    ||          \  }}	t          |          dk    sJ |d         d t          d          D             k    
                                sJ |	st          |	t                    sJ t	          j        ddd          }t	          j        dd	d          }|j        }||f}|                    ||          \  }}	t          |          dk    sJ |d         g d
k    
                                sJ |	st          |	t                    sJ t	          j        dd	d          }t	          j        ddd          }|j        }||f}|                    ||          \  }}	t          |          dk    sJ |d         g k    
                                sJ |	rt          |	t                    sJ d}d}|                    ||          \  }}	t          |          dk    sJ |d         dgk    
                                sJ |	st          |	t                    sJ d}d}|                    ||          \  }}	t          |          dk    sJ |d         g k    
                                sJ |	rt          |	t                    sJ d S )NrU   r-   r   r.   rT   rV   c                     g | ]}|S rk   rk   r   s     r"   r   z:TestModelBoundingBox.test__valid_index.<locals>.<listcomp>o      "<"<"<33"<"<"<r$   rF  r;   r<   r=   r>   r   r   rs  r,  rt  )r
   r   r   rQ   rB   rY   r   _valid_indexr&  r   rK   r   rv  )
r    r#  rt   r   r   r   ry   rz   r   rx  s
             r"   test__valid_indexz&TestModelBoundingBox.test__valid_indexc  sH   !"a((Yq!__==	'0	BB KAr""K1b!!gQ+88fMMW;1$$$$A"<"<%))"<"<"<<AACCCCC8z'488888 KAr""K1b!!gQ+88fMMW;1$$$$A///166888888z'488888 K1b!!KB##gQ+88fMMW;1$$$$A"$))+++++4:gt44444 +88fMMW;1$$$$A1#%**,,,,,8z'488888 +88fMMW;1$$$$A"$))+++++4:gt4444444r$   c           
      X   t          dd          t          dd          d}t                      }t          j        ||          }t	          j        ddd          }t	          j        ddd          }|j        }||f}|                    ||          \  }}	}
t	          j        |          t	          j        |          k    	                                sJ t          |	          dk    sJ |	d         d t          d          D             k    	                                sJ |
st          |
t                    sJ t	          j        ddd          }t	          j        dd	d          }|j        }||f}|                    ||          \  }}	}
t	          j        |          t	          j        |d
         |d         |d         |d         |d         g|d
         |d         |d         |d         |d         gg          k    	                                sJ t          |	          dk    sJ |	d         g dk    	                                sJ |
st          |
t                    sJ t	          j        dd	d          }t	          j        ddd          }|j        }||f}|                    ||          \  }}	}
|dk    sJ t          |	          dk    sJ |	d         g k    	                                sJ |
rt          |
t                    sJ d}d}|                    ||          \  }}	}
t	          j        |          t	          j        dgdgg          k    	                                sJ t          |	          dk    sJ |	d         dgk    	                                sJ |
st          |
t                    sJ d}d}|                    ||          \  }}	}
|dk    sJ t          |	          dk    sJ |	d         g k    	                                sJ |
rt          |
t                    sJ d S )NrU   r-   r   r.   rT   rV   c                     g | ]}|S rk   rk   r   s     r"   r   z<TestModelBoundingBox.test_prepare_inputs.<locals>.<listcomp>  r|  r$   rF  r;   r<   r=   r>   r   r   r}  rk   rs  r,  r&   rt  )r
   r   r   rQ   rB   rY   r   rx   rC   rK   r&  r   r   rv  )r    r#  rt   r   r   r   ry   rz   
new_inputsr   rx  s              r"   test_prepare_inputsz(TestModelBoundingBox.test_prepare_inputs  s   !"a((Yq!__==	'0	BB KAr""K1b!!gQ+7+F+F,
 ,
(
K $$(8(88==?????;1$$$$A"<"<%))"<"<"<<AACCCCC8z'488888 KAr""K1b!!gQ+7+F+F,
 ,
(
K HZ  xqT1Q41qtQqT2qT1Q41qtQqT2  #%%	 	 	 ;1$$$$A///166888888z'488888 K1b!!KB##gQ+7+F+F,
 ,
(
K R;1$$$$A"$))+++++4:gt44444 +7+F+F,
 ,
(
K $$3%#(@(@@EEGGGGG;1$$$$A1#%**,,,,,8z'488888 +7+F+F,
 ,
(
K R;1$$$$A"$))+++++4:gt4444444r$   c                     t          dt          d          dg          }|j        dgk    sJ t          dt          d          dg          }|j        dgk    sJ dS )zRegression test for #13028)r   r`   r-   r   r   )      r   N)r   r   r   )r    bbox_xbbox_ys      r"   test_bounding_box_ignorez-TestModelBoundingBox.test_bounding_box_ignore  sn     "'<??SEJJJ$----!(LOOcUKKK$------r$   N)rh   ri   rj   r#   r)   r)  r1  r4  r7  r9  r>  rC  rI  rO  rQ  rU  rX  r[  ra  re  rR   r   rn  r^   ry  r  r  r  rk   r$   r"   r  r    s       7* 7* 7*r!F !F !FF3 3 33 3 3"
 
 
>F F F% % %>%4 %4 %4ND D D.#6 #6 #6JwA wA wAr!" !" !"F,A ,A ,A\.0 .0 .0`+ + +"D0 D0 D0LCC CC CCJGC GC GCR/ / /8K K K6 6 6855 55 55n15 15 15fH5 H5 H5T. . . . .r$   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
Test_SelectorArgumentc                     t          j                    }t          j                    }t          ||          }t          |t                    sJ |j        |k    sJ |j        |k    sJ |||fk    sJ d S rw   )r   r   r   r   r   r   ignore)r    r   r  arguments       r"   r#   z!Test_SelectorArgument.test_create  s    $UF33($9:::::~&&&&&((((E6?******r$   c                    t                      }t          j        |d          dk    sJ t          j        |d          dk    sJ t          j        |d          dk    sJ t          j        |d          dk    sJ t          j                    }t          j        |d|          d|fk    sJ t          j        |d|          d|fk    sJ t          j        |d|          d|fk    sJ t          j        |d|          d|fk    sJ t          j        t          d          5  t          j        |d	           d d d            n# 1 swxY w Y   t          j        t          d
          5  t          j        |t          j                               d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Nr   r   Tr-   r-   Tr   r   r   r8   r   z(Key value: .* must be string or integer.-Integer key: .* must be non-negative and < .*r.   )	r   r   rQ   r   r   rD   rE   rF   r   )r    rt   r  s      r"   rR   z#Test_SelectorArgument.test_validate  s    !)%33y@@@@ )%33y@@@@ !)%55BBBB )%55BBBB )%F;;6{JJJJ )%F;;6{JJJJ !)%f==!VLLLL )%f==!VLLLL ]:-QRRR 	3 	3&uc222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3]I
 
 
 	> 	> &ublnn===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> ]N
 
 
 	1 	1 &ua000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s6   !EE
E)'FF #F G%%G),G)c                     d t          d          D             }t          d          D ]7} t          |t          j                              j        | ||         k    sJ 8d t          d          D             }t          d          D ]7} t          |t          j                              j        | ||         k    sJ 8d t          d          D             }t          d          D ]7} t          |t          j                              j        | ||         k    sJ 8d t          d          D             }t          d          D ]D} t          |t          j                              j        | t          ||                   k    sJ Ed S )Nc                     g | ]}|d z   S )   rk   r   s     r"   r   z;Test_SelectorArgument.test_get_selector.<locals>.<listcomp>      ///s#(///r$   r;   c                 >    g | ]}t          j        |d z   g          S )r  rB   rC   r   s     r"   r   z;Test_SelectorArgument.test_get_selector.<locals>.<listcomp>  s(    ;;;3"(C"H:&&;;;r$   c                 <    g | ]}t          j        |d z             S r   )rB   r   r   s     r"   r   z;Test_SelectorArgument.test_get_selector.<locals>.<listcomp>%  s&    >>>c"-b))>>>r$   c                 F    g | ]}t          j        |d z   |dz
  g          S )r     r  r   s     r"   r   z;Test_SelectorArgument.test_get_selector.<locals>.<listcomp>-  s/    EEES"(C"HcBh/00EEEr$   )r   r   r   r   get_selectorr   )r    rz   r   s      r"   test_get_selectorz'Test_SelectorArgument.test_get_selector  s   //eAhh///1XX 	 	EE!%88EvN%=! ! ! ! !
 <;%((;;;1XX 	 	EE!%88EvN%=! ! ! ! ! ?>U1XX>>>1XX 	 	EE!%88EvN%=! ! ! ! !
 FEE!HHEEE1XX 	& 	&EH$UBLNN;;Hve}%%& & & & &	& 	&r$   c                     t                      }t          |j                  D ]G}t          |t	          j                                                  |          |j        |         k    sJ Hd S rw   )r   r   r   r   r   r   r   rz   )r    rt   r   s      r"   	test_namezTest_SelectorArgument.test_name3  sr    5>** 	 	E!%88==eDD<&' ' ' ' '	 	r$   c                 j   t                      }t          dd                              |          dk    sJ t          dd                              |          dk    sJ t          dd                              |          dk    sJ t          dd                              |          dk    sJ 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_reprr    rt   s     r"   test_pretty_reprz&Test_SelectorArgument.test_pretty_repr;  s     a''33E::12 2 2 2 a&&2259901 1 1 1 a''33E::12 2 2 2 a&&2259901 1 1 1 1 1r$   c                    t                      }ddd}t          dt          j                                                  ||          dk    sJ t          dt          j                                                  ||          dk    sJ d}t          j        t          |          5 }t          dd                              |ddi           d d d            d S # 1 swxY w Y   d S )	Nr=   r   r   r   r   r-   z.* was not found in .*r8   T)r   r   r   r   get_fixed_valuerD   rE   r   )r    rt   valuesrG   errs        r"   test_get_fixed_valuez*Test_SelectorArgument.test_get_fixed_valueO  s2   Q !BLNN33CCE6RRVWWWWW !BLNN33CCE6RRVWWWWW ,]<w777 	F3a&&66uq!fEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs   ''CC"Cc                    t                      }t          j        |d          }|                    |d          du sJ |                    |d          du sJ |                    |d          du sJ |                    |d          du sJ t	          j        t          d          5  |                    |d	           d d d            n# 1 swxY w Y   t	          j        t          d
          5  |                    |t          j                               d d d            n# 1 swxY w Y   t	          j        t          d          5  |                    |d           d d d            d S # 1 swxY w Y   d S )Nr   Tr   r-   Fr   r   r8   r   r   r  r.   )
r   r   rQ   is_argumentrD   rE   rF   r   r   r   )r    rt   r  s      r"   test_is_argumentz&Test_SelectorArgument.test_is_argument^  sS   $-eQ77 ##E1--5555##E3//47777 ##E1--6666##E3//58888 ]:-QRRR 	- 	-  ,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-]H
 
 
 	8 	8   777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 ]N
 
 
 	+ 	+   ***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s6   'C

CC0(D$$D(+D(
E..E25E2c                     t                      }t          |j                  D ]K}t          j                    }t          ||                              |          |j        |         |fk    sJ Ld S rw   )r   r   r   r   r   r   named_tuplerz   )r    rt   r   r  s       r"   test_named_tuplez&Test_SelectorArgument.test_named_tuplev  s    5>** 	 	E\^^F$UF33??FFU#K     	 	r$   N)rh   ri   rj   r#   rR   r  r  r  r  r  r  rk   r$   r"   r  r    s        + + +1 1 1@& & &<  
 
 
(F F F+ + +0    r$   r  c                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )Test_SelectorArgumentsc                    t          t          dd          t          dd          f          }t          |t                     sJ |dk    sJ |j        g k    sJ t	          j                    }t          t          dd          t          dd          f|          }t          |t                     sJ |dk    sJ |j        |k    sJ d S )Nr   Tr-   Fr  r-   F)r   r   r   _kept_ignorer   r   )r    	argumentskept_ignores      r"   r#   z"Test_SelectorArguments.test_create  s    &q$''):1e)D)DE
 
	 )%78888833333%++++lnn&q$''):1e)D)DE{
 
	 )%78888833333%444444r$   c                     t                      }t          t          dd          t          dd          f          }|                    |          dk    sJ d S )Nr   Tr-   Fz]SelectorArguments(
    Argument(name='x', ignore=True)
    Argument(name='y', ignore=False)
))r   r   r   r  r    rt   r  s      r"   r  z'Test_SelectorArguments.test_pretty_repr  sm    &q$''):1e)D)DE
 
	
 !!%(( -      r$   c                    t          t          dd          t          dd          f          j        ddgk    sJ t          t          dd          t          dd          fddg          j        g dk    sJ t          t          dd          t          dd          f          j        dgk    sJ t          t          dd          t          dd          f          j        dgk    sJ t          t          dd          t          dd          f          j        g k    sJ t          t          dd          t          dd          fdd	g          j        dd	gk    sJ d S )
Nr   Tr-   rV   r<   )r   r-   rV   r<   Fr  r   )r   r   r  r    s    r"   test_ignorez"Test_SelectorArguments.test_ignore  s   !q$''):1d)C)CD
 

QF    "q$''):1d)C)CDr1g
 

MMM" " " " "q$''):1e)D)DE
 

QC    "q%((*;At*D*DE
 

QC    "1e,,.?5.I.IJ    
 "q%((*;Au*E*EFR
 

RH     r$   c                    t          j        t                      d          }t          |t                     sJ |dk    sJ |j        g k    sJ t          j        t                      d          }t          |t                     sJ |dk    sJ |j        g k    sJ t          j        t                      d          }t          |t                     sJ |dk    sJ |j        g k    sJ t          j        t                      |g d          }t          |t                     sJ |dk    sJ |j        g dk    sJ g d|_        t          j        t                      |          }t          |t                     sJ |dk    sJ |j        g dk    sJ t          j        t          d          5  t          j        t                      d	           d d d            n# 1 swxY w Y   t          j        t          d
          5  t          j        t                      t          j
                    dfdf           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        t                      d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        t                      d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        t                      d           d d d            d S # 1 swxY w Y   d S )Nr  r   r,  )r  r  )r   T)r   F)r  r=   r   )rV   r  r   r   r8   )r  )r   Fr   Tr  r  )r  )r.   FzInput: 'x' has been repeated)r  r   Fz,There must be at least one selector argumentrk   )r   rQ   r   r   r  r  rD   rE   rF   r   r   r   )r    r  new_argumentss      r"   rR   z$Test_SelectorArguments.test_validate  s   &/
>UVV	)%78888833333$**** '/
lKK	)%78888822222$**** '/LL5
 
	 )%78888833333$**** +3JLL)ZZZXX-);<<<<< 77777(JJJ6666!-	*3JLL)LL-);<<<<< 77777(LLL8888 ]:-QRRR 	Q 	Q'
6OPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q]H
 
 
 	 	 '5zB  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]N
 
 
 	O 	O '
6MNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O ]:-LMMM 	O 	O'
6MNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O ]M
 
 
 	: 	: '
b999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sZ   -"GG"G7III*"JJJ>"K,,K03K0"MMMc                 2   d t          d          D             } t          j        t                      d          j        | t          |d d                   k    sJ  t          j        t                      d          j        | t          |d d         d d d                   k    sJ  t          j        t                      d          j        | |d         fk    sJ  t          j        t                      d	          j        | |d
         fk    sJ d S )Nc                     g | ]}|d z   S )   rk   r   s     r"   r   z<Test_SelectorArguments.test_get_selector.<locals>.<listcomp>  r  r$   r<   r  r.   r  r  rU   r  r-   r  r   )r   r   rQ   r   r  r   )r    rz   s     r"   r  z(Test_SelectorArguments.test_get_selector  sT   //eAhh///!*LL1
 

 #(#4#45 5 5 5!*LL1
 

 #(DDbD)9#:#:; ; ; ; U!*:<<GGT
Qi\    T!*:<<FFS
Qi\     r$   c                    t          j        t                      d                              d          sJ t          j        t                      d                              d          sJ t          j        t                      d                              d          rJ t          j        t                      d                              d          rJ t          j        t                      d                              d          rJ t          j        t                      d                              d          rJ t          j        t                      d                              d          rJ d S )Nr  )r&   r2   r  )r&   )r&   r2   r3   r&   r2   )r   rQ   r   is_selectorr  s    r"   test_is_selectorz'Test_SelectorArguments.test_is_selector  s   !*LL1
 

+j
!
!	" 	" 	" "*:<<FFRR
 
 	
 	
 	

 &.LL1
 

+o
&
&	' 	' 	' &.LL1
 

+f

	 	 	 &.LL1
 

+c

	 	 	 &.z||\JJVV
 
 	
 	
 	
 &.z||\JJVV
 
 	
 	
 	
 	
 	
r$   c                    t                      }t          j        |d                              |ddd          dk    sJ t          j        |d                              |ddd          d	k    sJ t          j        |d                              |d
dd          dk    sJ t          j        |d                              |ddd          dk    sJ d S )Nr  r  r   rT   )r  r   r=   /   r  )r=   r  r.   r   rS  )r.   r   r  r  )r   r-   )r  r  )r   r   rQ   get_fixed_valuesr  s     r"   test_get_fixed_valuesz,Test_SelectorArguments.test_get_fixed_values  s-   !**
 


5bQ--
0
0G< < < < "**
 


5ab//
2
2g> > > > "**
 


5"2"2
3
3v> > > > "**
 


5r"2"2
3
3x@ @ @ @ @ @r$   c                    t                      }t          j        |d          }|                    |d          du sJ |                    |d          du sJ |                    |d          du sJ |                    |d          du sJ t          j        |d          }|                    |d          du sJ |                    |d          du sJ |                    |d          du sJ |                    |d          du sJ t          j        |d	          }|                    |d          du sJ |                    |d          du sJ |                    |d          du sJ |                    |d          du sJ d S )
Nr  r   Tr   r-   r   r  Fr  )r   r   rQ   r  r  s      r"   r  z'Test_SelectorArguments.test_is_argument(  s    '/7NOO	$$UA..$6666$$UC00D8888$$UA..$6666$$UC00D8888 '/|DD	$$UA..$6666$$UC00D8888$$UA..%7777$$UC00E9999&/}EE	$$UA..%7777$$UC00E9999$$UA..$6666$$UC00D888888r$   c                    t                      }t          j        |d          }|                    |d          dk    sJ |                    |d          dk    sJ |                    |d          dk    sJ |                    |d          dk    sJ t          j        |d          }|                    |d          dk    sJ |                    |d          dk    sJ |                    |d          dk    sJ |                    |d          dk    sJ t          j        |d          }t	          j        t          d	          5  |                    |d           d d d            d S # 1 swxY w Y   d S )
Nr  r   r   r-   r   r  r  z.y does not correspond to any selector argumentr8   )r   r   rQ   selector_indexrD   rE   rF   r  s      r"   test_selector_indexz*Test_SelectorArguments.test_selector_index?  s   &/7NOO	''q11Q6666''s33q8888''q11Q6666''s33q8888&/7NOO	''q11Q6666''s33q8888''q11Q6666''s33q8888 '/|DD	]O
 
 
 	1 	1 $$UC000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   	E--E14E1c                 8   t                      }t          j        |d          }|dk    sJ |j        g k    sJ |                    |d          }||k    sJ |j        dgk    sJ |j        g k    sJ |j        g k    sJ |                    |d          }||cxk    r|k    sn J |j        dgk    sJ |j        ddgk    sJ |j        g k    sJ t          j        t          d          5  |                    |d           d d d            d S # 1 swxY w Y   d S )Nr  r-   r   z/0: is a selector argument and cannot be ignoredr8   r   )r   r   rQ   r  
add_ignorerD   rE   rF   )r    rt   r  new_arguments0new_arguments1s        r"   test_add_ignorez&Test_SelectorArguments.test_add_ignoreU  s   &/|DD	L((((%++++"--eQ77*****qc1111%++++%++++'225#>><<<<n<<<<<<*qc1111*q!f4444%++++ ]P
 
 
 	+ 	+   ***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   +DDDc                    t                      }t          j        |d          }|                    |d          }t	          |t                    sJ |dk    sJ |j        dgk    sJ |j        g k    sJ |                    |d          }t	          |t                    sJ |dk    sJ |j        dgk    sJ |j        g k    sJ |                    |d          }t	          |t                    sJ |dk    sJ |j        dgk    sJ |j        g k    sJ |                    |d          }t	          |t                    sJ |dk    sJ |j        dgk    sJ |j        g k    sJ d S )Nr  r   r  r   r-   r  r   )r   r   rQ   reducer   r  )r    rt   r  r  s       r"   test_reducez"Test_SelectorArguments.test_reducen  s   &/7NOO	!((22-);<<<<<----)aS0000%++++!((44-);<<<<<----)aS0000%++++!((22-);<<<<<,,,,)aS0000%++++!((44-);<<<<<,,,,)aS0000%++++++r$   c                     t                      }t          j        |d          }|                    |          dk    sJ d S )Nr  r  )r   r   rQ   r  r  s      r"   r  z'Test_SelectorArguments.test_named_tuple  sD    &/7NOO	$$U++/JJJJJJJr$   N)rh   ri   rj   r#   r  r  rR   r  r  r  r  r  r  r  r  rk   r$   r"   r  r    s        5 5 5 
 
 
  .7: 7: 7:r   
 
 
4@ @ @ 9 9 9.1 1 1,+ + +2, , ,:K K K K Kr$   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestCompoundBoundingBoxc                 <   t                      }d}ddd}t          j                    }t          ||||d          }|j        j        |j        k                                    sJ |j        |k    sJ |                                D ]#\  }}||j	        v sJ |j	        |         |k    sJ $|j	                                        D ]0\  }}||v sJ ||         |k    sJ t          |t                    sJ 1|j	        |k    sJ |j        |k    sJ |j        dk    sJ d S )Nr  r;  rE  r,  r.   r   r   )r   r   r   r   r   rg  rK   _selector_argsr%  _bounding_boxesr   r   _create_selectorr   )r    rt   selector_argsbounding_boxescreate_selectorr   	_selectorrh  s           r"   r#   z#TestCompoundBoundingBox.test_create  sy   $ 'w77,..*E=/
 
 
 #.%2BBGGIIIII*m;;;;-3355 	C 	COIt <<<<</	:dBBBBB+;AACC 	6 	6OIt....!),4444d$4555555+~====,????"c))))))r$   c                    t          j        t                      ddddt          j                              }|                                }||k    sJ t          |          t          |          k    sJ |j        |j        k    sJ t          |j                  t          |j                  k    sJ |j        |j        k    sJ t          |j                  t          |j                  k    sJ |j	        |j	        k    sJ t          |j	                  t          |j	                  k    sJ t          |j                  D ]\  }}||j        |         k    sJ t          |          t          |j        |                   k    sJ |j        |j        |         j        k    sJ t          |j                  t          |j        |         j                  k    sJ |j        |j        |         j        k    sJ t          |j                  t          |j        |         j                  k    sJ t          |j                  t          |j                  k    sJ |j                                        D ]\  }}||j        |         k    sJ t          |          t          |j        |                   k    sJ |j        |j        |         j        k    sJ t          |j                  t          |j        |         j                  k    sJ |j        |j        |         j        k    sJ t          |j                  t          |j        |         j                  k    sJ |j        |j        |         j        k    sJ t          |j                  t          |j        |         j                  k    sJ |j                                        D ]0\  }}||j        |         j        |         k    sJ t          |          t          |j        |         j        |                   k    sJ |j        |j        |         j        |         j        k    sJ t          |j                  t          |j        |         j        |         j                  k    sJ |j        |j        |         j        |         j        k    sJ t          |j                  t          |j        |         j        |         j                  k    sJ 2t          |j                  t          |j        |         j                  k    sJ |j                                        |j        |         j                                        k    sJ t          |j                  t          |j                  k    sJ |j                                        |j                                        k    sJ d S )N)g      ?)gg333333@r  r  )r   rQ   r   r   r   r'   r(   r   r   r  r   r  r   r  r&  r  r%  r   r#  r   r   r'  )r    r   r'   r   r  selectorrh  r!   s           r"   r)   z!TestCompoundBoundingBox.test_copy  s   *3LLk22LNN	
 
   ""t####,2d88++++ "dk1111,%&&"T[//9999 "dk1111,%&&"T[//9999,0EEEEE,/00Bt7L4M4MMMMM  ))CDD 
	O 
	OOE8t1%88888h<<2d&8&?#@#@@@@@ >T%7%>%DDDDDhn%%D,>u,E,K)L)LLLLL ?d&8&?&FFFFFho&&"T-?-F-M*N*NNNNNN<-..#d6H2I2IIIII +9??AA *	 *	NHd4.x88888d88r$"5h"?@@@@@@<4#6x#@#HHHHHdl##r$*=h*G*O'P'PPPPP ;$"5h"?"FFFFFdk??b)<X)F)M&N&NNNNN ;$"5h"?"FFFFFdk??b)<X)F)M&N&NNNNN $(>#7#7#9#9  x4#6x#@#J5#QQQQQ(||r'1;EB( (     N*84>uEKL L L L (.))R'1;EBH. .     N*84>uEKL L L L (.))R'1;EBH. .      t~&&#d.A(.K.U*V*VVVVV##%%)<X)F)P)U)U)W)WWWWWW<.//3t7J3K3KKKKK*//11T5H5M5M5O5OOOOOOOr$   c                     t                      }d}ddd}t          |||          }|                                dk    sJ d S )Nr  r;  rE  r  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    rt   r  r  r   s        r"   r4  z%TestCompoundBoundingBox.test___repr__  sb    $ 'w77*>5-PP !!## (      r$   c                     t                      }d}ddd}t          |||          }|j        |k    sJ |j        |k    sJ d S Nr  r;  rE  r  )r   r   r  r  r  s        r"   test_bounding_boxesz+TestCompoundBoundingBox.test_bounding_boxes	  s\    $ 'w77*>5-PP+~====*n<<<<<<r$   c                 (   t                      }d}t          i ||          }|j        |k    sJ |j        |k    sJ d}t	          j        t          d          5  ||_        d d d            n# 1 swxY w Y   |j        |k    sJ |j        |k    sJ d S )Nr  r  zOverriding selector_args.*r8   )r   r   r  r  rD   rL   rM   )r    rt   r  r   s       r"   test_selector_argsz*TestCompoundBoundingBox.test_selector_args&	  s    $*2umDD *m;;;;)]:::: &\.0MNNN 	7 	7)6L&	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7*m;;;;)]::::::s   A--A14A1c                     t                      }t          j                    }t          i |d|          }|j        |k    sJ |j        |k    sJ d S )N)r,  )r   r   r   r   r  r  )r    rt   r  r   s       r"   test_create_selectorz,TestCompoundBoundingBox.test_create_selector6	  sW    ,..*2ugOO,????+>>>>>>r$   c                    t          i t                      d          }t          |j                  dk    sJ |                    d          dk    sJ |                    d          dk    sJ |                    dg          dk    sJ |                    t          j        d                    dk    sJ |                    t          j        dg                    dk    sJ |                    d          dk    sJ |                    ddg          dk    sJ |                    t          j        ddg                    dk    sJ d S )Nr  r   r=   )r=   )r=   r  r  )r   r   r&  r  _get_selector_keyrB   r   rC   r   s     r"   test__get_selector_keyz.TestCompoundBoundingBox.test__get_selector_key>	  s]   *2z||\JJ<.//14444 --a00D8888--d33t;;;;--qc22d::::--bmA.>.>??4GGGG--bhsmm<<DDDD --g66'AAAA--q"g66'AAAA--bh2w.?.?@@GKKKKKKr$   c                    t                      }t          i |dd          }t          |j                  dk    sJ d|d<   t          |j                  dk    sJ d|j        v sJ t          |j        d         t                    sJ |j        d         dk    sJ |j        d         j        dk    sJ d|j        vsJ t          j	        t          d	
          5  d|d<   d d d            n# 1 swxY w Y   d|j        vsJ t          |j                  dk    sJ d|j        vsJ t          j	        t          d
          5  d|d<   d d d            n# 1 swxY w Y   d|j        vsJ t          |j                  dk    sJ t          i |dd          }t          |j                  dk    sJ d|d<   t          |j                  dk    sJ d|j        v sJ t          |j        d         t                    sJ |j        d         dk    sJ |j        d         j        dk    sJ d|j        vsJ t          j	        t          d	
          5  d|d<   d d d            n# 1 swxY w Y   d|j        vsJ t          |j                  dk    sJ d|j        vsJ t          j	        t          d
          5  d|d<   d d d            n# 1 swxY w Y   d|j        vsJ t          |j                  dk    sJ d S )Nr  r   r   r   i   r  r-   )r   rV   z.* is not a selector!r8   ir   rV   r+   )irV   r]  r   r  )r  )ir>   )r   r  )r  )ir  r  )r   r   r&  r  r  r   r   r   rD   rE   rF   r   s      r"   test___setitem__z(TestCompoundBoundingBox.test___setitem__N	  s    +2ul#NNN<.//14444'U<.//1444444444,6u=?OPPPPP+E2i????+E28C????l:::::]:-DEEE 	, 	,$+L!	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,l:::::<.//1444455555]U
 
 
 	7 	7 #7L	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 55555<.//14444 +2um3OOO<.//144442U<.//1444444444,6u=?OPPPPP+E26JJJJJ+E28C????|;;;;;]:-DEEE 	: 	:%9L"	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:|;;;;;<.//1444455555]U
 
 
 	, 	, #,L	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 55555<.//1444444sH   C++C/2C/EEEII#&I#5KKKc                    t                      }d}ddd}t          i ||          }|                    |           |                                D ]#\  }}||j        v sJ |j        |         |k    sJ $|j                                        D ]0\  }}||v sJ ||         |k    sJ t          |t                    sJ 1|j        |k    sJ d S r  )r   r   rc  r%  r  r   r   )r    rt   r  r  r   r  rh  s          r"   re  z&TestCompoundBoundingBox.test__validate	  s   $ !(w77*2umDD~...-3355 	C 	COIt <<<<</	:dBBBBB+;AACC 	6 	6OIt....!),4444d$4555555+~======r$   c                 ,   t          dddt                      d          }t          dddt                      d          }||k    sJ |t          j                    k    rJ |t          j                    k    rJ d|d<   ||k    rJ |j        d= ||k    sJ t          j        t                      d          |_        ||k    rJ t          j        t                      d          |_        ||k    sJ t          j                    |_        ||k    rJ d S )Nr;  rE  r  r  r  r  r  )	r   r   r   r   r  r   rQ   r  r  )r    rG  rH  s      r"   rI  z#TestCompoundBoundingBox.test___eq__	  sO   ,'**JLL,
 
 -'**JLL,
 

 //// "R\^^3333!R\^^3333 !*u!^3333*51//// );(CLL-)
 )
% "^3333(:(CLL,)
 )
% //// +-,..'!^333333r$   c                    t                      }d}ddd}t          j                    }d}t          j        t
          |          5  t          j        ||           d d d            n# 1 swxY w Y   t          j        ||||d          }|j        j	        |j	        k    
                                sJ |j        |k    sJ |j        |k    sJ |j        |k    sJ |j        dk    sJ t          j        ||          }||k    sJ |j        dk    sJ t          j        ||||          }|j        j	        |j	        k    
                                sJ |j        |k    sJ |j        |k    sJ |j        |k    sJ |j        d	k    sJ d S )
Nr  r;  rE  r  z&Selector arguments must be provided .*r8   r   r   r   )r   r   r   rD   rE   rF   r   rQ   r   rg  rK   r  r  r  r   )r    rt   r  r  r  rG   r   rk  s           r"   rR   z%TestCompoundBoundingBox.test_validate	  s/   $ 'w77,.. <]:W555 	@ 	@(???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ +3>=/
 
 
 #.%2BBGGIIIII*m;;;;+~====,????"c)))) /7|LL/////&#---- +3>=/
 
 #.%2BBGGIIIII*m;;;;+~====,????"c))))))s   A((A,/A,c                     t                      }d}ddd}t          |||          }d|v sJ d|v sJ d|vsJ d|vsJ d	|vsJ d S )
Nr  r;  rE  r  r,  r  r;   r-   r.   )r   r   r  s        r"   r9  z)TestCompoundBoundingBox.test___contains__	  s    $ 'w77*>5-PP|####|####<''''$$$$$$$$$$r$   c                 L   t                      }t          j                    }t          i |d|          }d|_        t          |j                  dk    sJ |                    d          }t          |t                    sJ |dk    sJ t          |j                  dk    sJ d|v sJ t          |d         t                    sJ |d         |k    sJ d|_        t          j        t          d          5  |                    d	           d d d            d S # 1 swxY w Y   d S )
Nr  )r  )i   r   )r   r-   )i*   r+   r8   )r  )r   r   r   r   r   r&  r  _create_bounding_boxr   r   rD   rE   rF   )r    rt   r  r   rh  s        r"   test__create_bounding_boxz1TestCompoundBoundingBox.test__create_bounding_box	  s   ,..*2um_UU (>$</00A55550066$ 011111-----</00A5555|####,t,.>?????D!T)))) (1$]U
 
 
 	5 	5 --e444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   6DD Dc                 :   t                      }d}ddd}t          |||          }t          |d         t                    sJ |d         dk    sJ t          |d         t                    sJ |d         dk    sJ t          |d         t                    sJ |d         dk    sJ t          |d         t                    sJ |d         dk    sJ t	          j        t          d	
          5  |d          d d d            n# 1 swxY w Y   t          j                    |_	        t          j
                            t          dd          5 }|d         |j        k    sJ |j        t          j        |d          gk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r;  rE  r  r-   r  r.   r,  z+No bounding box is defined for selector: .*r8   r  r	  Tr   )r   r   r   r   rD   rE   r   r   r   r  r   r   r   r   r   )r    rt   r  r  r   mkCreates         r"   r>  z(TestCompoundBoundingBox.test___getitem__	  s]   $ 'w77*>5-PP ,q/+;<<<<<A')))),t,.>?????A')))),t,.>?????D!W,,,,,t,.>?????D!W,,,, ] M
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )+%X__!7$  
 
 	L%)>>>>>*rw|T/J/J.KKKKKK		L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls$   .	DD
D5FFFc                 V   t                      }d}ddd}t          |||          }d t          d          D             }t          j                            t          dd	          5 }t          j                            t          d
d	          5 }|                    |          |j        k    sJ |j	        t          j
        ||j                  gk    sJ |j	        t          j
        |j        g|R  gk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  r;  rE  r  c                 4    g | ]}t          j                    S rk   r   r   s     r"   r   zETestCompoundBoundingBox.test__select_bounding_box.<locals>.<listcomp>#
  s    333Q",..333r$   r;   r  Tr   r   )r   r   r   r   r   r   r   _select_bounding_boxr   r   r   r  )r    rt   r  r  r   rz   
mkSelectorr  s           r"   test__select_bounding_boxz1TestCompoundBoundingBox.test__select_bounding_box
  s   $ 'w77*>5-PP33%((333X__  
 
 	#]T !   	#88@@EDVVVVV+GL**ABB0     "0GL6@@@@5     	 	 	 	 	 	 	 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s7   '(DA*D:DD
	
DD
	DD"%D"c                 |   t                      }d}ddd}t          |||          }t          j                    }t          j                            t          dd          5 }|                    |g d          |j        k    sJ |j	        t          j
        |d	         |g d          gk    sJ |                                 |                    |g d
          |j        k    sJ |j	        t          j
        |d         |g d
          gk    sJ |                                 d d d            d S # 1 swxY w Y   d S )Nr  r;  rE  r  rx   Tr   r:   r,  )r.   r.   r;   r  )r   r   r   r   r   r   r   rx   r   r   r   r   )r    rt   r  r  r   ry   r   s          r"   r  z+TestCompoundBoundingBox.test_prepare_inputs2
  s   $ 'w77*>5-PPlnnX__.  
 
 	#++KCC)* * * * +T*KCC0       """++KCC)* * * * +T*KCC0       """%	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   !CD11D58D5c                 	   d}dddd}t          |t                      |          }dD ]}|                    d|          }t          |t                    sJ d|v sJ |d         }t          |t
                    sJ |j        j        t                      j        k                                    sJ d|v sJ d|j	        v sJ d	|v sJ |d	         | |fk    sJ t          |j                  d
k    sJ |j        dgk    sJ d}dddd}t          |t                      |          }dD ]}|                    d|          }t          |t                    sJ d|z
  f|v sJ |d|z
  f         }t          |t
                    sJ |j        j        t                      j        k                                    sJ d|v sJ d|j	        v sJ d	|v sJ |d	         | |fk    sJ t          |j                  d
k    sJ |j        dgk    sJ |                    d	|          }t          |t                    sJ d|z
  f|v sJ |d|z
  f         }t          |t
                    sJ |j        j        t                      j        k                                    sJ d	|v sJ d	|j	        v sJ d|v sJ |d         d|z
   d|z
  fk    sJ t          |j                  d
k    sJ |j        d
gk    sJ t          d
          t          d          z  t          d
          z  }d|_        ddd}t          j        ||dgd          }|                    dd          }t          |t                    sJ d|v sJ |d         }t          |t
                    sJ |j        j        |j        k                                    sJ |j	        dgk    sJ |j        dddk    sJ |j        dk    sJ |                    dd
          }t          |t                    sJ d|v sJ |d         }t          |t
                    sJ |j        j        |j        k                                    sJ |j	        dgk    sJ |j        dddk    sJ |j        dk    sJ d}t)          j        t,          |          5  |                    dd           d d d            d S # 1 swxY w Y   d S ) Nr  r;  rE  rE  r]  r]  r<  r,  r  r  r:   r   rk   r   r-   r   r  r  )r-   r;   )r.   r.   )r;   r-   r<   r=   r.   r   r   slit_id      g     ^@r  g     @r  g     ϧ@r  g     @r  r  Tr   r  r   r  r  r  rS  r!  r"  zQAttempting to fix input .*, but there are no bounding boxes for argument value .*r8   )r   r   _matching_bounding_boxesr   r/  r   r   rg  rK   r   r&  r#  r   r   r   r   rz   rQ   r.  r   rD   rE   rF   )	r    r  r  r   r  matchingrh  rt   rG   s	            r"   test__matching_bounding_boxesz5TestCompoundBoundingBox.test__matching_bounding_boxesM
  s:   %$$$
 

 +>:<<WW 	' 	'E#<<S%HHHh----->>>>B<Dd$455555K*jll.EEJJLLLLL$;;;;$-----$;;;;9%////t~&&!++++<A3&&&&& 1&&&
 

 +>:<<WW 	' 	'E#<<S%HHHh-----I<8++++QYL)Dd$455555K*jll.EEJJLLLLL$;;;;$-----$;;;;9%////t~&&!++++<A3&&&&#<<S%HHHh-----I<8++++QYL)Dd$455555K*jll.EEJJLLLLL$;;;;$-----$;;;;91u9E	 ;;;;;t~&&!++++<A3&&&&& a588#hqkk1,22
 
 +3>2C1DC
 
 
  88AFF(D)))))X~~~~|$ 011111&%*::??AAAAA"yk1111#^.'Q'QQQQQzS    88AFF(D)))))X~~~~|$ 011111&%*::??AAAAA"yk1111#^.'Q'QQQQQzS     	 ]:W555 	@ 	@11)Q???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   /SSSc                 R	   d}dddd}t          |t                      |          }dD ]}|                    d|          }t          |t                    sJ |j        j        t                      j        k                                    sJ d|v sJ d|j        v sJ d|v sJ |d         | |fk    sJ t          |j
                  d	k    sJ |j        d
gk    sJ d}dddd}t          |t                      |          }dD ]K}|                    d|          }t          |t                     sJ |j        j        t                      j        k                                    sJ |j        dk    sJ d|z
  f|v sJ |d|z
  f         }t          |t                    sJ |j        j        t                      j        k                                    sJ d|v sJ d|j        v sJ d|v sJ |d         | |fk    sJ t          |j
                  d	k    sJ |j        d
gk    sJ |                    d|          }t          |t                     sJ |j        j        t                      j        k                                    sJ |j        dk    sJ d|z
  f|v sJ |d|z
  f         }t          |t                    sJ |j        j        t                      j        k                                    sJ d|v sJ d|j        v sJ d|v sJ |d         d|z
   d|z
  fk    sJ t          |j
                  d	k    sJ |j        d	gk    sJ Mt          d	          t          d          z  t          d	          z  }d|_        ddd}t          j        ||dgd          }|                    dd
          }t          |t                    sJ |j        j        |j        k                                    sJ |j        dgk    sJ |j        dddk    sJ |j        dk    sJ |                    dd	          }t          |t                    sJ |j        j        |j        k                                    sJ |j        dgk    sJ |j        dddk    sJ |j        dk    sJ d S )Nr  r  r  r  r  r:   r   r   r-   r   r  r  r  r<   r=   r.   r  r  r   r  r#  r   r$  r  r  r  rS  r!  r"  )r   r   _fix_input_selector_argr   r   r   rg  rK   r   r&  r#  r   r  r   r   r   rz   rQ   r.  r   )r    r  r  r   r  rh  bbox_selectorrt   s           r"   test__fix_input_selector_argz4TestCompoundBoundingBox.test__fix_input_selector_arg
  s   %$$$
 

 +>:<<WW 		' 		'E77UCCDd$455555K*jll.EEJJLLLLL$;;;;$-----$;;;;9%////t~&&!++++<A3&&&&& 1&&&
 

 +>:<<WW 	0 	0E77UCCDd$788888K*jll.EEJJLLLLL%6666I<4'''' !e).Mm-=>>>>>!(3z||7NNSSUUUUU-''''-66666-'''' %5&%8888}.//14444 (QC////77UCCDd$788888K*jll.EEJJLLLLL%6666I<4'''' !e).Mm-=>>>>>!(3z||7NNSSUUUUU-''''-66666-'''' %AI,U)DDDDD}.//14444 (QC///// a588#hqkk1,22
 
 +3>2C1DC
 
 
 33IqAA$ 011111&%*::??AAAAA"yk1111#^.'Q'QQQQQzS    33IqAA$ 011111&%*::??AAAAA"yk1111#^.'Q'QQQQQzS      r$   c                    t          d          t          d          z  t          d          z  }d|_        ddd}t	          j        ||dgd	          }|                    d
d          }t          |t                    sJ |j        j	        |j	        k    
                                sJ |j        dk    sJ |j        j        dgk    sJ |j        d         dk    sJ |j        d         dk    sJ t          |j                  dk    sJ |                    dd          }t          |t                    sJ |j        j	        |j	        k    
                                sJ |j        dk    sJ |j        j        dgk    sJ |j        d         dk    sJ |j        d         dk    sJ t          |j                  dk    sJ d S )Nr-   r.   r  r  r   r  r#  r   r$  r   r=   ))r.   Tr   r  r  r,  r"  r   r  r!  )r   r   r   rz   r   rQ   _fix_input_bbox_argr   r   rg  rK   r  r  r  r&  )r    rt   r  r   rh  s        r"   test__fix_input_bbox_argz0TestCompoundBoundingBox.test__fix_input_bbox_arg  s   a588#hqkk1,22
 
 +3>2C1DC
 
 
 //Q77$ 344444&%*::??AAAAA!\1111!.1#5555#D)^;;;;#D)^;;;;4'((A----//Q77$ 344444&%*::??AAAAA!\1111!.1#5555#D)^;;;;#D)^;;;;4'((A------r$   c                 J	   t          d          t          d          z  t          d          z  }d|_        ddd}t	          j        ||dgd	          }||_        t          |d
di          }|j        }t          |t                    sJ |j
        j        |j        k                                    sJ |j        g k    sJ |j        dddk    sJ |j        dk    sJ t          |ddi          }|j        }t          |t                    sJ |j
        j        |j        k                                    sJ |j        dk    sJ |j        j        g k    sJ |j        d         dk    sJ |j        d         j        dk    sJ |j        d         dk    sJ |j        d         j        dk    sJ t'          |j                  dk    sJ t          |ddi          }|j        }t          |t                    sJ |j
        j        |j        k                                    sJ |j        dk    sJ |j        j        g k    sJ |j        d         dk    sJ |j        d         j        dk    sJ |j        d         dk    sJ |j        d         j        dk    sJ t'          |j                  dk    sJ t          |ddd          }|j        }t          |t                    sJ |j
        j        |j        k                                    sJ |j        g k    sJ |j        ddik    sJ |j        dk    sJ t          |ddd          }|j        }t          |t                    sJ |j
        j        |j        k                                    sJ |j        g k    sJ |j        ddik    sJ |j        dk    sJ t          |ddd          }|j        }t          |t                    sJ |j        dk    sJ |j        j        g k    sJ |j        d         t(          j         t(          j        fk    sJ |j        d         j        dk    sJ |j        d         t(          j         t(          j        fk    sJ |j        d         j        dk    sJ t'          |j                  dk    sJ d S )Nr-   r.   r  r  r   r  r#  r   r$  r  r   r  r  rS  r   r=   r  r  r,  r"  r   r!  )r  r   )r   r  r   r  )r   r   r   rz   r   rQ   r   r   r   r   r   rg  rK   r   r.  r   r  r  r  r&  rB   rb   )r    rt   r  r   	new_modelrh  s         r"   r   z'TestCompoundBoundingBox.test_fix_inputs#  sW   a588#hqkk1,22
 
 +3>2C1DC
 
 
 * uy!n55	%$ 011111&)*>>CCEEEEE"b((((#^.'Q'QQQQQzS     usAh//	%$ 344444&%*::??AAAAA!\1111!."4444#D)^;;;;#D)/36666#D)^;;;;#D)/366664'((A----usAh//	%$ 344444&%*::??AAAAA!\1111!."4444#D)^;;;;#D)/36666#D)^;;;;#D)/366664'((A---- u!!&<&<==	%$ 011111&)*>>CCEEEEE"b((((#^'<<<<<zS    uA!&<&<==	%$ 011111&)*>>CCEEEEE"b((((#^'<<<<<zS     uAA&6&677	%$ 344444!\1111!."4444#D)rvgrv->>>>>#D)/36666#D)rvgrv->>>>>#D)/366664'((A------r$   c                     t          d          }ddd}d}t          j        |||          }|d         t          d|ddg	          k    sJ |d
         t          d|ddg	          k    sJ d S )Nr<   )r;  r]  )r]  r;  )r2   r  r2   gGz@))x0T)x1Tr2  r4  r5  r   r3  )r   r   rQ   r   )r    rt   r  r  rh  s        r"   "test_complex_compound_bounding_boxz:TestCompoundBoundingBox.test_complex_compound_bounding_boxl  s    *+
 
 5"+E>=QQJ#3d|$
 $
 $
 
 
 
 
 K $4d|%
 %
 %
 
 
 
 
 
 
r$   N)rh   ri   rj   r#   r)   r4  r  r  r  r  r  re  rI  rR   r9  r
  r>  r  r  r'  r+  r.  r   r6  rk   r$   r"   r  r    so       * * *,RP RP RPh
 
 
@= = =; ; ; ? ? ?L L L 35 35 35j> > >"!4 !4 !4F"* "* "*H% % %5 5 5.L L L<  *# # #6a@ a@ a@FT! T! T!l. . .:G. G. G.R
 
 
 
 
r$   r  )%unittest.mockmockr   numpyrB   rD   astropy.unitsunitsr@   astropy.coordinatesr   astropy.modeling.bounding_boxr   r   r   r   r   r	   r
   r   r   astropy.modeling.corer   r   astropy.modeling.modelsr   r   r   r   r   r   r   rm   r  r  r  r  rk   r$   r"   <module>r@     si                    - - - - - -
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 4 3 3 3 3 3 3 3               {' {' {' {' {' {' {' {'|@E @E @E @E @E @E @E @EFG. G. G. G. G. G. G. G.T S S S S S S S SlOK OK OK OK OK OK OK OKdh
 h
 h
 h
 h
 h
 h
 h
 h
 h
r$   