Simple Usage#
The main functionality of the package is accessible through nbed.nbed().
There are three ways to provide arguments to the function:
passing a path to a config
.jsonfile.passing named arguments directly.
passing an NbedConfig model.
Note that named arguments which are explicitly added will overwrite the config input from a file or model.
Example Config file#
First lets see what’s in the file before we pass it to the main function.
import json
with open("test_config.json") as f:
config_from_file = json.load(f)
config_from_file
{'geometry': '3\n\nO 0.0000 0.000 0.115\nH 0.0000 0.754 -0.459\nH 0.0000 -0.754 -0.459',
'n_active_atoms': 1,
'basis': 'STO-3G',
'xc_functional': 'b3lyp',
'projector': 'mu',
'localization': 'spade',
'virtual_localization': 'cl',
'convergence': 1e-06,
'charge': 0,
'spin': 0,
'unit': 'angstrom',
'symmetry': False,
'mu_level_shift': 1000000.0,
'run_ccsd_emb': True,
'run_fci_emb': True,
'run_dft_in_dft': True,
'n_mo_overwrite': [None, None],
'max_ram_memory': 4000,
'occupied_threshold': 0.95,
'virtual_threshold': 0.95,
'max_shells': 4,
'init_huzinaga_rhf_with_mu': False,
'max_hf_cycles': 50,
'max_dft_cycles': 50,
'force_unrestricted': False,
'mm_coords': None,
'mm_charges': None,
'mm_radii': None}
from nbed import nbed
result = nbed(config="test_config.json")
2026-01-27 06:55:41,638: nbed.embed: INFO: Running Nbed with:
config test_config.json
keywords {}
2026-01-27 06:55:41,638: nbed.embed: INFO: Using config file test_config.json
2026-01-27 06:55:41,640: nbed.embed: INFO: Validating config from file.
2026-01-27 06:55:41,641: nbed.driver: INFO: Beginning embedding...
2026-01-27 06:55:41,642: nbed.driver: INFO: Running full system KS DFT.
/home/docs/checkouts/readthedocs.org/user_builds/nbed/envs/stable/lib/python3.13/site-packages/pyscf/dft/libxc.py:511: UserWarning: Since PySCF-2.3, B3LYP (and B3P86) are changed to the VWN-RPA variant, corresponding to the original definition by Stephens et al. (issue 1480) and the same as the B3LYP functional in Gaussian. To restore the VWN5 definition, you can put the setting "B3LYP_WITH_VWN5 = True" in pyscf_conf.py
warnings.warn('Since PySCF-2.3, B3LYP (and B3P86) are changed to the VWN-RPA variant, '
2026-01-27 06:55:42,495: nbed.driver: INFO: Global KS: -75.30914474004383
2026-01-27 06:55:42,495: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-27 06:55:42,535: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -69.5830769556182 <S^2> = 5.4622973e-14 2S+1 = 1
2026-01-27 06:55:43,733: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -51.60900712899155, converged: True
2026-01-27 06:55:43,734: nbed.driver: INFO: Deleting environment orbitals...
2026-01-27 06:55:43,736: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:43,738: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:43,740: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 50547.92065895191
2026-01-27 06:55:43,740: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-27 06:55:43,749: nbed.driver: INFO: Collcting results...
2026-01-27 06:55:43,750: nbed.driver: INFO: ROHF energy: -75.12380801468838
2026-01-27 06:55:43,820: nbed.driver: INFO: Embedded CCSD energy: -0.0047776511360967215
2026-01-27 06:55:43,821: nbed.driver: INFO: CCSD Converged True
2026-01-27 06:55:43,821: nbed.driver: INFO: CCSD Energy ProjectorTypes.MU: -75.12858566582447
2026-01-27 06:55:43,891: nbed.driver: INFO: FCI embedding energy: -51.61378461909348
2026-01-27 06:55:43,892: nbed.driver: INFO: FCI Energy ProjectorTypes.MU: -75.12858550479031
2026-01-27 06:55:43,892: nbed.driver: INFO: Running DFT-in-DFT calculation.
2026-01-27 06:55:44,408: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -49.69890380274231, converged: True
2026-01-27 06:55:44,410: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:44,413: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:44,470: nbed.driver: INFO: Embedding complete.
result.mu
{'scf': <pyscf.scf.uhf.UHF at 0x70fd74b41590>,
'v_emb': array([[[ 2.40120585e+02, 9.74408104e+03, 1.28037549e-12,
1.76941797e-10, -1.05560147e+04, 1.02938801e+04,
1.02938801e+04],
[ 9.74408104e+03, 4.00928677e+05, 5.26860131e-11,
4.44089376e-10, -4.34365854e+05, 4.23574788e+05,
4.23574788e+05],
[ 1.28037549e-12, 5.26860131e-11, 2.54435216e+00,
8.37726982e-09, -5.70802610e-11, 4.98909852e-09,
-4.87777437e-09],
[ 1.77809158e-10, 4.57967164e-10, 8.37726982e-09,
7.85534797e+05, 2.08166753e-10, 4.62606474e+05,
-4.62606474e+05],
[-1.05560147e+04, -4.34365854e+05, -5.70802610e-11,
1.94288965e-10, 4.70596664e+05, -4.58902672e+05,
-4.58902672e+05],
[ 1.02938801e+04, 4.23574788e+05, 4.98909852e-09,
4.62606474e+05, -4.58902672e+05, 7.19934445e+05,
1.75069053e+05],
[ 1.02938801e+04, 4.23574788e+05, -4.87777437e-09,
-4.62606474e+05, -4.58902672e+05, 1.75069053e+05,
7.19934445e+05]],
[[ 2.40124530e+02, 9.74457859e+03, -3.28847856e-14,
1.63064013e-10, -1.05559877e+04, 1.02937976e+04,
1.02937976e+04],
[ 9.74457859e+03, 4.00962941e+05, -1.35350617e-12,
2.77555964e-10, -4.34379683e+05, 4.23585960e+05,
4.23585960e+05],
[-3.28847856e-14, -1.35350617e-12, 2.54434746e+00,
6.79968378e-09, 1.46619201e-12, 4.00280787e-09,
-4.00566742e-09],
[ 1.61329290e-10, 3.05311539e-10, 6.79968378e-09,
7.85561377e+05, 2.01227843e-10, 4.62605196e+05,
-4.62605196e+05],
[-1.05559877e+04, -4.34379683e+05, 1.46619201e-12,
2.08166737e-10, 4.70586411e+05, -4.58890168e+05,
-4.58890168e+05],
[ 1.02937976e+04, 4.23585960e+05, 4.00280787e-09,
4.62605196e+05, -4.58890168e+05, 7.19909085e+05,
1.75065139e+05],
[ 1.02937976e+04, 4.23585960e+05, -4.00566742e-09,
-4.62605196e+05, -4.58890168e+05, 1.75065139e+05,
7.19909085e+05]]]),
'e_act': np.float64(-77.43928894219204),
'e_env': np.float64(-23.388702083915348),
'mo_energies_emb_pre_del': array([[-2.02201775e+01, -6.92405356e-01, -3.65626850e-01,
6.33627747e-01, 7.54197930e-01, 9.99999537e+05,
9.99999834e+05],
[-2.02201774e+01, -6.92388605e-01, -3.65626402e-01,
6.33606528e-01, 7.54193603e-01, 9.99999537e+05,
9.99999834e+05]]),
'mo_energies_emb_post_del': array([[-20.22017753, -0.69240536, -0.36562685, 0.63362775,
0.75419793, 0. , 0. ],
[-20.22017742, -0.69238861, -0.3656264 , 0.63360653,
0.7541936 , 0. , 0. ]]),
'correction': np.float64(8.179622720403131),
'beta_correction': np.float64(8.179608146252576),
'cl': <nbed.localizers.virtual.concentric.ConcentricLocalizer at 0x70fd76d8e270>,
'e_rhf': np.float64(-75.12380801468838),
'classical_energy': np.float64(-14.229086664019),
'e_ccsd': np.float64(-75.12858566582447),
'ccsd_emb': np.float64(-60.89949900180547),
'e_fci': np.float64(-75.12858550479031),
'fci_emb': np.float64(-60.8994988407713),
'hf_emb': np.float64(-60.89472135066937),
'v_emb_dft': array([[[ 2.40120585e+02, 9.74408104e+03, 1.28037549e-12,
1.76941797e-10, -1.05560147e+04, 1.02938801e+04,
1.02938801e+04],
[ 9.74408104e+03, 4.00928677e+05, 5.26860131e-11,
4.44089376e-10, -4.34365854e+05, 4.23574788e+05,
4.23574788e+05],
[ 1.28037549e-12, 5.26860131e-11, 2.54435216e+00,
8.37726982e-09, -5.70802610e-11, 4.98909852e-09,
-4.87777437e-09],
[ 1.77809158e-10, 4.57967164e-10, 8.37726982e-09,
7.85534797e+05, 2.08166753e-10, 4.62606474e+05,
-4.62606474e+05],
[-1.05560147e+04, -4.34365854e+05, -5.70802610e-11,
1.94288965e-10, 4.70596664e+05, -4.58902672e+05,
-4.58902672e+05],
[ 1.02938801e+04, 4.23574788e+05, 4.98909852e-09,
4.62606474e+05, -4.58902672e+05, 7.19934445e+05,
1.75069053e+05],
[ 1.02938801e+04, 4.23574788e+05, -4.87777437e-09,
-4.62606474e+05, -4.58902672e+05, 1.75069053e+05,
7.19934445e+05]],
[[ 2.40124530e+02, 9.74457859e+03, -3.28847856e-14,
1.63064013e-10, -1.05559877e+04, 1.02937976e+04,
1.02937976e+04],
[ 9.74457859e+03, 4.00962941e+05, -1.35350617e-12,
2.77555964e-10, -4.34379683e+05, 4.23585960e+05,
4.23585960e+05],
[-3.28847856e-14, -1.35350617e-12, 2.54434746e+00,
6.79968378e-09, 1.46619201e-12, 4.00280787e-09,
-4.00566742e-09],
[ 1.61329290e-10, 3.05311539e-10, 6.79968378e-09,
7.85561377e+05, 2.01227843e-10, 4.62605196e+05,
-4.62605196e+05],
[-1.05559877e+04, -4.34379683e+05, 1.46619201e-12,
2.08166737e-10, 4.70586411e+05, -4.58890168e+05,
-4.58890168e+05],
[ 1.02937976e+04, 4.23585960e+05, 4.00280787e-09,
4.62605196e+05, -4.58890168e+05, 7.19909085e+05,
1.75065139e+05],
[ 1.02937976e+04, 4.23585960e+05, -4.00566742e-09,
-4.62605196e+05, -4.58890168e+05, 1.75065139e+05,
7.19909085e+05]]]),
'scf_dft': <pyscf.dft.uks.UKS at 0x70fd74b42210>,
'dft_correction': np.float64(7.992842503412589e-07),
'e1': np.float64(-95.58915562151495),
'emb_dft': np.float64(-77.43929044338896),
'e_dft_in_dft': np.float64(-75.309145441468)}
Adding arguments directly#
geometry= "3\n\nO 0.0000 0.000 0.115\nH 0.0000 0.754 -0.459\nH 0.0000 -0.754 -0.459"
result = nbed(geometry=geometry, n_active_atoms=2, basis="sto-3g", xc_functional="b3lyp", projector="mu", localization="spade",convergence=1e-6, charge=0, spin=0)
2026-01-27 06:55:44,488: nbed.embed: INFO: Running Nbed with:
config None
keywords {'geometry': '3\n\nO 0.0000 0.000 0.115\nH 0.0000 0.754 -0.459\nH 0.0000 -0.754 -0.459', 'n_active_atoms': 2, 'basis': 'sto-3g', 'xc_functional': 'b3lyp', 'projector': 'mu', 'localization': 'spade', 'convergence': 1e-06, 'charge': 0, 'spin': 0}
2026-01-27 06:55:44,491: nbed.embed: INFO: Validating config from passed arguments.
2026-01-27 06:55:44,493: nbed.driver: INFO: Beginning embedding...
2026-01-27 06:55:44,494: nbed.driver: INFO: Running full system KS DFT.
2026-01-27 06:55:45,411: nbed.driver: INFO: Global KS: -75.3091447400438
2026-01-27 06:55:45,412: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-27 06:55:45,435: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -73.6060882962559 <S^2> = 1.7763568e-15 2S+1 = 1
2026-01-27 06:55:45,972: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -62.237954083830644, converged: True
2026-01-27 06:55:45,973: nbed.driver: INFO: Deleting environment orbitals...
2026-01-27 06:55:45,974: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-27 06:55:45,977: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-27 06:55:45,979: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 1494.760862197948
2026-01-27 06:55:45,979: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-27 06:55:45,986: nbed.driver: INFO: Collcting results...
2026-01-27 06:55:45,987: nbed.driver: INFO: ROHF energy: -75.03845084621085
2026-01-27 06:55:45,989: nbed.driver: INFO: Embedding complete.
Overwriting arguments#
Let’s now overwrite some arguments, using the same config to embed some atoms of methane.
from nbed import nbed
methane = """5
C\t0.0\t0.0\t0.0
H\t0.5288\t0.1610\t0.9359
H\t0.2051\t0.8240\t-0.6786
H\t0.3345\t-0.9314\t-0.4496
H\t-1.0685\t-0.0537\t0.1921
# """
result = nbed(config="test_config.json", geometry=methane)
2026-01-27 06:55:45,995: nbed.embed: INFO: Running Nbed with:
config test_config.json
keywords {'geometry': '5\n\nC\t0.0\t0.0\t0.0\nH\t0.5288\t0.1610\t0.9359\nH\t0.2051\t0.8240\t-0.6786\nH\t0.3345\t-0.9314\t-0.4496\nH\t-1.0685\t-0.0537\t0.1921\n# '}
2026-01-27 06:55:45,996: nbed.embed: INFO: Using config file test_config.json
2026-01-27 06:55:45,997: nbed.embed: INFO: Validating config from file.
2026-01-27 06:55:45,998: nbed.embed: INFO: Overwriting select field with additonal config.
2026-01-27 06:55:45,999: nbed.driver: INFO: Beginning embedding...
2026-01-27 06:55:46,000: nbed.driver: INFO: Running full system KS DFT.
2026-01-27 06:55:46,818: nbed.driver: INFO: Global KS: -40.03862881229452
2026-01-27 06:55:46,819: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-27 06:55:46,832: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -22.4100986242188 <S^2> = -4.4408921e-16 2S+1 = 1
2026-01-27 06:55:47,520: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -12.036000196152422, converged: True
2026-01-27 06:55:47,520: nbed.driver: INFO: Deleting environment orbitals...
2026-01-27 06:55:47,522: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-27 06:55:47,525: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-27 06:55:47,526: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 160058.45733584036
2026-01-27 06:55:47,527: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-27 06:55:47,535: nbed.driver: INFO: Collcting results...
2026-01-27 06:55:47,536: nbed.driver: INFO: ROHF energy: -40.02217026065449
2026-01-27 06:55:47,562: nbed.driver: INFO: Embedded CCSD energy: -0.0001496389491965154
2026-01-27 06:55:47,563: nbed.driver: INFO: CCSD Converged True
2026-01-27 06:55:47,563: nbed.driver: INFO: CCSD Energy ProjectorTypes.MU: -40.02231989960369
2026-01-27 06:55:47,570: nbed.driver: INFO: FCI embedding energy: -12.036149835296296
2026-01-27 06:55:47,570: nbed.driver: INFO: FCI Energy ProjectorTypes.MU: -40.02231989979837
2026-01-27 06:55:47,573: nbed.driver: INFO: Running DFT-in-DFT calculation.
2026-01-27 06:55:48,442: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -11.025863775306252, converged: True
2026-01-27 06:55:48,445: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-27 06:55:48,450: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-27 06:55:48,581: nbed.driver: INFO: Embedding complete.
Using an NbedConfig model.#
The final option is to directly pass the pydantic model that Nbed uses internally to validate data.
from nbed.config import NbedConfig
config = NbedConfig(geometry=geometry, n_active_atoms=2, basis="sto-3g", xc_functional="b3lyp", projector="mu", localization="spade",convergence=1e-6, charge=0, spin=0)
result = nbed(config)
2026-01-27 06:55:48,591: nbed.embed: INFO: Running Nbed with:
config geometry='3\n\nO 0.0000 0.000 0.115\nH 0.0000 0.754 -0.459\nH 0.0000 -0.754 -0.459' n_active_atoms=2 basis='sto-3g' xc_functional='b3lyp' projector=<ProjectorTypes.MU: 'mu'> localization=<OccupiedLocalizerTypes.SPADE: 'spade'> convergence=1e-06 charge=0 spin=0 unit='angstrom' symmetry=False restricted_global=False restricted_active=False savefile=None run_ccsd_emb=False run_fci_emb=False run_dft_in_dft=False mm_coords=None mm_charges=None mm_radii=None mu_level_shift=1000000.0 init_huzinaga_rhf_with_mu=False virtual_localization=<VirtualLocalizerTypes.CONCENTRIC: 'cl'> n_mo_overwrite=(None, None) occupied_threshold=0.95 virtual_threshold=0.95 max_shells=4 norm_cutoff=0.05 overlap_cutoff=1e-05 force_unrestricted=False max_ram_memory=4000 max_hf_cycles=50 max_dft_cycles=50 build_hamiltonian=False
keywords {}
2026-01-27 06:55:48,592: nbed.embed: INFO: Using validated config.
2026-01-27 06:55:48,594: nbed.driver: INFO: Beginning embedding...
2026-01-27 06:55:48,595: nbed.driver: INFO: Running full system KS DFT.
2026-01-27 06:55:49,409: nbed.driver: INFO: Global KS: -75.30914474004378
2026-01-27 06:55:49,409: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-27 06:55:49,463: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -73.6060882962559 <S^2> = 3.5527137e-15 2S+1 = 1
2026-01-27 06:55:49,982: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -62.237954083869354, converged: True
2026-01-27 06:55:49,983: nbed.driver: INFO: Deleting environment orbitals...
2026-01-27 06:55:49,985: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-27 06:55:49,988: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-27 06:55:49,990: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 1494.7608621979907
2026-01-27 06:55:49,990: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-27 06:55:49,997: nbed.driver: INFO: Collcting results...
2026-01-27 06:55:49,998: nbed.driver: INFO: ROHF energy: -75.03845084630777
2026-01-27 06:55:50,000: nbed.driver: INFO: Embedding complete.
config = NbedConfig(**config_from_file)
result = nbed(config)
2026-01-27 06:55:50,006: nbed.embed: INFO: Running Nbed with:
config geometry='3\n\nO 0.0000 0.000 0.115\nH 0.0000 0.754 -0.459\nH 0.0000 -0.754 -0.459' n_active_atoms=1 basis='STO-3G' xc_functional='b3lyp' projector=<ProjectorTypes.MU: 'mu'> localization=<OccupiedLocalizerTypes.SPADE: 'spade'> convergence=1e-06 charge=0 spin=0 unit='angstrom' symmetry=False restricted_global=False restricted_active=False savefile=None run_ccsd_emb=True run_fci_emb=True run_dft_in_dft=True mm_coords=None mm_charges=None mm_radii=None mu_level_shift=1000000.0 init_huzinaga_rhf_with_mu=False virtual_localization=<VirtualLocalizerTypes.CONCENTRIC: 'cl'> n_mo_overwrite=(None, None) occupied_threshold=0.95 virtual_threshold=0.95 max_shells=4 norm_cutoff=0.05 overlap_cutoff=1e-05 force_unrestricted=False max_ram_memory=4000 max_hf_cycles=50 max_dft_cycles=50 build_hamiltonian=False
keywords {}
2026-01-27 06:55:50,007: nbed.embed: INFO: Using validated config.
2026-01-27 06:55:50,008: nbed.driver: INFO: Beginning embedding...
2026-01-27 06:55:50,008: nbed.driver: INFO: Running full system KS DFT.
2026-01-27 06:55:50,696: nbed.driver: INFO: Global KS: -75.3091447400438
2026-01-27 06:55:50,698: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-27 06:55:50,793: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -69.5830769556182 <S^2> = 5.4622973e-14 2S+1 = 1
2026-01-27 06:55:51,255: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -51.60900712888484, converged: True
2026-01-27 06:55:51,256: nbed.driver: INFO: Deleting environment orbitals...
2026-01-27 06:55:51,257: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:51,261: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:51,262: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 50547.920658951836
2026-01-27 06:55:51,263: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-27 06:55:51,271: nbed.driver: INFO: Collcting results...
2026-01-27 06:55:51,272: nbed.driver: INFO: ROHF energy: -75.12380801475629
2026-01-27 06:55:51,335: nbed.driver: INFO: Embedded CCSD energy: -0.004777651135850692
2026-01-27 06:55:51,337: nbed.driver: INFO: CCSD Converged True
2026-01-27 06:55:51,337: nbed.driver: INFO: CCSD Energy ProjectorTypes.MU: -75.12858566589215
2026-01-27 06:55:51,407: nbed.driver: INFO: FCI embedding energy: -51.61378461905838
2026-01-27 06:55:51,409: nbed.driver: INFO: FCI Energy ProjectorTypes.MU: -75.12858550492983
2026-01-27 06:55:51,410: nbed.driver: INFO: Running DFT-in-DFT calculation.
2026-01-27 06:55:52,046: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -49.698903802547704, converged: True
2026-01-27 06:55:52,049: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:52,054: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-27 06:55:52,125: nbed.driver: INFO: Embedding complete.
Command-line Interface#
It is also possible to run nbed from the command line, the nbed command will be installed with the package and allows you to input the path to a config file.
This can be useful for running nbed over ssh.
Results#
Results for the mu and huzinaga projectors are stored separately, let’s take a look at what’s included in there.
result.mu.keys()
dict_keys(['scf', 'v_emb', 'e_act', 'e_env', 'mo_energies_emb_pre_del', 'mo_energies_emb_post_del', 'correction', 'beta_correction', 'cl', 'e_rhf', 'classical_energy', 'e_ccsd', 'ccsd_emb', 'e_fci', 'fci_emb', 'hf_emb', 'v_emb_dft', 'scf_dft', 'dft_correction', 'e1', 'emb_dft', 'e_dft_in_dft'])
PySCf Object#
If you want to contnue to use PySCF methods on the embedded system, you can get the embedded PySCF object result.mu["embedded_scf"] (usually a UKS object), together with a correction to the energy which represents the environment result.mu["classical_energy"].
result.mu["scf"]
<pyscf.scf.uhf.UHF at 0x70fd74aa55b0>
result.mu["classical_energy"]
np.float64(-14.22908666419363)
Second Quantised Hamiltonian#
The second quantised electronic structure hamiltonian will be the main thing you need if you’re planning to run a quantum algorithm. You’ll need to pair this with a Fermion-Qubit encoding to create a qubit Hamiltonian that’s well optimised to the device you intend to use.
Nbed used the spin-orbit format, where the two spins of molecular orbital \(i\): \((i_{\uparrow}, i_{\downarrow})\) map to indices \((2i, 2i+1)\)
constant, one_e_terms, two_e_terms = result.mu["second_quantised"]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[11], line 1
----> 1 constant, one_e_terms, two_e_terms = result.mu["second_quantised"]
KeyError: 'second_quantised'
constant, one_e_terms.shape, two_e_terms.shape
Other information#
Most of the relevant information created or used in the embedding is accessible:
for k, v in result.mu.items():
print(f"{k}: {type(v)}")