code: def scale(self, new_volume: float) -> "Lattice":
          
          versors = self.matrix / self.abc
  
          geo_factor = abs(dot(np.cross(versors[0], versors[1]), versors[2]))
  
          ratios = np.array(self.abc) / self.c
  
          new_c = (new_volume / (geo_factor * np.prod(ratios))) ** (1 / 3.0)
  
          return Lattice(versors * (new_c * ratios))
docs: Return a new Lattice with volume new_volume by performing a
          scaling of the lattice vectors so that length proportions and angles
          are preserved.
  
          Args:
              new_volume:
                  New volume to scale to.
  
          Returns:
              New lattice with desired volume.