
    
d.                        d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
mZmZmZ dZddZd Zd	 Zd
 Zd ZeZd Zd Zd Zd ZddZd dZedk    r G d de          Z e eej                              e eej                               e edd                      e ed                      e edd                      e ed                      e ed                      e ed                      e ed                      e ee!                      e ee!                     dS dS )!z,Utilities and wrappers around inspect module    )print_functionN)is_text_stringbuiltinsget_meth_funcget_meth_class_instget_meth_classget_func_defaultsto_text_stringPY2z[^\'\"a-zA-Z0-9_.]Fc                 l   d}dD ]E\  }}|                      |          r+|                     |          }|r| |d         }| d|         } Ft          j        t          |           }d}	 |t          j        t          |          r0|                                }|t          j        t          |          0|                     d          r
|dd         }|                    d          rdS |r.|| |                     |          t          |          z            z  }||z  }|r|S dS # t          $ r Y dS w xY w)z+Return the last valid object name in string )z[]()N.)
endswithrfindresplitSYMBOLSmatchpop
startswithlen
IndexError)txtlasttxt_end	startcharendcharpostokenstokens           ?lib/python3.11/site-packages/spyder_kernels/utils/dochelpers.pygetobjr$      sd   G*    	7<<   	 ))I&&C  cdd)$3$iXgs##FEmrx77mJJLLE mrx77m>># 	#2#JEC   	4 	:S#))E**SZZ799E 	L	 	   tts   (B D% *8D% %
D32D3c                 4    d t          |           D             S )z
    For standard objects, will simply return dir(obj)
    In special cases (e.g. WrapITK package), will return only string elements
    of result returned by dir(obj)
    c                 0    g | ]}t          |          |S  )r   ).0items     r#   
<listcomp>zgetobjdir.<locals>.<listcomp><   s%    >>>T)=)=>D>>>    )dirobjs    r#   	getobjdirr/   6   s     ?>SXX>>>>r+   c                    t          j        |           pt          j        |           pd}	 t          |          }n#  Y nxY wddd|d}t	          |           r+	 | j        }n# t          $ r
 ||d<   |cY S w xY wt          j        |           r[t          |           }t          |            dt          |           j
        j        z  |d<   nd|j        z  |d<   t          |           } n#t          | d          rd	| j        z  |d<   nd
|d<   | j        |d<   t          j        |           rt          r7t          j        |           \  }}}}t          j        ||||d           |d<   n&t          j        |           }	t'          |	          |d<   |dk    r|dz   |d<   |d         dd         |d<   nt)          |d                   }
|
r|
|d<   |d         |d         z   }|d                             d          }|d                                         }||k    r2|d                             |dd                                          |d<   nd|d<   |d         }
|
                    dd                              dd          |d<   |S )ac  
    Return text documentation from an object. This comes in a form of
    dictionary with four keys:

    name:
      The name of the inspected object
    argspec:
      It's argspec
    note:
      A phrase describing the type of object (function or method) we are
      inspecting, and the module it belongs to.
    docstring:
      It's docstring
    r   )nameargspecnote	docstringr4   NzMethod of %s instancer3   zUnbound %s method
__module__zFunction of %s moduleFunctionr1   c                 &    dt          |           z   S )N=)repr)os    r#   <lambda>zgetdoc.<locals>.<lambda>y   s    T!WW r+   )formatvaluer2   z<lambda>z lambda    r   

r   z(...)z(self)r   z(self, ()inspectgetdocgetcommentsr
   callable__name__AttributeErrorismethodr   r   	__class__r   hasattrr5   
isfunctionr   
getargspecformatargspec	signaturestrgetargspecfromtextr   stripreplacelstrip)r.   r4   docr1   imclassargsvarargsvarkwdefaultssigr2   rL   docstring_blocksfirst_blocks                 r#   rA   rA   ?   s     s##Ew':3'?'?E2I"9--		 !# #C
 }} 7Q	<DD 	 	 	(CJJJ	 C   	%$S))G"3''35 3C 8 8 B KLF 2G4DDF$$CCS,'' 	%1CNBCKK$CKlFc""  	) *181CC1H1H.guh!(!6'5( 4 4"6 "6 "6I ',,!$SIz!!"Z/F!$Y"!5I([)9::G )!(I  K#i.8	#&{#3#9#9&#A#A .q17799)++'*;'7'?'?5>A(G (GGMvxx $ ")I i. 488@@CPPIJs   < A A# #A76A7c                 *   	 	 t          t          j        |                     }nV# t          $ rI t	          | d          r't          t          j        | j                            }nt          |           }Y nw xY w|S # t          t          f$ r Y dS w xY w)z Wrapper around inspect.getsourcerG   N)r
   r@   	getsource	TypeErrorrH   rG   rA   IOError)r.   srcs     r#   r\   r\      s    	" !23!7!788CC 	" 	" 	"sK(( "$W%6s}%E%EFF Skk	" 
w   s-   !% A= AA85A= 7A88A= =BBc                    t          | t                    r|                     dd          } |dz   }|dz   }d}| sd} t          j        |dz   |z   |           }d t          j        ||z  |           D             }||z   }|r|d         S dS )	zGet object signatures from text (object documentation)
    Return a list containing a single string in most cases
    Example of multiple signatures: PyQt5 objectsr4   r   z!\([^\)].+?(?<=[\w\]\}\'"])\)(?!,)z\([^\)]+(?<=[\w\]\}\'"])\)(?!,)z((%s\([^\)]+(\),\n.+)+(?<=[\w\]\}\'"])\))|c                     g | ]
}|d          S )r   r'   )r(   gs     r#   r*   z(getsignaturefromtext.<locals>.<listcomp>   s    SSSqadSSSr+   r   )
isinstancedictgetr   findall)textobjname
oneline_remultiline_remultiline_end_parenleft_resigs_1sigs_2all_sigss           r#   getsignaturefromtextrp      s     $ )xxR((??J??L!L Z
S(<7>>FSSBJ'AG'KTRRSSSFH  {rr+   c                     |                      d          }|d                                         }t          |d          S )z
    Try to get the formatted argspec of a callable from the first block of its
    docstring
    
    This will return something like
    '(foo, bar, k=1)'
    r>   r   r   )r   rO   rp   )rh   blocksrZ   s      r#   rN   rN      s8     ZZF)//##KR000r+   c                     t          | |          }|r5||                    d          dz   d         }|                    d          S dS )z.Get arguments from text (object documentation)r?   r=   r   ,N)rp   findr   )rh   ri   rL   argtxts       r#   getargsfromtextrw      sU    $T733I !9>>#..q034||C   ! !r+   c                 H    | j         t          | j         | j                  S dS )zGet arguments from object docN)__doc__rw   rD   r-   s    r#   getargsfromdocrz      s&    
{s{CL999 r+   c                    t          j        |           st          j        |           r| }n[t          j        |           rt	          |           }n7t          j        |           r!t          | d          rt          | d          }ng S t          |d          s"t          |          }||S t          |           S t          j	        |j
                  \  }}}|st          |           S t          |          D ]5\  }}t          |t                    rdd                    |          z  ||<   6t          |          }|Ut          |          D ]E\  }}||t!          |          z   t!          |          z
  xx         dt#          |          z   z  cc<   Ft          j        |           st          j        |           rt!          |          dk    rdS d|v r|                    d           |S )	z:Get the names and default values of a function's arguments__init____code__Nz(%s), r8   r=   self)r@   rI   	isbuiltinrF   r   isclassrH   getattrrz   getargsr}   	enumeraterd   listjoinr	   r   r9   remove)	r.   func_objrT   _i_argargrW   indexdefaults	            r#   r   r      s   # '"3C"8"8 		#		  %%			 '#z":": 3
++	8Z(( 'h''K "#&&&!233JD!Q #c"""  oo 2 2
sc4   	2 499S>>1DK **H'11 	K 	KNE7T"S]]2333sT']]7JJ3333s w/44 t99>>4 ~~FKr+   Tc                    t          |           }|rd}d}t          |          D ]p\  }}|dg}|dxx         |z  cc<   |t          |          dz
  k     r@|dxx         |z  cc<   t          |d                   dk    s|r|                    d           qt	          j        |           st	          j        |           r4t          |          dk    rdS d|z   |v r|                    d|z              |S dS )z
    Get the names and default values of a function's arguments
    Return list with separators (', ') formatted for calltips
    r~   Nr   r   r=       r   )r   r   r   appendr@   r   rF   r   )r.   one_arg_per_linerT   septextlistr   r   s          r#   	getargtxtr     s&   
 3<<D #D// 	( 	(JE34RLLLCLLLs4yy{""#x|$$**.>*OOB'''?3 	,7#3C#8#8 	,8}}!!tczX%%s
+++! r+   c                    |t                      }|                     d          }|                    d          }t          |          dk    rdS |t          j        vr^||vrZ|rV	 t          |t                      |          }|t                      vr|t                      |<   |||<   n# t          $ r Y dS w xY wdS |D ]}	 t          t          ||          |           }n# t          t          t          f$ r Y  dS w xY w|rC|r>	 t          |dz   |z   t                      |           n# t          t          f$ r Y  dS w xY w dS |d|z   z  }dS )z_Return True if object is defined in namespace
    If namespace is None --> namespace = locals()Nr   r   FT)localsr   r   r   r   __dict__
__import__globals	ExceptionrH   evalrE   SyntaxErrorr]   ImportError)r.   force_import	namespace	attr_listbasemoduleattrattr_not_founds           r#   	isdefinedr   *  s    HH			#I==D
4yyA~~u8$$$Y)>)> 		#D'))Y??wyy((&,GIIdO"(	$   uu 5  	!(dI)>)>!E!EENNY7 	 	 	555	 	 !tCx}giiCCCC#[1 ! ! ! 555! uuD4s7   %AB) )
B76B7C!!C=<C=#D))D?>D?__main__c                       e Zd ZddZdS )Test   c                     d S )Nr'   )r   xys      r#   methodzTest.methodQ  s    Dr+   N)r   )rD   r5   __qualname__r   r'   r+   r#   r   r   P  s(        	 	 	 	 	 	r+   r   z
numpy.take)r   r   z.keysr   zglobals().keysz+scipy.signal.z4.)F)T)FN)"ry   
__future__r   r@   r   spyder_kernels.py3compatr   r   r   r   r   r	   r
   r   r   r$   r/   rA   r\   rp   getsignaturesfromtextrN   rw   rz   r   r   r   rD   objectr   printr|   r   sortedr'   r+   r#   <module>r      s   3 2 % % % % % %  				N N N N N N N N N N N N N N N N N N N N
     :? ? ?[ [ [|     2 - 
1 
1 
1! ! !: : :* * *Z   2" " " "J z    v    
E))DM
"
"###	E))DK
 
 !!!	E))Lt
4
4
4555	E))L
!
!"""	E))G$
/
/
/000	E&&

	E&&!
"
"###	E&&!
"
"###	E&&,,	E&&..	E))F

 r+   