Project Name: OxfordHED+sunbear
Language: Python
Statement Type: API

Source Code:
def det_hess(u):
    """
    Get the determinant of the Hessian matrix of `u`.

    Parameters
    ----------
    * `u` : numpy.ndarray
        The ndarray input with shape (n0+2, n1+2, ..., nd1+2).

    Returns
    -------
    * numpy.ndarray
        The ndarray of the second grad of `u` with shape (n0, n1, ..., nd1).
    """
    ndim = np.ndim(u)
    inshape = np.asarray(u.shape)
    outshape = list(inshape - 2)

    # obtain the second gradient per each pairs of axes
    hess_unarranged = np.zeros([ndim, ndim] + outshape)
    for i in range(ndim):
        for j in range(i,ndim):
            grad2_val = grad2(u, (i,j))
            hess_unarranged[i,j] = grad2_val
            hess_unarranged[j,i] = grad2_val

    # rearrange hessian to have shape: outshape + [ndim, ndim]
    perm_idx = list(range(2,ndim+2)) + list(range(2))
    hess = np.transpose(hess_unarranged, perm_idx)

    # calculate and return the determinant
    return np.linalg.det(hess)

det_hess(u=array([  0.,   1.,   4.,   9.,  16.,  25.,  36.,  49.,  64.,  81., 100.,       121., 144., 169., 196., 225., 256., 289., 324., 361., 400., 441.,       484., 529., 576., 625., 676., 729., 784., 841., 900., 961.]))

Selected Statement: hess = np.transpose(hess_unarranged, perm_idx)

Function Input:
u: array([  0.,   1.,   4.,   9.,  16.,  25.,  36.,  49.,  64.,  81., 100.,       121., 144., 169., 196., 225., 256., 289., 324., 361., 400., 441.,       484., 529., 576., 625., 676., 729., 784., 841., 900., 961.])

Variable Values Before Statement:
hess_unarranged: array([[[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,         2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]]])
perm_idx: [2, 0, 1]

Value After Statement Execution: array([[[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]]])

Variable States During Runtime (line, value):
u: 1
array([  0.,   1.,   4.,   9.,  16.,  25.,  36.,  49.,  64.,  81., 100.,       121., 144., 169., 196., 225., 256., 289., 324., 361., 400., 441.,       484., 529., 576., 625., 676., 729., 784., 841., 900., 961.])
ndim: 15
1
inshape: 16
array([32])
outshape: 17
[30]
hess_unarranged: 20
array([[[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]])
24
array([[[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,         2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]]])
i: 21
0
j: 22
0
grad2_val: 23
array([2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,       2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.])
perm_idx: 28
[2, 0, 1]
hess: 29
array([[[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]],       [[2.]]])