code: def from_outcars(cls, outcars, structures, **kwargs):
          
          if len(outcars) != len(structures):
              raise ValueError("# of Outcars must be same as # of Structures")
  
          # Calculate cumulative root mean square distance between structures,
          # which serves as the reaction coordinate. Note that these are
          # calculated from the final relaxed structures as the coordinates may
          # have changed from the initial interpolation.
          r = [0]
          prev = structures[0]
          for st in structures[1:]:
              dists = np.array([s2.distance(s1) for s1, s2 in zip(prev, st)])
              r.append(np.sqrt(np.sum(dists ** 2)))
              prev = st
          r = np.cumsum(r)
  
          energies = []
          forces = []
          for i, o in enumerate(outcars):
              o.read_neb()
              energies.append(o.data["energy"])
              if i in [0, len(outcars) - 1]:
                  forces.append(0)
              else:
                  forces.append(o.data["tangent_force"]) 
          forces = np.array(forces)
          r = np.array(r)
          return cls(r=r, energies=energies, forces=forces,
                     structures=structures, **kwargs)
docs: Initializes an NEBAnalysis from Outcar and Structure objects. Use
          the static constructors, e.g., :class:`from_dir` instead if you
          prefer to have these automatically generated from a directory of NEB
          calculations.
  
          Args:
              outcars ([Outcar]): List of Outcar objects. Note that these have
                  to be ordered from start to end along reaction coordinates.
              structures ([Structure]): List of Structures along reaction
                  coordinate. Must be same length as outcar.
              interpolation_order (int): Order of polynomial to use to
                  interpolate between images. Same format as order parameter in
                  scipy.interplotate.PiecewisePolynomial.