
    HR-e                     \   d Z ddlZddlmZ ddlmZ 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 ddlmZ dd	lmZ dd
lmZ  G d de          Z G d d          Z G d d          Zd Z d Z!d Z"e
j#        d             Z$e
j#        d             Z% e
j#        ddg          d             Z&e
j#        d             Z'd Z(d Z) G d d          Z* G d d e*          Z+ G d! d"e*          Z, G d# d$e+e,          Z- G d% d&e-          Z.d' Z/d( Z0d) Z1 G d* d+          Z2dS ),zQ
Test :mod:`astropy.io.registry`.

.. todo::

    Don't rely on Table for tests

    N)Counter)deepcopy)StringIOregistry)IORegistryErrorUnifiedInputRegistryUnifiedIORegistryUnifiedOutputRegistrycompat)_UnifiedIORegistryBasedefault_registryTablec                       e Zd ZdZddZdS )UnifiedIORegistryBaseSubClassz;Non-abstract subclass of UnifiedIORegistryBase for testing.Nc                     d S N )self
data_classs     Ilib/python3.11/site-packages/astropy/io/registry/tests/test_registries.pyget_formatsz)UnifiedIORegistryBaseSubClass.get_formats(   s    t    r   )__name__
__module____qualname____doc__r   r   r   r   r   r   %   s.        EE     r   r   c                   @    e Zd ZdZ eej                  Zej        ZdS )	EmptyDataa  
    Thing that can read and write.
    Note that the read/write are the compatibility methods, which allow for the
    kwarg ``registry``. This allows us to not subclass ``EmptyData`` for each
    of the types of registry (read-only, ...) and use this class everywhere.
    Nr   r   r   r   classmethodio_registryreadwriter   r   r   r!   r!   ,   s4          ;{'((DEEEr   r!   c                   @    e Zd ZdZ eej                  Zej        ZdS )OtherEmptyDataz$A different class with different I/ONr"   r   r   r   r(   r(   8   s.        ..;{'((DEEEr   r(   c                      t                      S r   r!   argskwargss     r   empty_readerr.   ?   s    ;;r   c                     dS )Nstatus: successr   )tabler,   r-   s      r   empty_writerr2   C   s    r   c                      dS NTr   r+   s     r   empty_identifierr5   G   s    4r   c                      dt           fS )Ntest1r*   r   r   r   fmtcls1r8   K       Yr   c                      dt           fS )Ntest2r*   r   r   r   fmtcls2r<   P   r9   r   r7   r;   )paramsc              #   *   K   | j         t          fV  d S r   )paramr!   )requests    r   fmtclsrA   U   s      =)
$$$$$$r   c                      i } t          t          j                  | d<   t          t          j                  | d<   t          t          j                  | d<   | S )Nreaderswritersidentifiers)r   r   _readers_writers_identifiers)ORIGINALs    r   originalrJ   Z   sN    H"#3#<==HY"#3#<==HY&'7'DEEH]Or   c                 *    | d         |d         u sJ dS )z1Just check a fact that we rely on in other tests.   Nr   )r8   r<   s     r   test_fmcls1_fmtcls2rM   f   s!    1:######r   c                  r    t          j        t          d          5  t          d          # 1 swxY w Y   d S )Nzjust checkingmatch)pytestraisesr   r   r   r   test_IORegistryErrorrS   k   sa    	o	>	>	> / /o.../ / / / / / / / / /s   ,00c                      e Zd ZdZd Zej        d             Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zej                            d          d             Zej                            d          d             ZdS )TestUnifiedIORegistryBasez8Test :class:`astropy.io.registry.UnifiedIORegistryBase`.c                     t           | _        dS *Setup class. This is called 1st by pytest.N)r   _clsr   s    r   setup_classz%TestUnifiedIORegistryBase.setup_classs   s    1			r   c              #     K   |                                  }t          |d          }t          |d          }i }t          |j                  |d<   |j                                         |r0t          |j                  |d<   |j                                         |r0t          |j                  |d<   |j                                         |V  |j                                         |j                            |d                    |r9|j                                         |j                            |d                    |r;|j                                         |j                            |d                    dS dS )z5I/O registry. Cleaned before and after each function.rF   rG   rE   rC   rD   N)rY   hasattrr   rH   clearrF   rG   update)r   r   HAS_READERSHAS_WRITERSrI   s        r   r   z"TestUnifiedIORegistryBase.registryw   s      99;;h
33h
33 "*8+@"A"A##%%% 	&"*8+<"="=HY##%%% 	&"*8+<"="=HY##%%%##%%%$$Xm%<=== 	:##%%%$$Xi%8999 	:##%%%$$Xi%899999	: 	:r   c                 b    |                                 J |                     d          J dS ) Test ``registry.get_formats()``.N   )r   )r   r   r   s     r   test_get_formatsz*TestUnifiedIORegistryBase.test_get_formats   s?     ##%%---##r#22:::::r   c                     |                     t                    5   |j        g |t          R   ddd           dS # 1 swxY w Y   dS &Test ``registry.delay_doc_updates()``.N)delay_doc_updatesr!   register_identifierr5   r   r   r8   s      r   test_delay_doc_updatesz0TestUnifiedIORegistryBase.test_delay_doc_updates   s     ''	22 	E 	E(H(D'D3CDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   =AAc                     ||j         vsJ ||j         vsJ  |j        g |t          R    |j        g |t          R   ||j         v sJ ||j         v sJ dS )z(Test ``registry.register_identifier()``.N)rH   rk   r5   r   r   r8   r<   s       r   test_register_identifierz2TestUnifiedIORegistryBase.test_register_identifier   s     h33333h33333 	%$@g@/?@@@@$$@g@/?@@@@(/////(///////r   c                 .   |\  }}|                     ||t                     t          j        t                    5 }|                     ||t                     ddd           n# 1 swxY w Y   t          |j                  d| d|j         dk    sJ dS )z6Test calling ``registry.register_identifier()`` twice.NzIdentifier for format '' and class '' is already defined)rk   r5   rQ   rR   r   strvaluer   r   r   rA   fmtclsexcs         r    test_register_identifier_invalidz:TestUnifiedIORegistryBase.test_register_identifier_invalid   s    S$$S#/?@@@]?++ 	Es((c3CDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	NN 3 3 33 3 3 3 3 3 3 3 3   A$$A(+A(c                 r     |j         g |t          R    |j         g |t          R ddi ||j        v sJ d S NforceT)rk   r5   rH   rl   s      r   test_register_identifier_forcez8TestUnifiedIORegistryBase.test_register_identifier_force   sb    $$@g@/?@@@@$$LgL/?LLLtLLL(///////r   c                 n     |j         g |t          R   ||j        v sJ  |j        |  ||j        vsJ dS )*Test ``registry.unregister_identifier()``.N)rk   r5   rH   unregister_identifierrl   s      r   test_unregister_identifierz4TestUnifiedIORegistryBase.test_unregister_identifier   s_    $$@g@/?@@@@(/////&&00h3333333r   c                     |\  }}t          j        t                    5 }|                    ||           ddd           n# 1 swxY w Y   t	          |j                  d| d|j         dk    sJ dS )r   Nz"No identifier defined for format 'rr   ')rQ   rR   r   r   rt   ru   r   rv   s         r   "test_unregister_identifier_invalidz<TestUnifiedIORegistryBase.test_unregister_identifier_invalid   s    S]?++ 	5s**3444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	NNUCUUclUUUV V V V V V   AA	Ac                     |\  }}d|dddi f} |j         | }|g k    sJ |                    ||t                      |j         | }||v sJ dS )$Test ``registry.identify_format()``.Nr   identify_formatrk   r5   r   r   r8   rw   rx   r,   formatss          r   test_identify_formatz.TestUnifiedIORegistryBase.test_identify_format   sv    Sc4w3 +(*D1"}}}} 	$$S#/?@@@*(*D1g~~~~~~r   c                    ||j         vsJ t          j        g |t          R d|i ||j         v sJ |t          ur|t          j         vsJ 	 t          j        g |t          R   |t          j         v sJ n# t
          $ r Y nw xY wt          j                             |           d S # t          j                             |           w xY wd S Nr   )rH   r   rk   r5   r   	Exceptionpoprl   s      r   test_compat_register_identifierz9TestUnifiedIORegistryBase.test_compat_register_identifier   s   h33333"QGQ-=QQQQQQ(///// +++"2"?????;*FGF5EFFFF "2"??????    
 !-11'::::: -11':::: ,+*   A5 $B& 5
B?B& BB& &!Cc                 4    |j         g |t          R   ||j        v sJ t          j        |d|i ||j        vsJ |t
          urQ|t
          j        vsJ t          j         g |t          R   |t
          j        v sJ t          j        |  ||j        vsJ d S d S r   )rk   r5   rH   r   r   r   rl   s      r   !test_compat_unregister_identifierz;TestUnifiedIORegistryBase.test_compat_unregister_identifier   s    $$@g@/?@@@@(/////$gAAAAh33333 +++"2"?????0L'L;KLLLL.;;;;;('22("77777 ,+
 87r   c                 b   |\  }}d |d d dt                      f} |j        g |t          R   t          j        |d|i}||v sJ |t
          ura	 t          j        g |t          R   t          j        | }||v sJ n# t          $ r Y nw xY wt          j        |  d S # t          j        |  w xY wd S )Nr   r   )dictrk   r5   r   r   r   r   r   r   s          r   test_compat_identify_formatz5TestUnifiedIORegistryBase.test_compat_identify_format  s   Sc4w7 	%$@g@/?@@@@($BBBg~~~~ +++A 4PgP?OPPPP !0$7g~~~~~	     !6@@@@ 6@@@ ,+s*   A< 'B <
B	B B		B B,TODO!c                     J r   r   rl   s      r   test_compat_get_formatsz1TestUnifiedIORegistryBase.test_compat_get_formats      r   c                     J r   r   rl   s      r   test_compat_delay_doc_updatesz7TestUnifiedIORegistryBase.test_compat_delay_doc_updates  r   r   N)r   r   r   r   r[   rQ   fixturer   rf   rm   rp   rz   r   r   r   r   r   r   r   markskipr   r   r   r   r   rU   rU   p   sI       BB2 2 2 ^: : ^:>; ; ;E E E
0 
0 
0	
 	
 	
0 0 04 4 4
 
 
  "; ; ;$8 8 8A A A* [g   [g    r   rU   c                        e Zd ZdZd Zd Zej                            d          d             Z	 f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! xZ"S )TestUnifiedInputRegistryz7Test :class:`astropy.io.registry.UnifiedInputRegistry`.c                     t           | _        dS rW   )r	   rY   rZ   s    r   r[   z$TestUnifiedInputRegistry.setup_class'  s    (			r   c                 (    G d dt                      G d d          }d }fd}|                    dt           |           |                    d|          |u sJ |                    d|           |                    d|          |u sJ d S )Nc                       e Zd ZdS )ITestUnifiedInputRegistry.test_inherited_read_registration.<locals>.Child1Nr   r   r   r   r   r   Child1r   2          Dr   r   c                       e Zd ZdS )ITestUnifiedInputRegistry.test_inherited_read_registration.<locals>.Child2Nr   r   r   r   Child2r   5  r   r   r   c                      t                      S r   r*   r   r   r   _readzHTestUnifiedInputRegistry.test_inherited_read_registration.<locals>._read8      ;;r   c                                    S r   r   r   s   r   _read1zITestUnifiedInputRegistry.test_inherited_read_registration.<locals>._read1;      688Or   test)r!   register_reader
get_reader)r   r   r   r   r   r   s        @r    test_inherited_read_registrationz9TestUnifiedInputRegistry.test_inherited_read_registration-  s    
	 	 	 	 	Y 	 	 		 	 	 	 	V 	 	 		 	 		 	 	 	 	 	  E:::""6622e;;;;
 	  888""6622f<<<<<<r   r   c                     J rc   r   re   s     r   rf   z)TestUnifiedInputRegistry.test_get_formatsJ  	     	r   c                    t                                          ||           |                    t                    5  |                    dt          t
                     dt          j        j        v rt          j        j                            d          }d t          |          D             d         }||         
                    d          dz   }||         
                    d          dz   }|d         |d	         k    r2|d	         ||d
z            dk    sJ |d	         ||dz            dk    sJ ddd           n# 1 swxY w Y   t          j        j                            d          }||         
                    d          dz   }||         
                    d          dz   }|d         ||dz            dk    sJ |d         ||dz            dk    sJ dS )ri   r   Format
c                      g | ]\  }}d |v 	|S r   r   .0iss      r   
<listcomp>zCTestUnifiedInputRegistry.test_delay_doc_updates.<locals>.<listcomp>[  !    HHHTQQqr   r   rL   Read      YesN      )superrm   rj   r!   r   r.   r%   r   split	enumerateindex)r   r   r8   docsihdifmtiread	__class__s          r   rm   z/TestUnifiedInputRegistry.test_delay_doc_updatesO  s   &&x999''	22 	@ 	@$$VYEEE
 9>111 ~-33D99HHYt__HHHKCyx0014S	//!38tBx''8D4!8O4>>>>8EEAI$56%????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@  ~%++D11Cyx((1,S	''!+Bxtax(F2222Bx	)*e333333s   C8EE	Ec                     dt           dddt                      f} |j        | }|g k    sJ |                    dt           t                      |j        | }d|v sJ dS )r   r%   Nr   r   )r!   r   r   rk   r5   )r   r   r,   r   s       r   test_identify_read_formatz2TestUnifiedInputRegistry.test_identify_read_formati  sw    	4w? +(*D1"}}}} 	$$VY8HIII*(*D1      r   c                    ||j         vsJ ||j         vsJ  |j        g |t          R    |j        g |t          R   ||j         v sJ ||j         v sJ |j         |         t          dfk    sJ |j         |         t          dfk    sJ dS )z$Test ``registry.register_reader()``.r   N)rF   r   r.   ro   s       r   test_register_readerz-TestUnifiedInputRegistry.test_register_readery  s     h/////h///// 	! 8'8<8888  8'8<8888(+++++(+++++ )lA->>>>> )lA->>>>>>>r   c                 .   |\  }}|                     ||t                     t          j        t                    5 }|                     ||t                     d d d            n# 1 swxY w Y   t          |j                  d| d|j         dk    sJ d S )NzReader for format 'rr   rs   )r   r.   rQ   rR   r   rt   ru   r   r   r   r8   rw   rx   ry   s         r   test_register_reader_invalidz5TestUnifiedInputRegistry.test_register_reader_invalid  s    S  c<888]?++ 	=s$$S#|<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	NN 3C 3 33 3 3 3 3 3 3 3 3r{   c                 r     |j         g |t          R    |j         g |t          R ddi ||j        v sJ d S r}   )r   r.   rF   rl   s      r   test_register_reader_forcez3TestUnifiedInputRegistry.test_register_reader_force  `      8'8<8888  D'D<DDDtDDD(+++++++r   c                 F   |                     dt          d            |                     dt          d            t                              d|          }t	          |t                    sJ t                              d|          }t	          |t                    sJ d S )Nr   c                      t                      S r   r*   r   r   r   <lambda>zdTestUnifiedInputRegistry.test_register_readers_with_same_name_on_different_classes.<locals>.<lambda>  s
    IKK r   c                      t                      S r   )r(   r   r   r   r   zdTestUnifiedInputRegistry.test_register_readers_with_same_name_on_different_classes.<locals>.<lambda>  s    AQAQ r   formatr   )r   r!   r(   r%   
isinstance)r   r   ttbls       r   9test_register_readers_with_same_name_on_different_classeszRTestUnifiedInputRegistry.test_register_readers_with_same_name_on_different_classes  s     	  4G4GHHH  9Q9QRRRNN&8N<<!Y'''''!!(!CC#~.......r   c                 n     |j         g |t          R   ||j        v sJ  |j        |  ||j        vsJ dS )z&Test ``registry.unregister_reader()``.N)r   r.   rF   unregister_readerrl   s      r   test_unregister_readerz/TestUnifiedInputRegistry.test_unregister_reader  ^      8'8<8888(+++++""G,,h///////r   c                     |\  }}t          j        t                    5 } |j        |  d d d            n# 1 swxY w Y   t	          |j                  d| d|j         dk    sJ d S NNo reader defined for format 'rr   r   )rQ   rR   r   r   rt   ru   r   r   s         r   test_unregister_reader_invalidz7TestUnifiedInputRegistry.test_unregister_reader_invalid  s    S]?++ 	1s&H&00	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	NNQQQ#,QQQR R R R R Rs   6::c                    |\  }}t          j        t                    5  |                    ||           ddd           n# 1 swxY w Y   |                    ||t
                     |                    ||          }|t
          u sJ dS )zTest ``registry.get_reader()``.N)rQ   rR   r   r   r   r.   )r   r   rA   rw   rx   readers         r   test_get_readerz(TestUnifiedInputRegistry.test_get_reader  s    S]?++ 	* 	*S)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	  c<888$$S#..%%%%%%r   c                    |\  }}t          j        t                    5 }|                    ||           d d d            n# 1 swxY w Y   t	          |j                                      d| d|j         d          sJ d S r   )rQ   rR   r   r   rt   ru   
startswithr   rv   s         r   test_get_reader_invalidz0TestUnifiedInputRegistry.test_get_reader_invalid  s    S]?++ 	*sS)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*39~~((NSNNs|NNN
 
 	
 	
 	
 	
 	
r   c                     t          j        t                    5 }|d                             |           ddd           n# 1 swxY w Y   t	          |j                                      d          sJ dS )z3Test ``registry.read()`` when there isn't a reader.rL   r   NfFormat could not be identified based on the file name or contents, please provide a 'format' argument.)rQ   rR   r   r%   rt   ru   r   r   r   r8   ry   s       r   test_read_noformatz+TestUnifiedInputRegistry.test_read_noformat  s    ]?++ 	/sAJOOXO...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/39~~((2
 
 	
 	
 	
 	
 	
s   AA
Ac                 L   |j                             |d                    t          j        t                    5 }|d                             t                      |           ddd           n# 1 swxY w Y   t          |j                  	                    d          sJ dS z=Test that all identifier functions can accept arbitrary inputrE   rL   r   Nr   )
rH   r_   rQ   rR   r   r%   objectrt   ru   r   r   r   rJ   r8   ry   s        r   test_read_noformat_arbitraryz5TestUnifiedInputRegistry.test_read_noformat_arbitrary  s    $$Xm%<===]?++ 	9sAJOOFHHxO888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	939~~((2
 
 	
 	
 	
 	
 	
s   *A00A47A4c                    |j                             |d                    |dz  }t          |d          5 }|                    d           ddd           n# 1 swxY w Y   t	          j        t                    5 }t          j        |           ddd           n# 1 swxY w Y   t          |j
                                      d          sJ dS )>Tests that all identifier functions can accept arbitrary filesrC   foo.examplewzHello worldNr   )rF   r_   openr&   rQ   rR   r   r   r%   rt   ru   r   )r   tmp_pathr   rJ   testfilefry   s          r   !test_read_noformat_arbitrary_filez:TestUnifiedInputRegistry.test_read_noformat_arbitrary_file  sI     )!4555m+(C   	#AGGM"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ]?++ 	!sJx   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!39~~((2
 
 	
 	
 	
 	
 	
s#   AAA<BB!$B!c                 H   |\  }}|\  }}|                     ||d            |                     ||d            t          j        t                    5 }|                    |           d d d            n# 1 swxY w Y   t          |j                  d| d| k    sJ d S )Nc                     dS r4   r   oxys      r   r   zCTestUnifiedInputRegistry.test_read_toomanyformats.<locals>.<lambda>      4 r   c                     dS r4   r   r  s      r   r   zCTestUnifiedInputRegistry.test_read_toomanyformats.<locals>.<lambda>  r  r   r   #Format is ambiguous - options are: , )rk   rQ   rR   r   r%   rt   ru   	r   r   r8   r<   fmt1rx   fmt2_ry   s	            r   test_read_toomanyformatsz1TestUnifiedInputRegistry.test_read_toomanyformats  s    	ca$$T30G0GHHH$$T30G0GHHH]?++ 	(sHHhH'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(39~~!Ut!U!Ut!U!UUUUUUUs   A77A;>A;c                   	
 |\  	|\  
}t                      	fd}
fd}|                    	|d           |                    
|d           |                    	d            |                    
d                                |           
         dk    sJ 	         d	k    sJ d S )
Nc                  8    xx         dz  cc<                S NrL   r   )r,   r-   rx   counterr  s     r   counting_reader1zJTestUnifiedInputRegistry.test_read_uses_priority.<locals>.counting_reader1  $    DMMMQMMM355Lr   c                  8    xx         dz  cc<                S r  r   )r,   r-   rx   r  r  s     r   counting_reader2zJTestUnifiedInputRegistry.test_read_uses_priority.<locals>.counting_reader2   r!  r   rL   priorityr   c                     dS r4   r   r  s      r   r   zBTestUnifiedInputRegistry.test_read_uses_priority.<locals>.<lambda>  r  r   c                     dS r4   r   r  s      r   r   zBTestUnifiedInputRegistry.test_read_uses_priority.<locals>.<lambda>  r  r   r   r   )r   r   rk   r%   )r   r   r8   r<   r  r   r#  rx   r  r  r  s          @@@@r   test_read_uses_priorityz0TestUnifiedInputRegistry.test_read_uses_priority  s!   	ca))	 	 	 	 	 	 		 	 	 	 	 	 	 	  s,<q III  s,<q III$$T30G0GHHH$$T30G0GHHH(###t}!!!!t}!!!!!!r   c                 
   |\  }}t          j        t                    5 }|                    ||           d d d            n# 1 swxY w Y   t	          |j                                      d| d|j         d          sJ d S )Nr   r   rr   r   )rQ   rR   r   r%   rt   ru   r   r   r   s         r   test_read_format_noreaderz2TestUnifiedInputRegistry.test_read_format_noreader  s    S]?++ 	4sHHC(H333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	439~~((NSNNs|NNN
 
 	
 	
 	
 	
 	
s   AA
Ac                 
   |\  }}|\  }}|                     ||d            |                     ||d            |dz  }	t          |	d                                           t          j        t
                    5 }
|                    |	|           d d d            n# 1 swxY w Y   t          |
j                  	                    d| d|j
         d          sJ |d	z  }	t          |	d                                           t          j        t
                    5 }
|                    |	|           d d d            n# 1 swxY w Y   t          |
j                  	                    d| d|j
         d          sJ d S )
Nc                 ,    |                     d          S )Naendswithr  pathfileobjr  r  s        r   r   z?TestUnifiedInputRegistry.test_read_identifier.<locals>.<lambda>      s9K9K r   c                 ,    |                     d          S )Nbr.  r0  s        r   r   z?TestUnifiedInputRegistry.test_read_identifier.<locals>.<lambda>  r3  r   z
testfile.ar  r   r   rr   r   z
testfile.b)rk   r  closerQ   rR   r   r%   rt   ru   r   r   )r   r	  r   r8   r<   r  rx   r  r  filenamery   s              r   test_read_identifierz-TestUnifiedInputRegistry.test_read_identifier  s*   	ca$$#KK	
 	
 	
 	$$#KK	
 	
 	
 l*Xs!!###]?++ 	2sHHXH111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	239~~((OTOOOOO
 
 	
 	
 	
 l*Xs!!###]?++ 	2sHHXH111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	239~~((OTOOOOO
 
 	
 	
 	
 	
 	
s$   ;BB#&B#EE
Ec                     |\  }}|                     ||t                     |                    ||          }t          ||          sJ d S )Nr   )r   r.   r%   r   )r   r   rA   rw   rx   r   s         r   test_read_valid_returnz/TestUnifiedInputRegistry.test_read_valid_return4  sT    S  c<888HHC(H33!S!!!!!!!r   c                     t          j        t                    5  |d                             d          }ddd           dS # 1 swxY w Y   dS )zfRaise the correct error when attempting to read a non-existing
        file with an unknown extension.rL   z"non-existing-file-with-unknown.extN)rQ   rR   OSErrorr%   )r   r8   datas      r   "test_read_non_existing_unknown_extz;TestUnifiedInputRegistry.test_read_non_existing_unknown_ext:  s     ]7## 	I 	I1:??#GHHD	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   AA
Ac                 P   |\  }}|                     d|d            |                    d|t                     |dz  }|                                 |                    |d|          }t          ||          sJ |                    ||          }t          ||          sJ dS )z
        Regression test for a bug that caused the I/O registry infrastructure to
        not work correctly for datasets that are represented by folders as
        opposed to files, when using the descriptors to add read/write methods.
        test_folder_formatc                     | dk    S Nr%   r   r  s      r   r   z>TestUnifiedInputRegistry.test_read_directory.<locals>.<lambda>H  s
    !v+ r   folder_datasetr   r   N)rk   r   r.   mkdirr%   r   )r   r	  r   r8   r  rx   r7  datasets           r   test_read_directoryz,TestUnifiedInputRegistry.test_read_directory@  s     3$$ #'E'E	
 	
 	
 	  !5sLIII.. ((8,@8(TT'3''''' ((8h(77'3'''''''r   c                    ||j         vsJ t          j        g |t          R d|i ||j         v sJ |t          ur|t          j         vsJ 	 t          j        g |t
          R   |t          j         v sJ n# t          $ r Y nw xY wt          j                             |           d S # t          j                             |           w xY wd S r   )rF   r   r   r.   r   r5   r   r   rl   s      r   test_compat_register_readerz4TestUnifiedInputRegistry.test_compat_register_readerZ  s   h/////IIIIIIII(+++++ +++"2";;;;;7&BB1ABBBB "2";;;;;;    
 !)--g66666 )--g6666 ,+r   c                 4    |j         g |t          R   ||j        v sJ t          j        |d|i ||j        vsJ |t
          urQ|t
          j        vsJ t          j         g |t          R   |t
          j        v sJ t          j        |  ||j        vsJ d S d S r   )r   r.   rF   r   r   r   rl   s      r   test_compat_unregister_readerz6TestUnifiedInputRegistry.test_compat_unregister_readerl  s      8'8<8888(+++++ '=H===h///// +++"2";;;;;,DgD|DDDD.77777$g..("33333 ,+
 43r   c                     |j         g |t          R   t          j        |d|i}|t          u sJ  |j        |  |t
          urAt          j         g |t          R   t          j        | }|t          u sJ t          j        |  d S d S r   )r   r.   r   r   r   r   )r   r   r8   r   s       r   test_compat_get_readerz/TestUnifiedInputRegistry.test_compat_get_reader{  s      8'8<8888"G?h??%%%%""G,, +++,DgD|DDDD&0F\)))).8888	 ,+r   c                 P   |\  }} |j         g |t          R   t          j        |||          }t	          ||          sJ  |j        |  |t          urPt          j         g |t          R   t          j        ||          }t	          ||          sJ t          j        |  d S d S )Nr   r   )r   r.   r   r%   r   r   r   )r   r   r8   rw   rx   r   s         r   test_compat_readz)TestUnifiedInputRegistry.test_compat_read  s    S  8'8<8888KC(;;;!S!!!!!""G,, +++,DgD|DDDDC,,,Aa%%%%%.8888	 ,+r   )#r   r   r   r   r[   r   rQ   r   r   rf   rm   r   r   r   r   r   r   r   r   r   r   r  r  r  r(  r*  r8  r:  r>  rF  rH  rJ  rL  rO  __classcell__r   s   @r   r   r   $  s       AA) ) )= = =: [g  4 4 4 4 44! ! ! ? ? ?
 
 
, , ,
/ / /0 0 0
 
 
& & &
 
 

 
 
	
 	
 	

 
 
V V V" " ",
 
 

 
 
>" " "I I I( ( (47 7 7$4 4 49 9 99 9 9 9 9 9 9r   r   c                        e Zd ZdZd Zd Z fdZej        	                    d          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 xZS )TestUnifiedOutputRegistryz8Test :class:`astropy.io.registry.UnifiedOutputRegistry`.c                     t           | _        dS rW   )r   rY   rZ   s    r   r[   z%TestUnifiedOutputRegistry.setup_class  s    )			r   c                 (    G d dt                      G d d          }d }fd}|                    dt           |           |                    d|          |u sJ |                    d|           |                    d|          |u sJ d S )Nc                       e Zd ZdS )KTestUnifiedOutputRegistry.test_inherited_write_registration.<locals>.Child1Nr   r   r   r   r   rW    r   r   r   c                       e Zd ZdS )KTestUnifiedOutputRegistry.test_inherited_write_registration.<locals>.Child2Nr   r   r   r   r   rY    r   r   r   c                      t                      S r   r*   r   r   r   _writezKTestUnifiedOutputRegistry.test_inherited_write_registration.<locals>._write  r   r   c                                    S r   r   r   s   r   _write1zLTestUnifiedOutputRegistry.test_inherited_write_registration.<locals>._write1  r   r   r   )r!   register_writer
get_writer)r   r   r   r[  r]  r   s        @r   !test_inherited_write_registrationz;TestUnifiedOutputRegistry.test_inherited_write_registration  s    
	 	 	 	 	Y 	 	 		 	 	 	 	V 	 	 		 	 		 	 	 	 	 	  F;;;""6622f<<<<
 	  999""6622g======r   c                    t                                          ||           |\  }}|                    t                    5   |j        g |t
          R   dt          j        j        v rt          j        j        	                    d          }d t          |          D             d         }||                             d          }||                             d          dz   }|d         |d         k    r@||d         ||t          |          z   dz            v sJ |d         ||d	z            d
k    sJ ddd           n# 1 swxY w Y   t          j        j        	                    d          }||                             d          dz   }||                             d          dz   }||d         ||t          |          z   dz            v sJ |d         ||d	z            d
k    sJ dS )ri   r   r   c                      g | ]\  }}d |v 	|S r   r   r   s      r   r   zDTestUnifiedOutputRegistry.test_delay_doc_updates.<locals>.<listcomp>  r   r   r   WriterL   r   r   r   r   Nr   )r   rm   rj   r!   r^  r2   r%   r   r&   r   r   r   len)
r   r   r8   rw   rx   r   r   r   iwriter   s
            r   rm   z0TestUnifiedOutputRegistry.test_delay_doc_updates  s>   &&x999S''	22 	B 	B$H$<g<|<<<<
 9>111 .44T::HHYt__HHHKCyx00c11A58tBx''$r(4$S/A2E+E"FFFFF8FVaZ$78EAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B  &,,T22Cyx((1,c))A-d2htdSXXo&99:::::Bx!+,555555s   C6EE	E	r   c                     J r   r   re   s     r   rf   z*TestUnifiedOutputRegistry.test_get_formats  r   r   c                     |\  }}d|dddi f} |j         | }|g k    sJ |                    ||t                      |j         | }||v sJ dS )r   r&   Nr   r   r   s          r   test_identify_write_formatz4TestUnifiedOutputRegistry.test_identify_write_format  sv    SdD'26 +(*D1"}}}} 	$$S#/?@@@*(*D1g~~~~~~r   c                     ||j         vsJ ||j         vsJ  |j        g |t          R    |j        g |t          R   ||j         v sJ ||j         v sJ dS )z$Test ``registry.register_writer()``.N)rG   r^  r2   ro   s       r   test_register_writerz.TestUnifiedOutputRegistry.test_register_writer  s     h/////h///// 	! 8'8<8888  8'8<8888(+++++(+++++++r   c                 .   |\  }}|                     ||t                     t          j        t                    5 }|                     ||t                     ddd           n# 1 swxY w Y   t          |j                  d| d|j         dk    sJ dS )z2Test calling ``registry.register_writer()`` twice.NzWriter for format 'rr   rs   )r^  r2   rQ   rR   r   rt   ru   r   rv   s         r   test_register_writer_invalidz6TestUnifiedOutputRegistry.test_register_writer_invalid  s    S  c<888]?++ 	=s$$S#|<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	NN 3C 3 33 3 3 3 3 3 3 3 3r{   c                 r     |j         g |t          R    |j         g |t          R ddi ||j        v sJ d S r}   )r^  r2   rG   rl   s      r   test_register_writer_forcez4TestUnifiedOutputRegistry.test_register_writer_force  r   r   c                 n     |j         g |t          R   ||j        v sJ  |j        |  ||j        vsJ dS )&Test ``registry.unregister_writer()``.N)r^  r2   rG   unregister_writerrl   s      r   test_unregister_writerz0TestUnifiedOutputRegistry.test_unregister_writer  r   r   c                     |\  }}t          j        t                    5 }|                    ||           ddd           n# 1 swxY w Y   t	          |j                  d| d|j         dk    sJ dS )rp  NNo writer defined for format 'rr   r   )rQ   rR   r   rq  rt   ru   r   rv   s         r   test_unregister_writer_invalidz8TestUnifiedOutputRegistry.test_unregister_writer_invalid  s    S]?++ 	1s&&sC000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	NNQQQ#,QQQR R R R R Rr   c                     t          j        t                    5   |j        |  ddd           n# 1 swxY w Y    |j        g |t
          R    |j        | }|t
          u sJ dS )zTest ``registry.get_writer()``.N)rQ   rR   r   r_  r^  r2   r   r   r8   writers       r   test_get_writerz)TestUnifiedOutputRegistry.test_get_writer"  s    ]?++ 	* 	*H))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	! 8'8<8888$$g.%%%%%%s   155c                    |\  }}t          j        t                    5 }|                    ||           ddd           n# 1 swxY w Y   t	          |j                                      d| d|j         d          sJ dS )z'Test invalid ``registry.get_writer()``.Nrt  rr   r   )rQ   rR   r   r_  rt   ru   r   r   r   s         r   test_get_writer_invalidz1TestUnifiedOutputRegistry.test_get_writer_invalid+  s    S]?++ 	*sS)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*39~~((NSNNs|NNN
 
 	
 	
 	
 	
 	
r   c                    t          j        t                    5 } |d                                         |           ddd           n# 1 swxY w Y   t	          |j                                      d          sJ dS )z4Test ``registry.write()`` when there isn't a writer.rL   r   Nr   )rQ   rR   r   r&   rt   ru   r   r   s       r   test_write_noformatz-TestUnifiedOutputRegistry.test_write_noformat6  s    ]?++ 	2sGAJLL111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	239~~((2
 
 	
 	
 	
 	
 	
s   %AAAc                 \   |j                             |d                    t          j        t                    5 } |d                                         t                      |           ddd           n# 1 swxY w Y   t          |j                  	                    d          sJ dS r   )
rH   r_   rQ   rR   r   r&   r  rt   ru   r   r  s        r   test_write_noformat_arbitraryz7TestUnifiedOutputRegistry.test_write_noformat_arbitrary@  s     	$$Xm%<===]?++ 	<sGAJLLvxx(;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<39~~((2
 
 	
 	
 	
 	
 	
s   2A88A<?A<c                 J   |j                             |d                    |dz  }t          j        t                    5 }t                                          ||           ddd           n# 1 swxY w Y   t          |j                  	                    d          sJ dS )r  rD   r  r   Nr   )
rG   r_   rQ   rR   r   r   r&   rt   ru   r   )r   r	  r   rJ   r
  ry   s         r   "test_write_noformat_arbitrary_filez<TestUnifiedOutputRegistry.test_write_noformat_arbitrary_fileL  s      )!4555m+]?++ 	7sGGMM(XM666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	739~~((2
 
 	
 	
 	
 	
 	
s   $A//A36A3c                 H    |j         g |d R    |j         g |d R   t          j        t                    5 } |d                                         |           d d d            n# 1 swxY w Y   t          |j                  d|d          d|d          k    sJ d S )Nc                     dS r4   r   r  s      r   r   zETestUnifiedOutputRegistry.test_write_toomanyformats.<locals>.<lambda>Z      $ r   c                     dS r4   r   r  s      r   r   zETestUnifiedOutputRegistry.test_write_toomanyformats.<locals>.<lambda>[  r  r   rL   r   r  r   r  )rk   rQ   rR   r   r&   rt   ru   )r   r   r8   r<   ry   s        r   test_write_toomanyformatsz3TestUnifiedOutputRegistry.test_write_toomanyformatsY  s   $$GgG/F/FGGGG$$GgG/F/FGGGG]?++ 	2sGAJLL111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	NNOWQZOO71:OOP P P P P Ps   %A++A/2A/c                   	
 |\  	}|\  
}t                      	fd}
fd}|                    	||d           |                    
||d           |                    	|d            |                    
|d             |                                |           
         dk    sJ 	         d	k    sJ d S )
Nc                  (    xx         dz  cc<   d S r  r   )r,   r-   r  r  s     r   counting_writer1zLTestUnifiedOutputRegistry.test_write_uses_priority.<locals>.counting_writer1h      DMMMQMMMMMr   c                  (    xx         dz  cc<   d S r  r   )r,   r-   r  r  s     r   counting_writer2zLTestUnifiedOutputRegistry.test_write_uses_priority.<locals>.counting_writer2k  r  r   rL   r$  r   c                     dS r4   r   r  s      r   r   zDTestUnifiedOutputRegistry.test_write_uses_priority.<locals>.<lambda>p      D r   c                     dS r4   r   r  s      r   r   zDTestUnifiedOutputRegistry.test_write_uses_priority.<locals>.<lambda>q  r  r   r   r   )r   r^  rk   r&   )r   r   r8   r<   cls1cls2r  r  r  r  r  s           @@@r   test_write_uses_priorityz2TestUnifiedOutputRegistry.test_write_uses_priorityc  s   
d
d))	 	 	 	 	 		 	 	 	 	 	 	  t-= JJJ  t-= JJJ$$T41H1HIII$$T41H1HIIIh'''t}!!!!t}!!!!!!r   c                    |\  }}t          j        t                    5 } |                                ||           d d d            n# 1 swxY w Y   t	          |j                                      d| d|j         d          sJ d S )Nr   rt  rr   r   )rQ   rR   r   r&   rt   ru   r   r   r   s         r   test_write_format_nowriterz4TestUnifiedOutputRegistry.test_write_format_nowriterw  s    S]?++ 	7sCEEKKsXK666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	739~~((NSNNs|NNN
 
 	
 	
 	
 	
 	
s    AAAc                    |\  }}|\  }}|                     ||d            |                     ||d            t          j        t                    5 } |                                d|           d d d            n# 1 swxY w Y   t          |j                                      d| d|j         d          sJ t          j        t                    5 } |                                d|           d d d            n# 1 swxY w Y   t          |j                                      d| d|j         d          sJ d S )	Nc                 8    |d                              d          S )Nr   r-  r   r  s      r   r   zATestUnifiedOutputRegistry.test_write_identifier.<locals>.<lambda>      1Q4??SVCWCW r   c                 8    |d                              d          S )Nr   r5  r  r  s      r   r   zATestUnifiedOutputRegistry.test_write_identifier.<locals>.<lambda>  r  r   abcr   rt  rr   r   bac)	rk   rQ   rR   r   r&   rt   ru   r   r   r  s	            r   test_write_identifierz/TestUnifiedOutputRegistry.test_write_identifier  s   	ca$$T30W0WXXX$$T30W0WXXX
 ]?++ 	2sCEEKKK111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	239~~((OTOOOOO
 
 	
 	
 	
 ]?++ 	2sCEEKKK111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	239~~((OTOOOOO
 
 	
 	
 	
 	
 	
s$    B  BB DD	D	c                     |\  }}|                     ||t                     |                     |            ||          }|dk    sJ dS )zBMost writers will return None, but other values are not forbidden.r   r0   N)r^  r2   r&   r   r   r8   rw   rx   ress         r   test_write_returnz+TestUnifiedOutputRegistry.test_write_return  sX    S  c<888iicHi=='''''''r   c                    ||j         vsJ t          j        g |t          R d|i ||j         v sJ  |j        |  |t
          ur|t
          j         vsJ 	 t          j        g |t          R   |t
          j         v sJ n# t          $ r Y nw xY wt
          j                             |           d S # t
          j                             |           w xY wd S r   )rG   r   r^  r2   rq  r   r   r   rl   s      r   test_compat_register_writerz5TestUnifiedOutputRegistry.test_compat_register_writer  s#   h/////IIIIIIII(+++++""G,, +++"2";;;;;7&>>>>>> "2";;;;;;    
 !)--g66666 )--g6666 ,+s*   A? .B0 ?
B	B0 BB0 0!Cc                 >    |j         g |t          R   ||j        v sJ t          j        |d|i ||j        vsJ |t
          urV|t
          j        vsJ t          j         g |t          R   |t
          j        v sJ t          j        |  |t
          j        vsJ d S d S r   )r^  r2   rG   r   rq  r   rl   s      r   test_compat_unregister_writerz7TestUnifiedOutputRegistry.test_compat_unregister_writer  s      8'8<8888(+++++ '=H===h///// +++"2";;;;;,DgD|DDDD.77777$g.."2";;;;; ,+
 <;r   c                 Z    |j         g |t          R   t          j        |d|i}|t          u sJ |t          uro|t          j        vsJ t	          j         g |t          R   |t          j        v sJ t          j        | }|t          u sJ t	          j        |  |t          j        vsJ d S d S r   )r^  r2   r   r_  r   rG   rq  rw  s       r   test_compat_get_writerz0TestUnifiedOutputRegistry.test_compat_get_writer  s      8'8<8888"G?h??%%%% +++"2";;;;;,DgD|DDDD.77777&0F\)))).88"2";;;;; ,+ <;r   c                    |\  }} |j         g |t          R   t          j         |            ||          }|dk    sJ |t          ur||t          j        vsJ t	          j         g |t          R   |t          j        v sJ t          j         |            |          }|dk    sJ t	          j        |  |t          j        vsJ d S d S )Nr   r0   rN  )r^  r2   r   r&   r   rG   rq  r  s         r   test_compat_writez+TestUnifiedOutputRegistry.test_compat_write  s   S 	! 8'8<8888l3355x@@@''''' +++"2";;;;;,DgD|DDDD.77777,ssuuS111C+++++.88"2";;;;; ,+ <;r   ) r   r   r   r   r[   r`  rm   rQ   r   r   rf   rh  rj  rl  rn  rr  ru  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  r  rP  rQ  s   @r   rS  rS    s       BB* * *> > >:6 6 6 6 66 [g    "
, 
, 
,	
 	
 	
, , ,0 0 0
 
 
& & &
 
 

 
 


 

 


 
 

 
 
" " "(
 
 

 
 
,( ( (7 7 7&< < << < < < < < < < < <r   rS  c                   p     e Zd Zd Zej                            d          d             Z fdZd Z	 xZ
S )TestUnifiedIORegistryc                     t           | _        dS rW   )r
   rY   rZ   s    r   r[   z!TestUnifiedIORegistry.setup_class  s    %			r   r   c                     J r   r   re   s     r   rf   z&TestUnifiedIORegistry.test_get_formats  r   r   c                 L    t                                          ||           dS rh   )r   rm   )r   r   r8   r   s      r   rm   z,TestUnifiedIORegistry.test_delay_doc_updates  s#    &&x99999r   c                 V   |\  }}|\  }}|                     ||d            |                     ||d            |                    ||t                     |                    ||t                     |                    |            |                                |           t          j        t                    5 }|                    ||           d d d            n# 1 swxY w Y   t          |j                                      d| d|j         d          sJ t          j        t                    5 } |                                ||           d d d            n# 1 swxY w Y   t          |j                                      d| d|j         d          sJ d S )	Nc                     | dk    S rB  r   r  s      r   r   z>TestUnifiedIORegistry.test_identifier_origin.<locals>.<lambda>  s
    1; r   c                     | dk    S )Nr&   r   r  s      r   r   z>TestUnifiedIORegistry.test_identifier_origin.<locals>.<lambda>  s
    1< r   r   r   r   rr   r   rt  )rk   r   r.   r^  r2   r%   r&   rQ   rR   r   rt   ru   r   r   r  s	            r   test_identifier_originz,TestUnifiedIORegistry.test_identifier_origin  s2   	ca$$T30N0NOOO$$T30O0OPPP  sL999  sL999 	(###X&&&]?++ 	5sHHD8H444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	539~~((OTOOOOO
 
 	
 	
 	
 ]?++ 	8sCEEKKthK777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	839~~((OTOOOOO
 
 	
 	
 	
 	
 	
s$    C$$C(+C(= E))E-0E-)r   r   r   r[   rQ   r   r   rf   rm   r  rP  rQ  s   @r   r  r    s        & & & [g  : : : : :
 
 
 
 
 
 
r   r  c                       e Zd Zd ZdS )TestDefaultRegistryc                     d | _         dS )rX   c                      t           S r   r   )r,   s    r   r   z1TestDefaultRegistry.setup_class.<locals>.<lambda>  s    "2 r   N)rY   rZ   s    r   r[   zTestDefaultRegistry.setup_class  s    22			r   N)r   r   r   r[   r   r   r   r  r    s#        3 3 3 3 3r   r  c                  X    t          t                    } t          j        D ]}|| v sJ 	dS )z0Test all the compat methods are in the directoryN)dirr   __all__)dcns     r   test_dirr    s7    	VB^  Bwwwww r   c                      t           j        D ]} t          t           |           sJ t          j        t
          d          5  t           j         d d d            d S # 1 swxY w Y   d S )Nz#module 'astropy.io.registry.compat'rO   )r   r  r]   rQ   rR   AttributeError%this_is_definitely_not_in_this_module)r  s    r   test_getattrr  #  s    ^ " "vq!!!!!!	~-R	S	S	S 5 5445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   AA #A c            	         t           j        j        } t          j        t          t          g dg d                    dt          fdg          }	 |                     dt           d            t          j        |d          }|	                                dd	gk    sJ t          d
          D ]B}|d         |         |d         |         k    sJ |d	         |         |d	         |         k    sJ Cn# t          $ r Y nw xY w| j                            dd            d S # | j                            dd            w xY w)N)rL   r   r   )r-  r5  cA)Bz|U1)dtyper   c                      t          |           S r   r   )r  s    r   r   z'test_read_basic_table.<locals>.<lambda>5  s    %(( r   rN  r  r   )r   r%   	_registrynparraylistzipintr   keysranger   rF   r   )r   r=  r   r   s       r   test_read_basic_tabler  /  s_   z#H8SOOO,,--sCj,5O  D,  0B0BCCC JtF+++vvxxC:%%%%q 	- 	-AS6!9S	!,,,,S6!9S	!,,,,,	-     	fd+++++fd++++s+   C3 .BD  3
D =D  ?D  D   D=c                   X    e Zd ZdZ ej        d          d             Zd Zd Zd Z	dS )	TestSubclassz4
    Test using registry with a Table sub-class
    T)autousec              #      K   dV  dS )zI/O registry. Not cleaned.Nr   rZ   s    r   r   zTestSubclass.registryG  s       	r   c                     G d dt                     }ddg}|                    |d          }t          j        |d          }t          j        ||k              sJ |j        |j        k    sJ t          |          |u sJ d S )Nc                       e Zd ZdS )6TestSubclass.test_read_table_subclass.<locals>.MyTableNr   r   r   r   MyTabler  M  r   r   r  a b1 2asciirN  )r   r%   r  allcolnamestype)r   r  r=  mtr   s        r   test_read_table_subclassz%TestSubclass.test_read_table_subclassL  s    	 	 	 	 	e 	 	 	 u~\\$w\//JtG,,,vbAg{aj((((Bxx7""""""r   c                    t                      } G d dt                    } |dgdggddg          }|                    |d	           |                                t          j                            g d
          k    sJ d S )Nc                       e Zd ZdS )7TestSubclass.test_write_table_subclass.<locals>.MyTableNr   r   r   r   r  r  Z  r   r   r  rL   r   r-  r5  namesr  rN  )r  r   )r   r   r&   getvalueoslinesepjoin)r   bufferr  r  s       r   test_write_table_subclassz&TestSubclass.test_write_table_subclassW  s    	 	 	 	 	e 	 	 	 WqcA3ZSz222
(((  BJOO4F4F4F$G$GGGGGGGr   c                     G d dt                     } |ddggdg          }t          j        |d         _        d|d         _        d|d         _        |d	z  }|                    |d
           |                    |          }t          j	        ||k              sJ |j
        |j
        k    sJ t          |          |u sJ |d         j        t          j        k    sJ |d         j        dk    sJ |d         j        dk    sJ dS )zBRegression test for https://github.com/astropy/astropy/issues/7181c                       e Zd ZdS )MTestSubclass.test_read_table_subclass_with_columns_attributes.<locals>.MTableNr   r   r   r   MTabler  d  r   r   r  rL   g      @r-  r  z.4fhelloz	junk.fitsT)	overwritez{:13.4f}N)r   umunitr   descriptionr&   r%   r  r  r  r  )r   r	  r  r  r
  r   s         r   0test_read_table_subclass_with_columns_attributesz=TestSubclass.test_read_table_subclass_with_columns_attributesa  s1   	 	 	 	 	U 	 	 	 VaXJse,,,s33%3k)
T***KK!!vbAg{aj((((Aww&    v{ac!!!!v}
****v!W,,,,,,r   N)
r   r   r   r   rQ   r   r   r  r  r  r   r   r   r  r  B  sy          V^D!!!  "!	# 	# 	#H H H- - - - -r   r  )3r   r  collectionsr   copyr   ior   numpyr  rQ   astropy.unitsunitsr  
astropy.ior   r$   astropy.io.registryr   r	   r
   r   r   astropy.io.registry.baser   astropy.io.registry.compatr   astropy.tabler   r   r!   r(   r.   r2   r5   r   r8   r<   rA   rJ   rM   rS   rU   r   rS  r  r  r  r  r  r  r   r   r   <module>r     s    
			                              . . . . . .              < ; ; ; ; ; 7 7 7 7 7 7          $:   	 	 	 	 	 	 	 	                          )***% % +*%   $ $ $
/ / /
q q q q q q q qhr9 r9 r9 r9 r98 r9 r9 r9jH< H< H< H< H< 9 H< H< H<V
)
 )
 )
 )
 )
46O )
 )
 )
X3 3 3 3 3/ 3 3 3  5 5 5, , ,&3- 3- 3- 3- 3- 3- 3- 3- 3- 3-r   