
    wg"                     h    d Z ddlZ G d dej                        Zedk(  r ej
                          yy)z
This test is used by `docs/source/extending/interval-example.rst`.

The "magictoken" comments are used as markers for the beginning and ending of
example code.
    Nc                       e Zd Zd Zy)IntervalExampleTestc                     !"#  G d dt               ddlm#  G fdd#j                                !ddlm} |j                        !fd       }dd	lm} |j                  !       dd
lm}  |      !#fd       }ddlm	"m
}  |       G "#fdd"j                               }ddlm}  |dd        |dd       ddlm}	  |	d      d        }
ddlm} ddlm   |#j"                  #j"                         fd       }ddlm}m ddlm  |       #fd       }ddlm}  |       #fd       }ddlm} |d        }|d        }|fd        } fd!} d"d#      } d$d%      } d&d'      } |d(       } || ||              j1                  |j2                   ||              G d) d*      } j5                  t6              5   | d" |                    d d d         d+d"      }|` j5                  t:              5   ||       d d d         j=                   ||d%              || |||             y # 1 sw Y   cxY w# 1 sw Y   >xY w),Nc                   ,    e Zd ZdZd Zd Zed        Zy)?IntervalExampleTest.test_interval_class_usage.<locals>.IntervalzG
            A half-open interval on the real number line.
            c                      || _         || _        y Nlohi)selfr   r   s      s/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/tests/doc_examples/test_interval_example.py__init__zHIntervalExampleTest.test_interval_class_usage.<locals>.Interval.__init__   s        c                 8    d| j                   | j                  fz  S )NzInterval(%f, %f)r
   r   s    r   __repr__zHIntervalExampleTest.test_interval_class_usage.<locals>.Interval.__repr__   s    )TWWdgg,>>>r   c                 4    | j                   | j                  z
  S r	   r   r   r   s    r   widthzEIntervalExampleTest.test_interval_class_usage.<locals>.Interval.width   s    ww((r   N)__name__
__module____qualname____doc__r   r   propertyr    r   r   Intervalr      s%    ? ) )r   r   r   )typesc                   "     e Zd Z fdZ xZS )CIntervalExampleTest.test_interval_class_usage.<locals>.IntervalTypec                 &    t         |   d       y )Nr   )name)superr   )r   IntervalType	__class__s    r   r   zLIntervalExampleTest.test_interval_class_usage.<locals>.IntervalType.__init__"   s    lD2
2Cr   )r   r   r   r   __classcell__)r%   r$   s   @r   r$   r    !   s    D Dr   r$   )typeof_implc                     S r	   r   )valcinterval_types     r   typeof_indexzCIntervalExampleTest.test_interval_class_usage.<locals>.typeof_index+   s	      r   )as_numba_type)type_callablec                     fd}|S )Nc                 d    t        | j                        rt        |j                        rS y y r	   )
isinstanceFloat)r   r   r+   r   s     r   typerzSIntervalExampleTest.test_interval_class_usage.<locals>.type_interval.<locals>.typer;   s-    b%++.:b%++3N(( 4O.r   r   )contextr3   r+   r   s     r   type_intervalzDIntervalExampleTest.test_interval_class_usage.<locals>.type_interval9   s    ) Lr   )modelsregister_modelc                       e Zd Z fdZy)DIntervalExampleTest.test_interval_class_usage.<locals>.IntervalModelc                 z    dj                   fdj                   fg}j                  j                  | |||       y )Nr   r   )float64StructModelr   )r   dmmfe_typemembersr6   r   s       r   r   zMIntervalExampleTest.test_interval_class_usage.<locals>.IntervalModel.__init__F   s<     %--0 %--03""++D#wHr   N)r   r   r   r   )r6   r   s   r   IntervalModelr9   D   s	    Ir   r@   )make_attribute_wrapperr   r   )overload_attributer   c                     d }|S )Nc                 4    | j                   | j                  z
  S r	   r   intervals    r   getterzPIntervalExampleTest.test_interval_class_usage.<locals>.get_width.<locals>.getterX   s    {{X[[00r   r   )rF   rG   s     r   	get_widthz@IntervalExampleTest.test_interval_class_usage.<locals>.get_widthV   s    1Mr   )lower_builtin)cgutilsc                     |j                   }|\  }} j                  |      | |      }||_        ||_        |j	                         S r	   )return_typecreate_struct_proxyr   r   	_getvalue)	r4   buildersigargstypr   r   rF   rJ   s	           r   impl_intervalzDIntervalExampleTest.test_interval_class_usage.<locals>.impl_intervala   sK    //CFB7w2237IHHKHK%%''r   )unboxNativeValue)	ExitStackc                    j                  |j                  j                        } j                  |       |j                  |j                        } 
       5 }|j
                  j                  |d      }j                  |j                  ||      5  |j                  j                  j                  |       ddd       |j                  j                  |      }|j
                  j                  |       j                  |j                  ||j                        5  |j                  j                  j                  |       ddd       |j
                  j                  |d      }j                  |j                  ||      5  |j                  j                  j                  |       ddd       |j                  j                  |      }	|j
                  j                  |       j                  |j                  ||	j                        5  |j                  j                  j                  |       ddd       |j                  |_        |	j                  |_        ddd        |j%                         |j                  j'                  |            S # 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w)zS
            Convert a Interval object to a native interval structure.
            r   Nr   )is_error)alloca_once_valuerO   	false_bitrM   r4   pyapiobject_getattr_stringearly_exit_if_nullstoretrue_bitrT   r;   decrefearly_exit_ifrX   valuer   r   rN   load)rR   objr*   is_error_ptrrF   stacklo_obj	lo_nativehi_obj	hi_nativerV   rU   rJ   r   s             r   unbox_intervalzEIntervalExampleTest.test_interval_class_usage.<locals>.unbox_intervalo   s9   
 #44QYY@Q@QRL7w2237		199MH .66sDA//		5&I DIIOOG$4$4lCDGGEMM6:	v&**199eY=O=OP DIIOOG$4$4lCD 66sDA//		5&I DIIOOG$4$4lCDGGEMM6:	v&**199eY=O=OP DIIOOG$4$4lCD (oo'oo%.( x113aiinn\>Z[[%D DD DD DD D. .so   :K'J!<A&K"'J.	AK
'J;1A&K'K>*K!J+	&K.J8	3K;K	 KK	KK)boxc                    j                  |j                  |j                  j                        }|j                  j	                         }        5 } j                  |       |j                  |j                  |      }|j                  j                  |j                        }j                  |j                  ||      5  |j                  j                  ||       ddd       |j                  j                  |j                        }j                  |j                  ||      5  |j                  j                  |       |j                  j                  ||       ddd       |j                  j                  |j                  j                              }	j                  |j                  ||	      5  |j                  j                  |       |j                  j                  |       |j                  j                  ||       ddd       |j                  j!                  |	||f      }
|j                  j                  |       |j                  j                  |       |j                  j                  |	       |j                  j                  |
|       ddd       |j                  j#                  |      S # 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   xY w# 1 sw Y   JxY w)zT
            Convert a native interval structure to an Interval object.
            )rb   N)alloca_oncerO   r[   pyobjget_null_objectrM   r4   rl   r;   r   r]   r^   r   r`   unserializeserialize_objectcall_function_objargsrc   )rR   r)   r*   ret_ptrfail_objrf   rF   rg   ri   	class_objresrV   r   rJ   r   s              r   box_intervalzCIntervalExampleTest.test_interval_class_usage.<locals>.box_interval   s'   
 ))!))QWW]]CGww..0H .;766s;AIIqyyX[\u}}hkk://		5&I 7IIOOHg67 u}}hkk://		5&I 7GGNN6*IIOOHg67 GG//0H0H0RS	//		5)L 7GGNN6*GGNN6*IIOOHg67 gg33I?OPv&v&y)		W-1.4 99>>'**/7 77 7
7 7. .sY   A2K-K"AK--8K%AK->AK!BK-K	K-K	K-!K*	&K--K6)njitc                 J    | j                   |cxk  xr | j                  k  S c S r	   r
   )rF   xs     r   inside_intervalzFIntervalExampleTest.test_interval_class_usage.<locals>.inside_interval   s     ;;!1hkk1111r   c                     | j                   S r	   )r   rE   s    r   interval_widthzEIntervalExampleTest.test_interval_class_usage.<locals>.interval_width   s    >>!r   c                 r     | j                   |j                   z   | j                  |j                  z         S r	   r
   )ijr   s     r   sum_intervalszDIntervalExampleTest.test_interval_class_usage.<locals>.sum_intervals   s(    ADD144K55r   c                     j                  |        j                  |       j                  | j                  |j                         j                  | j                  |j                         y r	   )assertIsInstanceassertEqualr   r   )r{   yr   r   s     r   check_equal_intervalszLIntervalExampleTest.test_interval_class_usage.<locals>.check_equal_intervals   sS    !!!X.!!!X.QTT144(QTT144(r                     c                     | S r	   r   )r{   s    r   <lambda>z?IntervalExampleTest.test_interval_class_usage.<locals>.<lambda>   s    Q r   c                       e Zd Zd Zy)@IntervalExampleTest.test_interval_class_usage.<locals>.NotAFloatc                     t        d      )NzI am not a float)RuntimeErrorr   s    r   	__float__zJIntervalExampleTest.test_interval_class_usage.<locals>.NotAFloat.__float__   s    "#566r   N)r   r   r   r   r   r   r   	NotAFloatr      s    7r   r      )objectnumbar   Typenumba.extendingr'   registerr-   r.   r6   r7   r<   rA   rB   rI   
numba.corerJ   r2   rT   rU   
contextlibrV   rl   ry   r   r   assertRaises	TypeErrorr   AttributeErrorassertFalse)$r   r'   r,   r-   r.   r5   r7   r@   rA   rB   rH   rI   rS   rT   rk   rl   rx   ry   r|   r~   r   r   abr*   return_funcr   bad_intervalrV   r   r$   rU   rJ   r+   r6   r   s$   `                           @@@@@@@@r   test_interval_class_usagez-IntervalExampleTest.test_interval_class_usage   s   	)v 	)" 	 	D5:: 	D % 	0			h	'	! 
(	!
 	2x7 	2	x	 	 
!	 	;		%	IF.. 	I 
&	I 	;|T48|T48 	7	L'	2	 
3	 	2&	xekk	:	( 
;	( 	7(	|		\ 
	\> 	(	\	!	+ 
!	+J 			2 
	2 
	" 
	" 
	6 
	6	) QNQNQN ;'aQ0 	."34	7 	7 y) 	58Ay{34	5  1~O~. 	)<(	) 	A./ 	aq!!45	5 	5	) 	)s   +I"(	I."I+.I7N)r   r   r   r   r   r   r   r   r   
   s    b6r   r   __main__)r   unittestTestCaser   r   mainr   r   r   <module>r      s>    d6(++ d6N zHMMO r   