human
I wrote the below code

    def alternative_hillshade(azimuth, elev, z):
        illum = _sph2cart(*_azimuth2math(azimuth, elev))
        illum = np.array(illum)
        (dy, dx) = np.gradient((- z))
        dy = (- dy)
        dz = np.ones_like(dy)
        normals = np.dstack([dx, dy, dz])
        dividers = np.zeros_like(z)[..., None]
        for (i, mat) in enumerate(normals):
            for (j, vec) in enumerate(mat):
                dividers[(i, j, 0)] = np.linalg.norm(vec)
        normals /= dividers
        intensity = np.tensordot(normals, illum, axes=(2, 0))
        intensity -= intensity.min()
        intensity /= intensity.ptp()
        return intensity
    (y, x) = np.mgrid[5:0:(-1), :5]
    z = (- np.hypot((x - x.mean()), (y - y.mean())))
    for (az, elev) in itertools.product(range(0, 390, 30), range(0, 105, 15)):
        ls = mcolors.LightSource(az, elev)
        h1 = ls.hillshade(z)
        h2 = alternative_hillshade(az, elev, z)
        assert_array_almost_equal(h1, h2)

What's a good function header?

Here's a good function header?
assistant
#Here's a good function header.

def test_light_source_hillshading():