Skip to content

Commit 5cebcb4

Browse files
authored
Add more stim.CliffordString methods (#1030)
- Add `stim.CliffordString.__add__` - Add `stim.CliffordString.__iadd__` - Add `stim.CliffordString.__rmul__` - Add int overload to `stim.CliffordString.__mul__` - Add int overload to `stim.CliffordString.__imul__`
1 parent 063bb6f commit 5cebcb4

5 files changed

Lines changed: 529 additions & 59 deletions

File tree

doc/python_api_reference_vDev.md

Lines changed: 123 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,10 @@ API references for stable versions are kept on the [stim github wiki](https://gi
110110
- [`stim.CircuitTargetsInsideInstruction.target_range_start`](#stim.CircuitTargetsInsideInstruction.target_range_start)
111111
- [`stim.CircuitTargetsInsideInstruction.targets_in_range`](#stim.CircuitTargetsInsideInstruction.targets_in_range)
112112
- [`stim.CliffordString`](#stim.CliffordString)
113+
- [`stim.CliffordString.__add__`](#stim.CliffordString.__add__)
113114
- [`stim.CliffordString.__eq__`](#stim.CliffordString.__eq__)
114115
- [`stim.CliffordString.__getitem__`](#stim.CliffordString.__getitem__)
116+
- [`stim.CliffordString.__iadd__`](#stim.CliffordString.__iadd__)
115117
- [`stim.CliffordString.__imul__`](#stim.CliffordString.__imul__)
116118
- [`stim.CliffordString.__init__`](#stim.CliffordString.__init__)
117119
- [`stim.CliffordString.__ipow__`](#stim.CliffordString.__ipow__)
@@ -120,6 +122,7 @@ API references for stable versions are kept on the [stim github wiki](https://gi
120122
- [`stim.CliffordString.__ne__`](#stim.CliffordString.__ne__)
121123
- [`stim.CliffordString.__pow__`](#stim.CliffordString.__pow__)
122124
- [`stim.CliffordString.__repr__`](#stim.CliffordString.__repr__)
125+
- [`stim.CliffordString.__rmul__`](#stim.CliffordString.__rmul__)
123126
- [`stim.CliffordString.__setitem__`](#stim.CliffordString.__setitem__)
124127
- [`stim.CliffordString.__str__`](#stim.CliffordString.__str__)
125128
- [`stim.CliffordString.all_cliffords_string`](#stim.CliffordString.all_cliffords_string)
@@ -5063,6 +5066,30 @@ class CliffordString:
50635066
"""
50645067
```
50655068

5069+
<a name="stim.CliffordString.__add__"></a>
5070+
```python
5071+
# stim.CliffordString.__add__
5072+
5073+
# (in class stim.CliffordString)
5074+
def __add__(
5075+
self,
5076+
rhs: stim.CliffordString,
5077+
) -> stim.CliffordString:
5078+
"""Concatenates two CliffordStrings.
5079+
5080+
Args:
5081+
rhs: The suffix of the concatenation.
5082+
5083+
Returns:
5084+
The concatenated Clifford string.
5085+
5086+
Examples:
5087+
>>> import stim
5088+
>>> stim.CliffordString("I,X,H") + stim.CliffordString("Y,S")
5089+
stim.CliffordString("I,X,H,Y,S")
5090+
"""
5091+
```
5092+
50665093
<a name="stim.CliffordString.__eq__"></a>
50675094
```python
50685095
# stim.CliffordString.__eq__
@@ -5125,25 +5152,71 @@ def __getitem__(
51255152
"""
51265153
```
51275154

5155+
<a name="stim.CliffordString.__iadd__"></a>
5156+
```python
5157+
# stim.CliffordString.__iadd__
5158+
5159+
# (in class stim.CliffordString)
5160+
def __iadd__(
5161+
self,
5162+
rhs: stim.CliffordString,
5163+
) -> stim.CliffordString:
5164+
"""Mutates the CliffordString by concatenating onto it.
5165+
5166+
Args:
5167+
rhs: The suffix to concatenate onto the target CliffordString.
5168+
5169+
Returns:
5170+
The mutated Clifford string.
5171+
5172+
Examples:
5173+
>>> import stim
5174+
>>> c = stim.CliffordString("I,X,H")
5175+
>>> alias = c
5176+
>>> alias += stim.CliffordString("Y,S")
5177+
>>> c
5178+
stim.CliffordString("I,X,H,Y,S")
5179+
"""
5180+
```
5181+
51285182
<a name="stim.CliffordString.__imul__"></a>
51295183
```python
51305184
# stim.CliffordString.__imul__
51315185

51325186
# (in class stim.CliffordString)
51335187
def __imul__(
51345188
self,
5135-
arg0: stim.CliffordString,
5189+
rhs: Union[stim.CliffordString, int],
51365190
) -> stim.CliffordString:
5137-
"""Returns the product of two CliffordString instances.
5191+
"""Inplace CliffordString multiplication.
5192+
5193+
Mutates the CliffordString into itself multiplied by another CliffordString
5194+
(via pairwise Clifford multipliation) or by an integer (via repeating the
5195+
contents).
5196+
5197+
Args:
5198+
rhs: Either a stim.CliffordString or an int. If rhs is a
5199+
stim.CliffordString, then the Cliffords from each string are multiplied
5200+
pairwise. If rhs is an int, it is the number of times to repeat the
5201+
Clifford string's contents.
5202+
5203+
Returns:
5204+
The mutated Clifford string.
51385205

51395206
Examples:
51405207
>>> import stim
5141-
>>> x = stim.CliffordString("S,X,X")
5142-
>>> y = stim.CliffordString("S,Z,H,Z")
5143-
>>> alias = x
5144-
>>> alias *= y
5145-
>>> x
5208+
5209+
>>> c = stim.CliffordString("S,X,X")
5210+
>>> alias = c
5211+
>>> alias *= stim.CliffordString("S,Z,H,Z")
5212+
>>> c
51465213
stim.CliffordString("Z,Y,SQRT_Y,Z")
5214+
5215+
>>> c = stim.CliffordString("I,X,H")
5216+
>>> alias = c
5217+
>>> alias *= 2
5218+
>>> c
5219+
stim.CliffordString("I,X,H,I,X,H")
51475220
"""
51485221
```
51495222

@@ -5251,14 +5324,24 @@ def __len__(
52515324
# (in class stim.CliffordString)
52525325
def __mul__(
52535326
self,
5254-
arg0: stim.CliffordString,
5327+
rhs: Union[stim.CliffordString, int],
52555328
) -> stim.CliffordString:
5256-
"""Returns the product of two CliffordString instances.
5329+
"""CliffordString multiplication.
5330+
5331+
Args:
5332+
rhs: Either a stim.CliffordString or an int. If rhs is a
5333+
stim.CliffordString, then the Cliffords from each string are multiplied
5334+
pairwise. If rhs is an int, it is the number of times to repeat the
5335+
Clifford string's contents.
52575336

52585337
Examples:
52595338
>>> import stim
5339+
52605340
>>> stim.CliffordString("S,X,X") * stim.CliffordString("S,Z,H,Z")
52615341
stim.CliffordString("Z,Y,SQRT_Y,Z")
5342+
5343+
>>> stim.CliffordString("I,X,H") * 3
5344+
stim.CliffordString("I,X,H,I,X,H,I,X,H")
52625345
"""
52635346
```
52645347

@@ -5330,6 +5413,37 @@ def __repr__(
53305413
"""
53315414
```
53325415

5416+
<a name="stim.CliffordString.__rmul__"></a>
5417+
```python
5418+
# stim.CliffordString.__rmul__
5419+
5420+
# (in class stim.CliffordString)
5421+
def __rmul__(
5422+
self,
5423+
lhs: int,
5424+
) -> stim.CliffordString:
5425+
"""CliffordString left-multiplication.
5426+
5427+
Args:
5428+
lhs: The number of times to repeat the Clifford string's contents.
5429+
5430+
Returns:
5431+
The repeated Clifford string.
5432+
5433+
Examples:
5434+
>>> import stim
5435+
5436+
>>> 2 * stim.CliffordString("I,X,H")
5437+
stim.CliffordString("I,X,H,I,X,H")
5438+
5439+
>>> 0 * stim.CliffordString("I,X,H")
5440+
stim.CliffordString("")
5441+
5442+
>>> 5 * stim.CliffordString("I")
5443+
stim.CliffordString("I,I,I,I,I")
5444+
"""
5445+
```
5446+
53335447
<a name="stim.CliffordString.__setitem__"></a>
53345448
```python
53355449
# stim.CliffordString.__setitem__

doc/stim.pyi

Lines changed: 99 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3900,6 +3900,23 @@ class CliffordString:
39003900
>>> stim.CliffordString("H,S,C_XYZ") * stim.CliffordString("H,H,H")
39013901
stim.CliffordString("I,C_ZYX,SQRT_X_DAG")
39023902
"""
3903+
def __add__(
3904+
self,
3905+
rhs: stim.CliffordString,
3906+
) -> stim.CliffordString:
3907+
"""Concatenates two CliffordStrings.
3908+
3909+
Args:
3910+
rhs: The suffix of the concatenation.
3911+
3912+
Returns:
3913+
The concatenated Clifford string.
3914+
3915+
Examples:
3916+
>>> import stim
3917+
>>> stim.CliffordString("I,X,H") + stim.CliffordString("Y,S")
3918+
stim.CliffordString("I,X,H,Y,S")
3919+
"""
39033920
def __eq__(
39043921
self,
39053922
arg0: stim.CliffordString,
@@ -3948,20 +3965,59 @@ class CliffordString:
39483965
>>> s[::2]
39493966
stim.CliffordString("I,Y,H")
39503967
"""
3968+
def __iadd__(
3969+
self,
3970+
rhs: stim.CliffordString,
3971+
) -> stim.CliffordString:
3972+
"""Mutates the CliffordString by concatenating onto it.
3973+
3974+
Args:
3975+
rhs: The suffix to concatenate onto the target CliffordString.
3976+
3977+
Returns:
3978+
The mutated Clifford string.
3979+
3980+
Examples:
3981+
>>> import stim
3982+
>>> c = stim.CliffordString("I,X,H")
3983+
>>> alias = c
3984+
>>> alias += stim.CliffordString("Y,S")
3985+
>>> c
3986+
stim.CliffordString("I,X,H,Y,S")
3987+
"""
39513988
def __imul__(
39523989
self,
3953-
arg0: stim.CliffordString,
3990+
rhs: Union[stim.CliffordString, int],
39543991
) -> stim.CliffordString:
3955-
"""Returns the product of two CliffordString instances.
3992+
"""Inplace CliffordString multiplication.
3993+
3994+
Mutates the CliffordString into itself multiplied by another CliffordString
3995+
(via pairwise Clifford multipliation) or by an integer (via repeating the
3996+
contents).
3997+
3998+
Args:
3999+
rhs: Either a stim.CliffordString or an int. If rhs is a
4000+
stim.CliffordString, then the Cliffords from each string are multiplied
4001+
pairwise. If rhs is an int, it is the number of times to repeat the
4002+
Clifford string's contents.
4003+
4004+
Returns:
4005+
The mutated Clifford string.
39564006

39574007
Examples:
39584008
>>> import stim
3959-
>>> x = stim.CliffordString("S,X,X")
3960-
>>> y = stim.CliffordString("S,Z,H,Z")
3961-
>>> alias = x
3962-
>>> alias *= y
3963-
>>> x
4009+
4010+
>>> c = stim.CliffordString("S,X,X")
4011+
>>> alias = c
4012+
>>> alias *= stim.CliffordString("S,Z,H,Z")
4013+
>>> c
39644014
stim.CliffordString("Z,Y,SQRT_Y,Z")
4015+
4016+
>>> c = stim.CliffordString("I,X,H")
4017+
>>> alias = c
4018+
>>> alias *= 2
4019+
>>> c
4020+
stim.CliffordString("I,X,H,I,X,H")
39654021
"""
39664022
def __init__(
39674023
self,
@@ -4041,14 +4097,24 @@ class CliffordString:
40414097
"""
40424098
def __mul__(
40434099
self,
4044-
arg0: stim.CliffordString,
4100+
rhs: Union[stim.CliffordString, int],
40454101
) -> stim.CliffordString:
4046-
"""Returns the product of two CliffordString instances.
4102+
"""CliffordString multiplication.
4103+
4104+
Args:
4105+
rhs: Either a stim.CliffordString or an int. If rhs is a
4106+
stim.CliffordString, then the Cliffords from each string are multiplied
4107+
pairwise. If rhs is an int, it is the number of times to repeat the
4108+
Clifford string's contents.
40474109

40484110
Examples:
40494111
>>> import stim
4112+
40504113
>>> stim.CliffordString("S,X,X") * stim.CliffordString("S,Z,H,Z")
40514114
stim.CliffordString("Z,Y,SQRT_Y,Z")
4115+
4116+
>>> stim.CliffordString("I,X,H") * 3
4117+
stim.CliffordString("I,X,H,I,X,H,I,X,H")
40524118
"""
40534119
def __ne__(
40544120
self,
@@ -4097,6 +4163,30 @@ class CliffordString:
40974163
) -> str:
40984164
"""Returns text that is a valid python expression evaluating to an equivalent `stim.CliffordString`.
40994165
"""
4166+
def __rmul__(
4167+
self,
4168+
lhs: int,
4169+
) -> stim.CliffordString:
4170+
"""CliffordString left-multiplication.
4171+
4172+
Args:
4173+
lhs: The number of times to repeat the Clifford string's contents.
4174+
4175+
Returns:
4176+
The repeated Clifford string.
4177+
4178+
Examples:
4179+
>>> import stim
4180+
4181+
>>> 2 * stim.CliffordString("I,X,H")
4182+
stim.CliffordString("I,X,H,I,X,H")
4183+
4184+
>>> 0 * stim.CliffordString("I,X,H")
4185+
stim.CliffordString("")
4186+
4187+
>>> 5 * stim.CliffordString("I")
4188+
stim.CliffordString("I,I,I,I,I")
4189+
"""
41004190
def __setitem__(
41014191
self,
41024192
index_or_slice: Union[int, slice],

0 commit comments

Comments
 (0)