Skip to content

Commit 7a8369f

Browse files
authored
Merge branch 'main' into gqsp-hamiltonian-simulation
2 parents ddee969 + 6b6900f commit 7a8369f

File tree

155 files changed

+3704
-1036
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+3704
-1036
lines changed

dev_tools/autogenerate-bloqs-notebooks-v2.py

+55-18
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@
4848
from qualtran_dev_tools.git_tools import get_git_root
4949
from qualtran_dev_tools.jupyter_autogen_v2 import NotebookSpecV2, render_notebook
5050

51-
import qualtran.bloqs.and_bloq
52-
import qualtran.bloqs.apply_gate_to_lth_target
5351
import qualtran.bloqs.arithmetic.addition
5452
import qualtran.bloqs.arithmetic.sorting
5553
import qualtran.bloqs.basic_gates.swap
@@ -65,14 +63,19 @@
6563
import qualtran.bloqs.chemistry.thc.prepare
6664
import qualtran.bloqs.chemistry.trotter.grid_ham.inverse_sqrt
6765
import qualtran.bloqs.chemistry.trotter.grid_ham.qvr
66+
import qualtran.bloqs.data_loading.qrom
6867
import qualtran.bloqs.factoring.mod_exp
69-
import qualtran.bloqs.multi_control_multi_target_pauli
70-
import qualtran.bloqs.prepare_uniform_superposition
68+
import qualtran.bloqs.mcmt.and_bloq
69+
import qualtran.bloqs.multiplexers.apply_gate_to_lth_target
70+
import qualtran.bloqs.phase_estimation.lp_resource_state
71+
import qualtran.bloqs.qft.two_bit_ffft
7172
import qualtran.bloqs.reflection
7273
import qualtran.bloqs.rotations.phasing_via_cost_function
7374
import qualtran.bloqs.rotations.quantum_variable_rotation
74-
import qualtran.bloqs.state_preparation.state_preparation_via_rotation
75-
import qualtran.bloqs.swap_network
75+
import qualtran.bloqs.state_preparation.prepare_uniform_superposition
76+
import qualtran.bloqs.swap_network.cswap_approx
77+
import qualtran.bloqs.swap_network.multiplexed_cswap
78+
import qualtran.bloqs.swap_network.swap_with_zero
7679

7780
SOURCE_DIR = get_git_root() / 'qualtran/'
7881

@@ -82,6 +85,11 @@
8285
module=qualtran.bloqs.basic_gates.t_gate,
8386
bloq_specs=[qualtran.bloqs.basic_gates.t_gate._T_GATE_DOC],
8487
),
88+
NotebookSpecV2(
89+
title='S Gate',
90+
module=qualtran.bloqs.basic_gates.s_gate,
91+
bloq_specs=[qualtran.bloqs.basic_gates.s_gate._S_GATE_DOC],
92+
),
8593
NotebookSpecV2(
8694
title='Toffoli',
8795
module=qualtran.bloqs.basic_gates.toffoli,
@@ -92,9 +100,9 @@
92100
module=qualtran.bloqs.swap_network,
93101
bloq_specs=[
94102
qualtran.bloqs.basic_gates.swap._CSWAP_DOC,
95-
qualtran.bloqs.swap_network._APPROX_CSWAP_DOC,
96-
qualtran.bloqs.swap_network._SWZ_DOC,
97-
qualtran.bloqs.swap_network._MULTIPLEXED_CSWAP_DOC,
103+
qualtran.bloqs.swap_network.cswap_approx._APPROX_CSWAP_DOC,
104+
qualtran.bloqs.swap_network.swap_with_zero._SWZ_DOC,
105+
qualtran.bloqs.swap_network.multiplexed_cswap._MULTIPLEXED_CSWAP_DOC,
98106
],
99107
),
100108
NotebookSpecV2(
@@ -111,16 +119,23 @@
111119
),
112120
NotebookSpecV2(
113121
title='Prepare Uniform Superposition',
114-
module=qualtran.bloqs.prepare_uniform_superposition,
115-
bloq_specs=[qualtran.bloqs.prepare_uniform_superposition._PREP_UNIFORM_DOC],
122+
module=qualtran.bloqs.state_preparation.prepare_uniform_superposition,
123+
bloq_specs=[
124+
qualtran.bloqs.state_preparation.prepare_uniform_superposition._PREP_UNIFORM_DOC
125+
],
116126
directory=f'{SOURCE_DIR}/bloqs/',
117127
),
118128
NotebookSpecV2(
119129
title='Apply to Lth Target',
120-
module=qualtran.bloqs.apply_gate_to_lth_target,
121-
bloq_specs=[qualtran.bloqs.apply_gate_to_lth_target._APPLYLTH_DOC],
130+
module=qualtran.bloqs.multiplexers.apply_gate_to_lth_target,
131+
bloq_specs=[qualtran.bloqs.multiplexers.apply_gate_to_lth_target._APPLYLTH_DOC],
122132
directory=f'{SOURCE_DIR}/bloqs/',
123133
),
134+
NotebookSpecV2(
135+
title='QROM',
136+
module=qualtran.bloqs.data_loading.qrom,
137+
bloq_specs=[qualtran.bloqs.data_loading.qrom._QROM_DOC],
138+
),
124139
# --------------------------------------------------------------------------
125140
# ----- Chemistry ------------------------------------------------------
126141
# --------------------------------------------------------------------------
@@ -198,8 +213,11 @@
198213
),
199214
NotebookSpecV2(
200215
title='And',
201-
module=qualtran.bloqs.and_bloq,
202-
bloq_specs=[qualtran.bloqs.and_bloq._AND_DOC, qualtran.bloqs.and_bloq._MULTI_AND_DOC],
216+
module=qualtran.bloqs.mcmt.and_bloq,
217+
bloq_specs=[
218+
qualtran.bloqs.mcmt.and_bloq._AND_DOC,
219+
qualtran.bloqs.mcmt.and_bloq._MULTI_AND_DOC,
220+
],
203221
directory=f'{SOURCE_DIR}/bloqs/',
204222
),
205223
NotebookSpecV2(
@@ -219,10 +237,10 @@
219237
),
220238
NotebookSpecV2(
221239
title='Multi-Paulis',
222-
module=qualtran.bloqs.multi_control_multi_target_pauli,
240+
module=qualtran.bloqs.mcmt.multi_control_multi_target_pauli,
223241
bloq_specs=[
224-
qualtran.bloqs.multi_control_multi_target_pauli._C_MULTI_NOT_DOC,
225-
qualtran.bloqs.multi_control_multi_target_pauli._CC_PAULI_DOC,
242+
qualtran.bloqs.mcmt.multi_control_multi_target_pauli._C_MULTI_NOT_DOC,
243+
qualtran.bloqs.mcmt.multi_control_multi_target_pauli._CC_PAULI_DOC,
226244
],
227245
directory=f'{SOURCE_DIR}/bloqs/',
228246
),
@@ -300,6 +318,25 @@
300318
bloq_specs=[qualtran.bloqs.rotations.phasing_via_cost_function._PHASING_VIA_COST_FUNCTION],
301319
directory=f'{SOURCE_DIR}/bloqs/rotations/',
302320
),
321+
# --------------------------------------------------------------------------
322+
# ----- QFT -----------------------------------------------------
323+
# --------------------------------------------------------------------------
324+
NotebookSpecV2(
325+
title='Two Bit FFFT Gate',
326+
module=qualtran.bloqs.qft.two_bit_ffft,
327+
bloq_specs=[qualtran.bloqs.qft.two_bit_ffft._TWO_BIT_FFFT_DOC],
328+
),
329+
# --------------------------------------------------------------------------
330+
# ----- Phase Estimation -----------------------------------------------------
331+
# --------------------------------------------------------------------------
332+
NotebookSpecV2(
333+
title='Optimal resource states for Phase Estimation by A. Luis and J. Peřina',
334+
module=qualtran.bloqs.phase_estimation.lp_resource_state,
335+
bloq_specs=[
336+
qualtran.bloqs.phase_estimation.lp_resource_state._CC_LPRS_INTERIM_PREP_DOC,
337+
qualtran.bloqs.phase_estimation.lp_resource_state._CC_LP_RESOURCE_STATE_DOC,
338+
],
339+
),
303340
]
304341

305342

dev_tools/autogenerate-bloqs-notebooks.py

-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import qualtran.bloqs.basic_gates.rotation_test
5454
import qualtran.bloqs.basic_gates.x_basis_test
5555
import qualtran.bloqs.basic_gates.z_basis_test
56-
import qualtran.bloqs.swap_network_test
5756

5857
SOURCE_DIR = get_git_root() / 'qualtran/'
5958

dev_tools/bloq-report-card.ipynb

+66-8
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"metadata": {},
1616
"outputs": [],
1717
"source": [
18-
"from qualtran_dev_tools.bloq_report_card import get_bloq_report_card, show_bloq_report_card\n",
18+
"from qualtran_dev_tools.bloq_report_card import get_bloq_report_card, show_bloq_report_card, summarize_results\n",
1919
"report_card = get_bloq_report_card()"
2020
]
2121
},
@@ -42,7 +42,17 @@
4242
"metadata": {},
4343
"outputs": [],
4444
"source": [
45-
"show_bloq_report_card(report_card.query('package == \"qualtran.bloqs.basic_gates\"'))"
45+
"show_bloq_report_card(report_card.query('package == \"basic_gates\"'))"
46+
]
47+
},
48+
{
49+
"cell_type": "code",
50+
"execution_count": null,
51+
"id": "f5ebb87f-8beb-467a-9e6c-ff228adaca2e",
52+
"metadata": {},
53+
"outputs": [],
54+
"source": [
55+
"summarize_results(report_card.query('package == \"basic_gates\"'))"
4656
]
4757
},
4858
{
@@ -60,7 +70,17 @@
6070
"metadata": {},
6171
"outputs": [],
6272
"source": [
63-
"show_bloq_report_card(report_card.query('package == \"qualtran.bloqs.arithmetic\"'))"
73+
"show_bloq_report_card(report_card.query('package == \"arithmetic\"'))"
74+
]
75+
},
76+
{
77+
"cell_type": "code",
78+
"execution_count": null,
79+
"id": "b6daf297-f587-44a6-8bfb-907e421f024d",
80+
"metadata": {},
81+
"outputs": [],
82+
"source": [
83+
"summarize_results(report_card.query('package == \"arithmetic\"'))"
6484
]
6585
},
6686
{
@@ -78,7 +98,17 @@
7898
"metadata": {},
7999
"outputs": [],
80100
"source": [
81-
"show_bloq_report_card(report_card.query('package.str.startswith(\"qualtran.bloqs.chemistry\")'))"
101+
"show_bloq_report_card(report_card.query('package.str.startswith(\"chemistry\")'))"
102+
]
103+
},
104+
{
105+
"cell_type": "code",
106+
"execution_count": null,
107+
"id": "e09d4aa9-a82a-4c80-b0aa-2548fd420eb9",
108+
"metadata": {},
109+
"outputs": [],
110+
"source": [
111+
"summarize_results(report_card.query('package.str.startswith(\"chemistry\")'))"
82112
]
83113
},
84114
{
@@ -96,7 +126,17 @@
96126
"metadata": {},
97127
"outputs": [],
98128
"source": [
99-
"show_bloq_report_card(report_card.query('package == \"qualtran.bloqs.factoring\"'))"
129+
"show_bloq_report_card(report_card.query('package == \"factoring\"'))"
130+
]
131+
},
132+
{
133+
"cell_type": "code",
134+
"execution_count": null,
135+
"id": "de77e155-b37d-469e-897f-12fd88dcc522",
136+
"metadata": {},
137+
"outputs": [],
138+
"source": [
139+
"summarize_results(report_card.query('package.str.startswith(\"factoring\")'))"
100140
]
101141
},
102142
{
@@ -115,11 +155,29 @@
115155
"outputs": [],
116156
"source": [
117157
"show_bloq_report_card(report_card.query('package not in '\n",
118-
" '[\"qualtran.bloqs.basic_gates\",'\n",
119-
" '\"qualtran.bloqs.arithmetic\",'\n",
120-
" '\"qualtran.bloqs.factoring\"]')\n",
158+
" '[\"basic_gates\",'\n",
159+
" ' \"arithmetic\", '\n",
160+
" ' \"factoring\"]')\n",
121161
" .query('not package.str.startswith(\"qualtran.bloqs.chemistry\")'))"
122162
]
163+
},
164+
{
165+
"cell_type": "markdown",
166+
"id": "44c493af-695b-4887-b9cf-883e1446a4a4",
167+
"metadata": {},
168+
"source": [
169+
"### Summary of All"
170+
]
171+
},
172+
{
173+
"cell_type": "code",
174+
"execution_count": null,
175+
"id": "eceb5187-555e-4438-809a-ac2b1b0de12d",
176+
"metadata": {},
177+
"outputs": [],
178+
"source": [
179+
"summarize_results(report_card)"
180+
]
123181
}
124182
],
125183
"metadata": {

dev_tools/qualtran_dev_tools/bloq_report_card.py

+27-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717
import pandas.io.formats.style
1818

1919
from qualtran import Bloq, BloqExample
20-
from qualtran.testing import BloqCheckResult, check_bloq_example_decompose, check_bloq_example_make
20+
from qualtran.testing import (
21+
BloqCheckResult,
22+
check_bloq_example_decompose,
23+
check_bloq_example_make,
24+
check_equivalent_bloq_example_counts,
25+
)
2126

2227
from .bloq_finder import get_bloq_classes, get_bloq_examples
2328

@@ -60,7 +65,7 @@ def bloq_classes_with_no_examples(
6065

6166

6267
IDCOLS = ['package', 'bloq_cls', 'name']
63-
CHECKCOLS = ['make', 'decomp']
68+
CHECKCOLS = ['make', 'decomp', 'counts']
6469

6570

6671
def record_for_class_with_no_examples(k: Type[Bloq]) -> Dict[str, Any]:
@@ -70,18 +75,18 @@ def record_for_class_with_no_examples(k: Type[Bloq]) -> Dict[str, Any]:
7075
'name': '-',
7176
'make': BloqCheckResult.MISSING,
7277
'decomp': BloqCheckResult.MISSING,
73-
# 'counts': BloqCheckResult.MISSING,
78+
'counts': BloqCheckResult.MISSING,
7479
}
7580

7681

77-
def records_for_bloq_example(be: BloqExample) -> Dict[str, Any]:
82+
def record_for_bloq_example(be: BloqExample) -> Dict[str, Any]:
7883
return {
7984
'bloq_cls': be.bloq_cls.__name__,
8085
'package': _get_package(be.bloq_cls),
8186
'name': be.name,
8287
'make': check_bloq_example_make(be)[0],
8388
'decomp': check_bloq_example_decompose(be)[0],
84-
# 'counts': check_equivalent_bloq_example_counts(be)[0],
89+
'counts': check_equivalent_bloq_example_counts(be)[0],
8590
}
8691

8792

@@ -92,6 +97,7 @@ def show_bloq_report_card(df: pd.DataFrame) -> pandas.io.formats.style.Styler:
9297
def get_bloq_report_card(
9398
bclasses: Optional[Iterable[Type[Bloq]]] = None,
9499
bexamples: Optional[Iterable[BloqExample]] = None,
100+
package_prefix: str = 'qualtran.bloqs.',
95101
) -> pd.DataFrame:
96102
if bclasses is None:
97103
bclasses = get_bloq_classes()
@@ -101,6 +107,19 @@ def get_bloq_report_card(
101107
records = []
102108
missing_bclasses = bloq_classes_with_no_examples(bclasses, bexamples)
103109
records.extend(record_for_class_with_no_examples(k) for k in missing_bclasses)
104-
records.extend(records_for_bloq_example(be) for be in bexamples)
105-
106-
return pd.DataFrame(records).sort_values(by=IDCOLS).loc[:, IDCOLS + CHECKCOLS]
110+
records.extend(record_for_bloq_example(be) for be in bexamples)
111+
112+
df = pd.DataFrame(records)
113+
df['package'] = df['package'].str.removeprefix(package_prefix)
114+
return df.sort_values(by=IDCOLS).loc[:, IDCOLS + CHECKCOLS].reindex()
115+
116+
117+
def summarize_results(report_card: pd.DataFrame) -> pd.DataFrame:
118+
"""Take a `report_card` data frame and return the number of times each status was noted."""
119+
summary = (
120+
pd.DataFrame([report_card[k].value_counts().rename(k) for k in CHECKCOLS])
121+
.fillna(0)
122+
.astype(int)
123+
)
124+
summary.columns = [v.name.lower() for v in summary.columns]
125+
return summary

dev_tools/qualtran_dev_tools/cirq_ft_jupyter_autogen_factories.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@
3737
# a notebook template.
3838

3939

40-
def _make_QROM():
41-
from qualtran.bloqs.qrom import QROM
42-
43-
return QROM([np.array([1, 2, 3, 4, 5])], selection_bitsizes=(3,), target_bitsizes=(3,))
44-
45-
4640
def _make_MultiTargetCSwap():
4741
from qualtran.bloqs.basic_gates import CSwap
4842

@@ -62,7 +56,7 @@ def _make_SwapWithZeroGate():
6256

6357

6458
def _make_SelectPauliLCU():
65-
from qualtran.bloqs.select_pauli_lcu import SelectPauliLCU
59+
from qualtran.bloqs.multiplexers.select_pauli_lcu import SelectPauliLCU
6660

6761
target_bitsize = 4
6862
us = ['XIXI', 'YIYI', 'ZZZZ', 'ZXYZ']

dev_tools/qualtran_dev_tools/jupyter_autogen_test.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import numpy as np
2222

23-
from qualtran.bloqs.qrom import QROM
23+
from qualtran.bloqs.data_loading.qrom import QROM
2424

2525
from .jupyter_autogen import (
2626
_get_code_for_demoing_a_gate,
@@ -33,7 +33,7 @@
3333

3434

3535
def _make_QROM():
36-
from qualtran.bloqs.qrom import QROM
36+
from qualtran.bloqs.data_loading.qrom import QROM
3737

3838
return QROM([np.array([1, 2, 3, 4, 5])], selection_bitsizes=(3,), target_bitsizes=(3,))
3939

@@ -87,7 +87,7 @@ def test_get_markdown_docstring_lines():
8787

8888
def test_get_lines_for_constructing_an_object():
8989
lines, obj_expr = _get_lines_for_constructing_an_object(_make_QROM)
90-
assert lines == ['from qualtran.bloqs.qrom import QROM', '']
90+
assert lines == ['from qualtran.bloqs.data_loading.qrom import QROM', '']
9191
assert (
9292
obj_expr
9393
== 'QROM([np.array([1, 2, 3, 4, 5])], selection_bitsizes=(3,), target_bitsizes=(3,))'
@@ -125,4 +125,4 @@ def test_render_notebook_cells():
125125
assert list(cells.gate_cells.keys()) == ['_make_QROM']
126126
gcell = cells.gate_cells['_make_QROM']
127127
assert gcell.md.source.startswith('## `QROM`')
128-
assert gcell.py.source.startswith('from qualtran.bloqs.qrom import QROM')
128+
assert gcell.py.source.startswith('from qualtran.bloqs.data_loading.qrom import QROM')

0 commit comments

Comments
 (0)