B
    }N_                 @   sd   d dl Zd dlZd dlZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd ZdS )    Nc             C   s   t j| }|S )zTest if file exist

    Args:
        filename (str): File path

    Returns:
        bool: Does file with filename exist?
    )ospathisfile)filenameexists r   #../pycThermopack/pyctp/plotutils.pyfile_exists   s    	r	   c             C   sR   t | d}d}x0|D ](}| }|d d dkr:|d }qP qW tj| |d}|S )zxLoad data from file

    Args:
        filename (str): File path

    Returns:
        ndarray: Data stored in file
    rr   #   )skiprows)opensplitnploadtxt)r   fileZnlineslinewordsdatar   r   r   loadFile   s    	


r   c             C   sl   t | d}d}d}xP|D ]H}| }|d d dkr^||kr`|t|d  }|t|d  }qP qW ||fS )zGet last two words on line identefied by pointLabel.

    Args:
        filename (str): File path
        pointLabel (str): Searchable string

    Returns:
        str: Last two entries on line containg pointLabel
    r
    r   r      r   )r   r   len)r   
pointLabelr   Zcomp1Zcomp2r   r   r   r   r   	getBinary)   s    


r   c             C   s\   t | d}d}xH|D ]@}| }|d d dkrR|d |krTt|t|d  }qP qW |S )zGet float from line identefied by pointLabel. Last entry on line covetered to float.

    Args:
        filename (str): File path
        pointLabel (str): Searchable string

    Returns:
        float: Last entry on line containg pointLabel
    r
   g        r   r   r   )r   r   floatr   )r   r   r   Tr   r   r   r   r   getFloatA   s    


r   c             C   sX   t | d}d}xD|D ]<}| }|d d dkrN||krPt|t|d  }qP qW |S )zGet integer from line identefied by pointLabel. Last word on line covetered to int.

    Args:
        filename (str): File path
        pointLabel (str): Searchable string

    Returns:
        int: Last entry on line containg pointLabel
    r
   r   r   r   )r   r   intr   )r   r   r   nr   r   r   r   r   
getIntegerW   s    


r!   c             C   st   t | d}d}d}xX|D ]P}| }|d d dkrf||krht|t|d  }t|t|d  }qP qW ||fS )a  Get point (T,P) from line identefied by pointLabel. Last two words on line covetered to floats.

    Args:
        filename (str): File path
        pointLabel (str): Searchable string

    Returns:
        float: Last two entries on line containg pointLabel
    r
   g        r   r   r   r   )r   r   r   r   )r   r   r   r   Pr   r   r   r   r   getPointm   s    


r#   c             C   sj   t | d }t | d }|g| }x>t|D ]2}x,t|D ] }t| ||f r>|||< P q>W q0W |S )zGet location of NaNs in data arrays

    Args:
        data (ndarray): Data containing NaNs

    Returns:
        array_like: Column indices giving first apperance of NaN
    r   r   )r   shaperangemathisnan)r   r    mZnansijr   r   r   getNaNindices   s    	

r+   c             C   s  g }g }t | rt| }t| d\}}|dkr>|||g t| d\}}|dkrb|||g t|}t|d }	|	dkrd}
n|	dkrd}
xttd	D ]h}||
 }|| }|d
k rqt||
f}x0t|
D ]$}|d
||| f |dd|f< qW || qW ||fS )zRead data from solid envelope data.

    Args:
        filename (str): File path

    Returns:
        lists: Lists of phase lines and critical points
    z#Critical point 1g      ?z#Critical point 2r      r            r   N)	r	   r   r#   appendr+   r   r$   r%   zeros)r   linesZcritsr   ZTc1ZPc1ZTc2ZPc2i_nansr(   kr)   istarti_nanr   r*   r   r   r   get_solid_envelope_data   s4    	
$r7   c             C   s|  g }g }g }g }d}t | rnt| }t| d}t| d}t| d}t| d}	d}
t|}xtt|
D ]h}|d }|| }|dk rqdt|df}x0tdD ]$}|d||| f |dd|f< qW || qdW xt|D ]t}|
d |d  }|| }|dk rqt|df}x2tdD ]&}|d||| f |dd|f< qW || qW xt|D ]|}|
| d |d	  }|| }|dk rq\t|d	f}x2td	D ]&}|d||| f |dd|f< qW || q\W xt|	D ]}|
| |d  d |d
  }|| }|dk rqt|d	f}x2td
D ]&}|d||| f |dd|f< q4W || qW |||||fS )zg[summary]

    Args:
        filename (str): File path

    Returns:
        [type]: [description]
    r   z#Global phase diagram of type:z#Number of critical lines:z#Number of LLVE lines:z#Number of AZ lines:r      N   r.   )r	   r   r!   r+   r%   r   r1   r0   )r   ZVLEZVLLEZCRITZAZZKSTYPEr   ZnCritZnLLVEZnAZZnVLEr3   r)   r5   r6   r   r*   r   r   r   get_globa_binary_data   sd    	




$
&
&
&r:   )numpyr   r&   r   r	   r   r   r   r!   r#   r+   r7   r:   r   r   r   r   <module>   s   $