a
    }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   V/Users/vegardjervell/Documents/9_semester/soret_model/pycThermopack/pyctp/plotutils.pyfile_exists   s    	r	   c                 C   sP   t | d}d}|D ]*}| }|d d dkr8|d }q q>q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   sj   t | d}d}d}|D ]J}| }|d d dkr\||v r`|t|d  }|t|d  }q qbq||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   sZ   t | d}d}|D ]B}| }|d d dkrP|d |krTt|t|d  }q qVq|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
           r   r   r   r   r   floatr   )r   r   r   Tr   r   r   r   r   getFloatA   s    

r    c                 C   sV   t | d}d}|D ]>}| }|d d dkrL||v rPt|t|d  }q qRq|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   sr   t | d}d}d}|D ]R}| }|d d dkrd||v rht|t|d  }t|t|d  }q qjq||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
   r   r   r   r   r   r   )r   r   r   r   Pr   r   r   r   r   getPointm   s    

r%   c                 C   sd   t | d }t | d }|g| }t|D ]0}t|D ]"}t| ||f r:|||<  q.q:q.|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"   mnansijr   r   r   getNaNindices   s    	
r.   c                 C   s  g }g }t | rt| }t| d\}}|dkr<|||g t| d\}}|dkr`|||g t|}t|d }	|	dkrd}
n|	dkrd}
td	D ]d}||
 }|| }|d
k rqt||
f}t|
D ]$}|d
||| f |dd|f< q|| q||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    	"r:   c                 C   sZ  g }g }g }g }d}t | rLt| }t| d}t| d}t| d}t| d}	d}
t|}t|
D ]d}|d }|| }|dk rqbt|df}tdD ]$}|d||| f |dd|f< q|| qbt|D ]n}|
d |d  }|| }|dk rqt|df}tdD ]&}|d||| f |dd|f< q|| qt|D ]x}|
| d |d	  }|| }|dk rvqHt|d	f}td	D ]&}|d||| f |dd|f< q|| qHt|	D ]}|
| |d  d |d
  }|| }|dk r qt|d	f}td
D ]&}|d||| f |dd|f< q|| q|||||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   r1   )r	   r   r#   r.   r'   r   r4   r3   )r   ZVLEZVLLEZCRITZAZZKSTYPEr   ZnCritZnLLVEZnAZZnVLEr6   r,   r8   r9   r   r-   r   r   r   get_globa_binary_data   sd    	




"$
$
$r=   )numpyr   r(   r   r	   r   r   r    r#   r%   r.   r:   r=   r   r   r   r   <module>   s   $