o
    Mh                     @   sp   d dl mZ d dlmZ dd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
				dddZdddZdS )    )Sequence)
exceptionsc                 C   s   t | to
t | t S N)
isinstancer   str)obj r   \/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/plotly/figure_factory/utils.pyis_sequence   s   r
   c                    sp   ddl m  t| d  rt fdd| D stddS t| d tr4tdd | D s6tddS dS )z
    Validates if a list contains all numbers or all strings

    :raises: (PlotlyError) If there are any two items in the list whose
        types differ
    r   Numberc                 3       | ]}t | V  qd S r   r   .0itemr   r   r	   	<genexpr>       z!validate_index.<locals>.<genexpr>z^Error in indexing column. Make sure all entries of each column are all numbers or all strings.c                 s       | ]}t |tV  qd S r   r   r   r   r   r   r	   r      r   Nnumbersr   r   allr   PlotlyErrorr   )
index_valsr   r   r	   validate_index
   s   r   c                    st   ddl m  | D ]/}t|d  r"t fdd|D s!tdqt|d tr7tdd |D s7tdqdS )z
    Validates all strings or numbers in each dataframe column

    :raises: (PlotlyError) If there are any two items in any list whose
        types differ
    r   r   c                 3   r   r   r   r   r   r   r	   r   1   r   z%validate_dataframe.<locals>.<genexpr>zWError in dataframe. Make sure all entries of each column are either numbers or strings.c                 s   r   r   r   r   r   r   r	   r   9   r   Nr   )arrayvectorr   r   r	   validate_dataframe&   s   r   c                     s0   t | d  t fdd| D rtddS )z
    Validates that data lists or ndarrays are the same length.

    :raises: (PlotlyError) If any data lists are not the same length.
    r   c                 3   s    | ]	}t | kV  qd S r   )len)r   lstlengthr   r	   r   I   s    z(validate_equal_length.<locals>.<genexpr>z<Oops! Your data lists or ndarrays should be the same length.N)r   anyr   r   )argsr   r!   r	   validate_equal_lengthB   s   r%   c               
   K   sR   |   D ]"\}}z|dkrtd||W q ty&   td||w dS )z
    Validates that all values given in key/val pairs are positive.

    Accepts kwargs to improve Exception messages.

    :raises: (PlotlyError) If any value is < 0 or raises.
    r   z{} must be > 0, got {}z{} must be a number, got {}N)items
ValueErrorformat	TypeErrorr   r   )kwargskeyvalr   r   r	   validate_positive_scalarsO   s   r-   c                 C   s*   zdd | D W S  t y   tdw )z
    Uses list comprehension to flatten array

    :param (array): An iterable to flatten
    :raises (PlotlyError): If iterable is not nested.
    :rtype (list): The flattened list.
    c                 S   s   g | ]	}|D ]}|qqS r   r   )r   sublistr   r   r   r	   
<listcomp>h   s    zflatten.<locals>.<listcomp>z\Your data array could not be flattened! Make sure your data is entered as lists or ndarrays!)r)   r   r   )r   r   r   r	   flatten_   s   r0   c                 C   s   t | }t| tst| tstd| D ]}t|tr!tdqt|d D ]}| | | |d  kr9tdq(g }|t	d| d g t|d D ]}g }|| |  || |d   || qM|| |d  t	dg |S )a  
    Returns a list of intervals for categorical colormaps

    Accepts a list or tuple of sequentially increasing numbers and returns
    a list representation of the mathematical intervals with these numbers
    as endpoints. For example, [1, 6] returns [[-inf, 1], [1, 6], [6, inf]]

    :raises: (PlotlyError) If input is not a list or tuple
    :raises: (PlotlyError) If the input contains a string
    :raises: (PlotlyError) If any number does not increase after the
        previous one in the sequence
    zZThe intervals_endpts argument must be a list or tuple of a sequence of increasing numbers.   z-infr   inf)
r   r   tuplelistr   r   r   rangeappendfloat)endptsr"   r   k	intervalsintervalr   r   r	   endpts_to_intervalsq   s4   
r<   colT#0f0f0fc                 C   s  d|d |  | }|s:d}	d}
|dkr%|d ||  d|  }d}d}nM|dkr9|d ||  d|  }d}d	}n8|dkrSd}	d
}
|d ||  d|  }d}d}n|dkrrd}
|d ||  d|  }|rld}d}	nd}d}	d}t ||	|
||ddd| t d|dd
}|S )a#  
    Returns annotation dict for label of n labels of a 1xn or nx1 subplot.

    :param (str) text: the text for a label.
    :param (int) lane: the label number for text. From 1 to n inclusive.
    :param (int) num_of_lanes: the number 'n' of rows or columns in subplot.
    :param (float) subplot_spacing: the value for the horizontal_spacing and
        vertical_spacing params in your plotly.tools.make_subplots() call.
    :param (str) row_col: choose whether labels are placed along rows or
        columns.
    :param (bool) flipped: flips text by 90 degrees. Text is printed
        horizontally if set to True and row_col='row', or if False and
        row_col='col'.
    :param (bool) right_side: only applicable if row_col is set to 'row'.
    :param (str) text_color: color of the text.
    r1   centermiddler=   g      ?g{Gz?r   rowZ   bottomg      ?i  leftg{GzrightFpaper   )sizecolor)
	textanglexanchoryanchorxy	showarrowxrefyreftextfont)dict)rR   lanenum_of_lanessubplot_spacingrow_colflipped
right_side
text_colortemprK   rL   rM   rN   rJ   annotation_dictr   r   r	   annotation_dict_for_label   sR   
r^   andc                 C   sD   t | dk rtdt | d d d | d |d  }|j|  S )z
    Returns an English listing of objects seperated by commas ','

    For example, ['foo', 'bar', 'baz'] becomes 'foo, bar and baz'
    if the conjunction 'and' is selected.
       z1Your list or tuple must contain at least 2 items.z{}, z{} z {}.)r   r   r   r(   )iterableconjperiodtemplater   r   r	   list_of_options   s   $
rf   N)r=   TTr>   )r_   T)collections.abcr   plotlyr   r
   r   r   r%   r-   r0   r<   r^   rf   r   r   r   r	   <module>   s    :
G