Project Name: OxfordHED+sunbear
Language: Python
Statement Type: Arithmetic Assignment

Source Code:
def _pad_conserve_grads(phi):
    # pad by conserving the edge gradients
    ndim = np.ndim(phi)
    pw = [1, 1]
    pp = np.pad(phi, [tuple(pw)]*ndim, mode="constant")
    for dim in range(ndim):
        # get the indices first
        idx_pad0_l = _get_idx(ndim, dim, slice(pw[0], pw[0]+1, None))
        idx_pad0_r = _get_idx(ndim, dim, slice(pw[0]+1, pw[0]+2, None))
        idx_pad0 = _get_idx(ndim, dim, slice(pw[0], pw[0]+1, None))
        idx_pad0_fill = _get_idx(ndim, dim, slice(None, pw[0], None))
        idx_pad1_l = _get_idx(ndim, dim, slice(-pw[1]-2, -pw[1]-1, None))
        idx_pad1_r = _get_idx(ndim, dim, slice(-pw[1]-1, -pw[1], None))
        idx_pad1 = _get_idx(ndim, dim, slice(-pw[1]-1, -pw[1], None))
        idx_pad1_fill = _get_idx(ndim, dim, slice(-pw[1], None, None))

        # now get the padded values
        grad0 = pp[idx_pad0_r] - pp[idx_pad0_l] # (n0, ..., ndim=1, ..., nd1)
        grad1 = pp[idx_pad1_r] - pp[idx_pad1_l]
        pad_arange0 = np.arange(-pw[0],0) # (1, ..., ndim=pw[i], ..., 1)
        pad_arange1 = np.arange(1,pw[0]+1)
        pad0 = pad_arange0 * grad0 + pp[idx_pad0] # (n0,...,ndim=pw[i],...,nd1)
        pad1 = pad_arange1 * grad1 + pp[idx_pad1]
        pp[idx_pad0_fill] = pad0
        pp[idx_pad1_fill] = pad1

    return pp

_pad_conserve_grads(phi=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., 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., 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., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]))

Selected Statement: grad0 = pp[idx_pad0_r] - pp[idx_pad0_l] # (n0, ..., ndim=1, ..., nd1)

Function Input:
phi: 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., 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., 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., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

Variable Values Before Statement:

Value After Statement Execution: array([0.])

Variable States During Runtime (line, value):
phi: 1
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., 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., 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., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
ndim: 3
1
pw: 4
[1, 1]
pp: 5
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., 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., 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., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
dim: 6
0
idx_pad0_l: 8
(slice(1, 2, None),)
idx_pad0_r: 9
(slice(2, 3, None),)
idx_pad0: 10
(slice(1, 2, None),)
idx_pad0_fill: 11
(slice(None, 1, None),)
idx_pad1_l: 12
(slice(-3, -2, None),)
idx_pad1_r: 13
(slice(-2, -1, None),)
idx_pad1: 14
(slice(-2, -1, None),)
idx_pad1_fill: 15
(slice(-1, None, None),)
grad0: 18
array([0.])
grad1: 19
array([0.])
pad_arange0: 20
array([-1])
pad_arange1: 21
array([1])
pad0: 22
array([0.])
pad1: 23
array([0.])