
    +j1              
           S SK JrJrJrJr  SSKrSSKJr  SSKJ	r	J
r
  SS.S\S\S	\S
\
\	   4S jjr " S S5      r " S S5      rS rS\4S jrS rS\S
\4S jr " S S\5      rSS jrS rS rg)   )ComfyAPIBaseComfyAPIWithVersionregister_versionsget_all_versions    N)asdict)CallableOptional)baseclsnamer   returnc                B   Uc,  [        U S5      (       d  [        S5      eU R                  5       n[        X!S5      nUc  gUR                  nU R                  5        H@  nXRL a    gXR                  ;   d  M  [        XQ5      R                  nXdLd  M5  [        X5      s  $    g)zReturn the *callable* override of `name` visible on `cls`, or None if every
implementation up to (and including) `base` is the placeholder defined on `base`.

If base is not provided, it will assume cls has a GET_BASE_CLASS
NGET_BASE_CLASSz[base is required if cls does not have a GET_BASE_CLASS; is this a valid ComfyNode subclass?)hasattr
ValueErrorr   getattr__func__mro__dict__)r   r   r   	base_attr	base_funccfuncs          ;/home/wildlama/comfy/ComfyUI/comfy_api/internal/__init__.pyfirst_real_overrider      s     |s,--z{{!!#D)I""IWWY9
 	 ::1#,,D$s))      c                   (    \ rS rSrSr\S 5       rSrg)_ComfyNodeInternal&   zClass that all V3-based APIs inherit from for ComfyNode.

This is intended to only be referenced within execution.py, as it has to handle all V3 APIs going forward.c                     g N )r   s    r   GET_NODE_INFO_V1#_ComfyNodeInternal.GET_NODE_INFO_V1*   s    r   r#   N)__name__
__module____qualname____firstlineno____doc__classmethodr$   __static_attributes__r#   r   r   r   r   &   s    r  r   r   c                       \ rS rSrSrSrg)_NodeOutputInternal/   zClass that all V3-based APIs inherit from for NodeOutput.

This is intended to only be referenced within execution.py, as it has to handle all V3 APIs going forward.r#   N)r&   r'   r(   r)   r*   r,   r#   r   r   r.   r.   /   s    r r   r.   c                 *    [        [        U 5      5      $ )z8Return dict of dataclass object with pruned None values.)
prune_dictr   )dataclass_objs    r   as_pruned_dictr3   6   s    f]+,,r   dc                 b    U R                  5        VVs0 s H  u  pUc  M
  X_M     snn$ s  snnf r"   )items)r4   kvs      r   r1   r1   :   s(    GGI7ISQDADI777s   	++c                 "    [        U [        5      $ )zH
Returns True if is a class type.
Returns False if is a class instance.
)
isinstancetype)objs    r   is_classr=   >   s    
 c4  r   c                     U c  gU R                   R                  5        VVs0 s H  u  pUS;  d  M  X_M     nnn[        U R                  U 4U5      nU R                  Ul        U R
                  Ul        U$ s  snnf )z"
Copy a class and its attributes.
N)r   __weakref__r'   r*   )r   r6   r;   r&   r'   r*   )r   r7   r8   cls_dictnew_clss        r   
copy_classrB   F   s     { \\//1
1TQLL AD1  

 	G GkkGON
s
   A7A7c                        \ rS rSrS rS rSrg)classproperty\   c                     Xl         g r"   f)selfrH   s     r   __init__classproperty.__init__]   s    r   c                 $    U R                  U5      $ r"   rG   )rI   r<   owners      r   __get__classproperty.__get___   s    vve}r   rG   N)r&   r'   r(   r)   rJ   rN   r,   r#   r   r   rD   rD   \   s    r   rD   c                     U=(       d    U R                    S3nU 4U R                  -   n[        X[        U R                  5      5      $ )z?
Shallow clone a class while preserving super() functionality.
Clone)r&   	__bases__r;   dictr   )r   new_name	new_basess      r   shallow_clone_classrV   d   s?     1cll^51H&IT#,,%788r   c                     S n " S S[        U 5      5      n[        U R                  5      nXS'   U" U R                  U R                  U5      $ )zB
Lock a class so that its top-levelattributes cannot be modified.
c                 J    [        SU S[        U 5      R                   35      e)NzCannot set attribute 'z' on immutable instance of )AttributeErrorr;   r&   )rI   r   values      r   locked_instance_setattr+lock_class.<locals>.locked_instance_setattrs   s+    $TF*Ed4jFYFYEZ[
 	
r   c                       \ rS rSrS rSrg)lock_class.<locals>.LockedMetax   c                 :    [        SU SU R                   S35      e)NzCannot modify class attribute 'z' on locked class '')rY   r&   )cls_r   rZ   s      r   __setattr__*lock_class.<locals>.LockedMeta.__setattr__y   s'     1$7J4==/YZ[ r   r#   N)r&   r'   r(   r)   rc   r,   r#   r   r   
LockedMetar^   x   s    	r   re   rc   )r;   rS   r   r&   rR   )r   r[   re   locked_dicts       r   
lock_classrg   n   sF    


T#Y  s||$K!8cllCMM;??r   c                    ^^ [        U5      m[        X5      R                  m[        R                  " T5      (       a	  UU4S jnU$ UU4S jnU$ )z
Returns a function that, when called with **inputs, will execute:
getattr(type_obj, func).__func__(lock_class(class_clone), **inputs)

Supports both synchronous and asynchronous methods.
c                  2   >#    T" T40 U D6I S h  vN $  N7fr"   r#   inputslocked_classmethods    r   wrapped_async_func3make_locked_method_func.<locals>.wrapped_async_func   s     77777s   c                     > T" T40 U D6$ r"   r#   rj   s    r   wrapped_func-make_locked_method_func.<locals>.wrapped_func   s    ,1&11r   )rg   r   r   asyncioiscoroutinefunction)type_objr   class_clonern   rq   rl   rm   s        @@r   make_locked_method_funcrw      sH     k*LX$--F ""6**	8!!	2r   r"   )api_registryr   r   r   r   rs   dataclassesr   typingr	   r
   r;   strr   r   r.   r3   rS   r1   r=   rB   objectrD   rV   rg   rw   r#   r   r   <module>r}      s       % =A T  t XhEW 0  -8$ 8!D T ,F 9@,r   