
    d                         d Z ddlZddlmZ ddlmZ ddlmZ ddlmZmZ dd	l	m
Z
  G d
 dej                  Z G d dej                  ZdS )z3
    Implements support for HDF5 dimension scales.
    N   )h5ds)H5pyDeprecationWarning   )base)phil	with_phil)Datasetc                       e Zd ZdZeed                         Zej        ed                         Zed             Zed             Z	ed             Z
ed             Zed             Zed	             Zd
 Zd Zd Zd Zd Zed             ZdS )DimensionProxyz-
        Represents an HDF5 "dimension".
    c                     	 t          | j                  }|j        d         | j                 S # t          t
          f$ r Y dS w xY w)z& Get or set the dimension scale label DIMENSION_LABELS )r
   _idattrs
_dimensionKeyError
IndexErrorselfdsets     -lib/python3.11/site-packages/h5py/_hl/dims.pylabelzDimensionProxy.label   sR    	48$$D:01$/BB*% 	 	 	22	s   +. AAc                 l    t          j        | j        | j        |                     |                     d S N)r   	set_labelr   r   _e)r   vals     r   r   zDimensionProxy.label)   s,     	tx$''#,,?????    c                 "    || _         || _        d S r   )r   r   )r   id_	dimensions      r   __init__zDimensionProxy.__init__/   s    #r   c                 T    t          t          |           | j        | j        f          S r   )hashtyper   r   r   s    r   __hash__zDimensionProxy.__hash__4   s!    T$ZZ4?;<<<r   c                 B    t          |           t          |          k    S r   )r%   )r   others     r   __eq__zDimensionProxy.__eq__8   s    DzzT%[[((r   c              #   @   K   |                                  D ]}|V  d S r   )keys)r   ks     r   __iter__zDimensionProxy.__iter__<   s2       	 	AGGGG	 	r   c                 @    t          j        | j        | j                  S r   )r   get_num_scalesr   r   r'   s    r   __len__zDimensionProxy.__len__A   s    "48T_===r   c                 8    t          t                    r=g }t          j         j         j        |j        d           t          |                   S  fd}t          j         j         j        |d          }|t                    t          |          S )Nr   c                 b    t          j        |                                         k    r| S dS )z- Iterate over scales to find a matching name N)r   get_scale_namer   )dsiditemr   s    r   fz%DimensionProxy.__getitem__.<locals>.fN   s0    &t,,==K >=r   )	
isinstanceintr   iterater   r   appendr
   r   )r   r7   scalesr8   ress   ``   r   __getitem__zDimensionProxy.__getitem__E   s     dC   	 FL4?FM1EEE6$<(((           
 ,tx!Q??C{tnn$3<<r   c                     t           5  t          j        | j        |j        | j                   ddd           dS # 1 swxY w Y   dS )zo Attach a scale to this dimension.

        Provide the Dataset of the scale you would like to attach.
        N)r   r   attach_scaler   idr   r   s     r   rA   zDimensionProxy.attach_scaleX       
  	B 	BdhAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B   &;??c                     t           5  t          j        | j        |j        | j                   ddd           dS # 1 swxY w Y   dS )zq Remove a scale from this dimension.

        Provide the Dataset of the scale you would like to remove.
        N)r   r   detach_scaler   rB   r   r   s     r   rF   zDimensionProxy.detach_scale`   rC   rD   c                      t           5  g }t                     dk    r&t          j         j         j        |j        d            fd|D             cddd           S # 1 swxY w Y   dS )zX Get a list of (name, Dataset) pairs with all scales on this
        dimension.
        r   c                 |    g | ]8}                     t          j        |                    t          |          f9S  )_dr   r5   r
   ).0xr   s     r   
<listcomp>z(DimensionProxy.items.<locals>.<listcomp>t   sK        ,Q//00'!**=  r   N)r   lenr   r;   r   r   r<   )r   r=   s   ` r   itemszDimensionProxy.itemsh   s      	 	F 4yy1}}TXtqIII     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A	AA#&A#c                     t           5  d |                                 D             cddd           S # 1 swxY w Y   dS )z7 Get a list of names for the scales on this dimension. c                     g | ]\  }}|S rI   rI   )rK   key_s      r   rM   z'DimensionProxy.keys.<locals>.<listcomp>|   s    555HS!C555r   Nr   rO   r'   s    r   r-   zDimensionProxy.keysy        	6 	655

555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6   377c                     t           5  d |                                 D             cddd           S # 1 swxY w Y   dS )z5 Get a list of Dataset for scales on this dimension. c                     g | ]\  }}|S rI   rI   )rK   rS   r   s      r   rM   z)DimensionProxy.values.<locals>.<listcomp>   s    555HQC555r   NrT   r'   s    r   valueszDimensionProxy.values~   rU   rV   c                 \    | j         sdS d| j        | j        t          | j                   fz  S )Nz"<Dimension of closed HDF5 dataset>z)<"%s" dimension %d of HDF5 dataset at %s>)r   r   r   rB   r'   s    r   __repr__zDimensionProxy.__repr__   s5    x 	877;*dor$(||<= 	>r   N)__name__
__module____qualname____doc__propertyr	   r   setterr#   r(   r+   r/   r2   r?   rA   rF   rO   r-   rY   r[   rI   r   r   r   r      s{         	 	 Y X	 \@ @ Y \@ $ $ Y$ = = Y= ) ) Y)   Y > > Y>     Y $B B BB B B  "6 6 6
6 6 6
 > > Y> > >r   r   c                       e Zd ZdZed             Zed             Zed             Zed             Zed             Z	d
dZ
d	S )DimensionManagerz
        Represents a collection of dimension associated with a dataset.

        Like AttributeManager, an instance of this class is returned when
        accessing the ".dims" property on a Dataset.
    c                     |j         | _        dS )z Private constructor.
        N)rB   r   )r   parents     r   r#   zDimensionManager.__init__   s     9r   c                 v    |t          |           dz
  k    rt          d          t          | j        |          S )z# Return a Dimension object
        r   zIndex out of range)rN   r   r   r   )r   indexs     r   r?   zDimensionManager.__getitem__   s:     3t99q=  1222dh...r   c                     | j         j        S )z3 Number of dimensions associated with the dataset. )r   rankr'   s    r   r2   zDimensionManager.__len__   s     x}r   c              #   \   K   t          t          |                     D ]}| |         V  dS )z Iterate over the dimensions. N)rangerN   )r   is     r   r/   zDimensionManager.__iter__   s>       s4yy!! 	 	Aq'MMMM	 	r   c                 B    | j         sdS dt          | j                   z  S )Nz#<Dimensions of closed HDF5 dataset>z!<Dimensions of HDF5 object at %s>)r   rB   r'   s    r   r[   zDimensionManager.__repr__   s%    x 	9882R\\AAr   r   c                 h    t          j        dt          d           |                    |           dS )zo Create a new dimension, from an initial scale.

        Provide the dataset and a name for the scale.
        zTother_ds.dims.create_scale(ds, name) is deprecated. Use ds.make_scale(name) instead.r   )
stacklevelN)warningswarnr   
make_scale)r   r   names      r   create_scalezDimensionManager.create_scale   sA    
 	 9,	 	 	 	 	r   N)r   )r\   r]   r^   r_   r	   r#   r?   r2   r/   r[   rt   rI   r   r   rc   rc      s            Y
 / / Y/   Y   Y
 B B YB
	 	 	 	 	 	r   rc   )r_   rp   r   r   h5py_warningsr   r   r   r	   datasetr
   CommonStateObjectr   rc   rI   r   r   <module>rx      s            2 2 2 2 2 2       ! ! ! ! ! ! ! !      q> q> q> q> q>T+ q> q> q>h1 1 1 1 1t- 1 1 1 1 1r   