Skip to content

Commit 750c9ab

Browse files
committed
Add interface for diagonal term.
1 parent de9a851 commit 750c9ab

File tree

6 files changed

+47
-0
lines changed

6 files changed

+47
-0
lines changed

qmb/fcidump.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ def apply_within(self, configs_i: torch.Tensor, psi_i: torch.Tensor, configs_j:
192192
def find_relative(self, configs_i: torch.Tensor, psi_i: torch.Tensor, count_selected: int, configs_exclude: torch.Tensor | None = None) -> torch.Tensor:
193193
return self.hamiltonian.find_relative(configs_i, psi_i, count_selected, configs_exclude)
194194

195+
def diagonal_term(self, configs: torch.Tensor) -> torch.Tensor:
196+
return self.hamiltonian.diagonal_term(configs)
197+
195198
def single_relative(self, configs: torch.Tensor) -> torch.Tensor:
196199
return self.hamiltonian.single_relative(configs)
197200

qmb/hamiltonian.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,26 @@ def find_relative(
165165
configs_j = _find_relative(configs_i, torch.view_as_real(psi_i), count_selected, self.site, self.kind, self.coef, configs_exclude)
166166
return configs_j
167167

168+
def diagonal_term(self, configs: torch.Tensor) -> torch.Tensor:
169+
"""
170+
Get the diagonal term of the Hamiltonian for the given configurations.
171+
172+
Parameters
173+
----------
174+
configs : torch.Tensor
175+
A uint8 tensor of shape [batch_size, n_qubytes] representing the input configurations.
176+
177+
Returns
178+
-------
179+
torch.Tensor
180+
A complex64 tensor of shape [batch_size] representing the diagonal term of the Hamiltonian for the given configurations.
181+
"""
182+
self._prepare_data(configs.device)
183+
_diagonal_term: typing.Callable[[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor], torch.Tensor]
184+
_diagonal_term = getattr(self._load_module(configs.device.type, configs.size(1), self.particle_cut), "diagonal_term")
185+
psi_result = torch.view_as_complex(_diagonal_term(configs, self.site, self.kind, self.coef))
186+
return psi_result
187+
168188
def single_relative(self, configs: torch.Tensor) -> torch.Tensor:
169189
"""
170190
Find a single relative configuration for each configurations.

qmb/hubbard.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ def apply_within(self, configs_i: torch.Tensor, psi_i: torch.Tensor, configs_j:
112112
def find_relative(self, configs_i: torch.Tensor, psi_i: torch.Tensor, count_selected: int, configs_exclude: torch.Tensor | None = None) -> torch.Tensor:
113113
return self.hamiltonian.find_relative(configs_i, psi_i, count_selected, configs_exclude)
114114

115+
def diagonal_term(self, configs: torch.Tensor) -> torch.Tensor:
116+
return self.hamiltonian.diagonal_term(configs)
117+
115118
def single_relative(self, configs: torch.Tensor) -> torch.Tensor:
116119
return self.hamiltonian.single_relative(configs)
117120

qmb/ising.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ def apply_within(self, configs_i: torch.Tensor, psi_i: torch.Tensor, configs_j:
221221
def find_relative(self, configs_i: torch.Tensor, psi_i: torch.Tensor, count_selected: int, configs_exclude: torch.Tensor | None = None) -> torch.Tensor:
222222
return self.hamiltonian.find_relative(configs_i, psi_i, count_selected, configs_exclude)
223223

224+
def diagonal_term(self, configs: torch.Tensor) -> torch.Tensor:
225+
return self.hamiltonian.diagonal_term(configs)
226+
224227
def single_relative(self, configs: torch.Tensor) -> torch.Tensor:
225228
return self.hamiltonian.single_relative(configs)
226229

qmb/model_dict.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,21 @@ def find_relative(self, configs_i: torch.Tensor, psi_i: torch.Tensor, count_sele
173173
The relative configurations.
174174
"""
175175

176+
def diagonal_term(self, configs: torch.Tensor) -> torch.Tensor:
177+
"""
178+
Calculate the diagonal term for the given configurations.
179+
180+
Parameters
181+
----------
182+
configs : torch.Tensor
183+
The configurations to calculate the diagonal term for.
184+
185+
Returns
186+
-------
187+
torch.Tensor
188+
The diagonal term of the configurations.
189+
"""
190+
176191
def single_relative(self, configs: torch.Tensor) -> torch.Tensor:
177192
"""
178193
Find a single relative configuration for each configurations.

qmb/openfermion.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ def apply_within(self, configs_i: torch.Tensor, psi_i: torch.Tensor, configs_j:
8686
def find_relative(self, configs_i: torch.Tensor, psi_i: torch.Tensor, count_selected: int, configs_exclude: torch.Tensor | None = None) -> torch.Tensor:
8787
return self.hamiltonian.find_relative(configs_i, psi_i, count_selected, configs_exclude)
8888

89+
def diagonal_term(self, configs: torch.Tensor) -> torch.Tensor:
90+
return self.hamiltonian.diagonal_term(configs)
91+
8992
def single_relative(self, configs: torch.Tensor) -> torch.Tensor:
9093
return self.hamiltonian.single_relative(configs)
9194

0 commit comments

Comments
 (0)