
    Ri                     *    d Z ddlmZ  G d de      Zy)z%Turn an mmCIF file into a dictionary.    )	as_handlec                   "    e Zd ZdZd Zd Zd Zy)
MMCIF2Dictz+Parse a mmCIF file and return a dictionary.c                 ^   ddg| _         ddg| _        t        |      5 }d}d}| j                  |      }	 t	        |      }|dd | |dd <   |dd j                  d	      st        d
      d}d}|D ]  }|j                         dk(  r	d}g }	d}d}|rb|j                  d      r1|dk(  s||z  dk(  r$|dkD  rd}n<g | |<   	j                  |       |dz  }c| 	||z        j                  |       |dz  }||}|g| |<   d} 	 ddd       y# t
        $ r Y ddd       yw xY w# 1 sw Y   yxY w)zParse a mmCIF file and return a dictionary.

        Arguments:
         - file - name of the PDB file OR an open filehandle

        '" 	FN   r   data_z9The input mmCIF file must begin with a 'data_' directive.loop_T_   )
quote_charswhitespace_charsr   	_tokenizenextStopIteration
startswith
ValueErrorlowerappend)
selffilenamehandle	loop_flagkeytokenstokeninkeyss
             J/home/agent/.friday_env/lib/python3.12/site-packages/Bio/PDB/MMCIF2Dict.py__init__zMMCIF2Dict.__init__   s     :!$dx  +	FIC^^F+FV  %QRyDq1:((1 O  AA ;;=G+ $IDAA
 '',!q&AEQJq5(-I*,DK KK.FA$T!a%[)007Q ;C!&DIC9+	 +	 ! +	 +	+	 +	s/   D#D CD#	D D#D  D##D,c              #   t  K   d}d }d}t        |      D ]  \  }}|| j                  v r|s|rd}|||  $|| j                  v rF|s|s
|}d}|dz   }@||k(  sF|dz   t        |      k(  s||dz      | j                  v sld }d}|||  x|dk(  r|s y |rd}|} |r||d   |rt	        d|z         y w)NFr   Tr   #zLine ended with quote open: )	enumerater   r   lenr   )r   linein_tokenquote_open_charstart_ir    cs          r#   
_splitlinezMMCIF2Dict._splitlineH   s     dO 	DAqD)))O$Hwq/)d&&&&x&'O#H!eG/)ESY&$q1u+9N9N*N&*O$Hwq/)c( /	0 wx. ;dBCC s!   (B8B8+B8%B8 B8 B8c              #     K   d}|D ]  }d}|j                  d      r|j                  d      r|dd  j                         g}|D ]l  }|j                         }|j                  d      r8dj                  |       |dd  }|r|d   | j                  vrt	        d       n|j                  |       n t	        d	      | j                  |j                               E d {     |rt	        d
      y 7 w)NTFr&   ;r   
r   zMissing whitespacezMissing closing semicolonzEmpty file.)r   rstripjoinr   r   r   r.   strip)r   r   emptyr)   token_buffers        r#   r   zMMCIF2Dict._tokenizek   s     	5DEs#% !%QR 12" 
BD;;=Ds+"ii55#ABxDG43H3H$H",-A"BB ''-
B %%@AAtzz|444)	5* ]++  5s   CC8!C6"C8N)__name__
__module____qualname____doc__r$   r.   r        r#   r   r      s    54p!DF,r<   r   N)r:   Bio.Filer   dictr   r;   r<   r#   <module>r?      s    , v, v,r<   