a
    gDf
-                     @   s^   d Z ddlZddlZG dd deZG dd deZdd ZG d	d
 d
ZG dd deZdS )zW
Classes used to support string serialization of Parameters and
Parameterized objects.
    Nc                   @   s   e Zd ZdS )UnserializableExceptionN__name__
__module____qualname__ r   r   ]/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/param/serializer.pyr   	   s   r   c                   @   s   e Zd ZdS )UnsafeserializableExceptionNr   r   r   r   r   r	      s   r	   c                 C   s   d| ddigiS )zSExpress a JSON schema type as nullable to easily support Parameters that allow_NoneanyOftypenullr   )Z	json_typer   r   r   JSONNullable   s    r   c                   @   sR   e Zd ZdZedddZedddZedddZed	d
 Zedd Z	dS )SerializationzH
    Base class used to implement different types of serialization.
    Nc                 C   s   t d S NNotImplementedErrorclspobjsubsetr   r   r   schema   s    zSerialization.schemac                 C   s   t dS )z
        Serialize the parameters on a Parameterized object into a
        single serialized object, e.g. a JSON string.
        Nr   r   r   r   r   serialize_parameters   s    z"Serialization.serialize_parametersc                 C   s   t dS )z
        Deserialize a serialized object representing one or
        more Parameters into a dictionary of parameter values.
        Nr   )r   r   
serializedr   r   r   r   deserialize_parameters&   s    z$Serialization.deserialize_parametersc                 C   s   t dS )z5
        Serialize a single parameter value.
        Nr   )r   r   pnamer   r   r   serialize_parameter_value.   s    z'Serialization.serialize_parameter_valuec                 C   s   t dS )z7
        Deserialize a single parameter value.
        Nr   r   r   r   valuer   r   r   deserialize_parameter_value5   s    z)Serialization.deserialize_parameter_value)N)N)N)
r   r   r   __doc__classmethodr   r   r   r   r   r   r   r   r   r      s   
r   c                   @   s  e Zd ZdZdgZededededdiZ	e
dd	 Ze
d
d Ze
d?ddZe
d@ddZe
dAddZe
dd Ze
dBddZe
dd Ze
dd Ze
dCddZe
dDddZe
dEdd Ze
dFd!d"Ze
dGd#d$Ze
dHd%d&Ze
dId'd(Ze
dJd)d*Ze
d+d, Ze
dKd-d.Ze
dLd/d0Ze
dMd1d2Ze
dNd3d4Z e
dOd5d6Z!e
dPd7d8Z"e
dQd9d:Z#e
dRd;d<Z$e
dSd=d>Z%dS )TJSONSerializationz
    Class responsible for specifying JSON serialization, deserialization
    and JSON schemas for Parameters and Parameterized classes and
    objects.
    CallableintegernumberstringNr   c                 C   s
   t |S r   )jsonloads)r   r   r   r   r   r'   K   s    zJSONSerialization.loadsc                 C   s
   t |S r   )r&   dumps)r   objr   r   r   r(   O   s    zJSONSerialization.dumpsFc                 C   s~   i }|j d D ]d\}}|d ur.||vr.q|j|d||< |jrdt|jdd || d< |j	r|j	|| d< q|S )Nexistingsafe
 descriptiontitle)
paramobjectsitemsr   doctextwrapdedentreplacestriplabel)r   r   r,   r   r   namepr   r   r   r   S   s     zJSONSerialization.schemac                 C   sT   i }|j d D ]4\}}|d ur.||vr.q|j |}||||< q| |S )Nr*   )r1   r2   r3   get_value_generator	serializer(   )r   r   r   
componentsr:   r;   r   r   r   r   r   `   s    z&JSONSerialization.serialize_parametersc                 C   sN   |  |}i }| D ]2\}}|d ur0||vr0q|j| |}|||< q|S r   )r'   r3   r1   deserialize)r   r   Zserializationr   Zdeserializedr>   r:   r   r   r   r   r   j   s    

z(JSONSerialization.deserialize_parametersc                 C   s   |  d | }t| |dS )z7Returns specialized method if available, otherwise None_N)lowergetattr)r   ptypesuffixmethod_namer   r   r   _get_methodw   s    zJSONSerialization._get_methodc                 C   sJ   || j v rt| |d}|r,|||d}nd| i}|jrFt|S |S )Nr   r+   r   )unserializable_parameter_typesr   rF   rA   Z
allow_Noner   )r   rC   r;   r,   r   Zdispatch_methodr   r   r   r   param_schema}   s    
zJSONSerialization.param_schemac                 C   s"   |j |}| |j | |S r   )r1   r<   r(   r=   r   r   r   r   r      s    z+JSONSerialization.serialize_parameter_valuec                 C   s   |  |}|j| |S r   )r'   r1   r?   r   r   r   r   r      s    
z-JSONSerialization.deserialize_parameter_valuec                    sl   ddl m} t|tr,d fdd|D iS | jv rDd j| iS t||r`d|j|dS ddiS d S )	N   )Parameterizedr
   c                    s   g | ]}  |qS r   )class__schema).0Zcls_r   r   r   
<listcomp>       z3JSONSerialization.class__schema.<locals>.<listcomp>r   objectr   
properties)ZparameterizedrJ   
isinstancetuplejson_schema_literal_types
issubclassr1   r   )r   class_r,   rJ   r   rM   r   rK      s    


zJSONSerialization.class__schemac                 C   s   |du rd}t |ddiS )NTzLArray is not guaranteed to be safe for serialization as the dtype is unknownr   arrayr	   r   r;   r,   msgr   r   r   array_schema   s    zJSONSerialization.array_schemac                 C   s   | j |j|dS Nr+   )rK   rW   r   r;   r,   r   r   r   classselector_schema   s    z&JSONSerialization.classselector_schemac                 C   s   |du rd}t |ddiS )NTzZDict is not guaranteed to be safe for serialization as the key and value types are unknownr   rP   rY   rZ   r   r   r   dict_schema   s    zJSONSerialization.dict_schemac                 C   s
   dddS )Nr%   z	date-timer   formatr   r^   r   r   r   date_schema   s    zJSONSerialization.date_schemac                 C   s
   dddS )Nr%   datera   r   r^   r   r   r   calendardate_schema   s    z%JSONSerialization.calendardate_schemac                 C   s*   ddi}|j d ur&|j |d< |j |d< |S )Nr   rX   minItemsmaxItems)lengthr   r;   r,   r   r   r   r   tuple_schema   s
    


zJSONSerialization.tuple_schemac                 C   s"   d|j j i}| ||j|jS )Nr   )	__class__r   rA   declare_numeric_boundsboundsinclusive_boundsri   r   r   r   number_schema   s    zJSONSerialization.number_schemac                 C   sT   |durP|\}}|dur0|d r$dnd}|||< |durP|d rDdnd}|||< |S )zCGiven an applicable numeric schema, augment with bounds informationNr   ZminimumZexclusiveMinimumrI   maximumZexclusiveMaximumr   )r   r   rm   rn   lowhighkeyr   r   r   rl      s    z(JSONSerialization.declare_numeric_boundsc                 C   s
   |  |S r   )ro   r^   r   r   r   integer_schema   s    z JSONSerialization.integer_schemac                 C   s   | j ||d}ddi|d< |S Nr+   r   r$   ZadditionalItems)rj   ri   r   r   r   numerictuple_schema   s    z%JSONSerialization.numerictuple_schemac                 C   s   | j ||dS r]   )rv   r^   r   r   r   xycoordinates_schema   s    z&JSONSerialization.xycoordinates_schemac                 C   s0   | j ||d}| ddi|j|j}||d< |S ru   )rj   rl   rm   rn   )r   r;   r,   r   Zbounded_numberr   r   r   range_schema   s    zJSONSerialization.range_schemac                 C   sH   ddi}|du r&|j d u r&d}t||jd urD| j|j |d|d< |S )Nr   rX   TzPList without a class specified cannot be guaranteed to be safe for serializationr+   r3   )Z	item_typer	   rW   rK   )r   r;   r,   r   r[   r   r   r   list_schema   s    
zJSONSerialization.list_schemac                    sV   z, fdd|j D }d|i}|j |d< |W S    |du rHd}t|i  Y S 0 d S )Nc                    s   g | ]}d  j t| iqS r   rU   r   rL   r)   rM   r   r   rN      s   z;JSONSerialization.objectselector_schema.<locals>.<listcomp>r
   enumTzfObjectSelector cannot be guaranteed to be safe for serialization due to unserializable type in objects)r2   r	   r   r;   r,   Zallowed_typesr   r[   r   rM   r   objectselector_schema   s    

z'JSONSerialization.objectselector_schemac                    sZ   z0 fdd|j  D }d|i}|j |d< |W S    |du rLd}t|i  Y S 0 d S )Nc                    s   g | ]}d  j t| iqS rz   r{   r|   rM   r   r   rN   	  s   z5JSONSerialization.selector_schema.<locals>.<listcomp>r
   r}   Tz`Selector cannot be guaranteed to be safe for serialization due to unserializable type in objects)r2   valuesr	   r~   r   rM   r   selector_schema  s    

z!JSONSerialization.selector_schemac                 C   s\   |j d u r|du rd}ddiS |j D ]&}t|| jvr$dt| }t|q$dd|j idS )NTz]ListSelector cannot be guaranteed to be safe for serialization as allowed objects unspecifiedr   rX   z%ListSelector cannot serialize type %sr}   )r   r3   )r2   r   rU   r   )r   r;   r,   r[   r)   r   r   r   listselector_schema  s    


z%JSONSerialization.listselector_schemac                    sT  ddi}|du rd}t ||jd u r6ddi|d< |S d\}}t|jtrZ|j|j }}nt|jtrp|j\}}t|jtst|jtrd||d|d< t|jtst|jtrd	d
 | j D }d|i  fdd|jD }d|d|d< d\}	}
t|j	tr|j	|j	 }	}
nt|j	tr,|j	\}	}
|	d ur>|	|d< |
d urP|
|d< |S )Nr   rX   TzYDataFrame is not guaranteed to be safe for serialization as the column dtypes are unknownrP   r3   )NN)r   rf   rg   c                 S   s   g | ]}d |iqS rz   r   )rL   elr   r   r   rN   8  rO   z6JSONSerialization.dataframe_schema.<locals>.<listcomp>r
   c                    s   i | ]
}| qS r   r   )rL   r:   Zallowable_typesr   r   
<dictcomp>:  rO   z6JSONSerialization.dataframe_schema.<locals>.<dictcomp>rQ   rf   rg   )
r	   columnsrS   intrT   listsetrU   r   rows)r   r;   r,   r   r[   ZmincolsZmaxcolsZliteral_typesrR   ZminrowsZmaxrowsr   r   r   dataframe_schema"  s>    





z"JSONSerialization.dataframe_schema)FN)N)N)FN)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)&r   r   r   r   rG   r   floatstrr   rU   r    r'   r(   r   r   r   rF   rH   r   r   rK   r\   r_   r`   rc   re   rj   ro   rl   rt   rv   rw   rx   ry   r   r   r   r   r   r   r   r   r!   =   sv   

	





r!   )	r   r&   r5   	Exceptionr   r	   r   r   r!   r   r   r   r   <module>   s   (