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-26 21:17:14,993: nbed.embed: INFO: Running Nbed with:
config test_config.json
keywords {}
2026-01-26 21:17:14,993: nbed.embed: INFO: Using config file test_config.json
2026-01-26 21:17:14,995: nbed.embed: INFO: Validating config from file.
2026-01-26 21:17:14,995: nbed.driver: INFO: Beginning embedding...
2026-01-26 21:17:14,996: nbed.driver: INFO: Running full system KS DFT.
/home/docs/checkouts/readthedocs.org/user_builds/nbed/envs/latest/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-26 21:17:15,764: nbed.driver: INFO: Global KS: -75.30914474004385
2026-01-26 21:17:15,765: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-26 21:17:15,786: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -69.5830769556182 <S^2> = 5.062617e-14 2S+1 = 1
2026-01-26 21:17:16,779: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -51.60900712913437, converged: True
2026-01-26 21:17:16,780: nbed.driver: INFO: Deleting environment orbitals...
2026-01-26 21:17:16,781: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:16,782: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:16,783: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 50547.92065895281
2026-01-26 21:17:16,784: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-26 21:17:16,789: nbed.driver: INFO: Collcting results...
2026-01-26 21:17:16,789: nbed.driver: INFO: ROHF energy: -75.12380801465659
2026-01-26 21:17:16,850: nbed.driver: INFO: Embedded CCSD energy: -0.00477765113479322
2026-01-26 21:17:16,850: nbed.driver: INFO: CCSD Converged True
2026-01-26 21:17:16,851: nbed.driver: INFO: CCSD Energy ProjectorTypes.MU: -75.12858566579139
2026-01-26 21:17:16,909: nbed.driver: INFO: FCI embedding energy: -51.61378461918635
2026-01-26 21:17:16,909: nbed.driver: INFO: FCI Energy ProjectorTypes.MU: -75.12858550470858
2026-01-26 21:17:16,910: nbed.driver: INFO: Running DFT-in-DFT calculation.
2026-01-26 21:17:17,544: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -49.69890380276195, converged: True
2026-01-26 21:17:17,545: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:17,547: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:17,665: nbed.driver: INFO: Embedding complete.
result.mu
{'scf': <pyscf.scf.uhf.UHF at 0x7cc356161590>,
'v_emb': array([[[ 2.40120585e+02, 9.74408104e+03, 1.20281702e-12,
3.08780713e-10, -1.05560147e+04, 1.02938801e+04,
1.02938801e+04],
[ 9.74408104e+03, 4.00928677e+05, 4.94946137e-11,
-2.77555996e-11, -4.34365854e+05, 4.23574788e+05,
4.23574788e+05],
[ 1.20281702e-12, 4.94946137e-11, 2.54435216e+00,
3.40140075e-09, -5.36226913e-11, 2.05540020e-09,
-1.95081933e-09],
[ 3.05311266e-10, -5.55111752e-11, 3.40140075e-09,
7.85534797e+05, -3.60822406e-10, 4.62606474e+05,
-4.62606474e+05],
[-1.05560147e+04, -4.34365854e+05, -5.36226913e-11,
-3.46944618e-10, 4.70596664e+05, -4.58902672e+05,
-4.58902672e+05],
[ 1.02938801e+04, 4.23574788e+05, 2.05540020e-09,
4.62606474e+05, -4.58902672e+05, 7.19934445e+05,
1.75069053e+05],
[ 1.02938801e+04, 4.23574788e+05, -1.95081933e-09,
-4.62606474e+05, -4.58902672e+05, 1.75069053e+05,
7.19934445e+05]],
[[ 2.40124530e+02, 9.74457859e+03, -2.64155699e-13,
3.46944196e-12, -1.05559877e+04, 1.02937976e+04,
1.02937976e+04],
[ 9.74457859e+03, 4.00962941e+05, -1.08702665e-11,
-5.55111712e-11, -4.34379683e+05, 4.23585960e+05,
4.23585960e+05],
[-2.64155699e-13, -1.08702665e-11, 2.54434746e+00,
1.55013396e-08, 1.17761662e-11, 9.11703673e-09,
-9.14000378e-09],
[ 9.54097413e-12, -4.16333834e-11, 1.55013396e-08,
7.85561377e+05, -2.15105708e-10, 4.62605196e+05,
-4.62605196e+05],
[-1.05559877e+04, -4.34379683e+05, 1.17761662e-11,
-2.35922390e-10, 4.70586411e+05, -4.58890168e+05,
-4.58890168e+05],
[ 1.02937976e+04, 4.23585960e+05, 9.11703673e-09,
4.62605196e+05, -4.58890168e+05, 7.19909085e+05,
1.75065139e+05],
[ 1.02937976e+04, 4.23585960e+05, -9.14000378e-09,
-4.62605196e+05, -4.58890168e+05, 1.75065139e+05,
7.19909085e+05]]]),
'e_act': np.float64(-77.43928894219196),
'e_env': np.float64(-23.388702083915355),
'mo_energies_emb_pre_del': array([[-2.02201775e+01, -6.92405356e-01, -3.65626850e-01,
6.33627747e-01, 7.54197931e-01, 9.99999537e+05,
9.99999834e+05],
[-2.02201774e+01, -6.92388605e-01, -3.65626402e-01,
6.33606528e-01, 7.54193604e-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.6923886 , -0.3656264 , 0.63360653,
0.7541936 , 0. , 0. ]]),
'correction': np.float64(8.179622720461339),
'beta_correction': np.float64(8.179608146019746),
'cl': <nbed.localizers.virtual.concentric.ConcentricLocalizer at 0x7cc358b32270>,
'e_rhf': np.float64(-75.12380801465659),
'classical_energy': np.float64(-14.229086663844399),
'e_ccsd': np.float64(-75.12858566579139),
'ccsd_emb': np.float64(-60.89949900194699),
'e_fci': np.float64(-75.12858550470858),
'fci_emb': np.float64(-60.89949884086417),
'hf_emb': np.float64(-60.89472135081219),
'v_emb_dft': array([[[ 2.40120585e+02, 9.74408104e+03, 1.20281702e-12,
3.08780713e-10, -1.05560147e+04, 1.02938801e+04,
1.02938801e+04],
[ 9.74408104e+03, 4.00928677e+05, 4.94946137e-11,
-2.77555996e-11, -4.34365854e+05, 4.23574788e+05,
4.23574788e+05],
[ 1.20281702e-12, 4.94946137e-11, 2.54435216e+00,
3.40140075e-09, -5.36226913e-11, 2.05540020e-09,
-1.95081933e-09],
[ 3.05311266e-10, -5.55111752e-11, 3.40140075e-09,
7.85534797e+05, -3.60822406e-10, 4.62606474e+05,
-4.62606474e+05],
[-1.05560147e+04, -4.34365854e+05, -5.36226913e-11,
-3.46944618e-10, 4.70596664e+05, -4.58902672e+05,
-4.58902672e+05],
[ 1.02938801e+04, 4.23574788e+05, 2.05540020e-09,
4.62606474e+05, -4.58902672e+05, 7.19934445e+05,
1.75069053e+05],
[ 1.02938801e+04, 4.23574788e+05, -1.95081933e-09,
-4.62606474e+05, -4.58902672e+05, 1.75069053e+05,
7.19934445e+05]],
[[ 2.40124530e+02, 9.74457859e+03, -2.64155699e-13,
3.46944196e-12, -1.05559877e+04, 1.02937976e+04,
1.02937976e+04],
[ 9.74457859e+03, 4.00962941e+05, -1.08702665e-11,
-5.55111712e-11, -4.34379683e+05, 4.23585960e+05,
4.23585960e+05],
[-2.64155699e-13, -1.08702665e-11, 2.54434746e+00,
1.55013396e-08, 1.17761662e-11, 9.11703673e-09,
-9.14000378e-09],
[ 9.54097413e-12, -4.16333834e-11, 1.55013396e-08,
7.85561377e+05, -2.15105708e-10, 4.62605196e+05,
-4.62605196e+05],
[-1.05559877e+04, -4.34379683e+05, 1.17761662e-11,
-2.35922390e-10, 4.70586411e+05, -4.58890168e+05,
-4.58890168e+05],
[ 1.02937976e+04, 4.23585960e+05, 9.11703673e-09,
4.62605196e+05, -4.58890168e+05, 7.19909085e+05,
1.75065139e+05],
[ 1.02937976e+04, 4.23585960e+05, -9.14000378e-09,
-4.62605196e+05, -4.58890168e+05, 1.75065139e+05,
7.19909085e+05]]]),
'scf_dft': <pyscf.dft.uks.UKS at 0x7cc356162210>,
'dft_correction': np.float64(7.992688042524065e-07),
'e1': np.float64(-95.58915562153939),
'emb_dft': np.float64(-77.43929044338242),
'e_dft_in_dft': np.float64(-75.30914544147693)}
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-26 21:17:17,680: 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-26 21:17:17,682: nbed.embed: INFO: Validating config from passed arguments.
2026-01-26 21:17:17,683: nbed.driver: INFO: Beginning embedding...
2026-01-26 21:17:17,684: nbed.driver: INFO: Running full system KS DFT.
2026-01-26 21:17:18,261: nbed.driver: INFO: Global KS: -75.30914474004382
2026-01-26 21:17:18,261: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-26 21:17:18,327: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -73.6060882962559 <S^2> = 8.8817842e-16 2S+1 = 1
2026-01-26 21:17:18,929: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -62.23795408388378, converged: True
2026-01-26 21:17:18,930: nbed.driver: INFO: Deleting environment orbitals...
2026-01-26 21:17:18,932: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-26 21:17:18,934: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-26 21:17:18,935: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 1494.760862197916
2026-01-26 21:17:18,935: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-26 21:17:18,941: nbed.driver: INFO: Collcting results...
2026-01-26 21:17:18,941: nbed.driver: INFO: ROHF energy: -75.03845084638039
2026-01-26 21:17:18,942: 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-26 21:17:18,947: 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-26 21:17:18,947: nbed.embed: INFO: Using config file test_config.json
2026-01-26 21:17:18,948: nbed.embed: INFO: Validating config from file.
2026-01-26 21:17:18,949: nbed.embed: INFO: Overwriting select field with additonal config.
2026-01-26 21:17:18,950: nbed.driver: INFO: Beginning embedding...
2026-01-26 21:17:18,950: nbed.driver: INFO: Running full system KS DFT.
2026-01-26 21:17:19,563: nbed.driver: INFO: Global KS: -40.03862881229453
2026-01-26 21:17:19,563: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-26 21:17:19,584: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -22.4100986242189 <S^2> = -8.8817842e-16 2S+1 = 1
2026-01-26 21:17:20,132: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -12.036000196164942, converged: True
2026-01-26 21:17:20,132: nbed.driver: INFO: Deleting environment orbitals...
2026-01-26 21:17:20,134: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-26 21:17:20,135: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-26 21:17:20,136: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 160058.45733584012
2026-01-26 21:17:20,137: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-26 21:17:20,143: nbed.driver: INFO: Collcting results...
2026-01-26 21:17:20,144: nbed.driver: INFO: ROHF energy: -40.022170260654775
2026-01-26 21:17:20,164: nbed.driver: INFO: Embedded CCSD energy: -0.00014963894919663268
2026-01-26 21:17:20,164: nbed.driver: INFO: CCSD Converged True
2026-01-26 21:17:20,164: nbed.driver: INFO: CCSD Energy ProjectorTypes.MU: -40.02231989960397
2026-01-26 21:17:20,170: nbed.driver: INFO: FCI embedding energy: -12.036149835308592
2026-01-26 21:17:20,170: nbed.driver: INFO: FCI Energy ProjectorTypes.MU: -40.02231989979843
2026-01-26 21:17:20,170: nbed.driver: INFO: Running DFT-in-DFT calculation.
2026-01-26 21:17:20,878: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -11.025863775318083, converged: True
2026-01-26 21:17:20,880: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-26 21:17:20,882: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6, 7, 8]
2026-01-26 21:17:20,971: 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-26 21:17:20,980: 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-26 21:17:20,981: nbed.embed: INFO: Using validated config.
2026-01-26 21:17:20,982: nbed.driver: INFO: Beginning embedding...
2026-01-26 21:17:20,983: nbed.driver: INFO: Running full system KS DFT.
2026-01-26 21:17:21,532: nbed.driver: INFO: Global KS: -75.30914474004382
2026-01-26 21:17:21,532: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-26 21:17:21,550: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -73.6060882962559 <S^2> = 0 2S+1 = 1
2026-01-26 21:17:21,957: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -62.237954083907766, converged: True
2026-01-26 21:17:21,961: nbed.driver: INFO: Deleting environment orbitals...
2026-01-26 21:17:21,963: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-26 21:17:21,965: nbed.driver: INFO: Orbital indices removed from embedded system: [6]
2026-01-26 21:17:21,966: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 1494.7608621979514
2026-01-26 21:17:21,966: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-26 21:17:21,988: nbed.driver: INFO: Collcting results...
2026-01-26 21:17:21,989: nbed.driver: INFO: ROHF energy: -75.03845084640439
2026-01-26 21:17:21,991: nbed.driver: INFO: Embedding complete.
config = NbedConfig(**config_from_file)
result = nbed(config)
2026-01-26 21:17:21,997: 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-26 21:17:21,998: nbed.embed: INFO: Using validated config.
2026-01-26 21:17:21,998: nbed.driver: INFO: Beginning embedding...
2026-01-26 21:17:21,998: nbed.driver: INFO: Running full system KS DFT.
2026-01-26 21:17:22,701: nbed.driver: INFO: Global KS: -75.30914474004379
2026-01-26 21:17:22,701: nbed.driver: INFO: Localizing occupied orbitals...
2026-01-26 21:17:22,724: nbed.driver: INFO: Projecting out environment...
converged SCF energy = -69.5830769556181 <S^2> = 5.3290705e-14 2S+1 = 1
2026-01-26 21:17:23,214: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -51.609007128976856, converged: True
2026-01-26 21:17:23,214: nbed.driver: INFO: Deleting environment orbitals...
2026-01-26 21:17:23,216: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:23,217: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:23,218: nbed.driver: INFO: V emb mean ProjectorTypes.MU: 50547.9206589523
2026-01-26 21:17:23,220: nbed.driver: INFO: Performing Concentric Localization of virtuals ...
2026-01-26 21:17:23,229: nbed.driver: INFO: Collcting results...
2026-01-26 21:17:23,229: nbed.driver: INFO: ROHF energy: -75.12380801502296
2026-01-26 21:17:23,271: nbed.driver: INFO: Embedded CCSD energy: -0.004777651135424664
2026-01-26 21:17:23,272: nbed.driver: INFO: CCSD Converged True
2026-01-26 21:17:23,272: nbed.driver: INFO: CCSD Energy ProjectorTypes.MU: -75.12858566615837
2026-01-26 21:17:23,335: nbed.driver: INFO: FCI embedding energy: -51.613784618992185
2026-01-26 21:17:23,336: nbed.driver: INFO: FCI Energy ProjectorTypes.MU: -75.12858550503829
2026-01-26 21:17:23,337: nbed.driver: INFO: Running DFT-in-DFT calculation.
2026-01-26 21:17:23,796: nbed.driver: INFO: Embedded scf energy MU_SHIFT: -49.69890380255009, converged: True
2026-01-26 21:17:23,799: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:23,801: nbed.driver: INFO: Orbital indices removed from embedded system: [5, 6]
2026-01-26 21:17:23,837: 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 0x7cc35d8db2f0>
result.mu["classical_energy"]
np.float64(-14.229086664368271)
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)}")