Current File : //proc/self/root/proc/self/root/lib64/python2.7/site-packages/numpy/lib/shape_base.pyc
�
E�`Qc@sEdddddddddd	d
ddd
gZddljjZddlmZmZmZmZm	Z	m
Z
mZmZddl
mZmZddlmZmZmZd�Zd�Zd�ZeZd�Zd�Zd�Zdd�Zdd�Zd�Zd�Zd�Zd�Z d �Z!d!�Z"d"�Z#dS(#tcolumn_stackt	row_stacktdstacktarray_splittsplitthsplittvsplittdsplittapply_over_axestexpand_dimstapply_along_axistkronttiletget_array_wrapi����N(tasarraytzerostnewaxistoutertconcatenatetisscalartarrayt
asanyarray(tproducttreshape(thstacktvstackt
atleast_3dcGs-t|�}|j}|dkr.||7}n||krStd||f��ndg|d}t|d�}t|�}|j|�tdd�||<t|j�j	|�}|j
||�||t|j��|�}	t
|	�r�t|t|	�j�}
|	|
t|�<t|�}d}x�||kr�|dcd7<d}
xP||
||
kr�|
d|kr�||
dcd7<d||
<|
d8}
qTW|j
||�||t|j��|�}	|	|
t|�<|d7}q/W|
St|�}|}t|j�}t|	�||<t|t|	�j�}
|	|
t|j��<d}x�||kr$|dcd7<d}
xP||
||
kr�|
d|kr�||
dcd7<d||
<|
d8}
q�W|j
||�||t|j��|�}	|	|
t|j��<|d7}q]W|
SdS(s�
    Apply a function to 1-D slices along the given axis.

    Execute `func1d(a, *args)` where `func1d` operates on 1-D arrays and `a`
    is a 1-D slice of `arr` along `axis`.

    Parameters
    ----------
    func1d : function
        This function should accept 1-D arrays. It is applied to 1-D
        slices of `arr` along the specified axis.
    axis : integer
        Axis along which `arr` is sliced.
    arr : ndarray
        Input array.
    args : any
        Additional arguments to `func1d`.

    Returns
    -------
    apply_along_axis : ndarray
        The output array. The shape of `outarr` is identical to the shape of
        `arr`, except along the `axis` dimension, where the length of `outarr`
        is equal to the size of the return value of `func1d`.  If `func1d`
        returns a scalar `outarr` will have one fewer dimensions than `arr`.

    See Also
    --------
    apply_over_axes : Apply a function repeatedly over multiple axes.

    Examples
    --------
    >>> def my_func(a):
    ...     """Average first and last element of a 1-D array"""
    ...     return (a[0] + a[-1]) * 0.5
    >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
    >>> np.apply_along_axis(my_func, 0, b)
    array([ 4.,  5.,  6.])
    >>> np.apply_along_axis(my_func, 1, b)
    array([ 2.,  5.,  8.])

    For a function that doesn't return a scalar, the number of dimensions in
    `outarr` is the same as `arr`.

    >>> def new_func(a):
    ...     """Divide elements of a by 2."""
    ...     return a * 0.5
    >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
    >>> np.apply_along_axis(new_func, 0, b)
    array([[ 0.5,  1. ,  1.5],
           [ 2. ,  2.5,  3. ],
           [ 3.5,  4. ,  4.5]])

    is2axis must be less than arr.ndim; axis=%d, rank=%d.itOi����N(Rtndimt
ValueErrorRtrangetremovetslicetNonetshapettaketputttuplettolistRtdtypeRtlisttlen(tfunc1dtaxistarrtargstndtindtitindlisttoutshapetrestoutarrtNtottktnt	holdshape((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR
sf7	

'
'
cCs�t|�}|j}t|�jdkr6|f}nx�|D]�}|dkr\||}n||f}||�}|j|jkr�|}q=t||�}|j|jkr�|}q=td��q=W|S(s
    Apply a function repeatedly over multiple axes.

    `func` is called as `res = func(a, axis)`, where `axis` is the first
    element of `axes`.  The result `res` of the function call must have
    either the same dimensions as `a` or one less dimension.  If `res`
    has one less dimension than `a`, a dimension is inserted before
    `axis`.  The call to `func` is then repeated for each axis in `axes`,
    with `res` as the first argument.

    Parameters
    ----------
    func : function
        This function must take two arguments, `func(a, axis)`.
    a : array_like
        Input array.
    axes : array_like
        Axes over which `func` is applied; the elements must be integers.

    Returns
    -------
    apply_over_axis : ndarray
        The output array.  The number of dimensions is the same as `a`,
        but the shape can be different.  This depends on whether `func`
        changes the shape of its output with respect to its input.

    See Also
    --------
    apply_along_axis :
        Apply a function to 1-D slices of an array along the given axis.

    Examples
    --------
    >>> a = np.arange(24).reshape(2,3,4)
    >>> a
    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])

    Sum over axes 0 and 2. The result has same number of dimensions
    as the original array:

    >>> np.apply_over_axes(np.sum, a, [0,2])
    array([[[ 60],
            [ 92],
            [124]]])

    is7function is not returning an array of the correct shape(RRRR	R(tfunctataxestvaltNR+R-R3((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR{s 4	

		cCsUt|�}|j}|dkr8|t|�d}n|j|| d||�S(s
    Expand the shape of an array.

    Insert a new axis, corresponding to a given position in the array shape.

    Parameters
    ----------
    a : array_like
        Input array.
    axis : int
        Position (amongst axes) where new axis is to be inserted.

    Returns
    -------
    res : ndarray
        Output array. The number of dimensions is one greater than that of
        the input array.

    See Also
    --------
    doc.indexing, atleast_1d, atleast_2d, atleast_3d

    Examples
    --------
    >>> x = np.array([1,2])
    >>> x.shape
    (2,)

    The following is equivalent to ``x[np.newaxis,:]`` or ``x[np.newaxis]``:

    >>> y = np.expand_dims(x, axis=0)
    >>> y
    array([[1, 2]])
    >>> y.shape
    (1, 2)

    >>> y = np.expand_dims(x, axis=1)  # Equivalent to x[:,newaxis]
    >>> y
    array([[1],
           [2]])
    >>> y.shape
    (2, 1)

    Note that some examples may use ``None`` instead of ``np.newaxis``.  These
    are the same objects:

    >>> np.newaxis is None
    True

    ii(i(RR"R)R(R:R+R"((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR	�s
3	c	Csg}xf|D]^}t|dtdt�}|jdkr^t|dtdtdd�j}n|j|�q
Wtj|d�S(s5
    Stack 1-D arrays as columns into a 2-D array.

    Take a sequence of 1-D arrays and stack them as columns
    to make a single 2-D array. 2-D arrays are stacked as-is,
    just like with `hstack`.  1-D arrays are turned into 2-D columns
    first.

    Parameters
    ----------
    tup : sequence of 1-D or 2-D arrays.
        Arrays to stack. All of them must have the same first dimension.

    Returns
    -------
    stacked : 2-D array
        The array formed by stacking the given arrays.

    See Also
    --------
    hstack, vstack, concatenate

    Notes
    -----
    This function is equivalent to ``np.vstack(tup).T``.

    Examples
    --------
    >>> a = np.array((1,2,3))
    >>> b = np.array((2,3,4))
    >>> np.column_stack((a,b))
    array([[1, 2],
           [2, 3],
           [3, 4]])

    tcopytsubokitndmini(RtFalsetTrueRtTtappendt_nxR(ttuptarraystvR,((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR�s%
$cCstjtt|�d�S(su
    Stack arrays in sequence depth wise (along third axis).

    Takes a sequence of arrays and stack them along the third axis
    to make a single array. Rebuilds arrays divided by `dsplit`.
    This is a simple way to stack 2D arrays (images) into a single
    3D array for processing.

    Parameters
    ----------
    tup : sequence of arrays
        Arrays to stack. All of them must have the same shape along all
        but the third axis.

    Returns
    -------
    stacked : ndarray
        The array formed by stacking the given arrays.

    See Also
    --------
    vstack : Stack along first axis.
    hstack : Stack along second axis.
    concatenate : Join arrays.
    dsplit : Split array along third axis.

    Notes
    -----
    Equivalent to ``np.concatenate(tup, axis=2)``.

    Examples
    --------
    >>> a = np.array((1,2,3))
    >>> b = np.array((2,3,4))
    >>> np.dstack((a,b))
    array([[[1, 2],
            [2, 3],
            [3, 4]]])

    >>> a = np.array([[1],[2],[3]])
    >>> b = np.array([[2],[3],[4]])
    >>> np.dstack((a,b))
    array([[[1, 2]],
           [[2, 3]],
           [[3, 4]]])

    i(RERtmapR(RF((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR*s0cCs�x�tt|��D]y}ttj||��dkrNtjg�||<qtjtjtj||�d��rtjg�||<qqW|S(Ni(RR)RER"Rtsometruetequal(tsub_arysR0((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyt_replace_zero_by_x_arrays\s(icCshy|j|}Wntk
r0t|�}nXy.t|�d}dgt|�|g}Wn�tk
r�t|�}|dkr�td��nt||�\}}dg||dg|||g}tj	|�j
�}nXg}	tj||d�}
xOt|�D]A}||}||d}
|	j
tj|
||
!|d��qWt|	�}	|	S(s
    Split an array into multiple sub-arrays.

    Please refer to the ``split`` documentation.  The only difference
    between these functions is that ``array_split`` allows
    `indices_or_sections` to be an integer that does *not* equally
    divide the axis.

    See Also
    --------
    split : Split array into multiple sub-arrays of equal size.

    Examples
    --------
    >>> x = np.arange(8.0)
    >>> np.array_split(x, 3)
        [array([ 0.,  1.,  2.]), array([ 3.,  4.,  5.]), array([ 6.,  7.])]

    iis&number sections must be larger than 0.(R"tAttributeErrorR)R(t	TypeErrortintRtdivmodRERtcumsumtswapaxesRRDRM(tarytindices_or_sectionsR+tNtotalt	Nsectionst
div_pointst
Neach_sectiontextrast
section_sizesRLtsaryR0tsttend((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRds.


'cCsdyt|�Wn=tk
rM|}|j|}||rNtd��qNnXt|||�}|S(s;
    Split an array into multiple sub-arrays.

    Parameters
    ----------
    ary : ndarray
        Array to be divided into sub-arrays.
    indices_or_sections : int or 1-D array
        If `indices_or_sections` is an integer, N, the array will be divided
        into N equal arrays along `axis`.  If such a split is not possible,
        an error is raised.

        If `indices_or_sections` is a 1-D array of sorted integers, the entries
        indicate where along `axis` the array is split.  For example,
        ``[2, 3]`` would, for ``axis=0``, result in

          - ary[:2]
          - ary[2:3]
          - ary[3:]

        If an index exceeds the dimension of the array along `axis`,
        an empty sub-array is returned correspondingly.
    axis : int, optional
        The axis along which to split, default is 0.

    Returns
    -------
    sub-arrays : list of ndarrays
        A list of sub-arrays.

    Raises
    ------
    ValueError
        If `indices_or_sections` is given as an integer, but
        a split does not result in equal division.

    See Also
    --------
    array_split : Split an array into multiple sub-arrays of equal or
                  near-equal size.  Does not raise an exception if
                  an equal division cannot be made.
    hsplit : Split array into multiple sub-arrays horizontally (column-wise).
    vsplit : Split array into multiple sub-arrays vertically (row wise).
    dsplit : Split array into multiple sub-arrays along the 3rd axis (depth).
    concatenate : Join arrays together.
    hstack : Stack arrays in sequence horizontally (column wise).
    vstack : Stack arrays in sequence vertically (row wise).
    dstack : Stack arrays in sequence depth wise (along third dimension).

    Examples
    --------
    >>> x = np.arange(9.0)
    >>> np.split(x, 3)
    [array([ 0.,  1.,  2.]), array([ 3.,  4.,  5.]), array([ 6.,  7.,  8.])]

    >>> x = np.arange(8.0)
    >>> np.split(x, [3, 5, 6, 10])
    [array([ 0.,  1.,  2.]),
     array([ 3.,  4.]),
     array([ 5.]),
     array([ 6.,  7.]),
     array([], dtype=float64)]

    s0array split does not result in an equal division(R)ROR"RR(RTRUR+tsectionsR=R3((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR�sA


cCscttj|��dkr*td��nt|j�dkrOt||d�St||d�SdS(s�
    Split an array into multiple sub-arrays horizontally (column-wise).

    Please refer to the `split` documentation.  `hsplit` is equivalent
    to `split` with ``axis=1``, the array is always split along the second
    axis regardless of the array dimension.

    See Also
    --------
    split : Split an array into multiple sub-arrays of equal size.

    Examples
    --------
    >>> x = np.arange(16.0).reshape(4, 4)
    >>> x
    array([[  0.,   1.,   2.,   3.],
           [  4.,   5.,   6.,   7.],
           [  8.,   9.,  10.,  11.],
           [ 12.,  13.,  14.,  15.]])
    >>> np.hsplit(x, 2)
    [array([[  0.,   1.],
           [  4.,   5.],
           [  8.,   9.],
           [ 12.,  13.]]),
     array([[  2.,   3.],
           [  6.,   7.],
           [ 10.,  11.],
           [ 14.,  15.]])]
    >>> np.hsplit(x, np.array([3, 6]))
    [array([[  0.,   1.,   2.],
           [  4.,   5.,   6.],
           [  8.,   9.,  10.],
           [ 12.,  13.,  14.]]),
     array([[  3.],
           [  7.],
           [ 11.],
           [ 15.]]),
     array([], dtype=float64)]

    With a higher dimensional array the split is still along the second axis.

    >>> x = np.arange(8.0).reshape(2, 2, 2)
    >>> x
    array([[[ 0.,  1.],
            [ 2.,  3.]],
           [[ 4.,  5.],
            [ 6.,  7.]]])
    >>> np.hsplit(x, 2)
    [array([[[ 0.,  1.]],
           [[ 4.,  5.]]]),
     array([[[ 2.,  3.]],
           [[ 6.,  7.]]])]

    is3hsplit only works on arrays of 1 or more dimensionsiN(R)RER"RR(RTRU((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR�s
7cCs:ttj|��dkr*td��nt||d�S(sI
    Split an array into multiple sub-arrays vertically (row-wise).

    Please refer to the ``split`` documentation.  ``vsplit`` is equivalent
    to ``split`` with `axis=0` (default), the array is always split along the
    first axis regardless of the array dimension.

    See Also
    --------
    split : Split an array into multiple sub-arrays of equal size.

    Examples
    --------
    >>> x = np.arange(16.0).reshape(4, 4)
    >>> x
    array([[  0.,   1.,   2.,   3.],
           [  4.,   5.,   6.,   7.],
           [  8.,   9.,  10.,  11.],
           [ 12.,  13.,  14.,  15.]])
    >>> np.vsplit(x, 2)
    [array([[ 0.,  1.,  2.,  3.],
           [ 4.,  5.,  6.,  7.]]),
     array([[  8.,   9.,  10.,  11.],
           [ 12.,  13.,  14.,  15.]])]
    >>> np.vsplit(x, np.array([3, 6]))
    [array([[  0.,   1.,   2.,   3.],
           [  4.,   5.,   6.,   7.],
           [  8.,   9.,  10.,  11.]]),
     array([[ 12.,  13.,  14.,  15.]]),
     array([], dtype=float64)]

    With a higher dimensional array the split is still along the first axis.

    >>> x = np.arange(8.0).reshape(2, 2, 2)
    >>> x
    array([[[ 0.,  1.],
            [ 2.,  3.]],
           [[ 4.,  5.],
            [ 6.,  7.]]])
    >>> np.vsplit(x, 2)
    [array([[[ 0.,  1.],
            [ 2.,  3.]]]),
     array([[[ 4.,  5.],
            [ 6.,  7.]]])]

    is3vsplit only works on arrays of 2 or more dimensionsi(R)RER"RR(RTRU((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRs/cCs:ttj|��dkr*td��nt||d�S(s
    Split array into multiple sub-arrays along the 3rd axis (depth).

    Please refer to the `split` documentation.  `dsplit` is equivalent
    to `split` with ``axis=2``, the array is always split along the third
    axis provided the array dimension is greater than or equal to 3.

    See Also
    --------
    split : Split an array into multiple sub-arrays of equal size.

    Examples
    --------
    >>> x = np.arange(16.0).reshape(2, 2, 4)
    >>> x
    array([[[  0.,   1.,   2.,   3.],
            [  4.,   5.,   6.,   7.]],
           [[  8.,   9.,  10.,  11.],
            [ 12.,  13.,  14.,  15.]]])
    >>> np.dsplit(x, 2)
    [array([[[  0.,   1.],
            [  4.,   5.]],
           [[  8.,   9.],
            [ 12.,  13.]]]),
     array([[[  2.,   3.],
            [  6.,   7.]],
           [[ 10.,  11.],
            [ 14.,  15.]]])]
    >>> np.dsplit(x, np.array([3, 6]))
    [array([[[  0.,   1.,   2.],
            [  4.,   5.,   6.]],
           [[  8.,   9.,  10.],
            [ 12.,  13.,  14.]]]),
     array([[[  3.],
            [  7.]],
           [[ 11.],
            [ 15.]]]),
     array([], dtype=float64)]

    is3vsplit only works on arrays of 3 or more dimensionsi(R)RER"RR(RTRU((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyRRs)cGsmgt|�D]:\}}t|d�r
t|dd�||jf^q
}|j�|ri|ddSdS(s�Find the wrapper for the array with the highest priority.

    In case of ties, leftmost wins. If no wrapper is found, return None
    t__array_prepare__t__array_priority__ii����N(t	enumeratethasattrtgetattrR`tsortR!(R-R0txtwrappers((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pytget_array_prepares4
cGsmgt|�D]:\}}t|d�r
t|dd�||jf^q
}|j�|ri|ddSdS(s�Find the wrapper for the array with the highest priority.

    In case of ties, leftmost wins. If no wrapper is found, return None
    t__array_wrap__Raii����N(RbRcRdRiReR!(R-R0RfRg((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR
�s4
cCs�t|�}t|dtdtd|j�}|j|j}}|dksX|dkrhtj||�S|j}|j}|jj	s�t
||�}n|jj	s�t
||�}n|}||kr||kr�d|||}qd|||}|}nt||�j
||�}|d}x&t|�D]}	t
|d|�}q7Wt||�}
|
d	k	r}|
|�}nt||�}
|
d	k	r�|
|�}n|S(
s
    Kronecker product of two arrays.

    Computes the Kronecker product, a composite array made of blocks of the
    second array scaled by the first.

    Parameters
    ----------
    a, b : array_like

    Returns
    -------
    out : ndarray

    See Also
    --------

    outer : The outer product

    Notes
    -----

    The function assumes that the number of dimenensions of `a` and `b`
    are the same, if necessary prepending the smallest with ones.
    If `a.shape = (r0,r1,..,rN)` and `b.shape = (s0,s1,...,sN)`,
    the Kronecker product has shape `(r0*s0, r1*s1, ..., rN*SN)`.
    The elements are products of elements from `a` and `b`, organized
    explicitly by::

        kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]

    where::

        kt = it * st + jt,  t = 0,...,N

    In the common 2-D case (N=1), the block structure can be visualized::

        [[ a[0,0]*b,   a[0,1]*b,  ... , a[0,-1]*b  ],
         [  ...                              ...   ],
         [ a[-1,0]*b,  a[-1,1]*b, ... , a[-1,-1]*b ]]


    Examples
    --------
    >>> np.kron([1,10,100], [5,6,7])
    array([  5,   6,   7,  50,  60,  70, 500, 600, 700])
    >>> np.kron([5,6,7], [1,10,100])
    array([  5,  50, 500,   6,  60, 600,   7,  70, 700])

    >>> np.kron(np.eye(2), np.ones((2,2)))
    array([[ 1.,  1.,  0.,  0.],
           [ 1.,  1.,  0.,  0.],
           [ 0.,  0.,  1.,  1.],
           [ 0.,  0.,  1.,  1.]])

    >>> a = np.arange(100).reshape((2,5,2,5))
    >>> b = np.arange(24).reshape((2,3,4))
    >>> c = np.kron(a,b)
    >>> c.shape
    (2, 10, 6, 20)
    >>> I = (1,3,0,2)
    >>> J = (0,2,1)
    >>> J1 = (0,) + J             # extend to ndim=4
    >>> S1 = (1,) + b.shape
    >>> K = tuple(np.array(I) * np.array(S1) + np.array(J1))
    >>> c[K] == a[I]*b[J]
    True

    R>R?R@iiR+(i(iN(RRRARBRREtmultiplyR"tflagst
contiguousRRtxrangeRRhR!R
(R:tbtndbtndatas_tbsR.tresultR+t_twrapper((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR�s8F!			
cCs*yt|�}Wntk
r,|f}nXt|�}tj|dtdtd|�}t|j�}t	|j
d�}||jkr�d|j||}nxxt|�D]j\}}|dkr�|j
d|�j|d�}n||}	|	|}
|
||<|t	|	d�:}q�W|j
|�S(s�
    Construct an array by repeating A the number of times given by reps.

    If `reps` has length ``d``, the result will have dimension of
    ``max(d, A.ndim)``.

    If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new
    axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication,
    or shape (1, 1, 3) for 3-D replication. If this is not the desired
    behavior, promote `A` to d-dimensions manually before calling this
    function.

    If ``A.ndim > d``, `reps` is promoted to `A`.ndim by pre-pending 1's to it.
    Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as
    (1, 1, 2, 2).

    Parameters
    ----------
    A : array_like
        The input array.
    reps : array_like
        The number of repetitions of `A` along each axis.

    Returns
    -------
    c : ndarray
        The tiled output array.

    See Also
    --------
    repeat : Repeat elements of an array.

    Examples
    --------
    >>> a = np.array([0, 1, 2])
    >>> np.tile(a, 2)
    array([0, 1, 2, 0, 1, 2])
    >>> np.tile(a, (2, 2))
    array([[0, 1, 2, 0, 1, 2],
           [0, 1, 2, 0, 1, 2]])
    >>> np.tile(a, (2, 1, 2))
    array([[[0, 1, 2, 0, 1, 2]],
           [[0, 1, 2, 0, 1, 2]]])

    >>> b = np.array([[1, 2], [3, 4]])
    >>> np.tile(b, 2)
    array([[1, 2, 1, 2],
           [3, 4, 3, 4]])
    >>> np.tile(b, (2, 1))
    array([[1, 2],
           [3, 4],
           [1, 2],
           [3, 4]])

    R>R?R@ii����i(i(R%ROR)RERRARBR(R"tmaxtsizeRRbRtrepeat(tAtrepsRFtdtcR"R7R0tnreptdim_intdim_out((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyR�s$8

!!


($t__all__tnumpy.core.numerictcoretnumericRERRRRRRRRtnumpy.core.fromnumericRRt
numpy.coreRRRR
RR	RRRRMRRRRRRhR
RR(((s:/usr/lib64/python2.7/site-packages/numpy/lib/shape_base.pyt<module>s,:	p	G	9	-	2	3J	>	3	-	
	
	e