
     i`"                         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
ddZ G d dej                  Z G d dej                  ZdS )a  DL_Poly format reader :mod:`MDAnalysis.coordinates.DLPoly`
=============================================================

Read DL Poly_ format coordinate files

.. _Poly: https://www.sc.stfc.ac.uk/software/type/computational-materials-and-molecular-science/?searchquery=dl_poly
    N   )base)core   )util)cachedstore_init_argumentsAngstromzAngstrom/psps)lengthvelocitytimec                        e Zd ZdZdZeZd ZdS )ConfigReaderzDLPoly Config file Reader


    .. versionadded:: 0.11.0
    .. versionchanged:: 2.0.0
       coordinates, velocities, and forces are no longer stored in 'F' memory
       layout, instead now using the numpy default of 'C'.
    CONFIGc                    t          j        dt           j                  }t          | j        d          5 }|                                                                | _        t          j        |                                	                                d d                   \  }}}|dk    s|                                	                                |d         d d <   |                                	                                |d         d d <   |                                	                                |d         d d <   g }g }|dk    rd}g }	nd	}|dk    rd}
g }nd	}
|                                                                }|rR	 t          |d
d                    }|                    |           n# t          $ r Y nw xY wt          j        |                                	                                          }|                    |           |rMt          j        |                                	                                          }|	                    |           |
rMt          j        |                                	                                          }|                    |           |                                                                }|Rd d d            n# 1 swxY w Y   t          j        |t           j                  }|r t          j        |	t           j                  }	|
r t          j        |t           j                  }t          |          | _        |rDt          j        |          }t          j        |          }||         }|r|	|         }	|
r||         } | j        | j        f||
d| j        x}| _        ||_        |r|	|_        |
r||_        |dk    st/          j        | |_        d|_        d S )N   r   )dtyperr   r   r   r   TF   
velocitiesforces)npzerosfloat32openfilenamereadlinestriptitleint64splitintappend
ValueErrorarraylenn_atomsargsort	_Timestep
_ts_kwargsts_pos_velocities_forcesr   triclinic_box
dimensionsframe)selfunitcellinflevcfgimconmegatmidscoordshas_velsr   
has_forcesr   lineidxxyzvxyzfxyzorderr.   s                      g/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/MDAnalysis/coordinates/DLPoly.py_read_first_framezConfigReader._read_first_frame5   s   8F"*555$-%% (	.--//DJ$&HS\\^^-A-A-C-CBQB-G$H$H!FE6A::!$!5!5!7!7AAA!$!5!5!7!7AAA!$!5!5!7!7AAACFzz

 {{!
"
<<>>''))D .$d122h--C JJsOOOO "   D
 j!5!5!7!788c""" ,:cllnn&:&:&<&<==D%%d+++ (:cllnn&:&:&<&<==DMM$'''||~~++--#  ./(	. (	. (	. (	. (	. (	. (	. (	. (	. (	. (	. (	. (	. (	. (	.T &
333 	@*BJ???J 	8XfBJ777F6{{ 		'(3--CJsOOEE]F /'.
 '%t~dl 919-79 9 )-9 9 	9TW  	('BN 	 BJzz .9BMs7   EK$F4K$4
G>K$ GDK$$K(+K(N)__name__
__module____qualname____doc__format_DLPOLY_UNITSunitsrF        rE   r   r   )   s>          FEK K K K KrO   r   c                        e Zd ZdZdZeZe fd            ZddZ	d Z
e ed          d                         Zd	 Zd
 Z xZS )HistoryReaderzDReads DLPoly format HISTORY files

    .. versionadded:: 0.11.0
    HISTORYc                     t          t          |           j        |fi | i | _        t	          j        | j        d          | _        | j                                        	                                | _
        t          j        | j                                                                        d d                   }|\  | _        | _        | _        | j        dk    rdnd| _        | j        dk    rdnd| _        | j                                        }| j                                         t)          | j                                                                                  dk    rd| _        nd| _        | j                            |            | j        | j        f| j        | j        d| j        | _        |                                  d S )Nr   r   r   TFr   r   )superrQ   __init___cacher   anyopenr   _filer    r!   r"   r   r#   r$   _levcfg_imconr*   	_has_vels_has_forcestellr)   	_has_cellseekr,   r-   r.   _read_next_timestep)r5   r   kwargsheaderrwnd	__class__s        rE   rU   zHistoryReader.__init__   s   +mT""+H????? \$-55
Z((**0022
$*--//5577;<<28/dk4<!%!1!1u#'<1#4#444%z  

##%%++--..144!DNN"DN
 $. 4,0N(,(84 4 $(?4 4 	  """""rO   Nc                    || j         }| j                                        }|                    d          st          | j        rt          j        d          }| j                                                                        |d<   | j                                                                        |d<   | j                                                                        |d<   t          j
        | |_        g }t          | j                  D ](}| j                                                                        }	 t          |                                d                   }|                    |           n# t"          $ r Y nw xY w| j                                                                        |j        |<   | j        r3| j                                                                        |j        |<   | j        r3| j                                                                        |j        |<   |dz  }*|rt          j        |          }t          j        |t          j        | j                  dz   k              sgt          j        |          }|j        |         |j        d d <   | j        r|j        |         |j        d d <   | j        r|j        |         |j        d d <   |xj        dz  c_        |S )Ntimestepr   r   r   r   )r.   rX   r    
startswithIOErrorr^   r   r   r$   r   r2   r3   ranger*   r!   r%   r&   
IndexErrorr/   r[   r0   r\   r1   r(   allaranger+   r4   )r5   r.   r?   r6   r;   ir@   rD   s           rE   r`   z!HistoryReader._read_next_timestep   s   :Bz""$$z** 	M> 	:x''H*--//5577HQK*--//5577HQK*--//5577HQK .9BM t|$$ 	 	A:&&((..00D $**,,q/** 

3     ,,..4466BGAJ~ B$(J$7$7$9$9$?$?$A$Aq! > $
 3 3 5 5 ; ; = =
1FAA 		6(3--C6#")DL"9"9A"=>?? 6
3WU^
> >(*u(=BN111%# 6$&Ju$5BJqqqM
A	s   <'E99
FFc                     | j                             | j        |                    |dz
  | j        _        |                                 S )z8frame is 0 based, error checking is done in base.getitemr   )rX   r_   _offsetsr.   r4   r`   )r5   r4   s     rE   _read_framezHistoryReader._read_frame   s<    
e,---	'')))rO   n_framesc                 x   g }t          | j        d          5 }|                                 |                                 |                                }|                                }|                    d          r|                    |           | j        r<|                                 |                                 |                                 t          | j                  D ]`}|                                 |                                 | j	        r|                                 | j
        r|                                 a|                                }|                                }|                    d          d d d            n# 1 swxY w Y   || _        t          | j                  S )Nr   rf   )r   r   r    r]   rg   r&   r^   ri   r*   r[   r\   ro   r)   )r5   offsetsfpositionr?   _s         rE   rq   zHistoryReader.n_frames   s    $-%% 	$JJLLLJJLLLvvxxH::<<D//*-- $x(((> !JJLLLJJLLLJJLLLt|,, % %AJJLLLJJLLL~ %

' %

6688zz|| //*-- $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$*  4=!!!s   E2FFFc                     |                                   t          | j        d          | _        | j                                         | j                                         d| j        _        d S )Nr   )closer   r   rX   r    r.   r4   r5   s    rE   _reopenzHistoryReader._reopen   sW    

$---


rO   c                 8    | j                                          d S N)rX   ry   rz   s    rE   ry   zHistoryReader.close  s    
rO   r}   )rG   rH   rI   rJ   rK   rL   rM   r	   rU   r`   rp   propertyr   rq   r{   ry   __classcell__)rd   s   @rE   rQ   rQ      s          FE# # # # #40 0 0 0d* * * VJ" "  X"8        rO   rQ   )rJ   numpyr    r   r   libr   lib.utilr   r	   rL   SingleFrameReaderBaser   
ReaderBaserQ   rN   rO   rE   <module>r      s   0                        3 3 3 3 3 3 3 3%=$OOW W W W W4- W W WtA A A A ADO A A A A ArO   