
     iK                     :    d Z ddlZddlmZ  G d de          ZdS )a.  Set box dimensions --- :mod:`MDAnalysis.transformations.boxdimensions`
=======================================================================

Set dimensions of the simulation box, either to a constant vector across
all timesteps or to a specified vector at each frame.

.. autoclass:: set_dimensions
    N   )TransformationBasec                   *     e Zd ZdZd fd	Zd Z xZS )set_dimensionsu  
    Set simulation box dimensions.

    Timestep dimensions are modified in place.

    Examples
    --------

    e.g. set simulation box dimensions to a vector containing unit cell
    dimensions [*a*, *b*, *c*, *alpha*, *beta*, *gamma*], lengths *a*,
    *b*, *c* are in the MDAnalysis length unit (Å), and angles are in degrees.
    The same dimensions will be used for every frame in the trajectory.

    .. code-block:: python

        dim = np.array([2, 2, 2, 90, 90, 90])
        transform = mda.transformations.boxdimensions.set_dimensions(dim)
        u.trajectory.add_transformations(transform)

    Or e.g. set simulation box dimensions to a vector containing unit cell
    dimensions [*a*, *b*, *c*, *alpha*, *beta*, *gamma*] at the first frame,
    and [*2a*, *2b*, *2c*, *alpha*, *beta*, *gamma*] at the second frame.

    .. code-block:: python

        dim = np.array([
            [2, 2, 2, 90, 90, 90],
            [4, 4, 4, 90, 90, 90],
        ])
        transform = mda.transformations.boxdimensions.set_dimensions(dim)
        u.trajectory.add_transformations(transform)

    Parameters
    ----------
    dimensions: iterable of floats or two-dimensional np.typing.NDArrayLike
        vector that contains unit cell lengths and angles.
        Expected shapes are (6, 0) or (1, 6) or (N, 6), where
        N is the number of frames in the trajectory. If shape is (6, 0) or
        (1, 6), the same dimensions will be used at every frame in the
        trajectory.

    Returns
    -------
    :class:`~MDAnalysis.coordinates.timestep.Timestep` object


    .. versionchanged:: 2.7.0
       Added the option to set varying box dimensions (i.e. an NPT trajectory).
    NTc                    t                                          ||           || _        	 t          j        | j        t          j                  | _        n'# t          $ r | j         d}t          |          w xY w	 | j                            dd          | _        d S # t          $ r | j         d}t          |          w xY w)N)max_threadsparallelizablez2 cannot be converted into np.float32 numpy.ndarray   a   array does not have valid box dimension shape.
Simulation box dimensions are given by an float array of shape (6, 0), (1, 6), or (N, 6) where N is the number of frames in the trajectory and the dimension vector(s) containing 3 lengths and 3 angles: [a, b, c, alpha, beta, gamma])super__init__
dimensionsnpasarrayfloat32
ValueErrorreshape)selfr   r   r	   errmsg	__class__s        r/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/MDAnalysis/transformations/boxdimensions.pyr   zset_dimensions.__init__Y   s    #N 	 	
 	
 	
 %	% j"*EEDOO 	% 	% 	%? + + +  V$$$	%	%"o55b!<<DOOO 
	% 
	% 
	%? 0 0 0  V$$$
	%s   )A $A;? B! !$Cc                     	 | j         j        d         dk    r| j         d         n| j         |j                 |_         n*# t          $ r}t	          d|j                   |d }~ww xY w|S )Nr   r   z'Dimensions array has no data for frame )r   shapeframe
IndexErrorr   )r   tses      r   
_transformzset_dimensions._transformu   s    		 ?(+q00 ""_RX. MM
  	 	 	D"(DD 	 	s   := 
A$AA$)NT)__name__
__module____qualname____doc__r   r   __classcell__)r   s   @r   r   r   &   sW        0 0d% % % % % %8          r   )r"   numpyr   baser   r    r$   r   <module>r(      sn   0      $ $ $ $ $ $Z Z Z Z Z' Z Z Z Z Zr$   