class_docstr: The Lennard Jones potential
  
  a mathematically simple model that approximates the interaction between a
  pair of neutral atoms or molecules.
  https://en.wikipedia.org/wiki/Lennard-Jones_potential
  
  E = sum_ij V(r_ij)
  
  where r_ij is the cartesian distance between atom i and atom j, and the
  pair potential has the form
  
  V(r) = 4 * eps * ( (sigma / r)**12 - (sigma / r)**6
  
  Notes
  -----
  the double loop over many atoms makes this *very* slow in Python.  If it
  were in a compiled language it would be much faster.
code: def fun(self, coords):
      natoms = coords.size // 3
      coords = np.reshape(coords, [natoms, 3])
      energy = 0.0
      for i in range(natoms):
          for j in range(i + 1, natoms):
              dr = coords[j, :] - coords[i, :]
              r = np.linalg.norm(dr)
              energy += self.vij(r)
      return energy
  
imports: import time
  import numpy
  from numpy import sin, cos, pi, exp, sqrt, abs
  from scipy.optimize import rosen
label_desc: Use image node_id 4 for calling the LJ obj's underlying member method code with example usage: obj.fun(coords) and returns: energy