-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Copy pathqid_util.py
67 lines (51 loc) · 2.02 KB
/
qid_util.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# Copyright 2022 The Cirq Developers
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import overload, TYPE_CHECKING, Union
if TYPE_CHECKING:
import cirq
@overload
def q(__x: int) -> 'cirq.LineQubit': ...
@overload
def q(__row: int, __col: int) -> 'cirq.GridQubit': ...
@overload
def q(__name: str) -> 'cirq.NamedQubit': ...
def q(*args: Union[int, str]) -> Union['cirq.LineQubit', 'cirq.GridQubit', 'cirq.NamedQubit']:
"""Constructs a qubit id of the appropriate type based on args.
This is shorthand for constructing qubit ids of common types:
>>> cirq.q(1) == cirq.LineQubit(1)
True
>>> cirq.q(1, 2) == cirq.GridQubit(1, 2)
True
>>> cirq.q("foo") == cirq.NamedQubit("foo")
True
Note that arguments should be treated as positional only.
Args:
*args: One or two ints, or a single str, as described above.
Returns:
cirq.LineQubit if called with one integer arg.
cirq.GridQubit if called with two integer args.
cirq.NamedQubit if called with one string arg.
Raises:
ValueError: if called with invalid arguments.
"""
import cirq # avoid circular import
if len(args) == 1:
if isinstance(args[0], int):
return cirq.LineQubit(args[0])
elif isinstance(args[0], str):
return cirq.NamedQubit(args[0])
elif len(args) == 2:
if isinstance(args[0], int) and isinstance(args[1], int):
return cirq.GridQubit(args[0], args[1])
raise ValueError(f"Could not construct qubit: args={args}")