o
    2h                     @   st   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 dejZG dd dejZdS )z3
    Implements support for HDF5 dimension scales.
    N   )h5ds)H5pyDeprecationWarning   )base)phil	with_phil)Datasetc                   @   s   e Zd ZdZeedd Zejedd Zedd Zedd Z	ed	d
 Z
edd Zedd Zedd Zdd Zdd Zdd Zdd Zdd Zedd ZdS )DimensionProxyz-
        Represents an HDF5 "dimension".
    c                 C   s   |  t| j| jS )z& Get or set the dimension scale label )_dr   	get_label_id
_dimensionself r   H/var/www/html/chatgem/venv/lib/python3.10/site-packages/h5py/_hl/dims.pylabel   s   zDimensionProxy.labelc                 C   s   t | j| j| | d S N)r   	set_labelr   r   _e)r   valr   r   r   r   #   s   c                 C   s   || _ || _d S r   )r   r   )r   id_	dimensionr   r   r   __init__)   s   
zDimensionProxy.__init__c                 C   s   t t| | j| jfS r   )hashtyper   r   r   r   r   r   __hash__.   s   zDimensionProxy.__hash__c                 C   s   t | t |kS r   )r   )r   otherr   r   r   __eq__2      zDimensionProxy.__eq__c                 c   s    |   E d H  d S r   )keysr   r   r   r   __iter__6   s   zDimensionProxy.__iter__c                 C   s   t | j| jS r   )r   get_num_scalesr   r   r   r   r   r   __len__:   r    zDimensionProxy.__len__c                    sj   t  trg }tjj|jd t|  S  fdd}tjj|d}|d u r1t t|S )Nr   c                    s   t |  kr| S dS )z- Iterate over scales to find a matching name N)r   get_scale_namer   )dsiditemr   r   r   fG   s   z%DimensionProxy.__getitem__.<locals>.f)	
isinstanceintr   iterater   r   appendr	   KeyError)r   r(   scalesr)   resr   r'   r   __getitem__>   s   
zDimensionProxy.__getitem__c                 C   >   t  t| j|j| j W d   dS 1 s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   dsetr   r   r   r3   Q      "zDimensionProxy.attach_scalec                 C   r2   )zq Remove a scale from this dimension.

        Provide the Dataset of the scale you would like to remove.
        N)r   r   detach_scaler   r4   r   r5   r   r   r   r8   Y   r7   zDimensionProxy.detach_scalec                    s`   t $ g }t dkrt j j|jd  fdd|D W  d   S 1 s)w   Y  dS )zX Get a list of (name, Dataset) pairs with all scales on this
        dimension.
        r   c                    s$   g | ]}  t|t|fqS r   )r   r   r%   r	   ).0xr   r   r   
<listcomp>m   s    z(DimensionProxy.items.<locals>.<listcomp>N)r   lenr   r,   r   r   r-   )r   r/   r   r   r   itemsa   s   
$zDimensionProxy.itemsc                 C   :   t  dd |  D W  d   S 1 sw   Y  dS )z7 Get a list of names for the scales on this dimension. c                 S   s   g | ]\}}|qS r   r   )r9   key_r   r   r   r;   u       z'DimensionProxy.keys.<locals>.<listcomp>Nr   r=   r   r   r   r   r!   r      $zDimensionProxy.keysc                 C   r>   )z5 Get a list of Dataset for scales on this dimension. c                 S   s   g | ]\}}|qS r   r   )r9   r@   r   r   r   r   r;   z   rA   z)DimensionProxy.values.<locals>.<listcomp>NrB   r   r   r   r   valuesw   rC   zDimensionProxy.valuesc                 C   s"   | j sdS d| j| jt| j f S )Nz"<Dimension of closed HDF5 dataset>z)<"%s" dimension %d of HDF5 dataset at %s>)r   r   r   r4   r   r   r   r   __repr__|   s
   zDimensionProxy.__repr__N)__name__
__module____qualname____doc__propertyr   r   setterr   r   r   r"   r$   r1   r3   r8   r=   r!   rD   rE   r   r   r   r   r
      s6    





r
   c                   @   sV   e Zd ZdZedd Zedd Zedd Zedd	 Zed
d Z	d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                 C   s   |j | _dS )z Private constructor.
        N)r4   r   )r   parentr   r   r   r      s   zDimensionManager.__init__c                 C   s$   |t | d krtdt| j|S )z# Return a Dimension object
        r   zIndex out of range)r<   
IndexErrorr
   r   )r   indexr   r   r   r1      s   zDimensionManager.__getitem__c                 C   s   | j jS )z3 Number of dimensions associated with the dataset. )r   rankr   r   r   r   r$      s   zDimensionManager.__len__c                 c   s"    t t| D ]}| | V  qdS )z Iterate over the dimensions. N)ranger<   )r   ir   r   r   r"      s   zDimensionManager.__iter__c                 C   s   | j sdS dt| j  S )Nz#<Dimensions of closed HDF5 dataset>z!<Dimensions of HDF5 object at %s>)r   r4   r   r   r   r   rE      s   zDimensionManager.__repr__ c                 C   s   t jdtd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   r6   namer   r   r   create_scale   s   zDimensionManager.create_scaleN)rS   )rF   rG   rH   rI   r   r   r1   r$   r"   rE   rY   r   r   r   r   rL      s    




rL   )rI   rU   rS   r   h5py_warningsr   r   r   r   datasetr	   CommonStateObjectr
   rL   r   r   r   r   <module>   s   	m