
    XaJj1_                         d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 dZ e       Zd Zd Zd	 Zd
 Zd Zd Zd Zd Z G d d      Z G d d      Zeej0                  _        eej0                  _        eej0                  _        y)a  
Helper module that is used by objc_class.setattr and objc_class.__new__
to transform class attributes and process the class dictionary (for the
latter).

The C code relies on this code to do most semantic checks, and only
performs checks that are needed to avoid crashes.
    N   )_informal_protocol_for_selector)_new)objc_methodpython_methodc                    | j                  d      st        d      t        |       dkD  r| d   j                         st        d      | dd  } | sy| j	                  d      d d }|sy |d   j                  d	      r|d   dd  |d<   t        |d         d
k(  s't        |d         d
kD  r8|d   d
   j                         s"|d   d d
 j                         |d   d
d  z   |d<   t        |      S )Ninitz%selector is not a valid init selector   z!selector is a valid init selector :r   Withr   )
startswith
ValueErrorlenisuppersplitlowertuple)selectorpartss     Y/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/objc/_transform.py_selectorToKeywordsr      s    v&@AA
8}q!!4!4!6<==|HNN3$EQx6"8AB<a
58}Sq]Q.uQx{7J7J7L8BQ<%%'%(12,6a<    c                 8    t        j                  |       | _        y N)r   make_generic_new__new__)class_objects    r   setDunderNewr    /   s      00>Lr   c                 	   i }t               }t               }	|D ]M  }
t        |
t        j                  t        j                  f      r.t        dt        |
      j                          d|v rnd|v rjt        j                  j                  |d   d      }|E	 |j                  t        j                  u }|s&t        j                  dt        j                  d       t               }|j                   j#                         D ]8  }t        |t        j$                        s|j'                  |j                         : d	|d
<   t)        |||       t+        |j-                               D ]*  \  }}t/        |dt0              }|t0        us  |||||	       , t+        |j-                               D ]|  \  }}|}t3        ||||      }||ur|||<   |}t        |t        j4                        rt        |t6              rMt        |t        j4                        r|j4                  j9                         j;                  dd      }|j<                  r0||= |j>                  s|||<   ||k7  r|||<   |	j'                  |       |j>                  r||= n
||k7  r|||<   |j'                  |       t        |t        j$                        s|j                  |v r$t        j@                  |d|j                        |j                  |v rt        j@                  d|d      |||j                  <    tC        tE        |j#                         d             }tC        tE        |d             }tC        tE        |	d             }	tG        |||	|       |D ]4  }t        |tH              rd||<   |j>                  s&|||j4                  <   6 |	D ]4  }t        |tH              rd||<   |j>                  s&|||j4                  <   6 i }|j-                         D ]  \  }}t        |tJ              r|jM                  d      s(tO        |      dkD  r|d   jQ                         sJ||dk(  rd|d<   Wt        |t        j4                        sr||tS        |j4                  j9                               <    |r|tT        jV                  | <   |||	d|v xs" t        |jX                        t        d       k(  fS # t        $ r d}Y Fw xY w)z
    First step into creating a subclass for a Cocoa class:

    - Transform attributes
    - Return (instance_variablees, instanstance_methods, class_methods)
    zLprotocols list contains object that isn't an Objective-C protocol, but type __classcell__
__module__NFz>Objective-C subclass uses super(), but super is not objc.super   )category
stacklevelT__objc_python_subclass____pyobjc_class_setup__r   _z reimplements objc.ivar z
objc.ivar z+ overrides instance variable in super classc                     | j                   S r   )__name__xs    r   <lambda>z"processClassDict.<locals>.<lambda>   s    !**r   )keyc                 R    t        | t        j                        r| j                  S | S r   
isinstanceobjcr   r,   s    r   r.   z"processClassDict.<locals>.<lambda>       
1dmm(D!**K!Kr   c                 R    t        | t        j                        r| j                  S | S r   r1   r,   s    r   r.   z"processClassDict.<locals>.<lambda>   r4   r   r	   r
   r   r   c                       y)Nr   r   r   r   r   r.   z"processClassDict.<locals>.<lambda>   s    ar   )-setr2   r3   formal_protocolinformal_protocol	TypeErrortyper+   sysmodulesgetsuperAttributeErrorwarningswarnObjCSuperWarning__dict__valuesivaraddprocess_slotslistitemsgetattrNO_VALUEtransformAttributer   r   decodereplaceisClassMethodisHiddenerrorr   sortedvalidate_protocolsbytesstrr   r   r   r   r   NEW_MAPr   )
class_name
class_dict	meta_dictr   	protocolshidden_instance_methodshidden_class_methodsinstance_variablesinstance_methodsclass_methodspmodoksuper_ivarsvr/   valuesetup	old_value	new_value	canonicalsel
new_kw_mapnames                           r   processClassDictrn   5   s    uEM!d22D4J4JKL&&*1g&6&6%79   *$)Ckkooj6=?YY$**, T!22  %K""))+a#OOAJJ' , .2J)**0,?
 :++-.
U7B #z#3]C /
 :++-.
U	&sE<K	E!'JsOEeT]]+)]3eT]]+--/77SAI""sO~~%*IcN C'/4	),!!%(>>"3#%,1Jy) $$U+tyy)~~!33jjC7*B5>>BT!UVV~~,jj 'RS  27u~~.K /X !((*0DE K	
 K	
M |%5}iPc5!+/#C(\\47#CLL1	   c5!(, %\\14 .	  J!'')e$$DOOF,Ct9q=a!2=TV^!JrNE4==1CG
&u~~'<'<'>?@ * #-Z  		j	  	9$$%i8 k " s   S+ +S:9S:c                    |D ci c]*  }t        |t        j                        s|j                  |, }}|D ci c]*  }t        |t        j                        s|j                  |, }}|D ]  }d|j                         fd|j	                         ffD ]W  \  }}	|	D ]K  }|rP|j                  |d   d       }
|
t        | j                  |d   j                         j                  dd      d       }
nO|j                  |d   d       }
|
8t        | j                  |d   j                         j                  dd      d       }
|
9|d   r3t        d|j                  d|rd	nd
 d|d   j                               |d   |
j                  k7  st        d|j                  d|d   j                          d|
j                  j                         d|d   j                                Z  y c c}w c c}w )NFTr   r   r)   requiredz*class does not fully implemented protocol z: no implementation for classinstancez method typestrz,class does not correctly implement protocol z: the signature for method z is z instead of )r2   r3   r   instanceMethodsclassMethodsr>   rK   pyobjc_classMethodsrN   rO   pyobjc_instanceMethodsr:   r+   	signature)r   r_   r`   r[   rk   instance_map	class_mapprotois_class_methodmethod_listfounds              r   rT   rT      s$   %5%5cC9Wc%5   &3%2cjdmm6Tc]   E))+,5%%'(-
(O[ #"%MM#j/4@E} '(<<
O224<<S#F ! ),,S_dCE} '(??
O224<<S#F ! =:'HHZ [5*9wzJ(":557:<  y>U__4#Fu~~FX Y447
O4J4J4L3MT ??1136l3y>CXCXCZB]_ ; #	-
 s   G4G4G9G9c                    | j                  dt              }|t        u r6|j                  st        j                  dt        j
                  d      |d<   nt        |t              rL|| v rt        j                  d|d| |         t        j                  |t        j
                  d      | |<   nR|D ]M  }|| v rt        j                  d|d| |         t        j                  |t        j
                  d      | |<   O d| d<   y)	z6
    Process the ``__slots__`` attribute, if any.
    	__slots__rD   T)isSlotzslot z redefines r   N)	r>   rL   __hasdict__r3   rF   _C_PythonObjectr2   rV   rR   )rY   r^   r   slotsnms        r   rH   rH     s     NN;1E''-1YYD00.z* eS!
"jj5	Z=N<Q!RSS $		%1E1Ed SJu #**uRF+jn=O%PQQ!%2t/C/CD!Q
2	  !J{r   c                 \   t        |      st        |t              s|S t        |t        j                  t
        t        f      r|S t        |t        j                        rq|j                   t        | d      t        j                  |j                   |j                  |j                  |j                  |j                  |j                        S t        |      r|S t        |t              r|j                  S d}t        | t               sd}nt#        |       }d}|1t        |t        j$                        rt        j&                  ||      }nd}|dv rd}t(        }t        | t               r|t(        u r~t+        |j,                  | t(              }	|	t(        u rt+        |j.                  | t(              }	t        |	t        j                        r&||	j                  }|	j                  }|	j                  }t        |t              rE|j0                  }d}t        |t              rt        |j                        S t        |t              rJ t        |t2              r|j4                  |j4                  }|j                  "|j                  }t        j&                  ||      }|j                  |j                  }d}|t        | d      t        |j                  t              r3|j4                  t        | d      d}|j                  j0                  }n|j                  }|r	d	|v r|d	   }|At        | t               s"t7        d
t        |       j8                   d      |rt        |      S |S |j;                  d      }
|Xt=        |      }|K|j>                  D ]<  }|j                  |k(  s||j                  |k7  r%|j                  }|j                  }> |d}|5|r3|D ]'  }|r|jA                  |      }|jC                  |      }) |d   }|Xt        |tD        jF                  tD        jH                  f      rt        jJ                  |      }nd}|rt        jL                  nt        jN                  t        jL                  z   t        jP                  z   t        jL                  |
z  z   }|r|d   |d   jS                  dd      nd}i }tU        |d         D ]  \  }}|s	d|v s|d   ||<    |s|rttW        t        jX                  |            }|r||d<   |D ]9  }|t[        |      dz
  k\  rt        j\                  | d| d      ||   ||dz   <   ; dj_                  |      }	 ta        j                  |      }d}d}d}d}d}|jb                  je                         D ]  }|jf                  t`        jh                  jj                  k(  r2|dz  }|jl                  t`        jh                  jn                  usV|dz  }\|jf                  t`        jh                  jp                  k(  r|jf                  t`        jh                  jr                  k(  rd}|dz  }|jl                  t`        jh                  jn                  us|dz  } ||z
  rt        jt                  |d||z
   d      |s||
dz   k  s||z
  |
dz   kD  ro|r;t        jt                  |jw                         d|
 d|d||z
  dz
   d|dz
   d
      t        jt                  |jw                         d|
 d|d|dz
   d      d}|j{                         D ]4  }t}        |t        j~                        s||j                  |      v s2d} n t        j                  |||||      S # tx        t        t6        f$ r Y yw xY w)z
    Transform 'value' before it will be added to a class

    For callables this will convert the value to an
    'objc.selector' object where appropriate, other values
    are returned as-is.
    Nz": selector object without callable)rP   
isRequiredrQ   >      copy   mutableCopy   copyWithZone:   mutableCopyWithZone:FTzF is an objc_method instance, but cannot determine Objective-C selectorz8 is objc_method with isclass specified wraps classmethodfull_signaturezmethod name is of type z, not a string   :r   retvalr;   	argumentsr   z has invalid metadata, index z out of ranger   z has z) keyword-only arguments without a defaultz	 expects z arguments, z has between z and z positional arguments)rP   rQ   )Acallabler2   classmethodr3   native_selectorstaticmethodr;   r   r   rx   rP   r   rQ   is_generator_or_asyncr   __wrapped__rV   default_selector
objc_class_registeredMetadataForSelectorrL   rK   rw   rv   __func__r   isclassr:   r+   countr   	selectorsdescriptionForClassMethod_descriptionForInstanceMethod_typesFunctionType
MethodType_returns_value_C_ID_C_VOID_C_SELr>   	enumeraterI   splitSignaturer   rR   joininspect
parametersrE   kind	ParameterKEYWORD_ONLYdefaultemptyVAR_KEYWORDVAR_POSITIONALBadPrototypeErrorrN   r@   mro
issubclassobjc_objectpyobjc_hiddenSelectors)rm   rf   r   r[   r   selnamerx   
registeredhelper_signaturecurrentargcountinformalmethprotinforeturns_objectoverridden_rvaloverridden_argsidxasignature_partspysigpospos_defaultkwonlykwonly_defaulthas_var_posra   ishiddenclss                                 r   rM   rM     s    E?:e[#A	ED00,E	F	E4==	)>>!x'IJKK}}NNNNOO--''^^
 	
 
u	%	E=	)   GdC "4(Iz,H88wO

VV  $!1X!=,==tXNhl>>hOGgt}}-!//))I&&G%% e]+ u0011e[111%%==$mmG>>%nnG<<\7SJ??&IJ?(`a  e''5 }}( hVW  G %%..E%%E&*4/0	
 $$)$t**=*=)>nM  u%%}}T"H 37; **==G+*t/A/AW/L ! $I"00G + YD66w?99'B	 
 QIee00%2B2BCD!007N!N *TZZt||jjkk zzH$& 	  h'3 8$((6 
 !O#J{$;<Q1+,V9OC( = /"&t':':9'E"F")8OA&*Cc/2Q66"jj#h&CC5V  0?s/COC!G, +  HH_5	4!!%( !!((*Avv**777!99G$5$5$;$;;"a'N7,,8887,,;;;" q99G$5$5$;$;;1$K +" N" (()5.!8 99bc  8a<S;%6A%E ,,~~'*)H:\i}S;->-B,C5q	Qfh 
 ,,~~'*)H:\iuS1WI-BD  H!#t//0 c0099H " ==w	8 A J	2 s   0^ ^+*^+c                 0   t        | t        j                        syt        | j                  t        j                        syt        j                  |       st        j                  |       ryt        j                  |       st        j                  |       ryy)z9
    Returns true for generators and async functions
    FT)
r2   r   r   __code__CodeTyper   iscoroutineiscoroutinefunctionisgeneratorisgeneratorfunction)rf   s    r   r   r   /  sk     eU//0ennenn55!W%@%@%G			U	#w'B'B5'Ir   c                 L   | j                  d      rt        j                  | dd       r| dd } | j                  d      r| j                  d      ryd| dd v r| j                  d      sy| j	                  dd      j                         }|j                  d      rd|dd z   }|S )	zi
    Returns a byte string with the selector for 'name',
    or None if there is no default selector
    __Nr)   r   r   r      _)endswithkeyword	iskeywordr   rO   encode)rm   rf   s     r   r   r   A  s    
 }}Tw00cr;CRytt!4
d12ht}}S1LLc"))+EuQRy Lr   c                   <    e Zd ZdZdZddddddZed        Z d Zy)	r   a  
    Decorator that marks a method that should definitely
    be represented as an Objective-C selector

    This decorator can be used in two ways:

    - Without parens:

        @objc_method
        def someMethod(self): ...

    - With parens:

        @objc_method()
        def someMethod(self): ...

    In the second form a number of keyword-only arguments can
    be used:

    - selname [bytes]: Objective-C selector name for the method
    - signature [bytes]: Objective-C type encoding for the method
    - isclass [bool]: Determines if the value is a class method

    When these attributes are not provided they will be calculated
    from the context (name, callable, class to which this
    method is added)
    )r   r   rx   r   N)r   rx   r   c                    || _         | j                   :t        | j                         s%t        | j                   t              st	        d      || _        || _        || _        y )N'value' is not a callable)r   r   r2   r   r:   r   rx   r   )selfrf   r   rx   r   s        r   __init__zobjc_method.__init__r  sY     'D,,-j  +7   ;<< "r   c                 .    | j                   j                  S r   )r   r+   r   s    r   r+   zobjc_method.__name__~  s    (((r   c                 .   | j                   xt        |      dk7  rt        d      t        |      dk7  rt        d      |d   | _         t        | j                         s%t	        | j                   t
              st        d      | S  | j                   |i |S Nr   zUnexpected keyword argumentsr   zExpecting exactly 1 argumentr   r   r   r:   r   r2   r   r   argskwdss      r   __call__zobjc_method.__call__      #4yA~ >??4yA~ >??#AwDD,,-j  +7   ;<<Kt...r   r   )r+   r#   __qualname____doc__r   r   propertyr   r   r   r   r   r   S  s8    8 DI
ttT 
 ) )/r   r   c                   8    e Zd ZdZdZddZd Zd Zed        Z	y)	r   a  
    Decorator that marks a method that should definitely
    not be represented as an Objective-C selector

    This decorator can be used in two ways:

    - Without parens:

        @python_method
        def someMethod(self): ...

    - With parens:

        @python_method()
        def someMethod(self): ...

    The second form has no keyword arguments and is
    provided for compatibility with objc_method.
    )r   Nc                     || _         | j                   ?t        | j                         s)t        | j                   t              st	        |d      y y y )Nz is not a callable)r   r   r2   r   r:   )r   rf   s     r   r   zpython_method.__init__  sX     'D,,-j  +7  5)+= >??7- (r   c                 :    | j                   j                  ||      S r   )r   __get__)r   rr   owners      r   r   zpython_method.__get__  s    ''%88r   c                 .   | j                   xt        |      dk7  rt        d      t        |      dk7  rt        d      |d   | _         t        | j                         s%t	        | j                   t
              st        d      | S  | j                   |i |S r   r   r   s      r   r   zpython_method.__call__  r   r   c                 R    t        j                  dt        d       | j                  S )Nz=python_method.callable is deprecated, use __wrapped__ insteadr$   )r&   )rA   rB   DeprecationWarningr   r   s    r   r   zpython_method.callable  s'     	K	

 r   r   )
r+   r#   r   r   r   r   r   r   r   r   r   r   r   r   r     s2    ( !I@9/    r   r   )r   r3   r   r   r   rA   r<   _informal_protocolr    r   __all__objectrL   r   r    rn   rT   rH   rM   r   r   r   r   options_transformAttribute_processClassDict_setDunderNewr   r   r   <module>r      s         
 ?  + 8(?[|.b!6M`$$</ </~9  9 x $6  !1 ) r   