code: def jacobian_s(nodes, degree, dimension):
      r
      num_nodes = (degree * (degree + 1)) // 2
      result = np.empty((dimension, num_nodes), order="F")
      index = 0
      i = 0
      for num_vals in six.moves.xrange(degree, 0, -1):
          for _ in six.moves.xrange(num_vals):
              result[:, index] = nodes[:, i + 1] - nodes[:, i]
              # Update the indices
              index += 1
              i += 1
          # In between each row, the index gains an extra value.
          i += 1
      return float(degree) * result
docs: r"""Compute :math:`\frac{\partial B}{\partial s}`.
  
      .. note::
  
         This is a helper for :func:`_jacobian_both`, which has an
         equivalent Fortran implementation.
  
      Args:
          nodes (numpy.ndarray): Array of nodes in a surface.
          degree (int): The degree of the surface.
          dimension (int): The dimension the surface lives in.
  
      Returns:
          numpy.ndarray: Nodes of the Jacobian surface in
          B |eacute| zier form.