Skip to content

Commit d92730e

Browse files
Deprecate MultiControlPauli (#1492)
* make `MultiControlPauli` a hidden class, always use `MultiControlX` or `MultiControlZ` instead * add `DeprecationWarning` instead of renaming bloq --------- Co-authored-by: Tanuj Khattar <[email protected]>
1 parent 6c8e772 commit d92730e

File tree

6 files changed

+265
-247
lines changed

6 files changed

+265
-247
lines changed

qualtran/bloqs/mcmt/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@
1515
from qualtran.bloqs.mcmt.and_bloq import And, MultiAnd
1616
from qualtran.bloqs.mcmt.controlled_via_and import ControlledViaAnd
1717
from qualtran.bloqs.mcmt.ctrl_spec_and import CtrlSpecAnd
18-
from qualtran.bloqs.mcmt.multi_control_pauli import MultiControlPauli, MultiControlX, MultiControlZ
18+
from qualtran.bloqs.mcmt.multi_control_pauli import MultiControlX, MultiControlZ
1919
from qualtran.bloqs.mcmt.multi_target_cnot import MultiTargetCNOT

qualtran/bloqs/mcmt/multi_control_multi_target_pauli.ipynb

Lines changed: 43 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"cells": [
33
{
44
"cell_type": "markdown",
5-
"id": "5c75973b",
5+
"id": "8533d106",
66
"metadata": {
77
"cq.autogen": "title_cell"
88
},
@@ -13,7 +13,7 @@
1313
{
1414
"cell_type": "code",
1515
"execution_count": null,
16-
"id": "c0d3d2b2",
16+
"id": "b5831fa4",
1717
"metadata": {
1818
"cq.autogen": "top_imports"
1919
},
@@ -30,7 +30,7 @@
3030
},
3131
{
3232
"cell_type": "markdown",
33-
"id": "ac237fd0",
33+
"id": "b85b5ac2",
3434
"metadata": {
3535
"cq.autogen": "MultiTargetCNOT.bloq_doc.md"
3636
},
@@ -48,7 +48,7 @@
4848
{
4949
"cell_type": "code",
5050
"execution_count": null,
51-
"id": "a9e53831",
51+
"id": "387c77c3",
5252
"metadata": {
5353
"cq.autogen": "MultiTargetCNOT.bloq_doc.py"
5454
},
@@ -59,7 +59,7 @@
5959
},
6060
{
6161
"cell_type": "markdown",
62-
"id": "70036306",
62+
"id": "cb66ffb6",
6363
"metadata": {
6464
"cq.autogen": "MultiTargetCNOT.example_instances.md"
6565
},
@@ -70,7 +70,7 @@
7070
{
7171
"cell_type": "code",
7272
"execution_count": null,
73-
"id": "40a9ec07",
73+
"id": "e4d9154a",
7474
"metadata": {
7575
"cq.autogen": "MultiTargetCNOT.c_multi_not_symb"
7676
},
@@ -83,7 +83,7 @@
8383
{
8484
"cell_type": "code",
8585
"execution_count": null,
86-
"id": "ecddf931",
86+
"id": "ca47c43a",
8787
"metadata": {
8888
"cq.autogen": "MultiTargetCNOT.c_multi_not"
8989
},
@@ -94,7 +94,7 @@
9494
},
9595
{
9696
"cell_type": "markdown",
97-
"id": "251ca68a",
97+
"id": "a44ef0b1",
9898
"metadata": {
9999
"cq.autogen": "MultiTargetCNOT.graphical_signature.md"
100100
},
@@ -105,7 +105,7 @@
105105
{
106106
"cell_type": "code",
107107
"execution_count": null,
108-
"id": "bff75a03",
108+
"id": "baafd2bf",
109109
"metadata": {
110110
"cq.autogen": "MultiTargetCNOT.graphical_signature.py"
111111
},
@@ -118,7 +118,7 @@
118118
},
119119
{
120120
"cell_type": "markdown",
121-
"id": "bd425677",
121+
"id": "60bc96ef",
122122
"metadata": {
123123
"cq.autogen": "MultiTargetCNOT.call_graph.md"
124124
},
@@ -129,7 +129,7 @@
129129
{
130130
"cell_type": "code",
131131
"execution_count": null,
132-
"id": "a0082f8f",
132+
"id": "59e8162e",
133133
"metadata": {
134134
"cq.autogen": "MultiTargetCNOT.call_graph.py"
135135
},
@@ -141,57 +141,46 @@
141141
"show_counts_sigma(c_multi_not_symb_sigma)"
142142
]
143143
},
144-
{
145-
"cell_type": "code",
146-
"execution_count": null,
147-
"id": "5457e35b",
148-
"metadata": {},
149-
"outputs": [],
150-
"source": [
151-
"from qualtran.drawing import get_musical_score_data, draw_musical_score\n",
152-
"\n",
153-
"draw_musical_score(get_musical_score_data(c_multi_not.decompose_bloq()))"
154-
]
155-
},
156144
{
157145
"cell_type": "markdown",
158-
"id": "aba024ec",
146+
"id": "2de64cfb",
159147
"metadata": {
160-
"cq.autogen": "MultiControlPauli.bloq_doc.md"
148+
"cq.autogen": "MultiControlX.bloq_doc.md"
161149
},
162150
"source": [
163-
"## `MultiControlPauli`\n",
164-
"Implements multi-control, single-target C^{n}P gate.\n",
151+
"## `MultiControlX`\n",
152+
"Implements multi-control, single-target X gate.\n",
165153
"\n",
166-
"Implements $C^{n}P = (1 - |1^{n}><1^{n}|) I + |1^{n}><1^{n}| P^{n}$ using $n-1$\n",
167-
"clean ancillas using a multi-controlled `AND` gate. Uses the Toffoli ladder\n",
168-
"construction described in \"n−2 Ancilla Bits\" section of Ref[1] but uses an\n",
169-
"$\\text{AND} / \\text{AND}^\\dagger$ ladder instead for computing / uncomputing\n",
170-
"using clean ancillas instead of the Toffoli ladder. The measurement based\n",
171-
"uncomputation of $\\text{AND}$ does not consume any magic states and thus has\n",
172-
"better constant factors.\n",
154+
"Reduces multiple controls to a single control using an `And` ladder.\n",
155+
"See class `ControlledViaAnd` for details on construction.\n",
173156
"\n",
174-
"#### References\n",
175-
" - [Constructing Large Controlled Nots](https://algassert.com/circuits/2015/06/05/Constructing-Large-Controlled-Nots.html). \n"
157+
"Alternatively, one can directly use `XGate().controlled(CtrlSpec(cvs=cvs))`\n",
158+
"\n",
159+
"#### Parameters\n",
160+
" - `cvs`: a tuple of `n` control bits, or a `HasLength(n)` to control by `n` 1s. \n",
161+
"\n",
162+
"#### Registers\n",
163+
" - `controls`: control register of type `QBit` and shape `(n,)`.\n",
164+
" - `target`: single qubit target register.\n"
176165
]
177166
},
178167
{
179168
"cell_type": "code",
180169
"execution_count": null,
181-
"id": "bf4f6c5a",
170+
"id": "9b43be2a",
182171
"metadata": {
183-
"cq.autogen": "MultiControlPauli.bloq_doc.py"
172+
"cq.autogen": "MultiControlX.bloq_doc.py"
184173
},
185174
"outputs": [],
186175
"source": [
187-
"from qualtran.bloqs.mcmt import MultiControlPauli"
176+
"from qualtran.bloqs.mcmt import MultiControlX"
188177
]
189178
},
190179
{
191180
"cell_type": "markdown",
192-
"id": "a3deef58",
181+
"id": "f9fbb578",
193182
"metadata": {
194-
"cq.autogen": "MultiControlPauli.example_instances.md"
183+
"cq.autogen": "MultiControlX.example_instances.md"
195184
},
196185
"source": [
197186
"### Example Instances"
@@ -200,20 +189,20 @@
200189
{
201190
"cell_type": "code",
202191
"execution_count": null,
203-
"id": "610dfdf5",
192+
"id": "050b0f8d",
204193
"metadata": {
205-
"cq.autogen": "MultiControlPauli.ccpauli"
194+
"cq.autogen": "MultiControlX.ccpauli"
206195
},
207196
"outputs": [],
208197
"source": [
209-
"ccpauli = MultiControlPauli(cvs=(1, 0, 1, 0, 1), target_gate=cirq.X)"
198+
"ccpauli = MultiControlX(cvs=(1, 0, 1, 0, 1))"
210199
]
211200
},
212201
{
213202
"cell_type": "markdown",
214-
"id": "29045880",
203+
"id": "ccf7ef61",
215204
"metadata": {
216-
"cq.autogen": "MultiControlPauli.graphical_signature.md"
205+
"cq.autogen": "MultiControlX.graphical_signature.md"
217206
},
218207
"source": [
219208
"#### Graphical Signature"
@@ -222,9 +211,9 @@
222211
{
223212
"cell_type": "code",
224213
"execution_count": null,
225-
"id": "df830018",
214+
"id": "4fb51559",
226215
"metadata": {
227-
"cq.autogen": "MultiControlPauli.graphical_signature.py"
216+
"cq.autogen": "MultiControlX.graphical_signature.py"
228217
},
229218
"outputs": [],
230219
"source": [
@@ -235,9 +224,9 @@
235224
},
236225
{
237226
"cell_type": "markdown",
238-
"id": "6849b86b",
227+
"id": "358ff8ae",
239228
"metadata": {
240-
"cq.autogen": "MultiControlPauli.call_graph.md"
229+
"cq.autogen": "MultiControlX.call_graph.md"
241230
},
242231
"source": [
243232
"### Call Graph"
@@ -246,9 +235,9 @@
246235
{
247236
"cell_type": "code",
248237
"execution_count": null,
249-
"id": "dd1f8a53",
238+
"id": "216d9bdf",
250239
"metadata": {
251-
"cq.autogen": "MultiControlPauli.call_graph.py"
240+
"cq.autogen": "MultiControlX.call_graph.py"
252241
},
253242
"outputs": [],
254243
"source": [
@@ -261,21 +250,12 @@
261250
],
262251
"metadata": {
263252
"kernelspec": {
264-
"display_name": "Python 3 (ipykernel)",
253+
"display_name": "Python 3",
265254
"language": "python",
266255
"name": "python3"
267256
},
268257
"language_info": {
269-
"codemirror_mode": {
270-
"name": "ipython",
271-
"version": 3
272-
},
273-
"file_extension": ".py",
274-
"mimetype": "text/x-python",
275-
"name": "python",
276-
"nbconvert_exporter": "python",
277-
"pygments_lexer": "ipython3",
278-
"version": "3.10.9"
258+
"name": "python"
279259
}
280260
},
281261
"nbformat": 4,

0 commit comments

Comments
 (0)