+
    eiL  c                   s^   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^RIHt ^RIHtHtHtHt . ROt] P(                  ! ]P*                  RR7      tRR	R/R
 llt]! ]4      RR	R/R ll4       tRR lt]! ]4      RR l4       tRR lt]! ]4      RR l4       tR tR tRR ltR# )    N)	overrides)_array_converter)add_docstring)numeric)
asanyarraynanndimresult_typenumpy)Zmoduledevicec                    W3# N )startstopnumendpointretstepdtypeaxisr
   s   &&&&&&&$@/usr/lib64/python3.14/site-packages/numpy/_core/function_base.py_linspace_dispatcherr      
    =    c               s`   \         P                  ! V4      pV^ 8  d   \        RV R24      hV'       d
   V^,
          MTp\        W4      p	V	P	                  4       w  rV	P                  RR7      p
Vf   T
pRpM%\        P                  ! V\        P                  4      p\        P                  ! W\        V
4      R7      p\        P                  ! ^ W*VR7      P                  R
R\        V4      ,          ,           4      pV^ 8  d   \        P                  ! V4      pW,          pV'       d   V^ 8H  M&\        P                   ! V^ 8H  4      P#                  4       pV'       d#   W,          pV'       d
   W,          pM1W,          pM(V'       d
   W,          pMW,          pM\$        pW,          pW,          pV'       d   V^8  d   WR&   V^ 8w  d   \        P&                  ! V^ V4      pV'       d   \        P(                  ! WR7       V	P+                  VP-                  VRR	7      4      pV'       d   W3# V# )a`  
Return evenly spaced numbers over a specified interval.

Returns `num` evenly spaced samples, calculated over the
interval [`start`, `stop`].

The endpoint of the interval can optionally be excluded.

.. versionchanged:: 1.20.0
    Values are rounded towards ``-inf`` instead of ``0`` when an
    integer ``dtype`` is specified. The old behavior can
    still be obtained with ``np.linspace(start, stop, num).astype(int)``

Parameters
----------
start : array_like
    The starting value of the sequence.
stop : array_like
    The end value of the sequence, unless `endpoint` is set to False.
    In that case, the sequence consists of all but the last of ``num + 1``
    evenly spaced samples, so that `stop` is excluded.  Note that the step
    size changes when `endpoint` is False.
num : int, optional
    Number of samples to generate. Default is 50. Must be non-negative.
endpoint : bool, optional
    If True, `stop` is the last sample. Otherwise, it is not included.
    Default is True.
retstep : bool, optional
    If True, return (`samples`, `step`), where `step` is the spacing
    between samples.
dtype : dtype, optional
    The type of the output array.  If `dtype` is not given, the data type
    is inferred from `start` and `stop`. The inferred dtype will never be
    an integer; `float` is chosen even if the arguments would produce an
    array of integers.
axis : int, optional
    The axis in the result to store the samples.  Relevant only if start
    or stop are array-like.  By default (0), the samples will be along a
    new axis inserted at the beginning. Use -1 to get an axis at the end.
device : str, optional
    The device on which to place the created array. Default: None.
    For Array-API interoperability only, so must be ``"cpu"`` if passed.

    .. versionadded:: 2.0.0

Returns
-------
samples : ndarray
    There are `num` equally spaced samples in the closed interval
    ``[start, stop]`` or the half-open interval ``[start, stop)``
    (depending on whether `endpoint` is True or False).
step : float, optional
    Only returned if `retstep` is True

    Size of spacing between samples.


See Also
--------
arange : Similar to `linspace`, but uses a step size (instead of the
         number of samples).
geomspace : Similar to `linspace`, but with numbers spaced evenly on a log
            scale (a geometric progression).
logspace : Similar to `geomspace`, but with the end points specified as
           logarithms.
:ref:`how-to-partition`

Examples
--------
>>> import numpy as np
>>> np.linspace(2.0, 3.0, num=5)
array([2.  , 2.25, 2.5 , 2.75, 3.  ])
>>> np.linspace(2.0, 3.0, num=5, endpoint=False)
array([2. ,  2.2,  2.4,  2.6,  2.8])
>>> np.linspace(2.0, 3.0, num=5, retstep=True)
(array([2.  ,  2.25,  2.5 ,  2.75,  3.  ]), 0.25)

Graphical illustration:

>>> import matplotlib.pyplot as plt
>>> N = 8
>>> y = np.zeros(N)
>>> x1 = np.linspace(0, 10, N, endpoint=True)
>>> x2 = np.linspace(0, 10, N, endpoint=False)
>>> plt.plot(x1, y, 'o')
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.plot(x2, y + 0.5, 'o')
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.ylim([-0.5, 1])
(-0.5, 1)
>>> plt.show()

zNumber of samples, z, must be non-negative.T)Zensure_inexactF)r   )r   r
   )Zoutcopy))i   )r   .)operatorZindex
ValueErrorr   Z	as_arraysr   _nxZ
issubdtypeZintegernpZsubtracttypeZarangeZreshaper   Zisscalarr   anyr   moveaxisZfloorZwrapastype)r   r   r   r   r   r   r   r
   ZdivZconvdtZinteger_dtypeZdeltayZ_mult_inplaceZstepZany_step_zeros   &&&&&&&$         r   linspacer&      s   @ ..
C
Qw!#&=>
 	
  37SCE(D.."KE					.B}uckk: KK484E

	3	gedT%[(()  QwU+{&DAICNN419,E,I,I,K 	HA
IIAA IJAC!G'
qyLLAt$		!		!((5u(-.Awr   c                 s
    WV3# r   r   )r   r   r   r   baser   r   s   &&&&&&&r   _logspace_dispatcherr(      s    r   c                s  a \        V\        \        34      '       gf   \        P                  ! V4      '       dJ   \        P
                  ! WV4      P                  oV3R lWV3 4       w  rp\        P                  ! WFR7      p\        WW#VR7      pVf   \        P                  ! WG4      # \        P                  ! WG4      P                  VRR7      # )aa  
Return numbers spaced evenly on a log scale.

In linear space, the sequence starts at ``base ** start``
(`base` to the power of `start`) and ends with ``base ** stop``
(see `endpoint` below).

.. versionchanged:: 1.25.0
    Non-scalar 'base` is now supported

Parameters
----------
start : array_like
    ``base ** start`` is the starting value of the sequence.
stop : array_like
    ``base ** stop`` is the final value of the sequence, unless `endpoint`
    is False.  In that case, ``num + 1`` values are spaced over the
    interval in log-space, of which all but the last (a sequence of
    length `num`) are returned.
num : integer, optional
    Number of samples to generate.  Default is 50.
endpoint : boolean, optional
    If true, `stop` is the last sample. Otherwise, it is not included.
    Default is True.
base : array_like, optional
    The base of the log space. The step size between the elements in
    ``ln(samples) / ln(base)`` (or ``log_base(samples)``) is uniform.
    Default is 10.0.
dtype : dtype
    The type of the output array.  If `dtype` is not given, the data type
    is inferred from `start` and `stop`. The inferred type will never be
    an integer; `float` is chosen even if the arguments would produce an
    array of integers.
axis : int, optional
    The axis in the result to store the samples.  Relevant only if start,
    stop, or base are array-like.  By default (0), the samples will be
    along a new axis inserted at the beginning. Use -1 to get an axis at
    the end.

Returns
-------
samples : ndarray
    `num` samples, equally spaced on a log scale.

See Also
--------
arange : Similar to linspace, with the step size specified instead of the
         number of samples. Note that, when used with a float endpoint, the
         endpoint may or may not be included.
linspace : Similar to logspace, but with the samples uniformly distributed
           in linear space, instead of log space.
geomspace : Similar to logspace, but with endpoints specified directly.
:ref:`how-to-partition`

Notes
-----
If base is a scalar, logspace is equivalent to the code

>>> y = np.linspace(start, stop, num=num, endpoint=endpoint)
... # doctest: +SKIP
>>> power(base, y).astype(dtype)
... # doctest: +SKIP

Examples
--------
>>> import numpy as np
>>> np.logspace(2.0, 3.0, num=4)
array([ 100.        ,  215.443469  ,  464.15888336, 1000.        ])
>>> np.logspace(2.0, 3.0, num=4, endpoint=False)
array([100.        ,  177.827941  ,  316.22776602,  562.34132519])
>>> np.logspace(2.0, 3.0, num=4, base=2.0)
array([4.        ,  5.0396842 ,  6.34960421,  8.        ])
>>> np.logspace(2.0, 3.0, num=4, base=[2.0, 3.0], axis=-1)
array([[ 4.        ,  5.0396842 ,  6.34960421,  8.        ],
       [ 9.        , 12.98024613, 18.72075441, 27.        ]])

Graphical illustration:

>>> import matplotlib.pyplot as plt
>>> N = 10
>>> x1 = np.logspace(0.1, 1, N, endpoint=True)
>>> x2 = np.logspace(0.1, 1, N, endpoint=False)
>>> y = np.zeros(N)
>>> plt.plot(x1, y, 'o')
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.plot(x2, y + 0.5, 'o')
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.ylim([-0.5, 1])
(-0.5, 1)
>>> plt.show()

c              3   sX   <"   T F  p\         P                  ! VR RSR7      x  K!  	  R # 5i)NT)r   ZsubokZndmin)r   Zarray)Z.0Zandmaxs   & r   Z	<genexpr>Zlogspace.<locals>.<genexpr>&  s*      
( HHQTU;;(s   '*)r   )r   r   r   Fr   )
isinstancefloatZintr   r   Z	broadcastZexpand_dimsr&   r   Zpowerr#   )	r   r   r   r   r'   r   r   r%   r)   s	   &&&&&&& @r   logspacer,      s    ~ dUCL))bggdmm U$/44
4(
T ~~d.#tDA}yy!!99T$$U$77r   c                 r   r   r   )r   r   r   r   r   r   s   &&&&&&r   _geomspace_dispatcherr-   1  r   r   c           	     s   \        V 4      p \        V4      p\        P                  ! V ^ 8H  4      '       g    \        P                  ! V^ 8H  4      '       d   \        R4      h\	        W\        V4      \        P                  ! RV4      4      pVf   TpM\        P                  ! V4      pV P                  VRR7      p VP                  VRR7      p\        P                  ! V 4      pW,          p W,          p\        P                  ! V 4      p\        P                  ! V4      p	\        WVVRVR7      p
V^ 8  d   W
^ &   V^8  d   V'       d   WR&   W,          p
V^ 8w  d   \        P                  ! V
^ V4      p
V
P                  VRR7      # )	a  
Return numbers spaced evenly on a log scale (a geometric progression).

This is similar to `logspace`, but with endpoints specified directly.
Each output sample is a constant multiple of the previous.

Parameters
----------
start : array_like
    The starting value of the sequence.
stop : array_like
    The final value of the sequence, unless `endpoint` is False.
    In that case, ``num + 1`` values are spaced over the
    interval in log-space, of which all but the last (a sequence of
    length `num`) are returned.
num : integer, optional
    Number of samples to generate.  Default is 50.
endpoint : boolean, optional
    If true, `stop` is the last sample. Otherwise, it is not included.
    Default is True.
dtype : dtype
    The type of the output array.  If `dtype` is not given, the data type
    is inferred from `start` and `stop`. The inferred dtype will never be
    an integer; `float` is chosen even if the arguments would produce an
    array of integers.
axis : int, optional
    The axis in the result to store the samples.  Relevant only if start
    or stop are array-like.  By default (0), the samples will be along a
    new axis inserted at the beginning. Use -1 to get an axis at the end.

Returns
-------
samples : ndarray
    `num` samples, equally spaced on a log scale.

See Also
--------
logspace : Similar to geomspace, but with endpoints specified using log
           and base.
linspace : Similar to geomspace, but with arithmetic instead of geometric
           progression.
arange : Similar to linspace, with the step size specified instead of the
         number of samples.
:ref:`how-to-partition`

Notes
-----
If the inputs or dtype are complex, the output will follow a logarithmic
spiral in the complex plane.  (There are an infinite number of spirals
passing through two points; the output will follow the shortest such path.)

Examples
--------
>>> import numpy as np
>>> np.geomspace(1, 1000, num=4)
array([    1.,    10.,   100.,  1000.])
>>> np.geomspace(1, 1000, num=3, endpoint=False)
array([   1.,   10.,  100.])
>>> np.geomspace(1, 1000, num=4, endpoint=False)
array([   1.        ,    5.62341325,   31.6227766 ,  177.827941  ])
>>> np.geomspace(1, 256, num=9)
array([   1.,    2.,    4.,    8.,   16.,   32.,   64.,  128.,  256.])

Note that the above may not produce exact integers:

>>> np.geomspace(1, 256, num=9, dtype=int)
array([  1,   2,   4,   7,  16,  32,  63, 127, 256])
>>> np.around(np.geomspace(1, 256, num=9)).astype(int)
array([  1,   2,   4,   8,  16,  32,  64, 128, 256])

Negative, decreasing, and complex inputs are allowed:

>>> np.geomspace(1000, 1, num=4)
array([1000.,  100.,   10.,    1.])
>>> np.geomspace(-1000, -1, num=4)
array([-1000.,  -100.,   -10.,    -1.])
>>> np.geomspace(1j, 1000j, num=4)  # Straight line
array([0.   +1.j, 0.  +10.j, 0. +100.j, 0.+1000.j])
>>> np.geomspace(-1+0j, 1+0j, num=5)  # Circle
array([-1.00000000e+00+1.22464680e-16j, -7.07106781e-01+7.07106781e-01j,
        6.12323400e-17+1.00000000e+00j,  7.07106781e-01+7.07106781e-01j,
        1.00000000e+00+0.00000000e+00j])

Graphical illustration of `endpoint` parameter:

>>> import matplotlib.pyplot as plt
>>> N = 10
>>> y = np.zeros(N)
>>> plt.semilogx(np.geomspace(1, 1000, N, endpoint=True), y + 1, 'o')
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.semilogx(np.geomspace(1, 1000, N, endpoint=False), y + 2, 'o')
[<matplotlib.lines.Line2D object at 0x...>]
>>> plt.axis([0.5, 2000, 0, 3])
[0.5, 2000, 0, 3]
>>> plt.grid(True, color='0.7', linestyle='-', which='both', axis='both')
>>> plt.show()

z&Geometric sequence cannot include zeroTr         $@)r   r   r'   r   Fr   r   )r   r   r!   r   r   r+   Zzerosr   r#   ZsignZlog10r,   r"   )r   r   r   r   r   r   r$   Zout_signZ	log_startZlog_stopZresults   &&&&&&     r   	geomspacer/   6  sI   H uEdD
wwuzcggdai00ABB	U%*ciiE.B	CB} 		% 
 LL$L'E;;r;%D
 xxH	E?D		% IyyHis'd">F
 Qwq	7x2J
Fqyfa.==U=++r   c                s    Rp\        V \        P                  \        P                  \        34      '       d   R# \        V \
        4      '       d   V P                  V,          '       d   R# R# )z
Returns true if the only way to set the docstring of `obj` from python is
via add_docstring.

This function errs on the side of being overly conservative.
FTi   )r*   typesZFunctionTypeZ
MethodTypeZpropertyr    Z	__flags__)objZPy_TPFLAGS_HEAPTYPEs   & r   _needs_add_docstringr2     sO     !#**E,<,<hGHH#t1D!D!Dr   c                 s    V'       d3   \        V 4      '       g"   \        P                  ! R V  R2\        ^R7        \	        W4       R#   \
         d     R# i ; i)z,add_newdoc was used on a pure-python object z-. Prefer to attach it directly to the source.)Z
stacklevelN)r2   warningsZwarnZUserWarningr   Z	Exception)r1   docwarn_on_pythons   &&&r   _add_docstringr6     sS    2377:3% @: :		
c s   A	 	AAc                s   \        \        V \        4       / V.4      V4      p\        V\        4      '       d:   RV9   d   \
        P                  ! WB4      p\        WBP                  4       V4       R# \        V\        4      '       d+   Vw  rV\        \        WE4      VP                  4       V4       R# \        V\        4      '       d2   V F)  w  rV\        \        WE4      VP                  4       V4       K+  	  R# R# )a  
Add documentation to an existing object, typically one defined in C

The purpose is to allow easier editing of the docstrings without requiring
a re-compile. This exists primarily for internal use within numpy itself.

Parameters
----------
place : str
    The absolute name of the module to import from
obj : str or None
    The name of the object to add documentation to, typically a class or
    function name.
doc : {str, Tuple[str, str], List[Tuple[str, str]]}
    If a string, the documentation to apply to `obj`

    If a tuple, then the first element is interpreted as an attribute
    of `obj` and the second as the docstring to apply -
    ``(method, docstring)``

    If a list, then each element of the list should be a tuple of length
    two - ``[(method1, docstring1), (method2, docstring2), ...]``
warn_on_python : bool
    If True, the default, emit `UserWarning` if this is used to attach
    documentation to a pure-python object.

Notes
-----
This routine never raises an error if the docstring can't be written, but
will raise an error if the object being documented does not exist.

This routine cannot modify read-only docstrings, as appear
in new-style classes or built-in functions. Because this
routine never raises an error the caller must check manually
that the docstrings were changed.

Since this function grabs the ``char *`` from a c-level str object and puts
it into the ``tp_doc`` slot of the type of `obj`, it violates a number of
C-API best-practices, by:

- modifying a `PyTypeObject` after calling `PyType_Ready`
- calling `Py_INCREF` on the str and losing the reference, so the str
  will never be released

If possible it should be avoided.
z${ARRAY_FUNCTION_LIKE}N)ZgetattrZ
__import__Zglobalsr*   Zstrr   Zget_array_function_like_docr6   ZstripZtupleZlist)Zplacer1   r4   r5   ZnewZattrZ	docstrings   &&&&   r   
add_newdocr7     s    ^ *UGIrC593
?C#s#s*77ACsIIK8	C		ws)9??+<nM	C		"OD"IOO$5~  # 
r   )r,   r&   r/   )NNNNN)2   TFNr    )r8   Tr.   Nr    )NNNN)r8   TNr    )T)Z	functoolsr   r0   r3   r	   r   Znumpy._corer   Znumpy._core._multiarray_umathr   Znumpy._core.multiarrayr   Z r   r   r   r   r   r   Z__all__ZpartialZarray_function_dispatchr   r&   r(   r,   r-   r/   r2   r6   r7   r   r   r   <module>r9      s         ! : 0  7 7
/ $++%%g7 :>
 -.`#` /`F
 -.j8 /j8Z
 ./M, 0M,`$
;r   