a
    7b                     @   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   _/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/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   #   )Zskiprows)opensplitnpZloadtxt)r   file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!   mZ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    	"r8   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   r/   )r	   r   r"   r,   r&   r   r2   r1   )r   ZVLEZVLLEZCRITZAZZKSTYPEr   ZnCritZnLLVEZnAZZnVLEr4   r*   r6   r7   r   r+   r   r   r   get_globa_binary_data   sd    	




"$
$
$r;   )Znumpyr   r'   r   r	   r   r   r   r"   r$   r,   r8   r;   r   r   r   r   <module>   s   $