
    MfZ3                     J   d dl Z d dlmZ ddlmZ ddlmZmZ  G d d          Z ed          Z	 ed	          Z
 ed
          Z G d d          Z G d de          Z G d de          Z G d de          Z G d d          Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    N)	Component   )validate_callback)flatten_groupingmake_grouping_by_indexc                   &    e Zd Zd Zd Zd Zd ZdS )	_Wildcardc                     || _         d S N_name)selfnames     P/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/dash/dependencies.py__init__z_Wildcard.__init__	   s    


    c                     | j         S r   r   r   s    r   __str__z_Wildcard.__str__   s
    zr   c                     d|  dS )N<> r   s    r   __repr__z_Wildcard.__repr__   s    4{{{r   c                     d| j          dS )Nz["z"]r   r   s    r   to_jsonz_Wildcard.to_json   s     #DJ""""r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r	   r	      sP              # # # # #r   r	   MATCHALL
ALLSMALLERc                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )DashDependencyc                     t          |t                    r|                                | _        n|| _        || _        d| _        d S )NF)
isinstancer   _set_random_idcomponent_idcomponent_propertyallow_duplicate)r   r(   r)   s      r   r   zDashDependency.__init__   sI    lI.. 	- , ; ; = =D ,D"4$r   c                 >    |                                   d| j         S )N.component_id_strr)   r   s    r   r   zDashDependency.__str__(   s%    ''))EED,CEEEr   c                 (    d| j         j         d|  dS )Nr   z `z`>)	__class__r   r   s    r   r   zDashDependency.__repr__+   s     64>*66d6666r   c                     | j         d }d t          t                    r5dd                    fdt	                    D                       z   dz   S S )Nc                 0    t          j        | dd          S )NT),:)	sort_keys
separators)jsondumps)vs    r   _dumpz.DashDependency.component_id_str.<locals>._dump1   s    :a4JGGGGr   c                     t          |d          r|                                nt          j        |          }t          j        |            d| S )Nr   r4   )hasattrr   r7   r8   )kr9   vstrs      r   _jsonz.DashDependency.component_id_str.<locals>._json4   sF    ")!Y"7"7J199;;;TZ]]Djmm,,d,,,r   {r3   c              3   <   K   | ]} ||                   V  d S r   r   ).0r=   r?   is     r   	<genexpr>z2DashDependency.component_id_str.<locals>.<genexpr>9   s1      !D!DQ%%1Q4..!D!D!D!D!D!Dr   })r(   r&   dictjoinsorted)r   r:   r?   rC   s     @@r   r.   zDashDependency.component_id_str.   s    	H 	H 	H	- 	- 	- a 	K!D!D!D!D!D&))!D!D!DDDDsJJr   c                 :    |                                  | j        dS )N)idpropertyr-   r   s    r   to_dictzDashDependency.to_dict=   s    ++--4;RSSSr   c                 v    t          |t                    o$| j        |j        k    o|                     |          S )z
        We use "==" to denote two deps that refer to the same prop on
        the same component. In the case of wildcard deps, this means
        the same prop on *at least one* of the same components.
        )r&   r$   r)   _id_matches)r   others     r   __eq__zDashDependency.__eq__@   s?     un-- ('5+CC(  ''	
r   c                 0   | j         }|j         }t          |t                    }t          |t                    }||k    rdS |rt          |                                          t          |                                          k    rdS |                                D ]r\  }}||         }||k    rt          |t                    }	t          |t                    }
|	s|
r.|	r|
sG|t          u s	|t          u rZ|t          u s	|t          u r dS p dS dS ||k    S )NFT)	r(   r&   rF   setkeysitemsr	   r!   r    )r   rO   my_idother_id	self_dict
other_dictr=   r9   other_vv_wild
other_wilds              r   rN   zDashDependency._id_matchesL   s5   !%ud++	$//

""5 	5::<<  C$8$888u ! !1"1+<<#Ay11';;
 !Z !" !z ! Cxx7c>> EzzW%5%5$uu &6 !554   r   c                 :    t          t          |                     S r   )hashstrr   s    r   __hash__zDashDependency.__hash__l   s    CIIr   c                     t          | j        t                    r4| j                                        D ]}t          |t                    r dS dS )zS
        Return true if id contains a wildcard (MATCH, ALL, or ALLSMALLER)
        TF)r&   r(   rF   valuesr	   )r   r9   s     r   has_wildcardzDashDependency.has_wildcardo   sZ     d'.. 	 &--//    a++  44 ur   N)r   r   r   r   r   r   r.   rL   rP   rN   r_   rb   r   r   r   r$   r$      s        % % %F F F7 7 7  T T T

 

 

! ! !@      r   r$   c                   ,     e Zd ZdZeefZd fd	Z xZS )OutputzOutput of a callback.Fc                 Z    t                                          ||           || _        d S r   )superr   r*   )r   r(   r)   r*   r0   s       r   r   zOutput.__init__   s,    '9:::.r   )F)	r   r   r   __doc__r    r!   allowed_wildcardsr   __classcell__)r0   s   @r   rd   rd   z   sM        / / / / / / / / / /r   rd   c                       e Zd ZdZeeefZdS )Inputz8Input of callback: trigger an update when it is updated.Nr   r   r   rg   r    r!   r"   rh   r   r   r   rk   rk      s#        BBZ0r   rk   c                       e Zd ZdZeeefZdS )StatezAUse the value of a State in a callback but don't trigger updates.Nrl   r   r   r   rn   rn      s#        KKZ0r   rn   c                       e Zd ZddZd ZdS )ClientsideFunctionNc                     |                     d          rt          d          |dv rt          d| d          || _        || _        d S )N_dashprivate_z-Namespaces cannot start with '_dashprivate_'.)PreventUpdate	no_update"z." is a forbidden namespace in dash_clientside.)
startswith
ValueError	namespacefunction_name)r   rx   ry   s      r   r   zClientsideFunction.__init__   sk    00 	NLMMM666MIMMM   #*r   c                 (    d| j          d| j         dS )NzClientsideFunction(z, ))rx   ry   r   s    r   r   zClientsideFunction.__repr__   s     LT^LLt7ILLLLr   )NN)r   r   r   r   r   r   r   r   rp   rp      s<        + + + +M M M M Mr   rp   c                    d|v rn|d         }t          |t          t          f          rt          |          }t          |          D ])}t          |t                    st          d|           *|S g }| rZt          | d                   }t          d |D                       r)|                    |                     d                     nn| Z|S )NoutputzGInvalid value provided where an Output dependency object was expected: r   c              3   @   K   | ]}t          |t                    V  d S r   )r&   rd   rB   ds     r   rD   z7extract_grouped_output_callback_args.<locals>.<genexpr>   s,      88z!V$$888888r   )	r&   listtupler   rd   rw   allappendpop)argskwargs
parametersdep	next_depss        r   $extract_grouped_output_callback_argsr      s	   6H%
j4-00 	*j))J $J// 	 	Cc6**  2,/2 2   J
 $T!W--	88i88888 	dhhqkk****   r   c                 b   | d         }t          |t                    r|g}|                     dd           }t          |t                    r|g}t          |t                    rB|r<t          |t                    st	          d          |}|                    |           n|}|S t          |t          t          f          rPt          |          }|r=t          |t          t          f          st	          d          |t          |          z  }|S t	          dt          |                     )NinputsstatezThe input argument to app.callback was a dict, but the state argument was not.
input and state arguments must have the same typezThe input argument to app.callback was a list, but the state argument was not.
input and state arguments must have the same typez]The input argument to app.callback may be a dict, list, or tuple,
but received value of type )	r&   r$   getrF   rw   updater   r   type)r   input_parametersstate_parametersr   s       r   5extract_grouped_input_state_callback_args_from_kwargsr      sm   h'"N33 .,-zz'400"N33 .,-"D))  	*.55  H   *J.////)J"T5M22 *++
 	1.u>>  H   $/000J
	?&*+;&<&<	? 	?  r   c                     g }| rZt          | d                   }t          d |D                       r)|                    |                     d                     nn| Zt	          |          dk    r|d         S |S )Nr   c              3   N   K   | ] }t          |t          t          f          V  !d S r   )r&   rk   rn   r   s     r   rD   zFextract_grouped_input_state_callback_args_from_args.<locals>.<genexpr>   s0      @@z!eU^,,@@@@@@r   r   )r   r   r   r   len)r   r   r   s      r   3extract_grouped_input_state_callback_args_from_argsr      s    J
 $T!W--	@@i@@@@@ 	dhhqkk****   :!!} r   c                 l    d|v rt          |          S d|v rt          d          t          |           S )Nr   r   zQThe state keyword argument may not be provided without the input keyword argument)r   rw   r   )r   r   s     r   )extract_grouped_input_state_callback_argsr      sM    6DVLLL&)
 
 	

 ?tDDDr   c                 H   t          |           }d |D             }d |D             }t          |          }d}d}g }|D ]O}t          |t                    r|                    |           |dz  }2|                    ||z              |dz  }Pt          | |          }	|||	fS )Nc                 <    g | ]}t          |t                    |S r   )r&   rk   rB   r   s     r   
<listcomp>z8compute_input_state_grouping_indices.<locals>.<listcomp>  s'    FFF3z#u/E/EF3FFFr   c                 <    g | ]}t          |t                    |S r   )r&   rn   r   s     r   r   z8compute_input_state_grouping_indices.<locals>.<listcomp>  s'    EEE#je.D.DE#EEEr   r   r   )r   r   r&   rk   r   r   )
input_state_grouping	flat_depsflat_inputs
flat_statetotal_inputsinput_countstate_count	flat_indsr   grouping_indss
             r   $compute_input_state_grouping_indicesr     s     !566I GF)FFFKEEEEEJ {##LKKI  c5!! 	[)))1KK\K78881KK ++?KKM
M11r   c                    |                     dd          }|/| r-t          | d         t                    r| dd         | d         }} g }| D ]&}|t          |t          t          f          r|n|gz  }'t          ||          }t          |          }t          |t          t          f          rWt          |          dk    rD|                     d| r| d         nd          }t          |t          t          f          s|d         }t          ||          }t          |          \  }	}
}t          t          t          f}t          ||	|
||           ||	|
||fS )*Split args into outputs, inputs and statesprevent_initial_callNr   r}   r   )r   r&   boolr   r   r   r   r   r   r   rk   rd   rn   r   )r   r   r   	flat_argsargoutputsflat_outputsout0inputs_stater   r   input_state_indicestypess                r   handle_grouped_callback_argsr   (  sk   !::&<dCC##DHd1K1K#%)#2#YR" I F FJsT5M::ESSE		29fEEG#G,,L'D%=)) !c'lla.?.?zz(t$=DGG>>$u.. 	! ajG<YOOL3W4 40K0 65 ElKYNNNK-@BVVVr   c                 &   |                     |g           }|r t          |t          t          f          s|gS nX| rVt          | d         |          r@|                    |                     d                     | rt          | d         |          @|S )z3Extract arguments for callback from a name and typer   )r   r&   r   r   r   r   )r   r   r   type_r   s        r   extract_callback_argsr   J  s    D"%%J +*tUm44 	  <		   	+z$q'511 	+dhhqkk***  	+z$q'511 	+r   c                 |   |                     dd          }|/| r-t          | d         t                    r| dd         | d         }} g }| D ]&}|t          |t          t          f          r|n|gz  }'t          ||dt                    }|}t          |          dk    rD|                     d| r| d         nd          }t          |t          t          f          s|d         }t          ||dt                    }t          ||dt                    }	t          t          t          f}
t          |||	||
           |||	|fS )	r   r   Nr   r}   r   r   r   r   )r   r&   r   r   r   r   rd   r   rk   rn   r   )r   r   r   r   r   r   validate_outputsr   r   statesr   s              r   handle_callback_argsr   Y  sL   !::&<dCC##DHd1K1K#%)#2#YR" I F FJsT5M::ESSE		#IvxHHG
7||qzz(t$=DGG>>$u.. 	! ajG"9fhFFF"9fguEEF65 E&	5IIIFF$888r   )r7   dash.development.base_componentr   	_validater   	_groupingr   r   r	   r    r!   r"   r$   rd   rk   rn   rp   r   r   r   r   r   r   r   r   r   r   r   <module>r      s
    5 5 5 5 5 5 ( ( ( ( ( ( ? ? ? ? ? ? ? ?# # # # # # # #  		'iY|$$
Z Z Z Z Z Z Z Zz/ / / / /^ / / /1 1 1 1 1N 1 1 11 1 1 1 1N 1 1 1M M M M M M M M$  6- - -`  $E E E2 2 26W W WD  9 9 9 9 9r   