
    ju                     &   d Z ddlZddlZddlZddlmZ ddlmZ ddl	Z	ddl
Z
ddl
mZmZmZmZmZ ddl
mZmZ ddl
mZ ddlmZ d	d
lmZmZmZmZ 	  ed           dZn# e$ r dZY nw xY w G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d  d!e$          Z% G d" d#e          Z& G d$ d%e$          Z' G d& d'e          Z( G d( d)e$          Z) G d* d+e$          Z* G d, d-e          Z+ G d. d/e          Z, G d0 d1e          Z- G d2 d3          Z. G d4 d5e          Z/ G d6 d7e          Z0 G d8 d9e          Z1d: Z2d; Z3e	j4        5                    d<d=          e	j4        5                    d>d=          d?                         Z6e	j4        5                    d>d=          d@             Z7dA Z8e	j4        5                    dBdC          e	j4        5                    dDg dE          dF                         Z9 G dG dHe          Z: G dI dJe          Z; G dK dLe          Z< G dM dNe          Z=dS )Oz
    Group test module.

    Tests all methods and properties of Group objects, with the following
    exceptions:

    1. Method create_dataset is tested in module test_dataset
    N)MutableMapping)mkdtemp)FileGroupSoftLinkHardLinkExternalLink)DatasetDatatype)h5t)filename_encode   )utTestCase	make_nameis_main_thread   αFTc                       e Zd Zd Zd ZdS )	BaseGroupc                 T    t          |                                 d          | _        d S Nw)r   mktempfselfs    X/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/h5py/tests/test_group.pysetUpzBaseGroup.setUp/   s    dkkmmS))    c                 J    | j         r| j                                          d S d S Nr   closer   s    r   tearDownzBaseGroup.tearDown2   )    6 	FLLNNNNN	 	r   N)__name__
__module____qualname__r   r$    r   r   r   r   -   s2        * * *    r   r   c                   H    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S )
TestCreatezI
        Feature: New groups can be created via .create_group method
    c                     | j                             t                                }|                     |t                     dS )z Simple .create_group call N)r   create_groupr   assertIsInstancer   r   grps     r   test_create_strzTestCreate.test_create_str<   s7    f!!)++..c5)))))r   c                     | j                             t                                          d                    }|                     |t
                     d S )Nutf8)r   r-   r   encoder.   r   r/   s     r   test_create_byteszTestCreate.test_create_bytesA   sE    f!!)++"4"4V"<"<==c5)))))r   c                     t          d          }| j                            |          }|                     |j        d|z              dS )z2 Intermediate groups can be created automatically foo{}/bar/baz/N)r   r   r-   assertEqualname)r   pathr0   s      r   test_create_intermediate_strz'TestCreate.test_create_intermediate_strE   sF    ))f!!$''3:.....r   c                     t          d          }| j                            |                    d                    }|                     |j        d|z              d S )Nr7   r3   r8   )r   r   r-   r4   r9   r:   )r   r;   grp2s      r   test_create_intermediate_bytesz)TestCreate.test_create_intermediate_bytesK   sR    ))v""4;;v#6#677C$J/////r   c                     t                      }| j                            |           |                     t                    5  | j                            |           ddd           dS # 1 swxY w Y   dS )z= Name conflict causes group creation to fail with ValueError N)r   r   r-   assertRaises
ValueErrorr   r:   s     r   test_create_exceptionz TestCreate.test_create_exceptionP   s    {{D!!!z** 	& 	&F%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   A++A/2A/c                 \   dt                      z   t          d          z   }| j                            |          }|                     |j        |           |                     |j        j                            |	                    d                    j
        t          j                   dS )z$ Unicode names are correctly stored r8   i E  r3   N)r   chrr   r-   r9   r:   idlinksget_infor4   csetr   	CSET_UTF8r   ngroups      r   test_unicodezTestCreate.test_unicodeW   s    )++F+##A&&Q'''00&1A1ABBGWWWWWr   c                 8   t          d          }| j                            |          }|                     |j        |           |                     |j        j                            |                    d                    j	        t          j                   dS )zL Unicode names convertible to ASCII are stored as ASCII (issue 239)
        z/Hello, this is a namer3   N)r   r   r-   r9   r:   rG   rH   rI   r4   rJ   r   
CSET_ASCIIrL   s      r   test_unicode_defaultzTestCreate.test_unicode_default^   s~     .//##A&&Q'''00&1A1ABBGXXXXXr   c                     |                      t                    5  | j                            d           ddd           dS # 1 swxY w Y   dS )z" Names should be strings or bytes g      ?N)rA   	TypeErrorr   r-   r   s    r   	test_typezTestCreate.test_typef   s    y)) 	$ 	$F###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   AA
Ac                     | j                             t                      dgd          }|                     t                    5  t          |j                   ddd           dS # 1 swxY w Y   dS )zA Binding a group to a non-group identifier fails with ValueError r   f4N)r   create_datasetr   rA   rB   r   rG   )r   dsets     r   test_appropriate_low_level_idz(TestCreate.test_appropriate_low_level_idk   s    v$$Y[[1#t<<z** 	 	$'NNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A&&A*-A*N)r&   r'   r(   __doc__r1   r5   r<   r?   rD   rO   rR   rU   r[   r)   r   r   r+   r+   6   s         * * *
* * */ / /0 0 0
& & &X X XY Y Y$ $ $
    r   r+   c                       e Zd ZdZd Zd ZdS )TestDatasetAssignmentzK
        Feature: Datasets can be created by direct assignment of data
    c                     t                      }t          j        dd          }|| j        |<   |                     | j        |         t
                     |                     | j        |         d         |           dS )z, Dataset auto-creation by direct assignment    ra   r   dtype.N)r   nponesr   r.   r
   assertArrayEqual)r   r:   datas      r   test_ndarrayz"TestDatasetAssignment.test_ndarrayw   sm    {{wu3'''tdfTlG444dfTl3/66666r   c                     t          j        dd          }t                                          d          }|| j        |<   |                     | j        |         t                     d S )Nr`   r   rb   r3   )rd   re   r   r4   r   r.   r
   )r   rg   rM   s      r   test_name_bytesz%TestDatasetAssignment.test_name_bytes   sZ    wvS)))KKv&&q	dfQi11111r   N)r&   r'   r(   r\   rh   rj   r)   r   r   r^   r^   q   s<         7 7 72 2 2 2 2r   r^   c                       e Zd ZdZd Zd ZdS )TestDtypeAssignmentzP
        Feature: Named types can be created by direct assignment of dtypes
    c                     t                      }t          j        d          }|| j        |<   |                     | j        |         t
                     |                     | j        |         j        |           dS ) Named type creation |S10N)r   rd   rc   r   r.   r   r9   )r   r:   rc   s      r   
test_dtypezTestDtypeAssignment.test_dtype   sf    {{  tdfTlH555+U33333r   c                     t          j        d          }t                                          d          }|| j        |<   |                     | j        |         t                     dS )rn   ro   r3   N)rd   rc   r   r4   r   r.   r   )r   rc   rM   s      r   rj   z#TestDtypeAssignment.test_name_bytes   sU      KKv&&q	dfQi22222r   N)r&   r'   r(   r\   rp   rj   r)   r   r   rl   rl      s<         4 4 43 3 3 3 3r   rl   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestRequirezO
        Feature: Groups can be auto-created, or opened via .require_group
    c                 <   t                      }| j                            |          }| j                            |          }|                     ||           | j                            |                    d                    }|                     ||           dS )z' Existing group is opened and returned r3   N)r   r   r-   require_groupr9   r4   r   r:   r0   r>   grp3s        r   test_open_existingzTestRequire.test_open_existing   s    {{f!!$''v##D))s###v##DKK$7$788s#####r   c                     t                      }| j                            |          }|                     |t                     |                     |j        d|z              dS )z& Group is created if it doesn't exist r8   N)r   r   ru   r.   r   r9   r:   r   r:   r0   s      r   test_createzTestRequire.test_create   sX    {{f""4((c5)))3:.....r   c                     t                      }| j                            |dd           |                     t                    5  | j                            |           ddd           dS # 1 swxY w Y   dS )z1 Opening conflicting object results in TypeError r   r   N)r   r   rY   rA   rT   ru   rC   s     r   test_require_exceptionz"TestRequire.test_require_exception   s    {{dD#...y)) 	' 	'F  &&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A--A14A1c                 T   t          d          }t          j                    }| j                            | dd|           | j                            |          }t          |t                    sJ | j                            | d          }t          |t                    sJ dS )z- Intermediate is created if it doesn't exist foo/bar/bazr}   rb   /barN)r   h5pystring_dtyper   require_datasetget
isinstancer   )r   r:   dtrN   s       r    test_intermediate_create_datasetz,TestRequire.test_intermediate_create_dataset   s      $000$bAAA

4  %'''''

d===))%'''''''r   c                    t          d          }| j                            | d           | j                            |          }t	          |t
                    sJ | j                            | d          }t	          |t
                    sJ | j                            | d          }t	          |t
                    sJ d S )Nr   r   r   )r   r   ru   r   r   r   )r   r:   rN   s      r   test_intermediate_create_groupz*TestRequire.test_intermediate_create_group   s    ...///

4  %'''''

d===))%'''''

d,,,--%'''''''r   c                    t          d          }| j                            |ddt                    }|                    dd           | j                            |ddt                     | j                            |dt          	           |                     t                    5  | j                            |d
dt                     d d d            n# 1 swxY w Y   |                     t                    5  | j                            |d
dt                     d d d            n# 1 swxY w Y   |                     t                    5  | j                            |d
dt                     d d d            n# 1 swxY w Y   |                     t                    5  | j                            |dt          	           d d d            d S # 1 swxY w Y   d S )Nzfoo{}/resizable)r      )Nr   )shapemaxshaperc      r   )axis)r   r   )r   rc   r   r   )r   N)N   )Nr      )
   r   )r   r   r   intresizerA   rT   )r   rM   dss      r   test_require_shapezTestRequire.test_require_shape   s   '((V##AVis#SS
		"1	q#NNNqs;;;y)) 	S 	SF""1FYc"RRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	Sy)) 	S 	SF""1FYc"RRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	Sy)) 	V 	VF""1F\QT"UUU	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	Vy)) 	@ 	@F""1G3"???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@sH   )$CC C>$D..D25D2$FF
F(#GGGN)
r&   r'   r(   r\   rx   r{   r~   r   r   r   r)   r   r   rs   rs      s}         $ $ $/ / /' ' '( ( (( ( (@ @ @ @ @r   rs   c                   $    e Zd ZdZd Zd Zd ZdS )
TestDeletezA
        Feature: Objects can be unlinked via "del" operator
    c                     t                      }| j                            |           |                     || j                   | j        |= |                     || j                   dS )z Object deletion via "del" Nr   r   r-   assertInassertNotInrC   s     r   test_deletezTestDelete.test_delete   s^    {{D!!!dDF###F4Ltv&&&&&r   c                 |    |                      t                    5  | j        d= ddd           dS # 1 swxY w Y   dS )z. Deleting non-existent object raises KeyError r   NrA   KeyErrorr   r   s    r   test_nonexistingzTestDelete.test_nonexisting   s    x(( 	 	u	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   	155c                    |                                  }t          |d          }	 |                    d           |                                 n# |                                 w xY wt          |d          }	 |                     t
                    5  |d= ddd           n# 1 swxY w Y   |                                 dS # |                                 w xY w)z2 Deleting object in readonly file raises KeyError r   r   rN)r   r   r-   r#   rA   r   )r   fnamehfiles      r   test_readonly_delete_exceptionz)TestDelete.test_readonly_delete_exception   s    UC  	u%%%KKMMMMEKKMMMMUC  	""8,, ! !%L! ! ! ! ! ! ! ! ! ! ! ! ! ! ! KKMMMMMEKKMMMMs;   A A&:C B$C $B((C +B(,C CN)r&   r'   r(   r\   r   r   r   r)   r   r   r   r      sK         ' ' '  
    r   r   c                   ~    e Zd ZdZd Zd Zd Zd Zd Ze	j
                            d          d	             Zd
 ZdS )TestOpenzJ
        Feature: Objects can be opened via indexing syntax obj[name]
    c                     t                      }| j                            |          }| j        |         }| j        d|          }|                     ||           |                     ||           dS )z Simple obj[name] opening r8   N)r   r   r-   r9   rv   s        r   	test_openzTestOpen.test_open  so    {{f!!$''vd|vj$jj!d###d#####r   c                     |                      t                    5  | j        d          ddd           dS # 1 swxY w Y   dS )z) Opening missing objects raises KeyError notexistNr   r   s    r   test_nonexistentzTestOpen.test_nonexistent  s    x(( 	 	F:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   6::c                     | j                             t                                }| j         |j                 }|                     ||           dS )z0 Objects can be opened by HDF5 object reference N)r   r-   r   refr9   )r   r0   r>   s      r   test_referencezTestOpen.test_reference  sD    f!!)++..vcgs#####r   c                 `   | j                             t          d                    }t          j        ddt
          j        fg          }| j                             t          d          d|          }d|j        f|d<   |d         }| 	                    | j         |d                  |           d	S )
zm Object can be opened by numpy.object_ containing object ref

        Test for issue 181, issue 202.
        g)aibxr}   *   r   r   N)
r   r-   r   rd   rc   r   	ref_dtyperY   r   r9   )r   r   r   rZ   rg   s        r   test_reference_numpyobjz TestOpen.test_reference_numpyobj  s    
 F	#//Xz3"7899v$$Ys^^T2>>QUQAwQ!,,,,,r   c                     t           j                                        }|                     t                    5  | j        |          ddd           dS # 1 swxY w Y   dS )z5 Invalid region references should raise an exception N)r   h5r	ReferencerA   rB   r   )r   r   s     r   test_invalid_refzTestOpen.test_invalid_ref*  s    h  ""z** 	 	F3KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAzFIXME #2672 does not raise)reasonc                 
   t                      }| j                            |           | j        |         j        }| j        |= |                     t
                    5  | j        |          ddd           dS # 1 swxY w Y   dS )z9 References to deleted objects should raise an exception N)r   r   r-   r   rA   	Exception)r   r:   r   s      r   test_deleted_refzTestOpen.test_deleted_ref1  s     {{D!!!fTlF4Ly)) 	 	F3KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A88A<?A<c                 P   | j                             t                                 |                     t                    5  | j         d          ddd           n# 1 swxY w Y   |                     t                    5  | j         d          ddd           dS # 1 swxY w Y   dS )z> Access with non bytes or str types should raise an exception r   N.)r   r-   r   rA   rT   r   s    r   test_path_type_validationz"TestOpen.test_path_type_validation<  s   IKK(((y)) 	 	F1II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 y)) 	 	F3KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   AA"A BB"BN)r&   r'   r(   r\   r   r   r   r   r   pytestmarkthread_unsafer   r   r)   r   r   r   r     s         $ $ $  
$ $ $- - -   [&BCC  DC    r   r   c                       e Zd ZdZd ZdS )TestReprz9Opened and closed groups provide a useful __repr__ stringc                    t                      }| j                            |          }|                     t	          |          t
                     |j                                         |                     t	          |          t
                     | j        |         }t                      rC| j        	                                 |                     t	          |          t
                     dS dS )z; Opened and closed groups provide a useful __repr__ string N)
r   r   r-   r.   reprstrrG   _closer   r#   )r   r:   r   s      r   	test_reprzTestRepr.test_reprK  s    {{F%%d1ggs+++	d1ggs+++F4L 	0FLLNNN!!$q''3/////	0 	0r   N)r&   r'   r(   r\   r   r)   r   r   r   r   H  s)        CC0 0 0 0 0r   r   c                       e Zd ZdZd Zd ZdS )BaseMappingz*
        Base class for mapping tests
    c                     t          |                                 d          | _        d| _        | j        D ]}| j                            |           t          j        d          | j        d<   | j        dz   | _        d S )Nr   )r   r   cd	/mongooser   r   )r   r   r   groupsr-   r   r   r   r   s     r   r   zBaseMapping.setUp]  ss    dkkmmS))* 	# 	#AF""""mK00skF*r   c                 J    | j         r| j                                          d S d S r!   r"   r   s    r   r$   zBaseMapping.tearDowne  r%   r   N)r&   r'   r(   r\   r   r$   r)   r   r   r   r   X  s<         + + +    r   r   c                       e Zd ZdZd Zd ZdS )TestLenzM
        Feature: The Python len() function returns the number of groups
    c                 z    |                      t          | j                  t          | j                             dS )z' len() returns number of group members N)r9   lenr   r   r   s    r   test_lenzTestLen.test_leno  s0    TVc$+&6&677777r   c                    t          |                                 d          5 }|                     t          |          d           |                    d           |                     t          |          d           |                    d           |                     t          |          d           |d= |                     t          |          d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   yr   )r   r   r9   r   r-   r   r   s     r   test_len_after_create_groupz#TestLen.test_len_after_create_groups  s   $++--%% 	(SVVQ'''NN3SVVQ'''NN3SVVQ'''#SVVQ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   B:C**C.1C.N)r&   r'   r(   r\   r   r   r)   r   r   r   r   i  s<         8 8 8	( 	( 	( 	( 	(r   r   c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestContainszC
        Feature: The Python "in" builtin tests for membership
    c                    t                      }| j                            |           |                     |                    d          | j                   |                     || j                   |                     d|                     d          | j                   |                     d| | j                   |                     d| j                   |                     d| j                   dS )z6 "in" builtin works for membership (byte and Unicode) zutf-8r8   s   mongoosemongooseN)r   r   r-   r   r4   r   rC   s     r   test_containszTestContains.test_contains  s    {{D!!!dkk'**DF333dDF###j$jj''00$&999j$jj$&)))df---TV,,,,,r   c                 T   t          |                                 d          }|                    d           |                     d|v            |                     d|v            |                                 |                     d|v            |                     d|v            dS )z8 "in" on closed File returns False (see also issue 174) r   r      aN)r   r   r-   
assertTruer#   assertFalser   s     r   test_closedzTestContains.test_closed  s    $$	s	"""q!!!				###"""""r   c                 r    |                      d| j                   |                      d| j                   dS )z2 Empty strings work properly and aren't contained  r   N)r   r   r   s    r   
test_emptyzTestContains.test_empty  s8    TV$$$df%%%%%r   c                 r    |                      d| j                   |                      d| j                   dS )z' Current group "." is always contained    ..Nr   r   r   s    r   test_dotzTestContains.test_dot  4    dDF###c46"""""r   c                 r    |                      d| j                   |                      d| j                   dS )z% Root group (by itself) is contained    /r8   Nr   r   s    r   	test_rootzTestContains.test_root  r   r   c                 ~   t          d          }t          d          }| j                            |           d| j        |<   |                     d| d| j                   |                     | d| j                   |                     d| d| j                   |                     | d| j                   dS )z. Trailing slashes are unconditionally ignored r   r   r   r8   N)r   r   r-   r   )r   r   r   s      r   test_trailing_slashz TestContains.test_trailing_slash  s    cNNcNNAq	h!hhh'''gggtv&&&h!hhh'''gggtv&&&&&r   c                    t                      }| j                            |           t          j        d          | j        d| d<   t          j        dd          | j        d| d<   |                     d| d| j                   |                     d| d| j                   |                     d| d| j                   |                     d| d| j                   dS )	z; Broken softlinks are contained, but their members are not r   r8   z/softmongoose.hdf5	/externalz/soft/somethingz/external/somethingN)r   r   r-   r   r   r	   r   r   rC   s     r   test_softlinkszTestContains.test_softlinks  s    {{D!!!"&-"<"<4&*&7&U&U"4"""#o$oootv...2T222DF;;;)$)))462226T666?????r   c                    t          d          }t          d          }| j                            | d           d| j        |<   |                     d| j                   |                     d| j                   |                     d| j                   |                     d| j                   |                     d	| j                   | j        |         }|                     d
| d| j                   |                     d
| d|           |                     | d| j                   |                     d| d| j                   |                     | d| j                   |                     d| d| j                   dS )z0 Technically legitimate (but odd-looking) paths r   rZ   z/y/zr   r8   z//z///z.///z././/z.//z./Nr   )r   r   rZ   r0   s       r   test_oddball_pathszTestContains.test_oddball_paths  sp   cNN  qJJJ'''tc46"""dDF###eTV$$$fdf%%%gtv&&&fQimAmmmTV,,,q,,,iii(((k1kkk46***lllDF+++l$lllDF+++++r   N)r&   r'   r(   r\   r   r   r   r   r   r   r   r  r)   r   r   r   r   ~  s         	- 	- 	-# # #& & &
# # #
# # #
	' 	' 	'	@ 	@ 	@, , , , ,r   r   c                       e Zd ZdZd Zd ZdS )TestIterzP
        Feature: You can iterate over group members via "for x in y", etc.
    c                 ^    d | j         D             }|                     || j                   dS )z "for x in y" iteration c                     g | ]}|S r)   r)   .0r   s     r   
<listcomp>z&TestIter.test_iter.<locals>.<listcomp>  s    !!!Qq!!!r   N)r   assertSameElementsr   )r   lsts     r   	test_iterzTestIter.test_iter  s5    !!$&!!!T[11111r   c                     t          |                                 d          }	 d |D             }|                     |g            |                                 dS # |                                 w xY w)z= Iteration works properly for the case with no group members r   c                     g | ]}|S r)   r)   r  s     r   r  z+TestIter.test_iter_zero.<locals>.<listcomp>  s    $$$1$$$r   N)r   r   r9   r#   )r   r   r
  s      r   test_iter_zerozTestIter.test_iter_zero  sj    T[[]]C((	$$e$$$CS"%%%KKMMMMMEKKMMMMs   "A A2N)r&   r'   r(   r\   r  r  r)   r   r   r  r    s<         2 2 2
    r   r  c                        e Zd Zd Zd Zd ZdS )TestTrackOrderc                     t          d          D ]A}|dz  dk    r#|                    t          |                     .|g|t          |          <   Bd S )Nd   r   r   )ranger-   r   )r   r   r   s      r   populatezTestTrackOrder.populate  s\    s 	  	 A2v{{s1vv&&&&C#a&&			  	 r   c                    | j                             t                      d          }|                     |           d t	          d          D             }|                     t          |          |           |                     t          t          |                    t          t          |                               d S )NTtrack_orderc                 ,    g | ]}t          |          S r)   r   r  r   s     r   r  z3TestTrackOrder.test_track_order.<locals>.<listcomp>  s    ***!s1vv***r   r  )r   r-   r   r  r  r9   listreversedr   r   r   s      r   test_track_orderzTestTrackOrder.test_track_order  s    F	>>a**uSzz***a#&&&hqkk**D#,?,?@@@@@r   c                    | j                             t                      d          }|                     |           t	          d t          d          D                       }|                     t          |          |           |                     t          t          |                    t          t          |                               d S )NFr  c                 ,    g | ]}t          |          S r)   r  r  s     r   r  z6TestTrackOrder.test_no_track_order.<locals>.<listcomp>  s    111c!ff111r   r  )	r   r-   r   r  sortedr  r9   r  r  r  s      r   test_no_track_orderz"TestTrackOrder.test_no_track_order  s    F	??a11eCjj11122a#&&&hqkk**D#,?,?@@@@@r   N)r&   r'   r(   r  r  r"  r)   r   r   r  r    sI             A A AA A A A Ar   r  c                        e Zd Zd Zd Zd ZdS )TestPy3Dictc                     t          | j        d                      }| j        }|                     t	          |          |           |                     t	          t          |                    t	          t          |                               | j        D ]}|                     ||           |                     t          |          t          | j                             dS )z .keys provides a key view keysN)	getattrr   r   r	  r  r  r   r9   r   )r   kvr   r   s       r   	test_keyszTestPy3Dict.test_keys  s    $WTVV$$&&kR#...Xb\\ 2 2D#4G4GHHH 	! 	!AMM!R    R#dk"2"233333r   c                      t           j        d                      } fd j        D             }                     t	          |          |                                t	          t          |                    t	          t          |                                                    t          |          t           j                              j        D ]0}                      j        	                    |          |           1dS )z .values provides a value view valuesc                 D    g | ]}j                             |          S r)   r   r   r  r   r   s     r   r  z+TestPy3Dict.test_values.<locals>.<listcomp>  s%    222tvzz!}}222r   N
r'  r   r   r	  r  r  r9   r   r   r   )r   vvr   r   s   `   r   test_valueszTestPy3Dict.test_values  s    &WTVX&&((2222dk222R#...Xb\\ 2 2D#4G4GHHHR#dk"2"2333 	- 	-AMM$&**Q--,,,,	- 	-r   c                       t           j        d                      } fd j        D             }                     t	          |          |                                t	          t          |                    t	          t          |                                                    t          |          t           j                              j        D ]2}                     | j        	                    |          f|           3dS )z .items provides an item view itemsc                 H    g | ]}|j                             |          fS r)   r-  r.  s     r   r  z*TestPy3Dict.test_items.<locals>.<listcomp>  s*    666Q$&**Q-- 666r   Nr/  )r   ivr   r   s   `   r   
test_itemszTestPy3Dict.test_items  s    %WTVW%%''6666$+666R#...Xb\\ 2 2D#4G4GHHHR#dk"2"2333 	2 	2AMM1dfjjmm,b1111	2 	2r   N)r&   r'   r(   r)  r1  r6  r)   r   r   r$  r$    sA        	4 	4 	4	- 	- 	-	2 	2 	2 	2 	2r   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S )TestAdditionalMappingFuncszc
    Feature: Other dict methods (pop, pop_item, clear, update, setdefault) are
    available.
    c                     t          |                                 d          | _        dD ]}| j                            |           | j        d         | _        d S )Nr   )z/test/az/test/bz/test/cz/test/dtest)r   r   r   r-   rN   r   s     r   r   z TestAdditionalMappingFuncs.setUp'  sT    dkkmmS))= 	# 	#AF""""VF^


r   c                 J    | j         r| j                                          d S d S r!   r"   r   s    r   r$   z#TestAdditionalMappingFuncs.tearDown-  r%   r   c                    | j                             t                                }|                    d           |                    d           |                                \  }}|dv sJ |                     ||           |                                \  }}|dk    r|dk    snnJ |                     ||           |                     t                    5  |                                 ddd           dS # 1 swxY w Y   dS )z.pop_item removes an itemr   r   )r   r   N)r   r-   r   popitemr   rA   r   )r   r   k_k2s        r   test_pop_itemz(TestAdditionalMappingFuncs.test_pop_item1  s;   F	,,	s	syy{{1JA		AHHrSyyyyy-Q x(( 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   C==DDc                 (   | j                             t                                }|                    d           |                    d           |                    d           |                     d|           |                     d|           dS )z'.pop returns and removes specified itemr   r   N)r   r-   r   popr   r   r   r   s     r   test_popz#TestAdditionalMappingFuncs.test_popB  s~    F	,,	s	s	c


a   c1r   c                 h    | j                             dd          }|                     |d           dS )z.pop falls back to defaulteN)rN   rC  r9   r   values     r   test_pop_defaultz+TestAdditionalMappingFuncs.test_pop_defaultK  s5     
sD))%%%%%r   c                     |                      t                    5  | j                            d          }ddd           dS # 1 swxY w Y   dS )z&.pop raises KeyError for non-existencerG  N)rA   r   rN   rC  )r   keys     r   test_pop_raisesz*TestAdditionalMappingFuncs.test_pop_raisesQ  s     x(( 	& 	&*..%%C	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&rV   c                 Z   | j                             t                                }|                    d           |                    d           |                     t	          |          d           |                                 |                     t	          |          d           dS )z.clear removes groupsr   r   r   r   N)r   r-   r   r9   r   clearrD  s     r   
test_clearz%TestAdditionalMappingFuncs.test_clearW  s    F	,,	s	sQ###				Q#####r   c                     | j                             t                                }dt          j        dg          i}|                    |           |                     d|           dS )z.update works with dictrG  r   Nr   r-   r   rd   arrayupdater   r   r   	new_itemss      r   test_update_dictz+TestAdditionalMappingFuncs.test_update_dict`  s[    F	,,"(B4..)		c1r   c                    | j                             t                                }dt          j        dg          fdt          j        dg          fg}|                    |           |                     d|           dS )z.update works with listrG  r   r   NrR  rU  s      r   test_update_iterz+TestAdditionalMappingFuncs.test_update_iterg  st    F	,,"(B4..!"(B4..!
	 	
c1r   c                     | j                             t                                }dt          j        dg          i} |j        di | |                     d|           dS )z.update works with kwargsrG  r   Nr)   rR  rU  s      r   test_update_kwargsz-TestAdditionalMappingFuncs.test_update_kwargsq  sa    F	,,"(B4..)	9c1r   c                     | j                             d          }|                     || j                             d                     dS )z#.setdefault gets group if it existsr   N)rN   
setdefaultr9   r   rH  s     r   test_setdefaultz*TestAdditionalMappingFuncs.test_setdefaultx  sA    
%%c**
s 3 344444r   c                     | j                             t                      t          j        dg                    }|                     |d           dS )z/.setdefault gets default if group doesn't existr   N)rN   r]  r   rd   rS  r9   rH  s     r   test_setdefault_with_defaultz7TestAdditionalMappingFuncs.test_setdefault_with_default}  sE     
%%ikk28RD>>BB#####r   c                     |                      t                    5  | j                            d           ddd           dS # 1 swxY w Y   dS )z
        .setdefault gets None if group doesn't exist, but as None isn't defined
        as data for a dataset, this should raise a TypeError.
        rG  N)rA   rT   rN   r]  r   s    r   test_setdefault_no_defaultz5TestAdditionalMappingFuncs.test_setdefault_no_default  s     y)) 	' 	'J!!#&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'rV   N)r&   r'   r(   r\   r   r$   rA  rE  rJ  rM  rP  rW  rY  r[  r^  r`  rb  r)   r   r   r8  r8  "  s         $ $ $    "  & & && & &$ $ $      5 5 5
$ $ $' ' ' ' 'r   r8  c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestGetzL
        Feature: The .get method allows access to objects and metadata
    c                 Z   t                      }t                      }| j                            d|          }|                     ||           | j                            |          }| j                            |                    d                    }|                     ||           dS )z4 Object is returned, or default if it doesn't exist r   r3   N)r   objectr   r   assertIsr-   r4   r9   )r   r:   defaultoutr0   s        r   test_get_defaultzTestGet.test_get_default  s    {{((fjjW--c7###f!!$''fjjV,,--c"""""r   c                 N   t          d          }t          d          }t          d          }| j                            |           | j                            |d          }|                     |t
                     | j                            |dd           | j                            |d          }|                     |t                     t          j	        d          | j        |<   | j                            |d          }|                     |t                     d	S )
z/ Object class is returned with getclass option r   barbazT)getclass)ra   rX   ro   N)r   r   r-   r   r9   r   rY   r
   rd   rc   r   )r   r   rl  rm  ri  s        r   test_get_classzTestGet.test_get_class  s    C   fjjtj,,e$$$c4...fjjtj,,g&&&hv&&sfjjtj,,h'''''r   c                 l   t          d          }t          d          }t          d          }t                      }t          d          }t          dd          }| j                            |           || j        |<   || j        |<   | j                            ||dd          }| j                            ||dd          }| j                            ||dd          }	|                     |t                     |                     |t                     |                     |	t                     d	S )
z Get link classes hardsoftexternalr   somewhere.hdf5r   T)getlinkrn  N)	r   rf  r   r	   r   r-   r   r9   r   )
r   rq  rr  rs  rh  slelout_hlout_slout_els
             r   test_get_link_classzTestGet.test_get_link_class  s       Z((((k""*J77D!!!txD'4$GGD'4$GGHgtdKK******.....r   c                    t          d          }t          d          }t          d          }t          d          }t          dd          }| j                            |           || j        |<   || j        |<   | j                            |d          }| j                            |d          }| j                            |d          }|                     |t                     |                     |t                     |                     |j	        |j	                   |                     |t                     |                     |j	        |j	                   |                     |j
        |j
                   d	S )
z Get link values rq  rr  rs  r   rt  r   Tru  N)r   r   r	   r   r-   r   r.   r   r9   _path	_filename)	r   rq  rr  rs  rv  rw  rx  ry  rz  s	            r   test_get_linkzTestGet.test_get_link  sQ       Z((k""*J77D!!!txD$//D$//Hd33 	fh///fh///rx000fl333rx000)2<88888r   N)r&   r'   r(   r\   rj  ro  r{  r  r)   r   r   rd  rd    sZ         	# 	# 	#( ( ($/ / /,9 9 9 9 9r   rd  c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )	TestVisitzv
        Feature: The .visit and .visititems methods allow iterative access to
        group and subgroup members
    c                     t          |                                 d          | _        g d| _        | j        D ]}| j                            |           d S )Nr   )grp1zgrp1/sg1zgrp1/sg2r>   zgrp2/sg1zgrp2/sg1/ssg1)r   r   r   r   r-   r   s     r   r   zTestVisit.setUp  sd    dkkmmS))    	# 	#AF""""	# 	#r   c                 8    | j                                          d S r!   r"   r   s    r   r$   zTestVisit.tearDown      r   c                 ~    g }| j                             |j                   |                     || j                   dS )z All subgroups are visited N)r   visitappendr	  r   r   ls     r   
test_visitzTestVisit.test_visit  s;    QX4;/////r   c                      g  fd j         D             } j                            fd                                |           dS )z( All subgroups and contents are visited c                 .    g | ]}|j         |         fS r)   r   r.  s     r   r  z-TestVisit.test_visititems.<locals>.<listcomp>  #    4441DF1I444r   c                 2                         | |f          S r!   r  r   r   r  s     r   <lambda>z+TestVisit.test_visititems.<locals>.<lambda>  s    qxx1 r   N)r   r   
visititemsr	  r   compr  s   ` @r   test_visititemszTestVisit.test_visititems  s`    44444446666777a(((((r   c                 J    g  j                             fd          }|dk    r"t                    dk    rd          j        v sJ g  fd j        D             } j                             fd          }|dk    rt                    dk    r
d         |v sJ dS )9 Returning a non-None value immediately aborts iteration c                 2                         |           pdS Nr  r   r  s    r   r  z(TestVisit.test_bailout.<locals>.<lambda>  s    188A;;#4" r   r  r   r   c                 .    g | ]}|j         |         fS r)   r  r.  s     r   r  z*TestVisit.test_bailout.<locals>.<listcomp>  r  r   c                 6                         | |f          pdS r  r  r  s     r   r  z(TestVisit.test_bailout.<locals>.<lambda>  s    188QqE??+@b r   N)r   r  r   r   r  )r   r   r  r  s   `  @r   test_bailoutzTestVisit.test_bailout  s     FLL444455Bww3q66Q;;1Q44;+>+>+>>4444444F@@@@AABww3q66Q;;1Q44<<<7<<r   N)	r&   r'   r(   r\   r   r$   r  r  r  r)   r   r   r  r    si         
# # #  0 0 0) ) )
8 
8 
8 
8 
8r   r  c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestVisitLinksz
        Feature: The .visit_links and .visititems_links methods allow iterative access to
        links contained in the group and its subgroups.
    c                 $   t          |                                 d          | _        g d| _        g d| _        t          | j        | j        d          D ]9\  }}| j                            |           t          d|           | j        |<   :d S )Nr   )r  z
grp1/grp11z
grp1/grp12r>   z
grp2/grp21zgrp2/grp21/grp211)linkto_grp1zgrp1/linkto_grp11zgrp1/linkto_grp12linkto_grp2zgrp2/linkto_grp21zgrp2/grp21/linkto_grp211T)strictr8   )r   r   r   r   rH   zipr-   r   )r   r   r  s      r   r   zTestVisitLinks.setUp  s    dkkmmS))  
 
 

 TZ=== 	* 	*DAqF""" Q))DF1II	* 	*r   c                 8    | j                                          d S r!   r"   r   s    r   r$   zTestVisitLinks.tearDown  r  r   c                     g }| j                             |j                   |                     || j        | j        z              dS )z% All subgroups and links are visited N)r   visit_linksr  r	  r   rH   r  s     r   test_visit_linkszTestVisitLinks.test_visit_links  sD    18$$$4;#;<<<<<r   c                      g  fd j          j        z   D             } j                            fd                                |           dS )z All links are visited c           	      f    g | ]-}|t          j                            |d                     f.S )Tr}  )typer   r   r.  s     r   r  z2TestVisitLinks.test_visititems.<locals>.<listcomp>(  s8    YYY1DAt44556YYYr   c                 L                         | t          |          f          S r!   )r  r  r  s     r   r  z0TestVisitLinks.test_visititems.<locals>.<lambda>)  s    QXXq$q''l-C-C r   N)r   rH   r   visititems_linksr	  r  s   ` @r   r  zTestVisitLinks.test_visititems%  sg    YYYYdj@XYYY C C C CDDDa(((((r   c                     g | j                             fd          }|dk    rt                    dk    sJ g | j                             fd          }|dk    rt                    dk    sJ dS )r  c                 2                         |           pdS r  r  r  s    r   r  z-TestVisitLinks.test_bailout.<locals>.<lambda>0  s    !): r   r  r   c                 6                         | |f          pdS r  r  r  s     r   r  z-TestVisitLinks.test_bailout.<locals>.<lambda>4  s    1Q%1FB r   N)r   r  r   r  )r   r   r  s     @r   r  zTestVisitLinks.test_bailout,  s     F::::;;Bww3q66Q;;;&F##$F$F$F$FGGBww3q66Q;;;&;;r   N)	r&   r'   r(   r\   r   r$   r  r  r  r)   r   r   r  r  
  si         

* 
* 
*  = = =) ) )	' 	' 	' 	' 	'r   r  c                   6    e Zd ZdZd ZddZed             ZdS )Visitorz5 Class for exercise 'visit' and 'visititems' methods c                     g | _         d S r!   _namesr   s    r   __init__zVisitor.__init__:  s    r   Nc                 :    | j                             |           d S r!   )r  r  )r   r:   objs      r   __call__zVisitor.__call__=  s    4     r   c                     | j         S r!   r  r   s    r   nameszVisitor.names@  s
    {r   r!   )r&   r'   r(   r\   r  r  propertyr  r)   r   r   r  r  7  sX        ??  ! ! ! !   X  r   r  c                   p    e Zd ZdZddlZe                    dd          Zd Zd Zd Z	d	 Z
d
 Zd Zd ZdS )TestLexicographica#   Test ascending lexicographic order traversal of the 'visit*' methods.

        This semantics is set by the following default args in
        h5py.h5o.visit(..., idx_type=H5_INDEX_NAME, order=H5_ITER_INC, ...)
        h5py.h5l.visit(..., idx_type=H5_INDEX_NAME, order=H5_ITER_INC, ...)
    r   Nsplitr8   c                    t          |                                 dd          | _        | j                            ddd           | j                            dd          }|                    ddd           |                    ddd           | j                            d	d          }|                    ddd           |                    ddd           | j                            ddd           | j                            d
dd           | j        d         | j        d<   | j        d         | j        d<   | j        d         | j        d<   | j        d         | j        d<   | j        d         | j        d<   dS )z3 Populate example hdf5 file, with track_order=True zw-Tr  r   )r   rX   Br   zzz-zB/bzA/xzz/ar   zA$AzA/B/CzA/aN)r   r   r   rY   r-   r/   s     r   r   zTestLexicographic.setUpO  s_    dkkmmTt<<<c5$///f!!#4!883t,,,3t,,,f!!#4!883t,,,3t,,,c5$///dE4000 uufUmsvc{t&+wsur   c                     t                      }| j                            |           |j        t	          |j                  k    sJ dS )z/check that test example is not trivially sortedN)r  r   r  r  r!  r   vs     r   test_nontrivial_sort_visitz,TestLexicographic.test_nontrivial_sort_visith  s=    IIQw&//))))))r   c                     t                      }| j                            |           |j        t	          |j        | j                  k    sJ dS )z5check that File.visit iterates in lexicographic orderrL  Nr  r   r  r  r!  split_partsr  s     r   r  zTestLexicographic.test_visitn  sG    IIQw&d.>?????????r   c                     t                      }| j                            |           |j        t	          |j        | j                  k    sJ dS )z;check that File.visit_links iterates in lexicographic orderr  N)r  r   r  r  r!  r  r  s     r   r  z"TestLexicographic.test_visit_linkst  sL    II1w&d.>?????????r   c                     t                      }| j                            |           |j        t	          |j        | j                  k    sJ dS )z:check that File.visititems iterates in lexicographic orderr  N)r  r   r  r  r!  r  r  s     r   r  z!TestLexicographic.test_visititemsz  sL    II!w&d.>?????????r   c                     t                      }| j                            |           |j        t	          |j        | j                  k    sJ dS )z@check that File.visititems_links iterates in lexicographic orderr  N)r  r   r  r  r!  r  r  s     r   test_visititems_linksz'TestLexicographic.test_visititems_links  sL    II"""w&d.>?????????r   c                     t                      }| j        d                             |           |j        t	          |j        | j                  k    sJ dS )z6check that Group.visit iterates in lexicographic orderr  r  Nr  r  s     r   test_visit_groupz"TestLexicographic.test_visit_group  sP    IIs!w&d.>?????????r   )r&   r'   r(   r\   operatormethodcallerr  r   r  r  r  r  r  r  r)   r   r   r  r  D  s          OOO''55K$ $ $2* * *@ @ @@ @ @@ @ @@ @ @@ @ @ @ @r   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestSoftLinkszQ
        Feature: Create and manage soft links with the high-level interface
    c                 Z    t          d          }|                     |j        d           dS )z SoftLink path attribute /fooN)r   r9   r;   r   rv  s     r   
test_spathzTestSoftLinks.test_spath  s-    f&)))))r   c                 t    t          d          }|                     t          |          t                     dS )z SoftLink path repr r  N)r   r.   r   r   r  s     r   
test_sreprzTestSoftLinks.test_srepr  s1    fd2hh,,,,,r   c                     t          d          }t          d          }| j                            |          }t          d|           }|| j        |<   | j        |         }|                     ||           dS )z$ Create new soft link by assignment newaliasr8   N)r   r   r-   r   r9   )r   r  r  r   rv  g2s         r   r{   zTestSoftLinks.test_create  sv    '""F$$i#ii  uVE]Br   c                     t                      }t          d          | j        |<   |                     t                    5  | j        |          ddd           dS # 1 swxY w Y   dS )z0 Opening dangling soft link results in KeyError r  N)r   r   r   rA   r   rC   s     r   test_exczTestSoftLinks.test_exc  s    {{tx(( 	 	F4LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    AA"AN)r&   r'   r(   r\   r  r  r{   r  r)   r   r   r  r    sZ         * * *
- - -
	  	  	     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 ej        ed
          d             Z ej        ed
          d             Zd ZdS )TestExternalLinksz7
        Feature: Create and manage external links
    c                     t          |                                 d          | _        |                                 | _        t          | j        d          | _        | j                            d           | j                                         d S )Nr   rs  )r   r   r   enameefr-   r#   r   s    r   r   zTestExternalLinks.setUp  sf    dkkmmS))[[]]
tz3''Z(((r   c                     | j         r| j                                          | j        r| j                                         d S d S r!   )r   r#   r  r   s    r   r$   zTestExternalLinks.tearDown  sB    6 	FLLNNN7 	GMMOOOOO	 	r   c                     t          dd          }|                     |j        d           |                     |j        d           dS )z  External link paths attributes foo.hdf5r  N)r	   r9   filenamer;   r   rw  s     r   
test_epathzTestExternalLinks.test_epath  sG    *f--j111&)))))r   c                 v    t          dd          }|                     t          |          t                     dS )z External link repr r  r  N)r	   r.   r   r   r  s     r   
test_ereprzTestExternalLinks.test_erepr  s3    *V,,d2hh,,,,,r   c                    t                      }t          | j        d          | j        |<   | j        |         }|j        | _        |                     | j        | j                   |                     |j        d           dS )z Creating external links r   N)	r   r	   r  r   filer  assertNotEqualr9   r:   rz   s      r   r{   zTestExternalLinks.test_create  sn    {{#DJ<<tfTl(DGTV,,,;/////r   c                     t                      }t          | j        d          | j        |<   |                     t
                    5  | j        |          ddd           dS # 1 swxY w Y   dS )z5 KeyError raised when attempting to open broken link z/missingN)r   r	   r  r   rA   r   rC   s     r   r  zTestExternalLinks.test_exc  s    {{#DJ
;;tx(( 	 	F4LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A!!A%(A%c                     t                      }t          dd          | j        |<   |                     t                    5  | j        |          ddd           dS # 1 swxY w Y   dS )z6 KeyError raised when attempting to open missing file r   r  N)r   r	   r   rA   r   rC   s     r   test_exc_missingfilez&TestExternalLinks.test_exc_missingfile  s    {{#OF;;tx(( 	 	F4LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA #A c                     t                      }t          | j        d          | j        |<   | j        |         }|j        }|                                 |                     |           dS )zT Files opened by accessing external links can be closed

        Issue 189.
        r8   N)r   r	   r  r   r  r#   r   )r   r:   r0   f2s       r   test_close_filez!TestExternalLinks.test_close_file  s]    
 {{#DJ44tfTlX



r   zNo unicode filename supportc                     t           j                            t                      d          }t	          |d          5 }|                    d           ddd           n# 1 swxY w Y   t          |d          | j        t                      <   dS )zh
        Check that external links encode unicode filenames properly
        Testing issue #732
           α.hdf5r   rs  Nr   )	osr;   joinr   r   r-   r	   r   r   )r   ext_filenameext_files      r   test_unicode_encodez%TestExternalLinks.test_unicode_encode  s     w||GIIz::,$$ 	.!!*---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.*<EEy{{s   AA#&A#c                    t                      }t          j                            t	                      d          }t          |d          5 }|                    d           d|d         j        d<   ddd           n# 1 swxY w Y   t          |d          | j	        |<   | 
                    | j	        |         j        d         d           dS )zh
        Check that external links decode unicode filenames properly
        Testing issue #732
        r  r   rs  r:  ext_attrNr   r   r  r;   r  r   r   r-   attrsr	   r   r9   r   r:   r   r  s       r   test_unicode_decodez%TestExternalLinks.test_unicode_decode  s     {{w||GIIz::,$$ 	<!!*---5;HZ &z2	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< $L+>>t+J7@@@@@   &A==BBc                    t                      }t          j                            t	                      d          }t          |d          5 }|                    d           d|d         j        d<   ddd           n# 1 swxY w Y   t          |d          | j	        |<   | 
                    | j	        |         j        d         d           dS )zi
        Check that external links handle unicode hdf5 paths properly
        Testing issue #333
        zexternal.hdf5r   r   r:  r  Nu   /αr  r  s       r   test_unicode_hdf5_pathz(TestExternalLinks.test_unicode_hdf5_path  s    
 {{w||GII??,$$ 	6!!$'''/5HTN ,	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 $L%88t+J7@@@@@r	  N)r&   r'   r(   r\   r   r$   r  r  r{   r  r  r  r   skipIfNO_FS_UNICODEr  r  r  r)   r   r   r  r    s            * * *- - -
0 0 0    
 
 
 RY};<<F F =<F RY};<<A A =<AA A A A Ar   r  c                 r   | t          d          z  }t          |d          5 }|                    d           ddd           n# 1 swxY w Y   | t          d          z  }t          |d          5 }t          j        t          |          d          |d<   ddd           n# 1 swxY w Y   t          |d          5 }|                    dd	          }|j        j        dk    sJ t          j
        t                    5  d
|d<   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 )z<Check that external link is opened with modified access modeexternal{}.h5r   /groupN	main{}.h5r   r   r   
elink_moder   rg   )r   r   r-   r   r	   r   r   r  moder   raisesrB   )tmp_pathexternal_filepathexternal_filemain_filepath	main_file	ext_groups         r   test_get_elink_mode_argr    s?    9_#=#==		%	% -""8,,,- - - - - - - - - - - - - - - y555M	mS	!	! UY!%!237H3I3I8!T!T	+U U U U U U U U U U U U U U U 
mS	!	! "YMM+#M>>	~"c))))]:&& 	" 	" !If	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " " " "sZ   AA	A	2&B$$B(+B(?AD,DD,D	D,D	D,,D03D0c                 D   | t          d          z  }t          |d          5 }|                    d           ddd           n# 1 swxY w Y   | t          d          z  }t          |d          5 }t          j        t          |          d          |d<   ddd           n# 1 swxY w Y   t          |d          5 }t          j        t                    5  |	                    dd	
           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 )zFCheck that external links open in write mode from read-only file failsr  r   r  Nr  r   r   rs  zr+r  )
r   r   r-   r   r	   r   r   r  rB   r   r  r  r  r  r  s        r   !test_get_elink_mode_arg_exceptionr  *  s     9_#=#==		%	% -""8,,,- - - - - - - - - - - - - - - y555M	mS	!	! UY!%!237H3I3I8!T!T	+U U U U U U U U U U U U U U U 
mS	!	! 7Y]:&& 	7 	7MM*M666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7sY   AA	A	2&B$$B(+B(?DC=1D=D	DD	DDD	file_swmr)FT
elink_swmrc                 8   | t          d          z  }t          |dd          5 }|                    d           ddd           n# 1 swxY w Y   | t          d          z  }t          |dd          5 }t          j        t          |          d          |d<   ddd           n# 1 swxY w Y   t          |d	|
          5 }|                    d|          }|j        j        d	k    sJ |j        j	        |k    sJ 	 ddd           dS # 1 swxY w Y   dS )DCheck that external links are opened with custom read-only SWMR moder  r   latestlibverr  Nr  r   r   )swmrrs  r!  
r   r   r-   r   r	   r   r   r  r  	swmr_mode)r  r   r!  r  r  r  r  r  s           r   $test_get_elink_swmr_arg_from_ro_filer+  9  s    !9_#=#==	X	6	6	6 --""8,,,- - - - - - - - - - - - - - - y555M	mS	2	2	2 Ui!%!237H3I3I8!T!T	+U U U U U U U U U U U U U U U 
mSy	1	1	1 6YMM*MDD	~"c))))~':555556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s5   AAA6&B((B,/B,<DDDc                 6   | t          d          z  }t          |dd          5 }|                    d           ddd           n# 1 swxY w Y   | t          d          z  }t          |dd          5 }t          j        t          |          d          |d<   ddd           n# 1 swxY w Y   t          |d	          5 }|                    d
d|          }|j        j        dk    sJ |j        j	        |k    sJ 	 ddd           dS # 1 swxY w Y   dS )r#  r  r   r$  r%  r  Nr  r   r   rs  r   )r  r!  r)  )r  r!  r  r  r  r  r  s          r   $test_get_elink_swmr_arg_from_rw_filer-  K  s    !9_#=#==	X	6	6	6 --""8,,,- - - - - - - - - - - - - - - y555M	mS	2	2	2 Ui!%!237H3I3I8!T!T	+U U U U U U U U U U U U U U U 
mS	!	! 6YMM*MTT	~"c))))~':555556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s5   AAA6&B((B,/B,=DDDc                    | t          d          z  }t          |dd          5 }|                    d           ddd           n# 1 swxY w Y   | t          d          z  }t          |dd          5 }t          j        t          |          d          |d<   d	|_        t          j        t                    5  |
                    d
d           ddd           n# 1 swxY w Y   t          j        t                    5  |
                    d
d           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 )zeCheck that exceptions are raised when changing access mode from a file opened in read-write SWMR moder  r   r$  r%  r  Nr  r   Trs  r   r  Fr(  )r   r   r-   r   r	   r   r*  r   r  rB   r   r  s        r   )test_get_elink_swmr_arg_from_rw_swmr_filer/  \  s;    9_#=#==	X	6	6	6 --""8,,,- - - - - - - - - - - - - - - y555M	mS	2	2	2 8i!%!237H3I3I8!T!T	+"	]:&& 	6 	6MM*M555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ]:&& 	8 	8MM*M777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8sl   AAA6AE <C E  C$	$E 'C$	(E D(E (D,	,E /D,	0E  EEfile_locking)FTbest-effortz elink_locking,file_locking_props))Fr   )T)r   r   )r1  )r   r   c                 $   | t          d          z  }t          |d          5 }|                    d           d|d<   ddd           n# 1 swxY w Y   | t          d          z  }t          |d          5 }t          t	          |          d          |d<   ddd           n# 1 swxY w Y   t          |d	|
          5 }|                    dd|          }|t          u sJ |                    dd|          }	t          |	t                    sJ |                    d|          }
t          j
        j        dk    r8|
j        j                                        }|                                |k    sJ ddd           dS # 1 swxY w Y   dS )z=Check that external links are opened with custom file lockingr  r   r  r   r   r   z/group/dataNr  rs  r   )lockingz/external/dataT)rn  elink_locking)ru  r5  )r5  )r      ra   )r   r   r-   r	   r   r   r
   r   r   r   versionhdf5_version_tupler  rG   get_access_plistget_file_locking)r  r0  r5  file_locking_propsr  r  r  r  clslinkr  access_plists               r   test_get_elink_locking_argr?  n  sr    !9_#=#==		%	% /""8,,,'.m$/ / / / / / / / / / / / / / / y555M	mS	!	! OY ,S1B-C-CX N N	*O O O O O O O O O O O O O O O 
mS,	7	7	7 I9mm,t=mYYg~~~~}}-t=}YY$)))))MM*MMJJ	<*j88$>,==??L00226HHHHHI I I I I I I I I I I I I I I I I Is6   A

AA7!B$$B(+B(B7FF	F	c                       e Zd ZdZd ZdS )TestExtLinkBugsz;
        Bugs: Specific regressions for external links
    c                 ^   d }|                                  }|                                  }t          |d          }|                      ||                     |                    d           |                                 t          |d          }|                      ||                     t          |d          |d<   |                                 t          |d          }|                      ||                     |                     |d         d         t                     dS )zo Issue 212

        Fails with:

        AttributeError: 'SharedConfig' object has no attribute 'lapl'
        c                       fd}|S )Nc                  \    	  r                                   d S d S # t          $ r Y d S w xY wr!   )r#   OSErrorr   s   r   r   z9TestExtLinkBugs.test_issue_212.<locals>.closer.<locals>.w  sM     "					" "   DDs    
++r)   )r   r   s   ` r   closerz.TestExtLinkBugs.test_issue_212.<locals>.closer  s#         Hr   r   r   r8   r=  r   N)r   r   
addCleanupr-   r#   r	   r.   r   )r   rF  	orig_namenew_namer   r   hs          r   test_issue_212zTestExtLinkBugs.test_issue_212  s   	 	 	 KKMM	;;==C  q		"""	s				3q		""" C00&					3q		"""aine44444r   N)r&   r'   r(   r\   rK  r)   r   r   rA  rA    s-         5 5 5 5 5r   rA  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 )TestCopyc                     t          |                                 d          | _        t          |                                 d          | _        d S r   )r   r   f1r  r   s    r   r   zTestCopy.setUp  s8    t{{}}c**t{{}}c**r   c                     | j         r| j                                          | j        r| j                                         d S d S r!   )rO  r#   r  r   s    r   r$   zTestCopy.tearDown  sB    7 	GMMOOO7 	GMMOOOOO	 	r   c                 j   t          d          }t          d          }| j                            |          }g d|d<   | j                            ||           | j        |         }|                     |t
                     |                     |d         t          j        g d                     d S )Nfoo1foo2r3  rl  )	r   rO  r-   copyr.   r   rf   rd   rS  r   name1name2rR  rS  s        r   test_copy_path_to_pathzTestCopy.test_copy_path_to_path  s    &!!&!!w##E**ggUUE"""wu~dE***d5k28GGG+<+<=====r   c                    t          d          }t          d          }| j                            |          }g d|d<   | j                            |          }| j                            ||           | j        |         }|                     |t
                     |                     || d         t          j        g d                     | j                            || j	        d                    |                     | j	        |         t
                     |                     | j	        | d         t          j        g d                     d S NrR  rS  r3  rl  r   r8   
r   rO  r-   rT  r.   r   rf   rd   rS  r  )r   rV  rW  rR  rm  rS  s         r   test_copy_path_to_groupz TestCopy.test_copy_path_to_group  s(   &!!&!!w##E**ggUg""5))UC   wu~dE***de>>>2BHWWW4E4EFFFUDGCL)))dgene444dgnnn5rx7H7HIIIIIr   c                 \   t          d          }t          d          }| j                            |          }g d|d<   | j                            ||           | j        |         }|                     |t
                     |                     |d         t          j        g d                     | j	                            ||           |                     | j	        |         t
                     |                     | j	        | d         t          j        g d                     d S )NrR  rS  r3  rl  r   r[  rU  s        r   test_copy_group_to_pathz TestCopy.test_copy_group_to_path  s   &!!&!!w##E**ggUT5!!!wu~dE***d5k28GGG+<+<===T5!!!dgene444dgnnn5rx7H7HIIIIIr   c                    t          d          }t          d          }| j                            |          }g d|d<   | j                            |          }| j                            ||           | j        |         }|                     |t
                     |                     || d         t          j        g d                     | j                            || j	        d                    |                     | j	        d|          t
                     |                     | j	        | d         t          j        g d                     d S rZ  r[  rU  s        r   test_copy_group_to_groupz!TestCopy.test_copy_group_to_group  s/   &!!&!!w##E**ggUw##E**T4   wu~dE***de>>>2BHWWW4E4EFFFT473<(((dgk%kk2E:::dgnnn5rx7H7HIIIIIr   c                 <   t          d          }t          d          }t          d          }t          d          }g d| j        |<   | j        |         }| j                            |          }| j                            ||           |                     | j        |         t          j        g d                     | j                            ||           |                     | j        |         t          j        g d                     | j                            ||           |                     | j        d| d|          t          j        g d                     | j                            || j                   |                     | j        |         t          j        g d                     | j                            | j        |         | j        |           |                     | j        |         t          j        g d                     d S )Nr   rl  rm  r0   r3  r8   )r   rO  r-   rT  rf   rd   rS  r  )r   rV  rW  name3name4r   r0   s          r   test_copy_datasetzTestCopy.test_copy_dataset   s   %  %  %  %   geng""5))S%   dgenbhwww.?.?@@@UE"""dgenbhwww.?.?@@@S#G'''''("(777*;*;	
 	
 	
 	UDG$$$dgenbhwww.?.?@@@TWU^TWe444dgenbhwww.?.?@@@@@r   c                    t          d          }t          d          }| j                            |          }|                    d          }g d|d<   g d|d<   | j                            ||d	           | j        |         }|                     |t
                     |                     |d         t
                     |                     t          |d                   d
           |                     |d         t          j
        g d                     | j                            ||d	           |                     | j        d|          t
                     |                     | j        | d         t
                     |                     t          | j        | d                   d
           |                     | j        | d         t          j
        g d                     d S )NrR  rS  rl  r3  quxra   r      quuxT)shallowr   r8   r   /qux)r   rO  r-   rT  r.   r   r9   r   rf   rd   rS  r  )r   rV  rW  rR  rl  rm  s         r   test_copy_shallowzTestCopy.test_copy_shallow  s   &!!&!!w##E**&&ggUggFT5$///genc5)))c%j%000SZ!,,,c%j"(777*;*;<<<T5$///dgk%kk2E:::dgnnn5u===TW^^^455q999dgnnn5rx7H7HIIIIIr   c                 ,   t          d          }t          d          }g d| j        |<   | j        |         }g d|j        d<   | j                            ||d           |                     | j        |         t          j        g d                     d| j        |         j        vsJ | j                            ||d           |                     | j        |         t          j        g d                     d| j        |         j        vsJ d S )NrR  rS  r3  rg  rl  T)without_attrs)r   rO  r  rT  rf   rd   rS  r  )r   rV  rW  rR  s       r   test_copy_without_attributesz%TestCopy.test_copy_without_attributes1  s   &!!&!! wu~#GG
5T5555dgenbhwww.?.?@@@DGEN00000T5555dgenbhwww.?.?@@@DGEN0000000r   c                    t          d          }t          d          }t          d          }g d| j        |<   | j                            |          }t          d|           |d<   | j                            ||d           | j                            ||d           | j        |= |                     | j        |         t                     |                     | j        | d	         t          j
        g d                     |                     | j        d|          t                     |                     | j        | d	         t          j
        g d                     d S )
Nr   rl  rm  r3  r8   rf  T)expand_softrk  )r   rO  r-   r   rT  r  r.   r   rf   rd   rS  )r   rV  rW  rb  r   s        r   test_copy_soft_linkszTestCopy.test_copy_soft_linksA  sH   %  %  %  "g""5))k%kk**E
S%T222S%T222GENdgene444dgnnn5rx			7J7JKKKdgk%kk2E:::dgnnn5rx			7J7JKKKKKr   c                 V   t          d          }t          d          }t          d          }|                                 }t          |d          5 }g d||<   t          |j        |          | j        |<   d d d            n# 1 swxY w Y   |                     | j        |         t          j        g d                     | j        	                    ||d           t          j        |           |                     | j        |         t          j        g d                     d S )Nr   rl  rm  r   r3  T)expand_external)r   r   r   r	   r  r  rf   rd   rS  rT  r  unlink)r   rV  rW  rb  r  rO  s         r   test_copy_external_linksz!TestCopy.test_copy_external_linksT  sB   %  %  %  ;;==(C   	>BBuI)"+u==DGEN	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	dgenbhwww.?.?@@@UE4888
	(dgenbhwww.?.?@@@@@s   %BB
Bc                    t          d          }t          d          }t          d          }t          d          }g d| j        |<   g d| j        |<   | j        |         }| j        |         }|j        |j        d<   | j                            ||d           |                     | j        |         t          j        g d                     | j        |         j        d         }|                     | j        |         t          j        g d                     |                     | j        |         j	        |j	                   | j                            || j
        |d           |                     | j
        |         t          j        g d                     | j
        |         j        d         }|                     | j
        |         t          j        g d                     | j                            d	| j
        |d           |                     | j
        | d	|          t          j        g d                     |                     | j
        | d	|          t          j        g d                     | j
        | d	|          j        d         }|                     | j
        |         t          j        g d                     |                     | j
        |         | j
        | d	|                     d S )
Nr   rl  rm  rf  r3  rg  T)expand_refsr8   )r   rO  r   r  rT  rf   rd   rS  r  r:   r  r9   )	r   rV  rW  rb  rc  r   rl  baz_barfoo_bars	            r   test_copy_refszTestCopy.test_copy_refsd  s   %  %  %  %    gengen7	%S%T222dgenbhwww.?.?@@@'%.&u-dgg.0A0ABBBDGG,138<<<UDGU===dgenbhwww.?.?@@@'%.&u-dgg.0A0ABBBS$'5d;;;dg&8&8&8&8928GGG;L;LMMMdg&8&8&8&8928GGG;L;LMMM'U,,U,,-3E:dgg.0A0ABBB)47e3E3Ee3E3E+FGGGGGr   N)r&   r'   r(   r   r$   rX  r\  r^  r`  rd  rl  ro  rr  rv  r{  r)   r   r   rM  rM    s        + + +  
> 
> 
>J J J"J J J J J J"A A A6J J J,1 1 1 L L L&A A A H H H H Hr   rM  c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestMovez7
        Feature: Group.move moves links in a file
    c                    t          d          }t          d          }t          d          }| j                            |          }| j                            ||           |                     | j        |         |           | j                            ||           |                     | j        |         |           dS )z Moving an object r   r   zz{}/nested/pathN)r   r   r-   mover9   )r   r   r   r  r0   s        r   test_move_hardlinkzTestMove.test_move_hardlink  s    cNNcNN'((f!!!$$AqC(((AqC(((((r   c                 <   t          d          }t          d          }t          d          }t          j        |          | j        |<   | j                            ||           | j                            |d          }|                     |j        |           dS )z Moving a soft link rr  new_softzrelative{}/pathTr}  N)r   r   r   r   r  r   r9   r;   )r   rV  rW  rb  lnks        r   test_move_softlinkzTestMove.test_move_softlink  s    &!!*%%+,,e,,uE5!!!fjjj--5)))))r   c                 F   t          d          }t          d          }| j                            |           | j                            |           |                     t                    5  | j                            ||           ddd           dS # 1 swxY w Y   dS )z! Move conflict raises ValueError r   r   N)r   r   r-   rA   rB   r  )r   r   r   s      r   test_move_conflictzTestMove.test_move_conflict  s    cNNcNNAAz** 	 	FKK1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   -BBBc                     t                      }| j                            |           | j                            ||           dS )z Test that a null-move works N)r   r   r-   r  rC   s     r   test_short_circuitzTestMove.test_short_circuit  s=    {{D!!!D$r   N)r&   r'   r(   r\   r  r  r  r  r)   r   r   r}  r}    sZ         
) 
) 
)	* 	* 	*           r   r}  c                       e Zd ZdZd Zd ZdS )TestMutableMappingzSTests if the registration of Group as a MutableMapping
    behaves as expected
    c                     t          t          t                    sJ | j                            t                                }t          |t                    sJ d S r!   )
issubclassr   r   r   r-   r   r   r/   s     r   test_resolutionz"TestMutableMapping.test_resolution  sM    %00000f!!)++..#~.......r   c                 ~    t           j         t           j         t           j         t           j         t           j         dS )zC
        Test that the required functions are implemented.
        N)r   __getitem____setitem____delitem____iter____len__r   s    r   test_validityz TestMutableMapping.test_validity  s1     	r   N)r&   r'   r(   r\   r  r  r)   r   r   r  r    s<         / / /
    r   r  )>r\   numpyrd   r  os.pathcollections.abcr   tempfiler   r   r   r   r   r   r   r	   r
   r   r   h5py._hl.compatr   commonr   r   r   r   r  UnicodeEncodeErrorr   r+   r^   rl   rs   r   r   r   r   r   r   r  r  r$  r8  rd  r  r  r  r  r  r  r  r  r   parametrizer+  r-  r/  r?  rA  rM  r}  r  r)   r   r   <module>r     s        				  * * * * * *         > > > > > > > > > > > > > > " " " " " " " "       + + + + + + ; ; ; ; ; ; ; ; ; ; ; ;OE MM    MMM       9 9 9 9 9 9 9 9v2 2 2 2 2I 2 2 2(3 3 3 3 3) 3 3 3,?@ ?@ ?@ ?@ ?@) ?@ ?@ ?@D# # # # # # # #JB B B B By B B BL0 0 0 0 0y 0 0 0     )   "( ( ( ( (k ( ( (*R, R, R, R, R,9 R, R, R,h    {   (A A A A AY A A A2!2 !2 !2 !2 !2+ !2 !2 !2Fh' h' h' h' h' h' h' h'VP9 P9 P9 P9 P9i P9 P9 P9d)8 )8 )8 )8 )8 )8 )8 )8V+' +' +' +' +'X +' +' +'Z       F@ F@ F@ F@ F@ F@ F@ F@P         I      FgA gA gA gA gA gA gA gAT" " ""7 7 7 m44}556 6 65 546  }556 6 656 8 8 8$ )EFF&   I I  GFI2#5 #5 #5 #5 #5h #5 #5 #5LLH LH LH LH LHx LH LH LH^+  +  +  +  + y +  +  + \         s   A   A*)A*