def test_figshare_download(): data_2d = data(dataset="dft_2d") data_3d = data(dataset="dft_3d") data_ml = data(dataset="cfid_3d") data_ff = get_ff_eneleast() print("2d", len(data_2d)) print("3d", len(data_3d)) print("cfid3d", len(data_ml)) print("ff", len(data_ff)) assert (len(data_2d), len(data_3d), len(data_ml), len(data_ff)) == ( 1070, 36099, 35984, 3291, ) w, ef, atoms = get_wann_electron() hk = get_hk_tb(w=w) w, atoms = get_wann_phonon() w = Webpage(jid="JVASP-1002") info_mbj = w.get_dft_mbj_dielectric_function() info_opt = w.get_dft_semilocal_dielectric_function() info_pdos = w.get_dft_phonon_dos() info_edos = w.get_dft_electron_dos() k = w.list_keys()
def test_figshare_download(): data_2d = data(dataset="dft_2d") data_3d = data(dataset="dft_3d") data_ml = data(dataset="cfid_3d") data_ff = get_ff_eneleast() print("2d", len(data_2d)) print("3d", len(data_3d)) print("cfid3d", len(data_ml)) print("ff", len(data_ff)) assert (len(data_2d), len(data_3d), len(data_ml), len(data_ff)) == ( 1070, 36099, 35984, 3291, )
def test_figshare_download(): data_2d = data(dataset="dft_2d") # data_3d = data(dataset="dft_3d") # data_ml = data(dataset="cfid_3d") data_ff = get_ff_eneleast() print("2d", len(data_2d)) # print("3d", len(data_3d)) # print("cfid3d", len(data_ml)) print("ff", len(data_ff)) # assert (len(data_2d), len(data_3d), len(data_ml), len(data_ff)) == ( # 1070, # 36099, # 35984, # 3291, # ) w, ef, atoms = get_wann_electron() hk = get_hk_tb(w=w) w, atoms = get_wann_phonon() w = Webpage(jid="JVASP-1002") info_mbj = w.get_dft_mbj_dielectric_function() info_opt = w.get_dft_semilocal_dielectric_function() info_pdos = w.get_dft_phonon_dos() info_edos = w.get_dft_electron_dos() k = w.list_keys() # dat = data(dataset="megnet") # dat = data(dataset="mp_3d") # dat = data(dataset="mp_3d_2020") # dat = data(dataset="qm9") # dat = data(dataset="aflow1") # dat = data(dataset="aflow2") # dat = data(dataset="oqmd_3d") # dat = data(dataset="twod_matpd") # dat = data(dataset="oqmd_3d_no_cfid") p, n = get_stm_2d_dataset()
def test_dataset(): d = data("dft_2d") x = [] y = [] z = [] for i in d[0:100]: if i["formation_energy_peratom"] != "na": x.append(i["atoms"]) y.append(i["formation_energy_peratom"]) z.append(i["jid"]) s = StructureDataset(x, y, ids=z)
def get_ml_data( ml_property="formation_energy_peratom", dataset="cfid_3d", data_ranges=typical_data_ranges, ): """ Provide arrays/pandas-dataframe as input for ML algorithms. Args: ml_property: target property to train data_ranges: range for filtering data dataset: dataset available in jarvis or other array Returns: X, Y , ids """ import pandas as pd if isinstance(dataset, str): dataml = data(dataset) df = pd.DataFrame(dataml) else: df = pd.DataFrame(dataset) x = [] y = [] jid = [] df2 = df[["desc", "jid", ml_property]].replace("na", np.nan).dropna() for ii, i in df2.iterrows(): if data_ranges is None: if ( len(i["desc"]) == 1557 and float(i[ml_property]) != float("inf") and i[ml_property] != "na" ): x.append(i["desc"]) y.append(i[ml_property]) jid.append(i["jid"]) else: if ( len(i["desc"]) == 1557 and float(i[ml_property]) != float("inf") and i[ml_property] != "na" and float(i[ml_property]) <= data_ranges[ml_property][1] and float(i[ml_property]) >= data_ranges[ml_property][0] ): x.append(i["desc"]) y.append(i[ml_property]) jid.append(i["jid"]) return np.array(x, dtype="float"), np.array(y, dtype="float"), jid
def test_ldau(): d = data('dft_3d') for i in d: if i['jid'] == 'JVASP-29569': atoms = Atoms.from_dict(i['atoms']) ld = find_ldau_magmom(atoms=atoms, lsorbit=True) ld = find_ldau_magmom(atoms=atoms, lsorbit=False) if i['jid'] == 'JVASP-45': atoms = Atoms.from_dict(i['atoms']) ld = find_ldau_magmom(atoms=atoms, lsorbit=True) assert ld['LDAUU'] == '3.0 0' ld = find_ldau_magmom(atoms=atoms, lsorbit=False)
def test_dataset(): d = data("dft_2d") d = pd.DataFrame(d[:100]) graphs = [] for i, row in d.iterrows(): structure = Atoms.from_dict(row["atoms"]) g = Graph.atom_dgl_multigraph( structure, atom_features="atomic_number", compute_line_graph=False, ) graphs.append(g) s = StructureDataset(d, graphs, "formation_energy_peratom") col = s.collate
def test_lat(): box = [[10, 0, 0], [0, 10, 0], [0, 0, 10]] lat = Lattice(box) td = lat.to_dict() fd = Lattice.from_dict(td) frac_coords = [[0, 0, 0], [0.5, 0.5, 0.5]] cart_coords = [[0, 0, 0], [5, 5, 5]] lll = lat._calculate_lll() # print ('lll',lll[0][0][0]) lll_red = lat.get_lll_reduced_lattice()._lat # print("lll_educed", lat.get_lll_reduced_lattice()._lat[0][0]) assert ( lat.lat_lengths(), lat.lat_angles(), round(lat.inv_lattice()[0][0], 2), [round(i, 2) for i in lat.lat_angles(radians=True)], lat.cart_coords(frac_coords)[1][1], lat.frac_coords(cart_coords)[1][1], lat.volume, lat.parameters, lll[0][0][0], lll_red[0][0], ) == ( [10.0, 10.0, 10.0], [90.0, 90.0, 90.0], 0.1, [1.57, 1.57, 1.57], 5.0, 0.5, 1000.0, [10.0, 10.0, 10.0, 90.0, 90.0, 90.0], 10.0, 10.0, ) d = data('dft_3d') for i in d: if i['jid'] == 'JVASP-588': atoms = Atoms.from_dict(i['atoms']) lll = atoms.lattice._calculate_lll() assert lll[1][0][0] == -1
def test_dataset(): d = data("dft_2d") d = pd.DataFrame(d[:100]) graphs = [] for i, row in d.iterrows(): structure = Atoms.from_dict(row["atoms"]) g = Graph.atom_dgl_multigraph( structure, atom_features="atomic_number", compute_line_graph=False, ) graphs.append(g) s = StructureDataset( d, graphs, "formation_energy_peratom", line_graph=True ) col = s.collate col1 = s.collate_line_graph ix = s[0] sz = len(s) s_std = s.setup_standardizer([1, 2])
def get_twod_defect_energy(vrun="", jid="", atom=""): """Get mono 2D defect formation energy with OptB88vdW data.""" dft2d = data("dft_2d") def get_enp_jid(jid=""): for i in dft2d: if i["jid"] == jid: return (i["optb88vdw_total_energy"] / Atoms.from_dict(i["atoms"]).num_atoms) # dir='JVASP-667_C_C_c' # tmp=dir.split('_') # jid=tmp[0] # atom=tmp[2] strt = vrun.all_structures[-1] natoms = strt.num_atoms fin_en = vrun.final_energy chem_pot = unary_energy(atom) bulk_en_pa = get_enp_jid(jid) Ef = fin_en - (natoms + 1) * bulk_en_pa + chem_pot return Ef
) from jarvis.io.phonopy.inputs import PhonopyInputs from jarvis.analysis.structure.spacegroup import Spacegroup3D from jarvis.io.wannier.outputs import WannierHam import requests, tempfile, zipfile, io from jarvis.io.vasp.outputs import Vasprun # from phonopy.interface.vasp import read_vasp from jarvis.analysis.phonon.force_constants import qpoint, read_fc from jarvis.io.phonopy.outputs import get_phonon_tb import matplotlib.pyplot as plt plt.switch_backend("agg") from jarvis.db.figshare import data fls = data("raw_files") fc_file = os.path.join(os.path.dirname(__file__), "FORCE_CONSTANTS") pos = os.path.join(os.path.dirname(__file__), "POSCAR") wtb = os.path.join(os.path.dirname(__file__), "phonopyTB_hr.dat") totdos = os.path.join(os.path.dirname(__file__), "total_dos.dat") band = os.path.join(os.path.dirname(__file__), "band.yaml") def test_fc(): fc = read_fc(fc_file) assert (fc[0][0][0][0]) == 12.960974735 qp = qpoint(force_constant=fc, qpt=[0, 0, 0]) assert (qp[0][0][0][0]) == 12.960974735 def test_wann():
def upload_sample_data(curate_xml=False): """ Generate and upload XML files. Set curate_xml==True to upload all the XML documents. """ d = data("dft_2d") count = 0 for i in d[0:1]: filname = str(i["jid"]) + str(".xml") if not os.path.exists(filname): count = count + 1 energy = (str(i["optb88vdw_total_energy"]) + str(",") + str(i["formation_energy_peratom"])) atoms = Atoms.from_dict(i["atoms"]) formula = str(atoms.composition.reduced_formula) sgp = str(Spacegroup3D(atoms).space_group_symbol) name = str(i["jid"]) print(name) # ref = str("") func = str("OptB88vdW") elem = "" species = atoms.elements for j in species: elem = str(elem) + str(j) + str("-") encut = str(i["encut"]) kpoints = (str(i["kpoints_array"][0]) + str("x") + str(i["kpoints_array"][1]) + str("x") + str(i["kpoints_array"][2])) el_tens = "na" try: el_tens = str(",".join( map(str, np.array(i["elastic_tensor"]).flatten()))) except Exception: pass KV = str(i["bulk_modulus_kv"]) GV = str(i["shear_modulus_gv"]) op_eg = str(i["optb88vdw_bandgap"]) mbj_eg = str(i["mbj_bandgap"]) realx_arr = str(i["epsx"]) mrealx_arr = str(i["mepsx"]) realy_arr = str(i["epsy"]) mrealy_arr = str(i["mepsy"]) realz_arr = str(i["epsz"]) mrealz_arr = str(i["mepsz"]) typ = str("2D") # 3D other = str( "Citation: 1) DOI:10.1038/s41598-017-05402-0" + ",2) DOI: 10.1038/sdata.2018.82, 3) arXiv:1804.01033v2 ") struct = atoms.get_string() data_json( other=other, energy=energy, typ=typ, formula=formula, sgp=sgp, name=name, func=func, elem=elem, encut=encut, kpoints=kpoints, el_tens=el_tens, KV=KV, GV=GV, op_eg=op_eg, mbj_eg=mbj_eg, realx_arr=realx_arr, mrealx_arr=mrealx_arr, realy_arr=realy_arr, mrealy_arr=mrealy_arr, realz_arr=realz_arr, mrealz_arr=mrealz_arr, struct=struct, curate_xml=curate_xml, )
def test_extra_spgs(): from jarvis.db.figshare import data d = data("dft_3d") few_spgs = { "JVASP-4663": 119, "JVASP-4666": 194, "JVASP-588": 160, "JVASP-4669": 191, "JVASP-4672": 141, "JVASP-581": 164, "JVASP-4687": 139, "JVASP-4693": 62, "JVASP-4696": 187, "JVASP-4711": 225, "JVASP-4714": 2, "JVASP-4723": 60, "JVASP-32": 167, "JVASP-107": 186, "JVASP-4756": 63, "JVASP-96": 216, "JVASP-4334": 123, "JVASP-4222": 11, "JVASP-4804": 156, "JVASP-329": 129, "JVASP-4852": 163, "JVASP-155": 61, "JVASP-4340": 51, "JVASP-4343": 15, "JVASP-4361": 14, "JVASP-137": 72, "JVASP-4879": 166, "JVASP-4885": 19, "JVASP-4894": 31, "JVASP-4216": 12, "JVASP-4918": 121, "JVASP-4948": 25, "JVASP-4957": 221, "JVASP-4960": 65, "JVASP-5059": 189, "JVASP-5071": 66, "JVASP-5074": 150, "JVASP-5086": 74, "JVASP-4388": 64, "JVASP-4391": 136, "JVASP-5155": 127, "JVASP-5185": 43, "JVASP-5197": 59, "JVASP-5212": 29, "JVASP-164": 176, "JVASP-5224": 137, "JVASP-5227": 148, "JVASP-4234": 193, "JVASP-5257": 7, "JVASP-5266": 140, "JVASP-4397": 33, "JVASP-5317": 8, "JVASP-5332": 13, "JVASP-5353": 16, "JVASP-5371": 4, "JVASP-5407": 229, "JVASP-5416": 147, "JVASP-5509": 52, "JVASP-5536": 70, "JVASP-5560": 71, "JVASP-5680": 28, "JVASP-5740": 6, "JVASP-5839": 162, "JVASP-5863": 79, "JVASP-110": 99, "JVASP-579": 38, "JVASP-4501": 5, "JVASP-91": 227, "JVASP-41": 154, "JVASP-4516": 96, "JVASP-4564": 82, "JVASP-4645": 130, "JVASP-152": 55, "JVASP-4792": 88, "JVASP-5041": 107, "JVASP-5425": 87, "JVASP-5464": 115, "JVASP-5650": 157, "JVASP-4450": 36, "JVASP-22520": 152, "JVASP-22523": 205, "JVASP-11998": 53, "JVASP-22528": 58, "JVASP-22533": 41, "JVASP-12091": 32, "JVASP-22541": 215, "JVASP-22543": 97, "JVASP-22549": 9, "JVASP-12103": 138, "JVASP-22575": 40, "JVASP-22602": 180, "JVASP-22611": 182, "JVASP-12022": 85, "JVASP-22637": 111, "JVASP-12139": 10, "JVASP-22709": 92, "JVASP-12060": 20, "JVASP-12064": 1, "JVASP-12194": 185, "JVASP-13885": 128, "JVASP-14096": 56, "JVASP-14020": 122, "JVASP-13904": 54, "JVASP-13783": 135, "JVASP-14213": 26, "JVASP-14034": 23, "JVASP-14158": 113, "JVASP-14256": 21, "JVASP-32150": 217, "JVASP-28392": 224, "JVASP-32180": 146, "JVASP-32197": 57, "JVASP-31813": 67, "JVASP-31819": 219, "JVASP-29262": 39, "JVASP-29281": 102, "JVASP-31825": 226, "JVASP-29425": 143, "JVASP-29441": 42, "JVASP-29520": 73, "JVASP-29526": 18, "JVASP-29555": 149, "JVASP-29597": 151, "JVASP-29705": 174, "JVASP-31921": 199, "JVASP-33147": 161, "JVASP-33220": 46, "JVASP-33344": 114, "JVASP-30263": 44, "JVASP-33832": 155, "JVASP-30458": 69, "JVASP-30461": 144, "JVASP-30518": 132, "JVASP-36540": 198, "JVASP-36548": 220, "JVASP-36568": 3, "JVASP-36573": 145, "JVASP-35061": 131, "JVASP-35137": 125, "JVASP-35222": 204, "JVASP-35344": 109, "JVASP-42053": 173, "JVASP-40216": 91, "JVASP-38594": 165, "JVASP-37330": 86, "JVASP-37573": 84, "JVASP-36714": 47, "JVASP-36754": 98, "JVASP-59313": 230, "JVASP-46893": 95, "JVASP-46896": 76, "JVASP-45779": 30, "JVASP-45831": 158, "JVASP-46446": 35, "JVASP-44393": 159, "JVASP-44773": 22, "JVASP-47741": 78, "JVASP-47811": 181, "JVASP-48055": 94, "JVASP-48916": 34, "JVASP-49907": 190, "JVASP-50342": 223, "JVASP-50360": 68, "JVASP-50431": 37, "JVASP-52902": 142, "JVASP-52377": 24, "JVASP-50791": 214, "JVASP-54512": 108, "JVASP-56567": 213, "JVASP-54867": 126, "JVASP-55180": 81, "JVASP-57780": 212, "JVASP-57807": 118, "JVASP-57816": 50, "JVASP-57100": 197, "JVASP-57138": 116, "JVASP-58233": 124, "JVASP-59682": 200, "JVASP-20180": 206, "JVASP-21448": 203, "JVASP-40468": 90, "JVASP-42914": 17, "JVASP-21594": 100, "JVASP-21706": 188, "JVASP-22783": 218, "JVASP-24006": 202, "JVASP-30879": 83, "JVASP-31186": 49, "JVASP-21031": 110, "JVASP-21116": 192, "JVASP-25245": 134, "JVASP-7066": 169, "JVASP-13017": 112, "JVASP-58953": 105, "JVASP-8682": 183, "JVASP-9902": 80, "JVASP-34882": 208, "JVASP-34330": 179, "JVASP-34502": 48, "JVASP-62982": 178, } """ mem=[] spgs=[] pos=[] info=defaultdict() for i in d: a=Atoms.from_dict(i['atoms']) spg=Spacegroup3D(a).space_group_number if spg not in spgs: spgs.append(spg) pos.append(i['jid']) info[i['jid']]=spg print (info) if len(spgs)==230: break """ for i, j in few_spgs.items(): for ii in d: if ii["jid"] == i: a = Atoms.from_dict(ii["atoms"]) spg = Spacegroup3D(a).space_group_number assert j == spg lattice_mat = a.lattice_mat kp = Kpoints3D().automatic_length_mesh(lattice_mat=lattice_mat, length=40) sym = kp.high_symm_path(a)._path # print (ii['jid'],a) # TODO: following line failing for JVASP-4222 # x, y = kp.interpolated_points(a) break