
    1Vh                        d Z ddl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
mZm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 	  ed       d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 d. d/e      Z* G d0 d1e      Z+ G d2 d3      Z, G d4 d5e      Z- G d6 d7e      Z. G d8 d9e      Z/ G d: d;e      Z0 G d< d=e      Z1 G d> d?e      Z2 G d@ dAe      Z3y# e$ r dZY (w xY w)Bz
    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)mkdtemp)MutableMapping   )utTestCase)FileGroupSoftLinkHardLinkExternalLink)DatasetDatatype)h5t)filename_encode   αFTc                       e Zd Zd Zd Zy)	BaseGroupc                 B    t        | j                         d      | _        y Nw)r   mktempfselfs    E/home/dcms/DCMS/lib/python3.12/site-packages/h5py/tests/test_group.pysetUpzBaseGroup.setUp/   s    dkkmS)    c                 R    | j                   r| j                   j                          y y Nr   closer   s    r   tearDownzBaseGroup.tearDown2       66FFLLN r   N)__name__
__module____qualname__r   r"    r   r   r   r   -   s    *r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)

TestCreatezI
        Feature: New groups can be created via .create_group method
    c                     | j                   j                  d      }| j                  |t               | j                   j                  d      }| j                  |t               y)z Simple .create_group call foos   barN)r   create_groupassertIsInstancer	   r   grpgrp2s      r   test_createzTestCreate.test_create<   sJ    ff!!%(c5)vv""6*c5)r   c                     | j                   j                  d      }| j                  |j                  d       | j                   j                  d      }| j                  |j                  d       y)z2 Intermediate groups can be created automatically foo/bar/bazz/foo/bar/bazs   boo/bar/bazz/boo/bar/bazN)r   r,   assertEqualnamer.   s      r   test_create_intermediatez#TestCreate.test_create_intermediateD   sR    ff!!-0>2vv"">2N3r   c                     | j                   j                  d       | j                  t              5  | j                   j                  d       ddd       y# 1 sw Y   yxY w)z= Name conflict causes group creation to fail with ValueError r+   N)r   r,   assertRaises
ValueErrorr   s    r   test_create_exceptionz TestCreate.test_create_exceptionL   sI    E"z* 	'FF&	' 	' 	's   AAc                 F   dt        d      z   }| j                  j                  |      }| j                  |j                  |       | j                  |j
                  j                  j                  |j                  d            j                  t        j                         y)z$ Unicode names are correctly stored z/Namei E  utf8N)chrr   r,   r4   r5   idlinksget_infoencodecsetr   	CSET_UTF8r   r5   groups      r   test_unicodezTestCreate.test_unicodeR   sn    #f+%##D)T*00V1DEJJCMMZr   c                 .   d}| j                   j                  |      }| j                  |j                  |       | j                  |j                  j
                  j                  |j                  d            j                  t        j                         y)zL Unicode names convertible to ASCII are stored as ASCII (issue 239)
        z/Hello, this is a namer<   N)r   r,   r4   r5   r>   r?   r@   rA   rB   r   
CSET_ASCIIrD   s      r   test_unicode_defaultzTestCreate.test_unicode_defaultY   sg     )##D)T*00V1DEJJCNN[r   c                     | j                  t              5  | j                  j                  d       ddd       y# 1 sw Y   yxY w)z" Names should be strings or bytes g      ?N)r8   	TypeErrorr   r,   r   s    r   	test_typezTestCreate.test_typea   s7    y) 	$FF#	$ 	$ 	$	   ;Ac                     | j                   j                  ddg      }| j                  t              5  t	        |j
                         ddd       y# 1 sw Y   yxY w)zA Binding a group to a non-group identifier fails with ValueError r+   r   N)r   create_datasetr8   r9   r	   r>   )r   dsets     r   test_appropriate_low_level_idz(TestCreate.test_appropriate_low_level_idf   sH    vv$$UQC0z* 	$''N	 	 	s   AAN)r$   r%   r&   __doc__r1   r6   r:   rF   rI   rL   rQ   r'   r   r   r)   r)   6   s,    *4'[\$
r   r)   c                       e Zd ZdZd Zd Zy)TestDatasetAssignmentzK
        Feature: Datasets can be created by direct assignment of data
    c                     t        j                  dd      }|| j                  d<   | j                  | j                  d   t               | j                  | j                  d   d   |       y)z, Dataset auto-creation by direct assignment    rW   r   dtypea.N)nponesr   r-   r   assertArrayEqualr   datas     r   test_ndarrayz"TestDatasetAssignment.test_ndarrayr   sT    wwu3'sdffSk73dffSk#.5r   c                     t        j                  dd      }|| j                  d<   | j                  | j                  d   t               y )NrV   r   rX      b)r[   r\   r   r-   r   r^   s     r   test_name_bytesz%TestDatasetAssignment.test_name_bytesy   s7    wwvS)tdffTlG4r   N)r$   r%   r&   rR   r`   rc   r'   r   r   rT   rT   l   s    65r   rT   c                       e Zd ZdZd Zd Zy)TestDtypeAssignmentzP
        Feature: Named types can be created by direct assignment of dtypes
    c                     t        j                  d      }|| j                  d<   | j                  | j                  d   t               | j                  | j                  d   j                  |       y) Named type creation |S10rZ   N)r[   rY   r   r-   r   r4   r   rY   s     r   
test_dtypezTestDtypeAssignment.test_dtype   sS     sdffSk84**E2r   c                     t        j                  d      }|| j                  d<   | j                  | j                  d   t               y)rg   rh   rb   N)r[   rY   r   r-   r   ri   s     r   rc   z#TestDtypeAssignment.test_name_bytes   s5     tdffTlH5r   N)r$   r%   r&   rR   rj   rc   r'   r   r   re   re   ~   s    36r   re   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestRequirezO
        Feature: Groups can be auto-created, or opened via .require_group
    c                     | j                   j                  d      }| j                   j                  d      }| j                  ||       | j                   j                  d      }| j                  ||       y)z' Existing group is opened and returned r+   s   fooN)r   r,   require_groupr4   r   r/   r0   grp3s       r   test_open_existingzTestRequire.test_open_existing   s^    ff!!%(vv##E*s#vv##F+s#r   c                     | j                   j                  d      }| j                  |t               | j	                  |j
                  d       y)z& Group is created if it doesn't exist r+   /fooN)r   ro   r-   r	   r4   r5   r   r/   s     r   r1   zTestRequire.test_create   s:    ff""5)c5)6*r   c                     | j                   j                  ddd       | j                  t              5  | j                   j	                  d       ddd       y# 1 sw Y   yxY w)z1 Opening conflicting object results in TypeError r+   r   r   N)r   rO   r8   rK   ro   r   s    r   test_require_exceptionz"TestRequire.test_require_exception   sM    eT3/y) 	(FF  '	( 	( 	(s   AA!c                    t        j                         }| j                  j                  dd|       | j                  j	                  d      }t        |t              sJ | j                  j	                  d      }t        |t              sJ y)z- Intermediate is created if it doesn't exist r3   rw   rX   r+   foo/barN)h5pystring_dtyper   require_datasetget
isinstancer	   r   dtrE   s      r    test_intermediate_create_datasetz,TestRequire.test_intermediate_create_dataset   sm     }d"=

5!%'''

9%%'''r   c                 p   t        j                         }| j                  j                  d       | j                  j	                  d      }t        |t              sJ | j                  j	                  d      }t        |t              sJ | j                  j	                  d      }t        |t              sJ y )Nr3   r+   rz   )r{   r|   r   ro   r~   r   r	   r   s      r   test_intermediate_create_groupz*TestRequire.test_intermediate_create_group   s     ]+

5!%'''

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

=)%'''r   c                 `   | j                   j                  dddt              }|j                  dd       | j                   j                  dddt               | j                   j                  ddt        	       | j	                  t
              5  | j                   j                  dd
dt               d d d        | j	                  t
              5  | j                   j                  dd
dt               d d d        | j	                  t
              5  | j                   j                  dd
dt               d d d        | j	                  t
              5  | j                   j                  ddt        	       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   y xY w)Nzfoo/resizable)r      )Nr   )shapemaxshaperY      r   )axis)r   r   )r   rY   )r   r   )r   N)N   )Nr      )
   r   )r   r}   intresizer8   rK   )r   dss     r   test_require_shapezTestRequire.test_require_shape   st   VV##O6I]`#a
		"1	fyX[\gSIy) 	aFF""?&9\_"`	ay) 	aFF""?&9\_"`	ay) 	dFF""?&<_b"c	dy) 	NFF""?'"M	N 	N	a 	a	a 	a	d 	d	N 	Ns0   $F $F$F#F$ F	FF!$F-N)
r$   r%   r&   rR   rr   r1   rx   r   r   r   r'   r   r   rm   rm      s&    $+(((Nr   rm   c                   "    e Zd ZdZd Zd Zd Zy)
TestDeletezA
        Feature: Objects can be unlinked via "del" operator
    c                     | j                   j                  d       | j                  d| j                          | j                   d= | j                  d| j                          y)z Object deletion via "del" r+   Nr   r,   assertInassertNotInr   s    r   test_deletezTestDelete.test_delete   sE    E"eTVV$FF5M'r   c                 r    | j                  t              5  | j                  d= ddd       y# 1 sw Y   yxY w)z. Deleting non-existent object raises KeyError r+   Nr8   KeyErrorr   r   s    r   test_nonexistingzTestDelete.test_nonexisting   s0    x( 	u	 	 	s   -6c                 h   | j                         }t        |d      }	 |j                  d       |j                          t        |d      }	 | j	                  t
              5  |d= ddd       |j                          y# |j                          w xY w# 1 sw Y   /xY w# |j                          w xY w)z2 Deleting object in readonly file raises KeyError r   r+   rN)r   r   r,   r!   r8   r   )r   fnamehfiles      r   test_readonly_delete_exceptionz)TestDelete.test_readonly_delete_exception   s     UC 	u%KKMUC 	""8, !%L! KKM KKM! ! KKMs/   A> B !B%B >BBB B1N)r$   r%   r&   rR   r   r   r   r'   r   r   r   r      s    (
r   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestOpenzJ
        Feature: Objects can be opened via indexing syntax obj[name]
    c                     | j                   j                  d      }| j                   d   }| j                   d   }| j                  ||       | j                  ||       y)z Simple obj[name] opening r+   rt   N)r   r,   r4   rp   s       r   	test_openzTestOpen.test_open   sP    ff!!%(vve}vvf~d#d#r   c                 v    | j                  t              5  | j                  d    ddd       y# 1 sw Y   yxY w)z) Opening missing objects raises KeyError r+   Nr   r   s    r   test_nonexistentzTestOpen.test_nonexistent  s0    x( 	FF5M	 	 	s   /8c                     | j                   j                  d      }| j                   |j                     }| j                  ||       y)z0 Objects can be opened by HDF5 object reference r+   N)r   r,   refr4   r.   s      r   test_referencezTestOpen.test_reference  s7    ff!!%(vvcggs#r   c                 2   | j                   j                  d      }t        j                  ddt        j
                  fg      }| j                   j                  dd|      }d|j                  f|d<   |d   }| j                  | j                   |d      |       y	)
zm Object can be opened by numpy.object_ containing object ref

        Test for issue 181, issue 202.
        test)rZ   ib	test_dsetrw   *   r   r   N)	r   r,   r[   rY   r{   	ref_dtyperO   r   r4   )r   gr   rP   r_   s        r   test_reference_numpyobjz TestOpen.test_reference_numpyobj  s    
 FF'XXz3"789vv$$[$;QUUQAwQ!,r   c                    t         j                  j                         }| j                  t              5  | j
                  |    ddd       | j
                  j                  d       | j
                  d   j                  }| j
                  d= | j                  t              5  | j
                  |    ddd       y# 1 sw Y   xxY w# 1 sw Y   yxY w)z5 Invalid region references should raise an exception Nx)	r{   h5r	Referencer8   r9   r   r,   r   	Exception)r   r   s     r   test_invalid_refzTestOpen.test_invalid_ref  s     hh  "z* 	FF3K	 	C ffSkooFF3Ky) 	FF3K	 		 		 	s   B;"C;CCc                    | j                   j                  d       | j                  t              5  | j                   d    ddd       | j                  t              5  | j                   d    ddd       y# 1 sw Y   7xY w# 1 sw Y   yxY w)z> Access with non bytes or str types should raise an exception rE   r   N.)r   r,   r8   rK   r   s    r   test_path_type_validationz"TestOpen.test_path_type_validation)  sw    G$y) 	FF1I	 y) 	FF3K	 		 		 	s   A7B7B BN)
r$   r%   r&   rR   r   r   r   r   r   r   r'   r   r   r   r      s%    $
$-r   r   c                       e Zd ZdZd Zy)TestReprz9Opened and closed groups provide a useful __repr__ stringc                 z   | j                   j                  d      }| j                  t        |      t               |j
                  j                          | j                  t        |      t               | j                   d   }| j                   j                          | j                  t        |      t               y)z; Opened and closed groups provide a useful __repr__ string r+   N)r   r,   r-   reprstrr>   _closer!   )r   r   s     r   	test_reprzTestRepr.test_repr8  sy    FF&d1gs+	d1gs+FF5Md1gs+r   N)r$   r%   r&   rR   r   r'   r   r   r   r   5  s
    C	,r   r   c                       e Zd ZdZd Zd Zy)BaseMappingz*
        Base class for mapping tests
    c                    t        | j                         d      | _        d| _        | j                  D ]  }| j                  j	                  |        t        j                  d      | j                  d<   | j                  dz   | _        y )Nr   )rZ   r   cd	/mongooser   r   )r   r   r   groupsr,   r{   r
   r   r   s     r   r   zBaseMapping.setUpH  sh    dkkmS)* 	#AFF"	#mmK0skkF*r   c                 R    | j                   r| j                   j                          y y r   r    r   s    r   r"   zBaseMapping.tearDownP  r#   r   N)r$   r%   r&   rR   r   r"   r'   r   r   r   r   C  s    +r   r   c                       e Zd ZdZd Zy)TestLenzM
        Feature: The Python len() function returns the number of groups
    c                     | j                  t        | j                        t        | j                               | j                  j	                  d       | j                  t        | j                        t        | j                        dz          y)z' len() returns number of group members er   N)r4   lenr   r   r,   r   s    r   test_lenzTestLen.test_lenZ  s[    TVVc$++&67C TVVc$++&6q&89r   N)r$   r%   r&   rR   r   r'   r   r   r   r   T  s    :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y
)TestContainszC
        Feature: The Python "in" builtin tests for membership
    c                    | j                   j                  d       | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          y)z6 "in" builtin works for membership (byte and Unicode) rZ      as   /az/as   mongoosemongooseNr   r   s    r   test_containszTestContains.test_containsg  s    C dDFF#c466"eTVV$dDFF#dff-TVV,r   c                     | j                   j                  d       | j                   j                          | j                  d| j                   v        | j                  d| j                   v        y)z9 "in" on closed group returns False (see also issue 174) rZ   r   N)r   r,   r!   assertFalser   s    r   test_exczTestContains.test_excq  sM    C ('r   c                 t    | j                  d| j                         | j                  d| j                         y)z2 Empty strings work properly and aren't contained  r   N)r   r   r   s    r   
test_emptyzTestContains.test_emptyx  s*    TVV$dff%r   c                 t    | j                  d| j                         | j                  d| j                         y)z' Current group "." is always contained    ..Nr   r   r   s    r   test_dotzTestContains.test_dot}  &    dDFF#c466"r   c                 t    | j                  d| j                         | j                  d| j                         y)z% Root group (by itself) is contained    //Nr   r   s    r   	test_rootzTestContains.test_root  r   r   c                 8   | j                   j                  d       d| j                   d<   | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          y)	z. Trailing slashes are unconditionally ignored rE   r   datasetz/group/zgroup/z	/dataset/zdataset/N)r   r,   r   r   s    r   test_trailing_slashz TestContains.test_trailing_slash  sj    G$yi(h'k466*j$&&)r   c                    | j                   j                  d       t        j                  d      | j                   d<   t        j                  dd      | j                   d<   | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          y)	z; Broken softlinks are contained, but their members are not r/   r   z	/grp/softmongoose.hdf5z/grp/externalz/grp/soft/somethingz/grp/external/somethingN)r   r,   r{   r
   r   r   r   r   s    r   test_softlinkszTestContains.test_softlinks  s    E""mmK8{"&"3"3O["Qk466*.7otvv.2DFF;r   c                    | j                   j                  d       d| j                   d<   | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                   d	   }| j                  d
| j                          | j                  d
|       | j                  d| j                          | j                  d| j                          | j                  d| j                          | j                  d| j                          y)z0 Technically legitimate (but odd-looking) paths zx/y/zr   rP   r   z//z///z.///z././/r   z.//x/y/zzx///z./x///zdset///z/dset//Nr   ru   s     r   test_oddball_pathszTestContains.test_oddball_paths  s    G$vc466"dDFF#eTVV$fdff%gtvv&ffSkj$&&)S)fdff%h'i(i(r   N)r$   r%   r&   rR   r   r   r   r   r   r   r   r   r'   r   r   r   r   a  s/    -(&
#
#
*<)r   r   c                       e Zd ZdZd Zd Zy)TestIterzP
        Feature: You can iterate over group members via "for x in y", etc.
    c                 x    | j                   D cg c]  }| }}| j                  || j                         yc c}w )z "for x in y" iteration N)r   assertSameElementsr   )r   r   lsts      r   	test_iterzTestIter.test_iter  s2    &&!Qq!!T[[1 "s   	7c                     t        | j                         d      }	 |D cg c]  }| }}| j                  |g        |j                          yc c}w # |j                          w xY w)z= Iteration works properly for the case with no group members r   N)r   r   r4   r!   )r   r   r   r   s       r   test_iter_zerozTestIter.test_iter_zero  sW    T[[]C(	#$1$C$S"%KKM % KKMs   A 	AA A A%N)r$   r%   r&   rR   r   r   r'   r   r   r   r     s    2
r   r   c                       e Zd Zd Zd Zd Zy)TestTrackOrderc                     t        d      D ]4  }|dz  dk(  r|j                  t        |             &|g|t        |      <   6 y )Nd   r   r   )ranger,   r   )r   r   r   s      r   populatezTestTrackOrder.populate  s?    s 	 A2v{s1v&C#a&		 r   c                 N   | j                   j                  dd      }| j                  |       t        d      D cg c]  }t	        |       }}| j                  t        |      |       | j                  t        t        |            t        t        |                   y c c}w )NorderTtrack_orderr   )r   r,   r   r   r   r4   listreversedr   r   r   r   s       r   test_track_orderzTestTrackOrder.test_track_order  s}    FFT:a$Sz*!s1v**a#&hqk*D#,?@ +s   B"c                 b   | j                   j                  dd      }| j                  |       t        t	        d      D cg c]  }t        |       c}      }| j                  t        |      |       | j                  t        t        |            t        t        |                   y c c}w )Nr   Fr  r   )	r   r,   r   sortedr   r   r4   r  r  r  s       r   test_no_track_orderz"TestTrackOrder.test_no_track_order  s    FFU;aeCj1c!f12a#&hqk*D#,?@ 2s   B,N)r$   r%   r&   r   r  r	  r'   r   r   r   r     s     AAr   r   c                       e Zd Zd Zd Zd Zy)TestPy3Dictc                     t        | j                  d             }| j                  }| j                  t	        |      |       | j                  t	        t        |            t	        t        |                   | j                  D ]  }| j                  ||        | j                  t        |      t        | j                               y)z .keys provides a key view keysN)	getattrr   r   r   r  r  r   r4   r   )r   kvr   r   s       r   	test_keyszTestPy3Dict.test_keys  s    $WTVVV$&kkR#.Xb\ 2D#4GH 	!AMM!R 	!R#dkk"23r   c                     t        | j                  d             }| j                  D cg c]  }| j                  j                  |       }}| j	                  t        |      |       | j	                  t        t        |            t        t        |                   | j                  t        |      t        | j                               | j                  D ]-  }| j                  | j                  j                  |      |       / yc c}w )z .values provides a value view valuesN
r  r   r   r~   r   r  r  r4   r   r   )r   vvr   r   s       r   test_valueszTestPy3Dict.test_values  s    &WTVVX&(&*kk2tvvzz!}22R#.Xb\ 2D#4GHR#dkk"23 	-AMM$&&**Q-,	- 3s   "D
c                 &    t        | j                  d             }| j                  D cg c]  }|| j                  j                  |      f! }}| j	                  t        |      |       | j	                  t        t        |            t        t        |                   | j                  t        |      t        | j                               | j                  D ]/  }| j                  || j                  j                  |      f|       1 yc c}w )z .items provides an item view itemsNr  )r   ivr   r   s       r   
test_itemszTestPy3Dict.test_items  s    %WTVVW%'*.++6Q$&&**Q- 66R#.Xb\ 2D#4GHR#dkk"23 	2AMM1dffjjm,b1	2 7s   $DN)r$   r%   r&   r  r  r  r'   r   r   r  r    s    	4	-	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y)TestAdditionalMappingFuncszc
    Feature: Other dict methods (pop, pop_item, clear, update, setdefault) are
    available.
    c                     t        | j                         d      | _        dD ]  }| j                  j                  |        | j                  d   | _        y )Nr   )z/test/az/test/bz/test/cz/test/dr   )r   r   r   r,   rE   r   s     r   r   z TestAdditionalMappingFuncs.setUp   sF    dkkmS)= 	#AFF"	#VVF^
r   c                 R    | j                   r| j                   j                          y y r   r    r   s    r   r"   z#TestAdditionalMappingFuncs.tearDown  r#   r   c                 v    | j                   j                         \  }}| j                  || j                          y)z!.pop_item exists and removes itemN)rE   popitemr   )r   keyvals      r   test_pop_itemz(TestAdditionalMappingFuncs.test_pop_item
  s,    ::%%'Sdjj)r   c                 r    | j                   j                  d       | j                  d| j                          y)z&.pop exists and removes specified itemrZ   N)rE   popr   r   s    r   test_popz#TestAdditionalMappingFuncs.test_pop  s&    

sdjj)r   c                 `    | j                   j                  dd      }| j                  |d       y)z.pop falls back to defaultr   N)rE   r$  r4   r   values     r   test_pop_defaultz+TestAdditionalMappingFuncs.test_pop_default  s(     

sD)%r   c                     | j                  t              5  | j                  j                  d      }ddd       y# 1 sw Y   yxY w)z&.pop raises KeyError for non-existencer   N)r8   r   rE   r$  )r   r   s     r   test_pop_raisesz*TestAdditionalMappingFuncs.test_pop_raises  s9     x( 	&**..%C	& 	& 	&rM   c                     | j                   j                          | j                  t        | j                         d       y)z.clear removes groupsr   N)rE   clearr4   r   r   s    r   
test_clearz%TestAdditionalMappingFuncs.test_clear   s*    

TZZ!,r   c                     dt        j                  dg      i}| j                  j                  |       | j	                  d| j                         y)z.update works with dictr   r   Nr[   arrayrE   updater   r   	new_itemss     r   test_update_dictz+TestAdditionalMappingFuncs.test_update_dict%  s:    "((B4.)	

)$c4::&r   c                     dt        j                  dg      fdt        j                  dg      fg}| j                  j                  |       | j	                  d| j                         y)z.update works with listr   r   r   Nr0  r3  s     r   test_update_iterz+TestAdditionalMappingFuncs.test_update_iter+  sU     "((B4.!"((B4.!
	 	

)$c4::&r   c                     dt        j                  dg      i} | j                  j                  di | | j	                  d| j                         y)z.update works with kwargsr   r   Nr'   r0  r3  s     r   test_update_kwargsz-TestAdditionalMappingFuncs.test_update_kwargs4  s?    "((B4.)	

&I&c4::&r   c                     | j                   j                  d      }| j                  || j                   j                  d             y)z#.setdefault gets group if it existsrZ   N)rE   
setdefaultr4   r~   r'  s     r   test_setdefaultz*TestAdditionalMappingFuncs.test_setdefault:  s3    

%%c*

s 34r   c                     | j                   j                  dt        j                  dg            }| j	                  |d       y)z/.setdefault gets default if group doesn't existr   r   N)rE   r;  r[   r1  r4   r'  s     r   test_setdefault_with_defaultz7TestAdditionalMappingFuncs.test_setdefault_with_default?  s4     

%%c288RD>:#r   c                     | j                  t              5  | j                  j                  d       ddd       y# 1 sw Y   yxY w)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.
        r   N)r8   rK   rE   r;  r   s    r   test_setdefault_no_defaultz5TestAdditionalMappingFuncs.test_setdefault_no_defaultF  s9     y) 	'JJ!!#&	' 	' 	'rM   N)r$   r%   r&   rR   r   r"   r"  r%  r)  r+  r.  r5  r7  r9  r<  r>  r@  r'   r   r   r  r    sH    $*
*
&&-
'''5
$'r   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestGetzL
        Feature: The .get method allows access to objects and metadata
    c                    t               }| j                  j                  d|      }| j                  ||       | j                  j	                  d      }| j                  j                  d      }| j                  ||       y)z4 Object is returned, or default if it doesn't exist r   rZ   r   N)objectr   r~   assertIsr,   r4   )r   defaultoutr/   s       r   test_get_defaultzTestGet.test_get_defaultV  sa    (ffjjW-c7#ff!!#&ffjjc"r   c                    | j                   j                  d       | j                   j                  dd      }| j                  |t               | j                   j                  dd       | j                   j                  dd      }| j                  |t               t        j                  d      | j                   d<   | j                   j                  dd      }| j                  |t               y)	z/ Object class is returned with getclass option r+   T)getclassbar)rW   rh   bazN)
r   r,   r~   r4   r	   rO   r   r[   rY   r   )r   rG  s     r   test_get_classzTestGet.test_get_class`  s    E"ffjjj.e$eT*ffjjj.g&(uffjjj.h'r   c                    t               }t        d      }t        dd      }| j                  j	                  d       || j                  d<   || j                  d<   | j                  j                  d|dd      }| j                  j                  d|dd      }| j                  j                  d|dd      }| j                  |t               | j                  |t               | j                  |t               y	)
z Get link classes r   somewhere.hdf5r   hardsoftexternalT)getlinkrJ  N)rD  r
   r   r   r,   r~   r4   r   )r   rF  slelout_hlout_slout_els          r   test_get_link_classzTestGet.test_get_link_classn  s    (k"*J7F#vzFGTDIFGTDIJM**.r   c                    t        d      }t        dd      }| j                  j                  d       || j                  d<   || j                  d<   | j                  j	                  dd      }| j                  j	                  dd      }| j                  j	                  dd      }| j                  |t               | j                  |t                | j                  |j                  |j                         | j                  |t               | j                  |j                  |j                         | j                  |j                  |j                         y	)
z Get link values r   rO  r   rP  rQ  rR  TrS  N)
r
   r   r   r,   r~   r-   r   r4   _path	_filename)r   rT  rU  rV  rW  rX  s         r   test_get_linkzTestGet.test_get_link  s   k"*J7F#vzFD1FD1J5 	fh/fh/rxx0fl3rxx0))2<<8r   N)r$   r%   r&   rR   rH  rM  rY  r^  r'   r   r   rB  rB  P  s    #(/&9r   rB  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)	TestVisitzv
        Feature: The .visit and .visititems methods allow iterative access to
        group and subgroup members
    c                     t        | j                         d      | _        g d| _        | j                  D ]  }| j                  j	                  |        y )Nr   )grp1zgrp1/sg1zgrp1/sg2r0   zgrp2/sg1zgrp2/sg1/ssg1)r   r   r   r   r,   r   s     r   r   zTestVisit.setUp  sF    dkkmS)  	#AFF"	#r   c                 8    | j                   j                          y r   r    r   s    r   r"   zTestVisit.tearDown      r   c                     g }| j                   j                  |j                         | j                  || j                         y)z All subgroups are visited N)r   visitappendr   r   r   ls     r   
test_visitzTestVisit.test_visit  s/    QXX4;;/r   c                     g | j                   D cg c]  }|| j                  |   f }}| j                  j                  fd       | j                  |       yc c}w )z( All subgroups and contents are visited c                 *    j                  | |f      S r   rg  r   yri  s     r   <lambda>z+TestVisit.test_visititems.<locals>.<lambda>  s    qxx1 r   N)r   r   
visititemsr   r   r   compri  s      @r   test_visititemszTestVisit.test_visititems  sS    (,41DFF1I4467a( 5s   Ac                 d   g | j                   j                  fd      }|dk(  rt              dk(  rd   | j                  v sJ g | j                  D cg c]  }|| j                   |   f }}| j                   j	                  fd      }|dk(  rt              dk(  rd   |v sJ yc c}w )9 Returning a non-None value immediately aborts iteration c                 .    j                  |       xs dS Nrm  r   ri  s    r   rp  z(TestVisit.test_bailout.<locals>.<lambda>  s    188A;#4" r   ry  r   r   c                 2    j                  | |f      xs dS rx  rm  rn  s     r   rp  z(TestVisit.test_bailout.<locals>.<lambda>  s    188QqE?+@b r   N)r   rf  r   r   rq  rr  s      @r   test_bailoutzTestVisit.test_bailout  s     FFLL45Bw3q6Q;1Q44;;+>>>(,41DFF1I44FF@ABw3q6Q;1Q44<77< 5s   B-N)	r$   r%   r&   rR   r   r"   rj  rt  r|  r'   r   r   r`  r`    s     
#0)
8r   r`  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestVisitLinksz
        Feature: The .visit_links and .visititems_links methods allow iterative access to
        links contained in the group and its subgroups.
    c                 "   t        | j                         d      | _        g d| _        g d| _        t        | j                  | j                        D ];  \  }}| j                  j                  |       t        d|       | j                  |<   = y )Nr   )rb  z
grp1/grp11z
grp1/grp12r0   z
grp2/grp21zgrp2/grp21/grp211)linkto_grp1zgrp1/linkto_grp11zgrp1/linkto_grp12linkto_grp2zgrp2/linkto_grp21zgrp2/grp21/linkto_grp211r   )r   r   r   r   r?   zipr,   r
   )r   r   ri  s      r   r   zTestVisitLinks.setUp  sv    dkkmS)

 TZZ0 	*DAqFF" 1QC)DFF1I	*r   c                 8    | j                   j                          y r   r    r   s    r   r"   zTestVisitLinks.tearDown  rd  r   c                     g }| j                   j                  |j                         | j                  || j                  | j
                  z          y)z% All subgroups and links are visited N)r   visit_linksrg  r   r   r?   rh  s     r   test_visit_linkszTestVisitLinks.test_visit_links  s:    188$4;;#;<r   c           
         g | j                   | j                  z   D cg c]*  }|t        | j                  j	                  |d            f, }}| j                  j                  fd       | j                  |       yc c}w )z All links are visited Tr[  c                 <    j                  | t        |      f      S r   )rg  typern  s     r   rp  z0TestVisitLinks.test_visititems.<locals>.<lambda>  s    QXXq$q'l-C r   N)r   r?   r  r   r~   visititems_linksr   rr  s      @r   rt  zTestVisitLinks.test_visititems  sl    @Ddjj@XY1DAt456YY CDa( Zs   /Bc                     g | j                   j                  fd      }|dk(  rt              dk(  sJ g | j                   j                  fd      }|dk(  rt              dk(  sJ y)rv  c                 .    j                  |       xs dS rx  rm  rz  s    r   rp  z-TestVisitLinks.test_bailout.<locals>.<lambda>  s    !): r   ry  r   c                 2    j                  | |f      xs dS rx  rm  rn  s     r   rp  z-TestVisitLinks.test_bailout.<locals>.<lambda>  s    1Q%1FB r   N)r   r  r   r  )r   r   ri  s     @r   r|  zTestVisitLinks.test_bailout  si     FF:;Bw3q6Q;&&FF##$FGBw3q6Q;&&;r   N)	r$   r%   r&   rR   r   r"   r  rt  r|  r'   r   r   r~  r~    s     

*=)	'r   r~  c                   .    e Zd ZdZd ZddZed        Zy)Visitorz5 Class for exercise 'visit' and 'visititems' methods c                     g | _         y r   _namesr   s    r   __init__zVisitor.__init__  s	    r   Nc                 :    | j                   j                  |       y r   )r  rg  )r   r5   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&   rR   r  r  propertyr  r'   r   r   r  r    s#    ?!  r   r  c                   f    e Zd ZdZddlZej                  dd      Zd Zd Zd Z	d	 Z
d
 Zd Zd Zy)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splitr   c                 (   t        | j                         dd      | _        | j                  j                  dd       | j                  j	                  dd      }|j                  dd       |j                  dd       | j                  j	                  dd      }|j                  dd       |j                  dd       | j                  j                  dd       | j                  j                  d	d       | j                  d
   | j                  d<   | j                  d   | j                  d<   | j                  d   | j                  d<   | j                  d   | j                  d<   | j                  d   | j                  d<   t               | _        y)z3 Populate example hdf5 file, with track_order=True zw-Tr  r   )r   BrZ   zzz-zB/bzA/xzz/aro  zA$AzA/B/CzA/aN)r   r   r   rO   r,   r  vru   s     r   r   zTestLexicographic.setUp  s>    dkkmTt<c5)ff!!#4!83&3&ff!!#4!83&3&c5)dE* uuffUmsvvc{t&&+wsu r   c                     | j                   j                  | j                         | j                  j                  t	        | j                  j                        k7  sJ y)z/check that test example is not trivially sortedN)r   rf  r  r  r  r   s    r   test_nontrivial_sort_visitz,TestLexicographic.test_nontrivial_sort_visit"  s9    TVVvv||vdffll3333r   c                     | j                   j                  | j                         | j                  j                  t	        | j                  j                  | j
                        k(  sJ y)z5check that File.visit iterates in lexicographic orderr   Nr   rf  r  r  r  split_partsr   s    r   rj  zTestLexicographic.test_visit'  sA    TVVvv||vdffll8H8HIIIIr   c                     | j                   j                  | j                         | j                  j                  t	        | j                  j                  | j
                        k(  sJ y)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_links,  sC    466"vv||vdffll8H8HIIIIr   c                     | j                   j                  | j                         | j                  j                  t	        | j                  j                  | j
                        k(  sJ y)z:check that File.visititems iterates in lexicographic orderr  N)r   rq  r  r  r  r  r   s    r   rt  z!TestLexicographic.test_visititems1  sC    $&&!vv||vdffll8H8HIIIIr   c                     | j                   j                  | j                         | j                  j                  t	        | j                  j                  | j
                        k(  sJ y)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_links6  sC    'vv||vdffll8H8HIIIIr   c                     | j                   d   j                  | j                         | j                  j                  t	        | j                  j                  | j
                        k(  sJ y)z6check that Group.visit iterates in lexicographic orderr  r  Nr  r   s    r   test_visit_groupz"TestLexicographic.test_visit_group;  sG    s$&&!vv||vdffll8H8HIIIIr   )r$   r%   r&   rR   operatormethodcallerr  r   r  rj  r  rt  r  r  r'   r   r   r  r    sF     ''5K84
J
J
J
J
Jr   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestSoftLinkszQ
        Feature: Create and manage soft links with the high-level interface
    c                 R    t        d      }| j                  |j                  d       y)z SoftLink path attribute rt   N)r
   r4   pathr   rT  s     r   
test_spathzTestSoftLinks.test_spathF  s     f&)r   c                 X    t        d      }| j                  t        |      t               y)z SoftLink path repr rt   N)r
   r-   r   r   r  s     r   
test_sreprzTestSoftLinks.test_sreprK  s     fd2h,r   c                     | j                   j                  d      }t        d      }|| j                   d<   | j                   d   }| j                  ||       y)z$ Create new soft link by assignment newz/newaliasN)r   r,   r
   r4   )r   r   rT  g2s       r   r1   zTestSoftLinks.test_createP  sJ    FF&fwVVG_Br   c                     t        d      | j                  d<   | j                  t              5  | j                  d    ddd       y# 1 sw Y   yxY w)z0 Opening dangling soft link results in KeyError r  r  N)r
   r   r8   r   r   s    r   r   zTestSoftLinks.test_excX  sA    "5/wx( 	FF7O	 	 	s   AAN)r$   r%   r&   rR   r  r  r1   r   r'   r   r   r  r  @  s    *
-
 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y)TestExternalLinksz7
        Feature: Create and manage external links
    c                    t        | j                         d      | _        | j                         | _        t        | j                  d      | _        | j                  j                  d       | j                  j                          y )Nr   rR  )r   r   r   enameefr,   r!   r   s    r   r   zTestExternalLinks.setUpd  sT    dkkmS)[[]
tzz3'Z(r   c                     | j                   r| j                   j                          | j                  r| j                  j                          y y r   )r   r!   r  r   s    r   r"   zTestExternalLinks.tearDownk  s/    66FFLLN77GGMMO r   c                     t        dd      }| j                  |j                  d       | j                  |j                  d       y)z  External link paths attributes foo.hdf5rt   N)r   r4   filenamer  r   rU  s     r   
test_epathzTestExternalLinks.test_epathq  s6    *f-j1&)r   c                 Z    t        dd      }| j                  t        |      t               y)z External link repr r  rt   N)r   r-   r   r   r  s     r   
test_ereprzTestExternalLinks.test_ereprw  s"    *V,d2h,r   c                    t        | j                  d      | j                  d<   | j                  d   }|j                  | _        | j                  | j                  | j                         | j                  |j                  d       y)z Creating external links 	/externalextN)r   r  r   filer  assertNotEqualr4   r5   ru   s     r   r1   zTestExternalLinks.test_create|  s^    $TZZ=uffUm((DGGTVV,;/r   c                     t        | j                  d      | j                  d<   | j                  t              5  | j                  d    ddd       y# 1 sw Y   yxY w)z5 KeyError raised when attempting to open broken link z/missingr  N)r   r  r   r8   r   r   s    r   r   zTestExternalLinks.test_exc  sH    $TZZ<ux( 	FF5M	 	 	s   AAc                     t        dd      | j                  d<   | j                  t              5  | j                  d    ddd       y# 1 sw Y   yxY w)z6 KeyError raised when attempting to open missing file r   rt   r  N)r   r   r8   r   r   s    r   test_exc_missingfilez&TestExternalLinks.test_exc_missingfile  sD    $_V<ux( 	FF5M	 	 	s   AAc                     t        | j                  d      | j                  d<   | j                  d   }|j                  }|j	                          | j                  |       y)zT Files opened by accessing external links can be closed

        Issue 189.
        r   r  N)r   r  r   r  r!   r   )r   r/   f2s      r   test_close_filez!TestExternalLinks.test_close_file  sI    
 %TZZ5uffUmXX

r   zNo unicode filename supportc                     t         j                  j                  t               d      }t	        |d      5 }|j                  d       ddd       t        |d      | j                  d<   y# 1 sw Y   #xY w)zh
        Check that external links encode unicode filenames properly
        Testing issue #732
           α.hdf5r   rR  Nr  r  )osr  joinr   r   r,   r   r   r   ext_filenameext_files      r   test_unicode_encodez%TestExternalLinks.test_unicode_encode  s]     ww||GIz:,$ 	.!!*-	.$\;?u	. 	.s   A))A2c                 f   t         j                  j                  t               d      }t	        |d      5 }|j                  d       d|d   j                  d<   ddd       t        |d      | j                  d<   | j                  | j                  d   j                  d   d       y# 1 sw Y   OxY w)	zh
        Check that external links decode unicode filenames properly
        Testing issue #732
        r  r   rR  r   ext_attrNr  r  
r  r  r  r   r   r,   attrsr   r   r4   r  s      r   test_unicode_decodez%TestExternalLinks.test_unicode_decode  s     ww||GIz:,$ 	<!!*-5;HZ &&z2	< %\;?u,,Z8&A		< 	<   $B''B0c                 f   t         j                  j                  t               d      }t	        |d      5 }|j                  d       d|d   j                  d<   ddd       t        |d      | j                  d<   | j                  | j                  d   j                  d   d       y# 1 sw Y   OxY w)	zi
        Check that external links handle unicode hdf5 paths properly
        Testing issue #333
        zexternal.hdf5r   r   r   r  Nu   /αr  r  r  s      r   test_unicode_hdf5_pathz(TestExternalLinks.test_unicode_hdf5_path  s    
 ww||GI?,$ 	6!!$'/5HTN  ,	6 %\59u,,Z8&A		6 	6r  N)r$   r%   r&   rR   r   r"   r  r  r1   r   r  r  r   skipIfNO_FS_UNICODEr  r  r  r'   r   r   r  r  ^  s}    *-
0	 RYY};<@ =@ RYY};<
B =
B
Br   r  c                       e Zd ZdZd Zy)TestExtLinkBugsz;
        Bugs: Specific regressions for external links
    c                    d }| j                         }| j                         }t        |d      }| j                   ||             |j                  d       |j	                          t        |d      }| j                   ||             t        |d      |d<   |j	                          t        |d      }| j                   ||             | j                  |d   d   t               y)zo Issue 212

        Fails with:

        AttributeError: 'SharedConfig' object has no attribute 'lapl'
        c                       fd}|S )Nc                  L    	  r j                          y y # t        $ r Y y w xY wr   )r!   OSErrorr   s   r   r   z9TestExtLinkBugs.test_issue_212.<locals>.closer.<locals>.w  s+    	  s    	##r'   )r   r   s   ` r   closerz.TestExtLinkBugs.test_issue_212.<locals>.closer  s     Hr   r   rZ   r   linkr   N)r   r   
addCleanupr,   r!   r   r-   r	   )r   r  	orig_namenew_namer   r   hs          r   test_issue_212zTestExtLinkBugs.test_issue_212  s    	 KKM	;;=C q	"	s		3q	" C0&			3q	"aine4r   N)r$   r%   r&   rR   r  r'   r   r   r  r    s    5r   r  c                   T    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y)TestCopyc                     t        | j                         d      | _        t        | j                         d      | _        y r   )r   r   f1r  r   s    r   r   zTestCopy.setUp  s*    t{{}c*t{{}c*r   c                     | j                   r| j                   j                          | j                  r| j                  j                          y y r   )r  r!   r  r   s    r   r"   zTestCopy.tearDown  s/    77GGMMO77GGMMO r   c                    | j                   j                  d      }g d|d<   | j                   j                  dd       | j                   d   }| j                  |t               | j                  |d   t        j                  g d             y )Nr+   r   r   r   rK  rL  )r  r,   copyr-   r	   r]   r[   r1  r   r+   rL  s      r   test_copy_path_to_pathzTestCopy.test_copy_path_to_path  sk    gg""5)E
UE"ggenc5)c%j"((7*;<r   c                 T   | j                   j                  d      }g d|d<   | j                   j                  d      }| j                   j                  d|       | j                   d   }| j                  |t               | j                  |d   t        j                  g d             | j                   j                  d| j                  d          | j                  | j                  d   t               | j                  | j                  d   t        j                  g d             y Nr+   r  rK  rL  rz   r   rt   	r  r,   r  r-   r	   r]   r[   r1  r  r  s      r   test_copy_path_to_groupz TestCopy.test_copy_path_to_group  s    gg""5)E
gg""5)UC ggenc5)c)nbhhw.?@UDGGCL)dggfou5dggi0"((72CDr   c                    | j                   j                  d      }g d|d<   | j                   j                  |d       | j                   d   }| j                  |t               | j                  |d   t        j                  g d             | j                  j                  |d       | j                  | j                  d   t               | j                  | j                  d   t        j                  g d             y )Nr+   r  rK  rL  rt   rz   r   r  s      r   test_copy_group_to_pathz TestCopy.test_copy_group_to_path
  s    gg""5)E
S% ggenc5)c%j"((7*;<S% dggfou5dggi0"((72CDr   c                 T   | j                   j                  d      }g d|d<   | j                   j                  d      }| j                   j                  ||       | j                   d   }| j                  |t               | j                  |d   t        j                  g d             | j                   j                  || j                  d          | j                  | j                  d   t               | j                  | j                  d   t        j                  g d             y r  r   r  s      r   test_copy_group_to_groupz!TestCopy.test_copy_group_to_group  s    gg""5)E
gg""5)S#ggenc5)c)nbhhw.?@S$''#,'dggfou5dggi0"((72CDr   c                    g d| j                   d<   | j                   d   }| j                   j                  d      }| j                   j                  |d       | j                  | j                   d   t	        j
                  g d             | j                   j                  dd       | j                  | j                   d   t	        j
                  g d             | j                   j                  ||       | j                  | j                   d   t	        j
                  g d             | j                   j                  d| j                         | j                  | j                  d   t	        j
                  g d             | j                  j                  | j                   d   | j                  d       | j                  | j                  d   t	        j
                  g d             y )Nr  r+   r/   rK  rL  z/grp/foo)r  r,   r  r]   r[   r1  r  )r   r+   r/   s      r   test_copy_datasetzTestCopy.test_copy_dataset'  sB    ggengg""5)S% dggenbhhw.?@UE"dggenbhhw.?@S#dggj1288G3DEUDGG$dggenbhhw.?@TWWU^TWWe4dggenbhhw.?@r   c                 @   | j                   j                  d      }|j                  d      }g d|d<   g d|d<   | j                   j                  |dd	       | j                   d   }| j                  |t               | j                  |d   t               | j                  t        |d         d
       | j                  |d   t        j                  g d             | j                  j                  |dd	       | j                  | j                  d   t               | j                  | j                  d   t               | j                  t        | j                  d         d
       | j                  | j                  d   t        j                  g d             y )Nr+   rK  r  quxrW   r      quuxrL  T)shallowr   rt   rz   zfoo/qux)r  r,   r  r-   r	   r4   r   r]   r[   r1  r  )r   r+   rK  rL  s       r   test_copy_shallowzTestCopy.test_copy_shallow;  s;   gg""5)u%E
FS%.ggenc5)c%j%0SZ!,c%j"((7*;<S%.dggfou5dggi0%8TWWY/0!4dggi0"((72CDr   c                 "   g d| j                   d<   | j                   d   }g d|j                  d<   | j                   j                  |dd       | j                  | j                   d   t	        j
                  g d             d| j                   d   j                  vsJ | j                  j                  |dd       | j                  | j                  d   t	        j
                  g d             d| j                  d   j                  vsJ y )Nr  r+   r
  rK  rL  T)without_attrs)r  r  r  r]   r[   r1  r  r   r+   s     r   test_copy_without_attributesz%TestCopy.test_copy_without_attributesO  s     ggen"		%S%t4dggenbhhw.?@DGGEN00000S%t4dggenbhhw.?@DGGEN00000r   c                 f   g d| j                   d<   | j                   j                  d      }t        d      |d<   | j                   j                  |dd       | j                  j                  |dd       | j                   d= | j                  | j                   d   t               | j                  | j                   d	   t        j                  g d             | j                  | j                  d
   t               | j                  | j                  d   t        j                  g d             y )Nr  rK  r+   z/barrL  r	  T)expand_softzqux/bazrt   zfoo/baz)
r  r,   r
   r  r  r-   r	   r]   r[   r1  r  s     r   test_copy_soft_linkszTestCopy.test_copy_soft_links]  s    "gg""5)f%E
S%T2S%T2GGENdggene4dggi0"((92EFdggfou5dggi0"((92EFr   c                    | j                   j                  }g d| j                   d<   t        |d      | j                  d<   | j                   j	                          d | _         | j                  | j                  d   t        j                  g d             | j                  j                  ddd       t        j                  |       | j                  | j                  d   t        j                  g d             y )Nr  r+   rK  rL  T)expand_external)r  r  r   r  r!   r]   r[   r1  r  r  unlink)r   r  s     r   test_copy_external_linksz!TestCopy.test_copy_external_linksm  s    77## %h6dggenbhhw.?@UE48
		(dggenbhhw.?@r   c                    g d| j                   d<   g d| j                   d<   | j                   d   }| j                   d   }|j                  |j                  d<   | j                   j                  |dd       | j	                  | j                   d   t        j                  g d             | j                   d   j                  d   }| j	                  | j                   |   t        j                  g d             | j                  | j                   |   j                  |j                         | j                   j                  d| j                  dd       | j	                  | j                  d   t        j                  g d             | j                  d   j                  d   }| j	                  | j                  |   t        j                  g d             | j                   j                  d| j                  d	d       | j	                  | j                  d
   t        j                  g d             | j	                  | j                  d   t        j                  g d             | j                  d
   j                  d   }| j	                  | j                  |   t        j                  g d             | j                  | j                  |   | j                  d          y )Nr  r+   r
  rK  rL  T)expand_refsr   rootzroot/foozroot/bar)r  r   r  r  r]   r[   r1  r  r5   r  r4   )r   r+   rK  baz_barfoo_bars        r   test_copy_refszTestCopy.test_copy_refs{  s     ggenggen77		%S%T2dggenbhhw.?@''%.&&u-dggg.0ABDGGG,11388<UDGGU=dggenbhhw.?@''%.&&u-dggg.0ABS$''6t<dggj1288G3DEdggj1288G3DE''*%++E2dggg.0AB)477:+>?r   N)r$   r%   r&   r   r"   r  r  r  r  r  r  r  r  r  r  r'   r   r   r  r    sF    +=EEEA(E(1G A@r   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestMovez7
        Feature: Group.move moves links in a file
    c                 &   | j                   j                  d      }| j                   j                  dd       | j                  | j                   d   |       | j                   j                  dd       | j                  | j                   d   |       y)z Moving an object XYznew/nested/pathN)r   r,   mover4   ru   s     r   test_move_hardlinkzTestMove.test_move_hardlink  sm    ff!!#&Cc*C*+ 12C8r   c                     t        j                  d      | j                  d<   | j                  j                  dd       | j                  j	                  dd      }| j                  |j                  d       y)z Moving a soft link zrelative/pathrQ  new_softTr[  N)r{   r
   r   r%  r~   r4   r  )r   lnks     r   test_move_softlinkzTestMove.test_move_softlink  sT    7vFJ'ffjjTj2?3r   c                     | j                   j                  d       | j                   j                  d       | j                  t              5  | j                   j	                  dd       ddd       y# 1 sw Y   yxY w)z! Move conflict raises ValueError r#  r$  N)r   r,   r8   r9   r%  r   s    r   test_move_conflictzTestMove.test_move_conflict  s[    C C z* 	"FFKKS!	" 	" 	"s   A22A;c                 r    | j                   j                  d       | j                   j                  dd       y)z Test that a null-move works r#  N)r   r,   r%  r   s    r   test_short_circuitzTestMove.test_short_circuit  s&    C Cr   N)r$   r%   r&   rR   r&  r*  r,  r.  r'   r   r   r!  r!    s    94"r   r!  c                       e Zd ZdZd Zd Zy)TestMutableMappingzSTests if the registration of Group as a MutableMapping
    behaves as expected
    c                     t        t        t              sJ | j                  j	                  d      }t        |t              sJ y )NK)
issubclassr	   r   r   r,   r   ru   s     r   test_resolutionz"TestMutableMapping.test_resolution  s6    %000ff!!#&#~...r   c                     t         j                   t         j                   t         j                   t         j                   t         j
                   y)zC
        Test that the required functions are implemented.
        N)r	   __getitem____setitem____delitem____iter____len__r   s    r   test_validityz TestMutableMapping.test_validity  s-     	r   N)r$   r%   r&   rR   r4  r;  r'   r   r   r0  r0    s    /
r   r0  )4rR   numpyr[   r  os.pathsystempfiler   collections.abcr   commonr   r   r{   r   r	   r
   r   r   r   r   r   h5py._hl.compatr   r  UnicodeEncodeErrorr   r)   rT   re   rm   r   r   r   r   r   r   r   r   r  r  rB  r`  r~  r  r  r  r  r  r  r!  r0  r'   r   r   <module>rD     s    	  
  *    > > "  +E M 4 4l5I 5$6) 6(:N) :Nz" "H>y >D,y ,) "
:k 
:H)9 H)T{ (AY A2!2+ !2FR' R'jD9i D9L)8 )8V+'X +'Z CJ CJJI <aB aBF#5h #5Ln@x n@by D g$  Ms   E6 6F F