
    Dg|M                     ^   d dl Z d dlZd dlZd dlZd dlZddlmZ ddlm	Z	m
Z
mZmZ d dlmZ d dlmZ g dZ e j        ej        d	          Z	 	 dd
Z ee          	 	 dd            Z	 	 ddZ ee          	 	 dd            Z	 	 ddZ ee          dd            Zd Zd ZddZdS )    N   )numeric)result_typeNaN
asanyarrayndim)add_docstring)	overrides)logspacelinspace	geomspacenumpy)modulec                 
    | |fS N )startstopnumendpointretstepdtypeaxiss          M/var/www/sysmax/venv/lib/python3.11/site-packages/numpy/core/function_base.py_linspace_dispatcherr          4=    2   TFc                    t          j        |          }|dk     rt          d|z            |r|dz
  n|}t          |           dz  } t          |          dz  }t	          | |t          |                    }||}d}	nt          j        |t          j                  }	|| z
  }
t          j	        d||          
                    dd	t          |
          z  z             }|dk    rnt          j        |
          }|
|z  }|r|dk    n)t          j        |dk                                              }|r||z  }|r||
z  }n ||
z  }n|r||z  }n||z  }nt          }||
z  }|| z  }|r|dk    r||d
<   |dk    rt          j        |d|          }|	rt          j        ||           |r|                    |d          |fS |                    |d          S )aN  
    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      ?NF)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
QwwG#MNNN
(377SC u#Et#D	UD%**	-	-B}uck::5LE
1c$$$,,UTDKK5G-GHHA QwwU++s{&KDAIICN419,E,E,I,I,K,K 	 	HA U
I T	H IJA C!GG'
qyyLAt$$ 	! +xxEx**D00xxEx***r   c                     | ||fS r   r   )r   r   r   r   baser   r   s          r   _logspace_dispatcherr<      s    4r         $@c                 :   t          j        | ||          j        fd| ||fD             \  } }}t          | ||||          }t          j        ||          }|t          j        ||          S t          j        ||                              |d          S )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   H   K   | ]}t          j        |d d          V  dS )FT)r#   subokndminN)nparray).0andmaxs     r   	<genexpr>zlogspace.<locals>.<genexpr>#  sJ         	d%888     r   )r   r   r   )r   NFr"   )rB   	broadcastr   r   expand_dimsr(   powerr1   )	r   r   r   r   r;   r   r   r6   rF   s	           @r   r   r      s    H Ld++0E   t$  E4 	#tDDDA>$T***D}yq!!!9T1$$U$777r   c                 
    | |fS r   r   )r   r   r   r   r   r   s         r   _geomspace_dispatcherrL   .  r   r   c           	         t          |           } t          |          }t          j        | dk              st          j        |dk              rt          d          t	          | |t          |          t          j        d|                    }||}nt          j        |          }|                     |d          } |                    |d          }t          j	        t          j
        | |          j        |          }t          j        |t          j                  rP| j        dk    |j        dk    z  }t          j        |          r%| |         j        | |<   ||         j        ||<   d||<   t          j        |           d	k    t          j        |          d	k    z  }	t          j        |	          rEt          j        | | |	
           t          j        |||	
           t          j        |||	
           t          j        |           }
t          j        |          }t'          |
|||d|          }|dk    r| |d<   |dk    r|r||d	<   ||z  }|dk    rt          j        |d|          }|                    |d          S )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.

    .. 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   NTr"   g        y              ?r    )r!   wherer=   )r   r   r;   r   r   F)r   r(   r.   r&   r   r'   zerosr   r1   onesrH   shaper)   complexfloatingrealimagsignnegativelog10r   r/   )r   r   r   r   r   r   r3   out_signall_imagboth_negative	log_startlog_stopresults                r   r   r   3  sw   P uEdD
wuz Ccgdai00 CABBB	UD%**ciE.B.B	C	CB} 	%  
 LL$L''E;;r;%%DxeT228"==H ~b#-.. $J"$b978 	$#Ho2E(O!(^0DN!#HXXe__*sx~~/CDM
w} BU];;;;Tt=9999X8=AAAA	%  IyHis'd%A A AF
 Qwwq	77x7F2JFqyyfa..==U=+++r   c                     d}t          | t          j        t          j        t          f          rdS t          | t
                    r| j        |z  rdS dS )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     sY     !#*E,<hGHH u#t 1D!D u4r   c                     |r>t          |           s/t          j        d                    |           t          d           	 t          | |           d S # t          $ r Y d S w xY w)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     s     2377 :VC[[	 	 	 	c3   s   A 
A"!A"c                    t          t          | t                      i |g          |          }t          |t                    r%t          ||                                |           dS t          |t                    r8|\  }}t          t          ||          |                                |           dS t          |t                    r9|D ]8\  }}t          t          ||          |                                |           7dS dS )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   \ *UGIIrC5993
?
?C#s RsCIIKK88888	C		 RiwsD))9??+<+<nMMMMM	C		 R" 	R 	ROD)73--y/@/@.QQQQR R	R 	Rr   )NNNNN)r   TFNr   )r   Tr=   Nr   )NNNN)r   TNr   )T)	functoolsrl   r$   r`   r   rB    r   r(   r   r   r   r   numpy.core.multiarrayr	   
numpy.corer
   __all__partialarray_function_dispatchr   r   r<   r   rL   r   rh   rs   r   r   r   r   <module>r      s                    7 7 7 7 7 7 7 7 7 7 7 7 / / / / / /            
/
/
/ ,)+%g7 7 7  HL*.   
 -..FJ]+ ]+ ]+ /.]+@ EI*.   
 -..BFl8 l8 l8 /.l8^ GK#   
 .//Z, Z, Z, 0/Z,z  $  6R 6R 6R 6R 6R 6Rr   