
    h!                     J   S r S rS rS r " S S\5      r\" 5       rS rS r " S S	5      r	\	" 5       r
S
SKrS
SKrS
SKJr  S rS rS rS rS rS rS rS rS r\S:X  a@  \" 5         \" 5         \" 5         \" 5         \" 5         \" 5         \" 5         \" 5         \" 5         gg)z
check that dill.source performs as expected with changes to locals in 3.13.0b1
see: https://github.com/python/cpython/issues/118888
c                     U S-  $ N    xs    Q/home/james-whalen/.local/lib/python3.13/site-packages/dill/tests/test_sources.py<lambda>r	      s    ad    c                     [        U 5      U -
  $ N)fr   s    r   gr      s    1/r
   c                     S nU" U 5      U -
  $ )Nc                     U $ r   r   r   s    r   r   h.<locals>.g   s    1Hr
   r   )r   r   s     r   hr      s    	
1/r
   c                       \ rS rSrS rSrg)Foo   c                     X-  U-   $ r   r   )selfr   s     r   barFoo.bar   s    3q5Lr
   r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r
   r   r   r      s    r
   r   c                 
    X-   $ r   r   )r   ys     r   addr!      s	    	
*r
   c                     U S-  $ r   r   r   s    r   r	   r	      s    1a4r
   c                       \ rS rSrSrg)Bar   r   N)r   r   r   r   r   r   r
   r   r$   r$      s    r
   r$       Nc                      [         R                  " [        5      S:X  d   e[         R                  " [        5      S:X  d   e[         R                  " [        5      S:X  d   e[         R                  " [
        5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R
                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        5      S:X  d   e[         R                  " [        5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   eg )NTF)ds
isfrommainr!   squaredr$   _bartstmquad
double_add	quadratic	isdynamicr   r
   r   test_isfrommainr2   *   s   	s	t	##	#	w	4	''	'	s	t	##	#	t		$$	$	rvv	%	''	'	rzz	"e	++	+	rvv	%	''	'	rww	5	((	(	rww	5	((	(	r}}	%	..	.	r||	$	--	-	c	e	##	#	g	%	''	'	bff		&&	&	bjj	!U	**	*	bmm	$	--	-	bll	#u	,,	,r
   c                  <   [         R                  " [        S5      (       d   e[         R                  " [        S5      (       d   e[         R                  " [        R                  S5      (       d   e[         R                  " [        R                  S5      (       d   eg )Nzf = lambda x: x**2
squared = lambda x:x**2
)r(   _matchlambdar   r*   r,   r   r
   r   test_matchlambdar6   >   sj    	2	3	33	3	"=	>	>>	>	5	6	66	6	%@	A	AA	Ar
   c                     [         R                  " [        5      u  pX   S:X  d   e[         R                  " [        R                  5      u  pX   S:X  d   e[         R                  " [        5      u  pX   S:X  d   e[         R                  " [        R                  5      u  pX   S:X  d   e[         R                  " [
        5      u  pX   S:X  d   e[         R                  " [        R
                  5      u  pX   S:X  d   e[         R                  " [        5      u  pX   S:X  d   e[         R                  " [        R                  5      u  pX   S:X  d   e[         R                  " [        R                  5      u  pX   S:X  d   e[         R                  " [        R                  5      u  pX   S:X  d   e[         R                  " [        R                  5      u  pX   S:X  d   eg )Nzdef add(x,y):
r4   zclass Bar:
zdef quad(a=1, b=1, c=0):
z    def func(*args, **kwds):
z  def dec(f):
)r(   
findsourcer!   r,   r*   r$   r+   r-   r.   r/   r0   )lineslinenos     r   test_findsourcer;   E   s   --$-%	+	++	+--'-%	+	++	+--(-%	5	55	5--

+-%	5	55	5--$-%	.	((	(--'-%	.	((	(--%-%	.	((	(--(-%	.	((	(--(-%	6	66	6--.-%	:	::	:----%	+	++	+r
   c                  >   SR                  [        R                  " [        5      S   5      S:X  d   eSR                  [        R                  " [        R                  5      S   5      S:X  d   eSR                  [        R                  " [
        5      S   5      S:X  d   eSR                  [        R                  " [        R
                  5      S   5      S:X  d   eSR                  [        R                  " [        5      S   5      S:X  d   eSR                  [        R                  " [        R                  5      S   5      S:X  d   eSR                  [        R                  " [        5      S   5      S:X  d   eSR                  [        R                  " [        R                  5      S   5      S:X  d   eSR                  [        R                  " [        R                  5      S   5      S:X  d   eSR                  [        R                  " [        R                  5      S   5      S:X  d   eSR                  [        R                  " [        R                  SS	9S   5      S
:X  d   eSR                  [        R                  " [        R                  SS9S   5      S:X  d   eSR                  [        R                  " [        R                  5      S   5      S:X  d   eSR                  [        R                  " [        R                  SS9S   5      S:X  d   eg )N r&   zdef add(x,y):
  return x+y
r4   zclass Bar:
  pass
aM  def quad(a=1, b=1, c=0):
  inverted = [False]
  def invert():
    inverted[0] = not inverted[0]
  def dec(f):
    def func(*args, **kwds):
      x = f(*args, **kwds)
      if inverted[0]: x = -x
      return a*x**2 + b*x + c
    func.__wrapped__ = f
    func.invert = invert
    func.inverted = inverted
    return func
  return dec
zu  def dec(f):
    def func(*args,**kwds):
      fx = f(*args,**kwds)
      return a*fx**2 + b*fx + c
    return func
Tlstripzkdef dec(f):
  def func(*args,**kwds):
    fx = f(*args,**kwds)
    return a*fx**2 + b*fx + c
  return func
)	enclosingzdef quad_factory(a=1,b=1,c=0):
  def dec(f):
    def func(*args,**kwds):
      fx = f(*args,**kwds)
      return a*fx**2 + b*fx + c
    return func
  return dec
zs    def func(*args, **kwds):
      x = f(*args, **kwds)
      if inverted[0]: x = -x
      return a*x**2 + b*x + c
)joinr(   getsourcelinesr!   r,   r*   r$   r+   r-   r.   r0   r/   r   r
   r   test_getsourcelinesrC   ^   s   	""3'*	+/N	NN	N	""266*1-	.2Q	QQ	Q	""7+A.	/3N	NN	N	""2::.q1	26Q	QQ	Q	""3'*	+/E	EE	E	""266*1-	.2H	HH	H	""4(+	,0F	FF	F	""277+A.	/3I	II	I	""277+A.	/  4Q  
Q  Q  
Q	""2<<03	4  9u  
u  u  
u	""2<<=a@	A  Fx  
x  x  
x	""2<<4@C	D  Is  
s  s  
s	""2==1!4	5  :s  
s  s  
s	""2==DA!D	E  Jg  
g  g  
gr
   c            	         [         R                  " SR                  [         R                  " [        R
                  5      S   5      5      SR                  [         R                  " [        R
                  SS9S   5      :X  d   e[         R                  " SR                  [         R                  " [        R
                  SS9S   5      S5      SR                  [         R                  " [        R
                  5      S   5      :X  d   eg )Nr=   r&   Tr>   r   )r(   outdentrA   rB   r-   r0   indentr   r
   r   test_indentrG   o   s    	BGGB--bll;A>?	@BGGBL]L]^`^j^jswLxyzL{D|	||	|	2772,,R\\$GJKQ	OSUSZSZ[][l[lmomymy[z{|[}S~	~~	~r
   c                     0 n [        [        R                  " [        SS90 U 5        [        [        R                  " [        R                  SS90 U 5        U S   " SS5      U S   " SS5      :X  d   e[        [        R                  " [
        SS90 U 5        [        [        R                  " [        R
                  SS90 U 5        U S   " S5      U S   " S5      :X  d   e[        R                  " [        5      " SS5      [        R                  " [        R                  5      " SS5      :X  d   e[        R                  " [
        5      " S5      [        R                  " [        R
                  5      " S5      :X  d   eg )Nrawaliasmod   r      )execr(   
dumpsourcer!   r,   r*   _wraplocals    r   test_dumpsourcerT   t   s   
%r}}S&E2r}}RVV5)2u5	ua	eEl1Q/	//	/r}}WE*B6r}}RZZu-r59	uaE%LO	++	+	#q	rxx/!4	44	4	'	1	"**!5a!8	88	8r
   c                  0   [         R                  " [        5      [         R                  " [        SS9R	                  S5      :X  d   e[         R                  " [
        R                  5      [         R                  " [
        R                  SS9R	                  S5      :X  d   e[         R                  " [        5      [         R                  " [        SS9R	                  S5      :X  d   e[         R                  " [
        R                  5      [         R                  " [
        R                  SS9R	                  S5      :X  d   e[         R                  " [        5      [         R                  " [        SS9R	                  S5      :X  d   e[         R                  " [
        R                  5      [         R                  " [
        R                  SS9R	                  S5      :X  d   e[         R                  " [        R                  5      [         R                  " [        R                  SS9R	                  S5      :X  d   e[         R                  " [        5      S:X  d   e[         R                  " [
        R                  5      S:X  d   e[         R                  " [        5      S:X  d   e[         R                  " [
        R                  5      S:X  d   e[         R                  " [        5      S:X  d   e[         R                  " [
        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S:X  d   e[         R                  " [        R                  5      S	:X  d   eg )
NT)fqn.r!   r*   r$   r.   funcdec)r(   
_namespacer!   getnamesplitr,   r*   r$   r-   r.   r/   r0   r   r
   r   	test_namer]      sD   	s	rzz#48>>sC	CC	C	rvv	"**RVV">"D"DS"I	II	I	w	2::g4#@#F#Fs#K	KK	K	rzz	"bjj&F&L&LS&Q	QQ	Q	s	rzz#48>>sC	CC	C	rvv	"**RVV">"D"DS"I	II	I	rww	2::bgg4#@#F#Fs#K	KK	K 
CE	!!	!	BFF	u	$$	$	G			))	)	BJJ	9	,,	,	CE	!!	!	BFF	u	$$	$	BGG		&&	&	BMM	"f	,,	,	BLL	!U	**	*r
   c                     0 n [        [        R                  " [        SS90 U 5        [        [        R                  " [        R                  SS90 U 5        U S   " SS5      U S   " SS5      :X  d   e[        [        R                  " [
        SS90 U 5        [        [        R                  " [        R
                  SS90 U 5        U S   " S5      U S   " S5      :X  d   e[        [        R                  " [        SS90 U 5        [        [        R                  " [        R                  SS90 U 5        [        R                  " U S   5      [        R                  " U S   5      :X  d   e[        [        R                  " [        R                  SS90 U 5        U S   " 5       " [        5      " / SQ5      [        R                  " 5       " [        5      " / SQ5      :X  d   eg )NrI   rJ   rL   rM   r   rN   )rM   r   rN   )rO   r(   	getimportr!   r,   r*   r$   r[   r-   r.   sumrR   s    r   test_getimportra      sO   
%r||Cu%r51r||BFF%("e4	ua	eEl1Q/	//	/r||G5)2u5r||BJJe,b%8	uaE%LO	++	+r||Cu%r51r||BFF%("e4	E%L	!RZZe%=	==	=r||BGG5)2u5	u	W	%3)@	@@	@r
   c                  (   [         R                  " [        SS9[         R                  " [        5      :X  d   e[         R                  " [        5      [         R                  " [        5      :X  d   e[         R                  " [
        SS9[         R                  " [
        5      :X  d   e[         R                  " [
        5      [         R                  " [
        5      :X  d   e[         R                  " [        SS9[         R                  " [        5      :X  d   e[         R                  " [        5      [         R                  " [        5      :X  d   e[         R                  " [        R                  5      [         R                  " [        R                  5      :X  d   e[         R                  " [        R                  SS9[         R                  " [        R                  5      :X  d   e[         R                  " [        R
                  5      [         R                  " [        R
                  5      :X  d   e[         R                  " [        R
                  SS9[         R                  " [        R
                  5      :X  d   e[         R                  " [        R                  5      [         R                  " [        R                  5      :X  d   e[         R                  " [        R                  SS9[         R                  " [        R                  5      :X  d   eg )NF)sourceT)r(   
importabler!   r_   	getsourcer*   r$   r,   r   r
   r   test_importablerf      s   	s5	)R\\#->	>>	>	s	r||C0	00	0	wu	-g1F	FF	F	w	2<<#8	88	8	s5	)R\\#->	>>	>	s	r||C0	00	0	rvv	",,rvv"6	66	6	rvvd	+r||BFF/C	CC	C	rzz	"bll2::&>	>>	>	rzz$	/2<<

3K	KK	K	rvv	",,rvv"6	66	6	rvvd	+r||BFF/C	CC	Cr
   __main__)__doc__r   r   r   objectr   _foor!   r*   r$   r+   test_sourcer,   test_mixinsr-   dill.sourcerc   r(   r2   r6   r;   rC   rG   rT   r]   ra   rf   r   r   r
   r   <module>rn      s   
  &  u  
u   -(B,2g"
	9+,A D z-+ r
   