
    h|M                     N   S SK r S SKrS SKrS SKrS SKrSSKJr  SSKJ	r	J
r
JrJr  S SKJr  S SKJr  / SQr\ R$                  " \R&                  SS	9r  SS
 jr\" \5        SS j5       r  SS jr\" \5        SS j5       r  SS jr\" \5      SS j5       rS rS rSS jrg)    N   )numeric)result_typeNaN
asanyarrayndim)add_docstring)	overrides)logspacelinspace	geomspacenumpy)modulec                     X4$ N )startstopnumendpointretstepdtypeaxiss          R/var/www/fran/franai/venv/lib/python3.13/site-packages/numpy/core/function_base.py_linspace_dispatcherr      
    =    c                    [         R                  " U5      nUS:  a  [        SU-  5      eU(       a  US-
  OUn[        U 5      S-  n [        U5      S-  n[	        X[        U5      5      nUc  UnSn	O%[        R                  " U[        R                  5      n	X-
  n
[        R                  " SX(S9R                  SS[        U
5      -  -   5      nUS:  az  [        R                  " U
5      nX-  nU(       a  US:H  O&[        R                  " US:H  5      R                  5       nU(       a  X-  nU(       a  X-  nO X-  nOU(       a  X-  nOX-  nO
[        nX-  nX-  nU(       a
  US:  a  XS	'   US:w  a  [        R                  " USU5      nU	(       a  [        R                   " XS
9  U(       a  UR#                  USS9U4$ UR#                  USS9$ )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.16.0
    Non-scalar `start` and `stop` are now supported.

.. 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.

    .. versionadded:: 1.9.0

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.

    .. versionadded:: 1.16.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
--------
>>> 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()

r   z,Number of samples, %s, must be non-negative.r   g      ?F)r   ))r   )r   .)outcopy)operatorindex
ValueErrorr   r   float_nx
issubdtypeintegerarangereshaper   isscalaranyr   moveaxisfloorastype)r   r   r   r   r   r   r   divdtinteger_dtypedeltay_mult_inplacestepany_step_zeros                  r   r   r      s   D ..
C
QwG#MNN37SC u#Et#D	U%*	-B}uckk:LE

1c$,,UTDK5G-GHA QwU+{&DAICNN419,E,I,I,K 	HA
I	H IJAC!G'
qyLLAt$		!xxEx*D00xxEx**r   c                 
    XU4$ r   r   )r   r   r   r   baser   r   s          r   _logspace_dispatcherr;      s    r   c                    ^ [         R                  " XU5      R                  mU4S jXU4 5       u  pn[        XX#US9n[         R                  " XFS9nUc  [
        R                  " XG5      $ [
        R                  " XG5      R                  USS9$ )a  
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.16.0
    Non-scalar `start` and `stop` are now supported.

.. 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.

    .. versionadded:: 1.16.0


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
--------
>>> 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   R   >#    U  H  n[         R                  " US STS9v   M     g7f)FT)r"   subokndminN)nparray).0andmaxs     r   	<genexpr>logspace.<locals>.<genexpr>#  s'      $A 	d%8$s   $')r   r   r   )r   Fr!   )r@   	broadcastr   r   expand_dimsr'   powerr0   )	r   r   r   r   r:   r   r   r5   rD   s	           @r   r   r      s    H LLd+00Et$E 	#tDA>>$*D}yy!!99T$$U$77r   c                     X4$ r   r   )r   r   r   r   r   r   s         r   _geomspace_dispatcherrK   .  r   r   c           	      *   [        U 5      n [        U5      n[        R                  " U S:H  5      (       d  [        R                  " US:H  5      (       a  [        S5      e[	        X[        U5      [        R                  " SU5      5      nUc  UnO[        R                  " U5      nU R                  USS9n UR                  USS9n[        R                  " [        R                  " X5      R                  U5      n[        R                  " U[        R                  5      (       a^  U R                  S:H  UR                  S:H  -  n[        R                  " U5      (       a$  X   R                  X'   X   R                  X'   SXx'   [        R                   " U 5      S:H  [        R                   " U5      S:H  -  n	[        R                  " U	5      (       a?  [        R"                  " X U	S	9  [        R"                  " XU	S	9  [        R"                  " XwU	S	9  [        R$                  " U 5      n
[        R$                  " U5      n['        XUUS
US9nUS:  a  XS'   US:  a  U(       a  XS'   X|-  nUS:w  a  [        R(                  " USU5      nUR                  USS9$ )aH  
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.

.. versionchanged:: 1.16.0
    Non-scalar `start` and `stop` are now supported.

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.

    .. versionadded:: 1.16.0

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
--------
>>> 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()

r   z&Geometric sequence cannot include zeror   Tr!   g        y              ?r   )r    where      $@)r   r   r:   r   r   F)r   r'   r-   r%   r   r&   zerosr   r0   onesrG   shaper(   complexfloatingrealimagsignnegativelog10r   r.   )r   r   r   r   r   r   r2   out_signall_imagboth_negative	log_startlog_stopresults                r   r   r   3  s   P uEdD
wwuzcggdai00ABB	U%*ciiE.B	CB} 		% 
 LL$L'E;;r;%Dxxe288"=H ~~b#--..JJ"$b9778#o22EO!^00DN!#HXXe_*sxx~/CDM
ww}U];T=9X=A		% IyyHis'd%AF
 Qwq	7x2JFqyfa.==U=++r   c                     Sn[        U [        R                  [        R                  [        45      (       a  g[        U [
        5      (       a  U R                  U-  (       a  gg)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.
i   FT)
isinstancetypesFunctionType
MethodTypepropertytype	__flags__)objPy_TPFLAGS_HEAPTYPEs     r   _needs_add_docstringrh     sL     !#**E,<,<hGHH#t1D!Dr   c                     U(       a9  [        U 5      (       d)  [        R                  " SR                  U 5      [        SS9   [        X5        g ! [         a     g f = f)Nz[add_newdoc was used on a pure-python object {}. Prefer to attach it directly to the source.   )
stacklevel)rh   warningswarnformatUserWarningr	   	Exception)rf   docwarn_on_pythons      r   _add_docstringrs     sO    2377:VC[	c s   A 
AAc                    [        [        U [        5       0 U/5      U5      n[        U[        5      (       a  [        XBR                  5       U5        g[        U[        5      (       a)  Uu  pV[        [        XE5      UR                  5       U5        g[        U[        5      (       a0  U H)  u  pV[        [        XE5      UR                  5       U5        M+     gg)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
    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.
N)	getattr
__import__globalsr_   strrs   striptuplelist)placerf   rq   rr   newattr	docstrings          r   
add_newdocr     s    \ *UGIrC593
?C#ssIIK8	C		ws)9??+<nM	C		"OD73-y/@.Q  # 
r   )NNNNN)2   TFNr   )r   TrN   Nr   )NNNN)r   TNr   )T)	functoolsrl   r#   r`   r   r@    r   r'   r   r   r   r   numpy.core.multiarrayr	   
numpy.corer
   __all__partialarray_function_dispatchr   r   r;   r   rK   r   rh   rs   r   r   r   r   <module>r      s          7 7 /  
/ $++%%g7  HL*.
 -.FJ]+ /]+@ EI*.
 -.BFl8 /l8^ GK#
 ./Z, 0Z,z$6Rr   