From dc61e9a441536e3caa1f4e1a9a283b78d5476668 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Wed, 18 Dec 2024 17:53:31 +0100 Subject: [PATCH 01/17] MCSCF object can now be directly registered using TREXIO capabilities --- pyscf/tools/trexio.py | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index 33cfc9794..60d5f82bd 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -21,6 +21,7 @@ from pyscf import gto from pyscf import scf from pyscf import pbc +from pyscf import mcscf from pyscf import fci import trexio @@ -31,6 +32,8 @@ def to_trexio(obj, filename, backend='h5'): _mol_to_trexio(obj, tf) elif isinstance(obj, scf.hf.SCF): _scf_to_trexio(obj, tf) + elif isinstance(obj, mcscf.casci.CASCI) or isinstance(obj, mcscf.CASSCF): + _mcscf_to_trexio(obj, tf) else: raise NotImplementedError(f'Conversion function for {obj.__class__}') @@ -249,7 +252,34 @@ def _cc_to_trexio(cc_obj, trexio_file): raise NotImplementedError def _mcscf_to_trexio(cas_obj, trexio_file): - raise NotImplementedError + mol = cas_obj.mol + _mol_to_trexio(mol, trexio_file) + mo_energy_cas = cas_obj.mo_energy + mo_cas = cas_obj.mo_coeff + num_mo = mo_energy_cas.size + spin_cas = np.zeros(mo_energy_cas.size, dtype=int) + mo_type_cas = 'CAS' + trexio.write_mo_type(trexio_file, mo_type_cas) + idx = _order_ao_index(mol) + trexio.write_mo_num(trexio_file, num_mo) + trexio.write_mo_coefficient(trexio_file, mo_cas[idx].T.ravel()) + trexio.write_mo_energy(trexio_file, mo_energy_cas) + trexio.write_mo_spin(trexio_file, spin_cas) + + ncore = cas_obj.ncore + ncas = cas_obj.ncas + mo_classes = np.array(["Virtual"] * num_mo, dtype=str) # Initialize all MOs as Virtual + mo_classes[:ncore] = "Core" + mo_classes[ncore:ncore + ncas] = "Active" + trexio.write_mo_class(trexio_file, list(mo_classes)) + + occupation = np.zeros(num_mo) + occupation[:ncore] = 2.0 + rdm1 = cas_obj.fcisolver.make_rdm1(cas_obj.ci, ncas, cas_obj.nelecas) + natural_occ = np.linalg.eigh(rdm1)[0] + occupation[ncore:ncore + ncas] = natural_occ[::-1] + occupation[ncore + ncas:] = 0.0 + trexio.write_mo_occupation(trexio_file, occupation) def mol_from_trexio(filename): mol = gto.Mole() @@ -434,10 +464,6 @@ def det_to_trexio(mcscf, norb, nelec, filename, backend='h5', ci_threshold=0., c with trexio.File(filename, 'u', back_end=_mode(backend)) as tf: if trexio.has_determinant(tf): trexio.delete_determinant(tf) - trexio.write_mo_num(tf, mo_num) - trexio.write_electron_up_num(tf, len(a)) - trexio.write_electron_dn_num(tf, len(b)) - trexio.write_electron_num(tf, len(a) + len(b)) offset_file = 0 for i in range(n_chunks): From c639fd4c20b6818912cb11404f54b106f20edf71 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Sun, 16 Feb 2025 21:17:11 -0500 Subject: [PATCH 02/17] Update occsa and occsb to also register core orbitals Reshape write_eri function to ensusre conssitency between other codes mcscf_function directly register the determinant list now --- pyscf/tools/trexio.py | 51 +++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index 60d5f82bd..b5b9a6402 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -26,14 +26,16 @@ import trexio -def to_trexio(obj, filename, backend='h5'): +def to_trexio(obj, filename, backend='h5', ci_threshold=None, chunk_size=None): with trexio.File(filename, 'u', back_end=_mode(backend)) as tf: if isinstance(obj, gto.Mole): _mol_to_trexio(obj, tf) elif isinstance(obj, scf.hf.SCF): _scf_to_trexio(obj, tf) elif isinstance(obj, mcscf.casci.CASCI) or isinstance(obj, mcscf.CASSCF): - _mcscf_to_trexio(obj, tf) + ci_threshold = ci_threshold if ci_threshold is not None else 0. + chunk_size = chunk_size if chunk_size is not None else 100000 + _mcscf_to_trexio(obj, tf, ci_threshold=ci_threshold, chunk_size=chunk_size) else: raise NotImplementedError(f'Conversion function for {obj.__class__}') @@ -251,7 +253,7 @@ def _scf_to_trexio(mf, trexio_file): def _cc_to_trexio(cc_obj, trexio_file): raise NotImplementedError -def _mcscf_to_trexio(cas_obj, trexio_file): +def _mcscf_to_trexio(cas_obj, trexio_file, ci_threshold=0., chunk_size=100000): mol = cas_obj.mol _mol_to_trexio(mol, trexio_file) mo_energy_cas = cas_obj.mo_energy @@ -281,6 +283,10 @@ def _mcscf_to_trexio(cas_obj, trexio_file): occupation[ncore + ncas:] = 0.0 trexio.write_mo_occupation(trexio_file, occupation) + total_elec_cas = sum(cas_obj.nelecas) + + det_to_trexio(cas_obj, ncas, total_elec_cas, trexio_file, ci_threshold, chunk_size) + def mol_from_trexio(filename): mol = gto.Mole() with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: @@ -359,6 +365,12 @@ def write_eri(eri, filename, backend='h5'): idx[:,:,2:] = idx_pair[None,:,:] idx = idx[np.tril_indices(npair)] + idx=idx.reshape((num_integrals,4)) + for i in range(num_integrals): + idx[i,1],idx[i,2]=idx[i,2],idx[i,1] + + idx=idx.flatten() + with trexio.File(filename, 'w', back_end=_mode(backend)) as tf: trexio.write_mo_2e_int_eri(tf, 0, num_integrals, idx, eri.ravel()) @@ -440,17 +452,19 @@ def get_occsa_and_occsb(mcscf, norb, nelec, ci_threshold=0.): return occsa_sorted, occsb_sorted, ci_values_sorted, num_determinants -def det_to_trexio(mcscf, norb, nelec, filename, backend='h5', ci_threshold=0., chunk_size=100000): +def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold, chunk_size): from trexio_tools.group_tools import determinant as trexio_det mo_num = norb + ncore = mcscf.ncore int64_num = int((mo_num - 1) / 64) + 1 + occsa, occsb, ci_values, num_determinants = get_occsa_and_occsb(mcscf, norb, nelec, ci_threshold) det_list = [] for a, b, coeff in zip(occsa, occsb, ci_values): - occsa_upshifted = [orb + 1 for orb in a] - occsb_upshifted = [orb + 1 for orb in b] + occsa_upshifted = [orb for orb in range(ncore)] + [orb+ncore for orb in a] + occsb_upshifted = [orb for orb in range(ncore)] + [orb+ncore for orb in b] det_tmp = [] det_tmp += trexio_det.to_determinant_list(occsa_upshifted, int64_num) det_tmp += trexio_det.to_determinant_list(occsb_upshifted, int64_num) @@ -461,20 +475,19 @@ def det_to_trexio(mcscf, norb, nelec, filename, backend='h5', ci_threshold=0., c else: n_chunks = 1 - with trexio.File(filename, 'u', back_end=_mode(backend)) as tf: - if trexio.has_determinant(tf): - trexio.delete_determinant(tf) + if trexio.has_determinant(trexio_file): + trexio.delete_determinant(trexio_file) - offset_file = 0 - for i in range(n_chunks): - start = i * chunk_size - end = min((i + 1) * chunk_size, num_determinants) - current_chunk_size = end - start - - if current_chunk_size > 0: - trexio.write_determinant_list(tf, offset_file, current_chunk_size, det_list[start:end]) - trexio.write_determinant_coefficient(tf, offset_file, current_chunk_size, ci_values[start:end]) - offset_file += current_chunk_size + offset_file = 0 + for i in range(n_chunks): + start = i * chunk_size + end = min((i + 1) * chunk_size, num_determinants) + current_chunk_size = end - start + + if current_chunk_size > 0: + trexio.write_determinant_list(trexio_file, offset_file, current_chunk_size, det_list[start:end]) + trexio.write_determinant_coefficient(trexio_file, offset_file, current_chunk_size, ci_values[start:end]) + offset_file += current_chunk_size def read_det_trexio(filename): with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: From 00f97c322e22909d518eb11de28d1f48471143bf Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Thu, 3 Jul 2025 11:04:08 -0400 Subject: [PATCH 03/17] Missing term in det_to_trexio --- pyscf/tools/trexio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index b5b9a6402..dfb2eeee2 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -452,7 +452,7 @@ def get_occsa_and_occsb(mcscf, norb, nelec, ci_threshold=0.): return occsa_sorted, occsb_sorted, ci_values_sorted, num_determinants -def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold, chunk_size): +def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold=0., chunk_size=100000): from trexio_tools.group_tools import determinant as trexio_det mo_num = norb From c4ac9935f57a15e468ccf4327168f12e825df5d2 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Thu, 3 Jul 2025 11:09:29 -0400 Subject: [PATCH 04/17] Correct formatting --- pyscf/tools/trexio.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index dfb2eeee2..2e04c826c 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -476,18 +476,18 @@ def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold=0., chunk_size=1 n_chunks = 1 if trexio.has_determinant(trexio_file): - trexio.delete_determinant(trexio_file) + trexio.delete_determinant(trexio_file) offset_file = 0 for i in range(n_chunks): - start = i * chunk_size - end = min((i + 1) * chunk_size, num_determinants) - current_chunk_size = end - start - - if current_chunk_size > 0: - trexio.write_determinant_list(trexio_file, offset_file, current_chunk_size, det_list[start:end]) - trexio.write_determinant_coefficient(trexio_file, offset_file, current_chunk_size, ci_values[start:end]) - offset_file += current_chunk_size + start = i * chunk_size + end = min((i + 1) * chunk_size, num_determinants) + current_chunk_size = end - start + + if current_chunk_size > 0: + trexio.write_determinant_list(trexio_file, offset_file, current_chunk_size, det_list[start:end]) + trexio.write_determinant_coefficient(trexio_file, offset_file, current_chunk_size, ci_values[start:end]) + offset_file += current_chunk_size def read_det_trexio(filename): with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: From 3fe27fdbd61e06b157dc6da480af7c327eb1651a Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Thu, 3 Jul 2025 11:10:57 -0400 Subject: [PATCH 05/17] Correct formatting-Again --- pyscf/tools/trexio.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index 2e04c826c..eb05c8b86 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -485,18 +485,18 @@ def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold=0., chunk_size=1 current_chunk_size = end - start if current_chunk_size > 0: - trexio.write_determinant_list(trexio_file, offset_file, current_chunk_size, det_list[start:end]) - trexio.write_determinant_coefficient(trexio_file, offset_file, current_chunk_size, ci_values[start:end]) - offset_file += current_chunk_size + trexio.write_determinant_list(trexio_file, offset_file, current_chunk_size, det_list[start:end]) + trexio.write_determinant_coefficient(trexio_file, offset_file, current_chunk_size, ci_values[start:end]) + offset_file += current_chunk_size def read_det_trexio(filename): with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: - offset_file = 0 + offset_file = 0 - num_det = trexio.read_determinant_num(tf) - coeff = trexio.read_determinant_coefficient(tf, offset_file, num_det) - det = trexio.read_determinant_list(tf, offset_file, num_det) - return num_det, coeff, det + num_det = trexio.read_determinant_num(tf) + coeff = trexio.read_determinant_coefficient(tf, offset_file, num_det) + det = trexio.read_determinant_list(tf, offset_file, num_det) + return num_det, coeff, det def _to_segment_contraction(mol): '''transform generally contracted basis to segment contracted basis From 58a133238a18bc6d9ba5858240909c3c368354c2 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Thu, 3 Jul 2025 11:15:00 -0400 Subject: [PATCH 06/17] Correct formatting-Again --- pyscf/tools/trexio.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index eb05c8b86..160d0e00f 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -480,23 +480,23 @@ def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold=0., chunk_size=1 offset_file = 0 for i in range(n_chunks): - start = i * chunk_size - end = min((i + 1) * chunk_size, num_determinants) - current_chunk_size = end - start + start = i * chunk_size + end = min((i + 1) * chunk_size, num_determinants) + current_chunk_size = end - start - if current_chunk_size > 0: - trexio.write_determinant_list(trexio_file, offset_file, current_chunk_size, det_list[start:end]) - trexio.write_determinant_coefficient(trexio_file, offset_file, current_chunk_size, ci_values[start:end]) - offset_file += current_chunk_size + if current_chunk_size > 0: + trexio.write_determinant_list(trexio_file, offset_file, current_chunk_size, det_list[start:end]) + trexio.write_determinant_coefficient(trexio_file, offset_file, current_chunk_size, ci_values[start:end]) + offset_file += current_chunk_size def read_det_trexio(filename): with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: - offset_file = 0 + offset_file = 0 - num_det = trexio.read_determinant_num(tf) - coeff = trexio.read_determinant_coefficient(tf, offset_file, num_det) - det = trexio.read_determinant_list(tf, offset_file, num_det) - return num_det, coeff, det + num_det = trexio.read_determinant_num(tf) + coeff = trexio.read_determinant_coefficient(tf, offset_file, num_det) + det = trexio.read_determinant_list(tf, offset_file, num_det) + return num_det, coeff, det def _to_segment_contraction(mol): '''transform generally contracted basis to segment contracted basis From 21ce806d90f45d83ea5b8699f82b1061f8ba9e09 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Thu, 3 Jul 2025 11:18:03 -0400 Subject: [PATCH 07/17] Correct formatting-Trailing spaces --- pyscf/tools/trexio.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index 160d0e00f..a4a265d05 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -33,8 +33,8 @@ def to_trexio(obj, filename, backend='h5', ci_threshold=None, chunk_size=None): elif isinstance(obj, scf.hf.SCF): _scf_to_trexio(obj, tf) elif isinstance(obj, mcscf.casci.CASCI) or isinstance(obj, mcscf.CASSCF): - ci_threshold = ci_threshold if ci_threshold is not None else 0. - chunk_size = chunk_size if chunk_size is not None else 100000 + ci_threshold = ci_threshold if ci_threshold is not None else 0. + chunk_size = chunk_size if chunk_size is not None else 100000 _mcscf_to_trexio(obj, tf, ci_threshold=ci_threshold, chunk_size=chunk_size) else: raise NotImplementedError(f'Conversion function for {obj.__class__}') @@ -278,8 +278,8 @@ def _mcscf_to_trexio(cas_obj, trexio_file, ci_threshold=0., chunk_size=100000): occupation = np.zeros(num_mo) occupation[:ncore] = 2.0 rdm1 = cas_obj.fcisolver.make_rdm1(cas_obj.ci, ncas, cas_obj.nelecas) - natural_occ = np.linalg.eigh(rdm1)[0] - occupation[ncore:ncore + ncas] = natural_occ[::-1] + natural_occ = np.linalg.eigh(rdm1)[0] + occupation[ncore:ncore + ncas] = natural_occ[::-1] occupation[ncore + ncas:] = 0.0 trexio.write_mo_occupation(trexio_file, occupation) From 243da6886020146d12fc8b06634edcce2904d9ef Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Thu, 3 Jul 2025 11:33:16 -0400 Subject: [PATCH 08/17] Correct formatting-Trailing spaces --- pyscf/tools/trexio.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index a4a265d05..f55416a32 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -271,11 +271,11 @@ def _mcscf_to_trexio(cas_obj, trexio_file, ci_threshold=0., chunk_size=100000): ncore = cas_obj.ncore ncas = cas_obj.ncas mo_classes = np.array(["Virtual"] * num_mo, dtype=str) # Initialize all MOs as Virtual - mo_classes[:ncore] = "Core" - mo_classes[ncore:ncore + ncas] = "Active" + mo_classes[:ncore] = "Core" + mo_classes[ncore:ncore + ncas] = "Active" trexio.write_mo_class(trexio_file, list(mo_classes)) - occupation = np.zeros(num_mo) + occupation = np.zeros(num_mo) occupation[:ncore] = 2.0 rdm1 = cas_obj.fcisolver.make_rdm1(cas_obj.ci, ncas, cas_obj.nelecas) natural_occ = np.linalg.eigh(rdm1)[0] @@ -367,7 +367,7 @@ def write_eri(eri, filename, backend='h5'): idx=idx.reshape((num_integrals,4)) for i in range(num_integrals): - idx[i,1],idx[i,2]=idx[i,2],idx[i,1] + idx[i,1],idx[i,2]=idx[i,2],idx[i,1] idx=idx.flatten() From 38b91b8c7ce123f2f497b6e066bb2b06bb5e583b Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Fri, 4 Jul 2025 15:38:39 -0400 Subject: [PATCH 09/17] Put ERI in physicist format as a comment. --- pyscf/tools/trexio.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index f55416a32..d895372e0 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -365,11 +365,11 @@ def write_eri(eri, filename, backend='h5'): idx[:,:,2:] = idx_pair[None,:,:] idx = idx[np.tril_indices(npair)] - idx=idx.reshape((num_integrals,4)) - for i in range(num_integrals): - idx[i,1],idx[i,2]=idx[i,2],idx[i,1] - - idx=idx.flatten() +# idx=idx.reshape((num_integrals,4)) +# for i in range(num_integrals): +# idx[i,1],idx[i,2]=idx[i,2],idx[i,1] +# +# idx=idx.flatten() with trexio.File(filename, 'w', back_end=_mode(backend)) as tf: trexio.write_mo_2e_int_eri(tf, 0, num_integrals, idx, eri.ravel()) From c48fb6929d13e00b4617bc54714dc301c9a2b594 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Fri, 4 Jul 2025 15:45:16 -0400 Subject: [PATCH 10/17] Add comment --- pyscf/tools/trexio.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index d895372e0..b3458d17a 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -365,6 +365,7 @@ def write_eri(eri, filename, backend='h5'): idx[:,:,2:] = idx_pair[None,:,:] idx = idx[np.tril_indices(npair)] +# Started working on physicist notation # idx=idx.reshape((num_integrals,4)) # for i in range(num_integrals): # idx[i,1],idx[i,2]=idx[i,2],idx[i,1] From 83c1a0df14adf88a50f1801e913be9d3fbad0191 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Fri, 4 Jul 2025 17:38:28 -0400 Subject: [PATCH 11/17] Physicist format on --- pyscf/tools/trexio.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index b3458d17a..a20fdb88a 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -365,12 +365,12 @@ def write_eri(eri, filename, backend='h5'): idx[:,:,2:] = idx_pair[None,:,:] idx = idx[np.tril_indices(npair)] -# Started working on physicist notation -# idx=idx.reshape((num_integrals,4)) -# for i in range(num_integrals): -# idx[i,1],idx[i,2]=idx[i,2],idx[i,1] -# -# idx=idx.flatten() + # Physicist notation + idx=idx.reshape((num_integrals,4)) + for i in range(num_integrals): + idx[i,1],idx[i,2]=idx[i,2],idx[i,1] + + idx=idx.flatten() with trexio.File(filename, 'w', back_end=_mode(backend)) as tf: trexio.write_mo_2e_int_eri(tf, 0, num_integrals, idx, eri.ravel()) From 04550af93e6a63731bb621537a8b114c410c782f Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Fri, 4 Jul 2025 17:42:53 -0400 Subject: [PATCH 12/17] read_eri raise error --- pyscf/tools/trexio.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index a20fdb88a..dc428b5f1 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -377,16 +377,17 @@ def write_eri(eri, filename, backend='h5'): def read_eri(filename): '''Read ERIs in AO basis, 8-fold symmetry is assumed''' - with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: - nmo = trexio.read_mo_num(tf) - nao_pair = nmo * (nmo+1) // 2 - eri_size = nao_pair * (nao_pair+1) // 2 - idx, data, n_read, eof_flag = trexio.read_mo_2e_int_eri(tf, 0, eri_size) - eri = np.zeros(eri_size) - x = idx[:,0]*(idx[:,0]+1)//2 + idx[:,1] - y = idx[:,2]*(idx[:,2]+1)//2 + idx[:,3] - eri[x*(x+1)//2+y] = data - return eri + raise NotImplementedError("Reading ERIs is not yet implemented.") +# with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: +# nmo = trexio.read_mo_num(tf) +# nao_pair = nmo * (nmo+1) // 2 +# eri_size = nao_pair * (nao_pair+1) // 2 +# idx, data, n_read, eof_flag = trexio.read_mo_2e_int_eri(tf, 0, eri_size) +# eri = np.zeros(eri_size) +# x = idx[:,0]*(idx[:,0]+1)//2 + idx[:,1] +# y = idx[:,2]*(idx[:,2]+1)//2 + idx[:,3] +# eri[x*(x+1)//2+y] = data +# return eri def _order_ao_index(mol): if mol.cart: @@ -458,7 +459,7 @@ def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold=0., chunk_size=1 mo_num = norb ncore = mcscf.ncore - int64_num = int((mo_num - 1) / 64) + 1 + int64_num = trexio.get_int64_num(trexio_file) occsa, occsb, ci_values, num_determinants = get_occsa_and_occsb(mcscf, norb, nelec, ci_threshold) From 19bec15eb3a23830df3b6dca397985346dbb1269 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Fri, 4 Jul 2025 17:54:21 -0400 Subject: [PATCH 13/17] read_eri in physicist notation --- pyscf/tools/trexio.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index dc428b5f1..2a2fc0071 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -376,18 +376,16 @@ def write_eri(eri, filename, backend='h5'): trexio.write_mo_2e_int_eri(tf, 0, num_integrals, idx, eri.ravel()) def read_eri(filename): - '''Read ERIs in AO basis, 8-fold symmetry is assumed''' - raise NotImplementedError("Reading ERIs is not yet implemented.") -# with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: -# nmo = trexio.read_mo_num(tf) -# nao_pair = nmo * (nmo+1) // 2 -# eri_size = nao_pair * (nao_pair+1) // 2 -# idx, data, n_read, eof_flag = trexio.read_mo_2e_int_eri(tf, 0, eri_size) -# eri = np.zeros(eri_size) -# x = idx[:,0]*(idx[:,0]+1)//2 + idx[:,1] -# y = idx[:,2]*(idx[:,2]+1)//2 + idx[:,3] -# eri[x*(x+1)//2+y] = data -# return eri + with trexio.File(filename, 'r', back_end=trexio.TREXIO_AUTO) as tf: + nmo = trexio.read_mo_num(tf) + nao_pair = nmo * (nmo+1) // 2 + eri_size = nao_pair * (nao_pair+1) // 2 + idx, data, n_read, eof_flag = trexio.read_mo_2e_int_eri(tf, 0, eri_size) + eri = np.zeros(eri_size) + x = idx[:,0]*(idx[:,0]+1)//2 + idx[:,2] + y = idx[:,2]*(idx[:,2]+1)//2 + idx[:,3] + eri[x*(x+1)//2+y] = data + return eri def _order_ao_index(mol): if mol.cart: From 177e46c9b5879a6defb19ac52da3187b1352de16 Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Fri, 4 Jul 2025 18:02:05 -0400 Subject: [PATCH 14/17] Remove useless mo_num in det_to_trexio --- pyscf/tools/trexio.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index 2a2fc0071..d280d51ca 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -455,7 +455,6 @@ def get_occsa_and_occsb(mcscf, norb, nelec, ci_threshold=0.): def det_to_trexio(mcscf, norb, nelec, trexio_file, ci_threshold=0., chunk_size=100000): from trexio_tools.group_tools import determinant as trexio_det - mo_num = norb ncore = mcscf.ncore int64_num = trexio.get_int64_num(trexio_file) From 1f74dd3ccfd9d1376aff90419d0bc1e8fb50eb7c Mon Sep 17 00:00:00 2001 From: NastaMauger Date: Sat, 5 Jul 2025 15:16:02 -0400 Subject: [PATCH 15/17] Correct read_eri --- pyscf/tools/trexio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyscf/tools/trexio.py b/pyscf/tools/trexio.py index d280d51ca..b91c72e64 100644 --- a/pyscf/tools/trexio.py +++ b/pyscf/tools/trexio.py @@ -383,7 +383,7 @@ def read_eri(filename): idx, data, n_read, eof_flag = trexio.read_mo_2e_int_eri(tf, 0, eri_size) eri = np.zeros(eri_size) x = idx[:,0]*(idx[:,0]+1)//2 + idx[:,2] - y = idx[:,2]*(idx[:,2]+1)//2 + idx[:,3] + y = idx[:,1]*(idx[:,1]+1)//2 + idx[:,3] eri[x*(x+1)//2+y] = data return eri From aa6b613c5eb4d3e95f2c26158af226c03590fbb1 Mon Sep 17 00:00:00 2001 From: Qiming Sun Date: Sun, 20 Jul 2025 12:53:47 -0700 Subject: [PATCH 16/17] Adjust unittest due to Scipy 1.16 compatibility issue --- .github/workflows/run_ci.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/run_ci.sh b/.github/workflows/run_ci.sh index 5531b7103..694fc2523 100755 --- a/.github/workflows/run_ci.sh +++ b/.github/workflows/run_ci.sh @@ -9,6 +9,7 @@ sudo apt-get -qq install \ curl python -m pip install --upgrade pip +pip install scipy==1.15.2 pip install pytest pip install . From 7e798f8c56d96138af0df8e6438a6dc3ee489660 Mon Sep 17 00:00:00 2001 From: Qiming Sun Date: Sun, 20 Jul 2025 12:56:03 -0700 Subject: [PATCH 17/17] scipy for python3.8 --- .github/workflows/run_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_ci.sh b/.github/workflows/run_ci.sh index 694fc2523..dc426c98f 100755 --- a/.github/workflows/run_ci.sh +++ b/.github/workflows/run_ci.sh @@ -9,7 +9,7 @@ sudo apt-get -qq install \ curl python -m pip install --upgrade pip -pip install scipy==1.15.2 +pip install "scipy<1.16" pip install pytest pip install .