
    DUfG                     l    d dl Z d dlZd dlZddgZdddddiZd	 Z G d
 d          ZddZ	ddZ
d ZdS )    Nupdate_default_colnamesis_chrom_dtypecolnameschromstartendr   r   r   c                  r    t           d         d         t           d         d         t           d         d         fS )z
    Returns default column names.

    These defaults be updated with :func:`update_default_colnames`.

    Returns
    -------
    colnames : triplet (str, str, str)

    r   r   r   r   )_rc     P/var/www/html/software/conda/lib/python3.11/site-packages/bioframe/core/specs.py_get_default_colnamesr      s,     z?7#S_W%=s:u?UUUr   c                        e Zd Zd Zd Zd ZdS )r   c                    t          t          d                   | _        t          |t          j        j                  rTt          |          dk    rt          d          |\  t          d         d<   t          d         d<   t          d         d<   d S t          |t          j        j	                  r>t          d         
                    d |                                D                        d S t          d          )Nr      z@Please, specify new columns using a list of 3 strings or a dict!r   r   r   c                 "    i | ]\  }}|d v 	||S )r	   r   ).0kvs      r   
<dictcomp>z4update_default_colnames.__init__.<locals>.<dictcomp>,   s4       1555 q555r   )dictr   _old_colnames
isinstancecollectionsabcIterablelen
ValueErrorMappingupdateitems)selfnew_colnamess     r   __init__z update_default_colnames.__init__   s   !#j/22lKO$<== 	<  A%% +   	J(J(J&&&ko&=>> 	
O""  , 2 2 4 4       U  r   c                     | S )Nr   )r#   s    r   	__enter__z!update_default_colnames.__enter__7   s    r   c                 $    | j         t          d<   d S )Nr   )r   r   )r#   argss     r   __exit__z update_default_colnames.__exit__:   s    ,Jr   N)__name__
__module____qualname__r%   r'   r*   r   r   r   r   r      sA          4  - - - - -r   Fc           	         t          | t          j                  s|rdS t          d          |r<t	          t          |                    t	          |          k     rt          d          t          |                              | j                  s[|rdS t          d                    t          |          	                    t          | j                                      dz             |rdS dS )a  
    Raises ValueError if columns with colnames are not present in dataframe df.

    Parameters
    ----------
    df: pandas.DataFrame

    colnames: list of column names

    return_as_bool : bool
        If True, returns as a boolean instead of raising errors. Default False.

    Fzdf is not a dataframezcolumn names must be uniquez, z not in keys of df.columnsTN)
r   pd	DataFramer   r   setissubsetcolumnsjoin
difference)dfr   unique_colsreturn_as_bools       r   _verify_columnsr9   >   s     b",'' 2 	50111 <s8}}H--:;;;x==!!"*-- 
 	5IIc(mm..s2:??@@*+
 
 	
  t r   c                    |t                      n|\  }}}t          | |||gd          s|rdS t          d          | j        |||g         \  }}}t	          |          s|rdS t          d          t          j        j        	                    |          s|rdS t          d          t          j        j        	                    |          s|rdS t          d          |rdS dS )	a  
    Checks that dataframe `df` has chrom, start, end columns with valid dtypes.
    Raises TypeErrors if cols have invalid dtypes.

    Parameters
    ----------
    df : pandas.DataFrame

    cols : (str, str, str) or None
        The names of columns containing the chromosome, start and end of the
        genomic intervals, provided separately for each set. The default
        values are 'chrom', 'start', 'end'.

    return_as_bool : bool
        If true, returns as a boolean instead of raising errors. Default False.

    NT)r8   Fzcould not verify columnszAinvalid df['chrom'] dtype, must be object, string, or categoricalz*invalid df['start'] dtype, must be integerz(invalid df['end'] dtype, must be integer)
r   r9   r   dtypesr   	TypeErrorr/   apitypesis_integer_dtype)	r6   colsr8   ck1sk1ek1chrom_dtypestart_dtype	end_dtypes	            r   _verify_column_dtypesrG   a   s*   $ 04|)+++MCc2S#tDDD 5 	53444*,)S#sO*D'Ki+&& 
 	5O
 
 	
 6<((55 F 	5DEEE6<((33 D 	5BCCC t r   c                     t          j        t          j        j                            |           t          j        j                            |           t          | t          j        j        j                  g          S )z]
    Returns True if dtype is any of the allowed bioframe chrom dtypes, False otherwise.
    )	npanyr/   r=   r>   is_string_dtypeis_object_dtyper   CategoricalDtype)rD   s    r   r   r      s[     6FL((55FL((55{BFL$ABB	
  r   )FF)NF)r   numpyrI   pandasr/   __all__r   r   r   r9   rG   r   r   r   r   <module>rQ      s                
 WwuEEFV V V- - - - - - - -D       F+ + + +\
 
 
 
 
r   