code: def _from_lattice_parameters(self, angles):
          
  
          dataType = np.float64
          (alpha, beta, gamma) = angles
  
          radianConversion = np.pi / 180.0
          cosa = np.cos(alpha * radianConversion)
          cosb = np.cos(beta * radianConversion)
          sinb = np.sin(beta * radianConversion)
          cosg = np.cos(gamma * radianConversion)
          sing = np.sin(gamma * radianConversion)
          matCoef_y = (cosa - cosb * cosg) / sing
          matCoef_z = np.power(sinb, 2, dtype=dataType) - \
              np.power(matCoef_y, 2, dtype=dataType)
  
          if matCoef_z > 0.:
              matCoef_z = np.sqrt(matCoef_z)
          else:
              raise ValueError('Incorrect lattice vector coefficients.'
                               'Lattice parameters chosen return a non-positive '
                               'z vector.')
  
          lattice_vec = [[1, 0, 0],
                         [cosg, sing, 0],
                         [cosb, matCoef_y, matCoef_z]]
  
          return np.asarray(lattice_vec, dtype=np.float64)
docs: Convert Bravais lattice parameters to lattice vectors.
  
          _from_lattice_parameters will generate the lattice vectors based on
          the parameters necessary to build a Bravais Lattice. The lattice
          vectors are in the lower diagonal matrix form.
  
          This was adapted from the ASE triclinic.py lattice parameter code.
  
          S. R. Bahn and K. W. Jacobsen
          An object-oriented scripting interface to a
          legacy electronic structure code Comput. Sci. Eng., Vol. 4, 56-66, 2002
  
          Parameters
          ----------
          angles : list-like, required
              Angles of bravais lattice.