qiskit 2.0.0rc1__cp39-abi3-macosx_10_12_x86_64.whl → 2.0.0rc2__cp39-abi3-macosx_10_12_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
qiskit/VERSION.txt CHANGED
@@ -1 +1 @@
1
- 2.0.0rc1
1
+ 2.0.0rc2
Binary file
@@ -79,7 +79,7 @@ class RGate(Gate):
79
79
  self.definition = qc
80
80
 
81
81
  def inverse(self, annotated: bool = False):
82
- """Invert this gate as: :math:`r(θ, φ)^dagger = r(-θ, φ)`
82
+ r"""Invert this gate as: :math:`R(θ, φ)^{\dagger} = R(-θ, φ)`
83
83
 
84
84
  Args:
85
85
  annotated: when set to ``True``, this is typically used to return an
@@ -26,6 +26,7 @@ import numpy
26
26
  import symengine
27
27
 
28
28
  from qiskit.circuit.exceptions import CircuitError
29
+ from qiskit.exceptions import QiskitError
29
30
  from qiskit.utils.optionals import HAS_SYMPY
30
31
 
31
32
  # This type is redefined at the bottom to insert the full reference to "ParameterExpression", so it
@@ -531,6 +532,9 @@ class ParameterExpression:
531
532
  def __str__(self):
532
533
  from sympy import sympify, sstr
533
534
 
535
+ if not isinstance(self._symbol_expr, symengine.Basic):
536
+ raise QiskitError("Invalid ParameterExpression")
537
+
534
538
  return sstr(sympify(self._symbol_expr), full_prec=False)
535
539
 
536
540
  def __complex__(self):
@@ -611,6 +615,9 @@ class ParameterExpression:
611
615
  return False
612
616
  from sympy import sympify
613
617
 
618
+ if not isinstance(self._symbol_expr, symengine.Basic):
619
+ raise QiskitError("Invalid ParameterExpression")
620
+
614
621
  return sympify(self._symbol_expr).equals(sympify(other._symbol_expr))
615
622
  elif isinstance(other, numbers.Number):
616
623
  return len(self.parameters) == 0 and complex(self._symbol_expr) == other
@@ -49,7 +49,10 @@ def pi_check(inpt, eps=1e-9, output="text", ndigits=None):
49
49
  if isinstance(inpt, ParameterExpression):
50
50
  param_str = str(inpt)
51
51
  from sympy import sympify
52
+ import symengine
52
53
 
54
+ if not isinstance(inpt._symbol_expr, symengine.Basic):
55
+ raise QiskitError("Invalid ParameterExpression provided")
53
56
  expr = sympify(inpt._symbol_expr)
54
57
  syms = expr.atoms()
55
58
  for sym in syms:
@@ -0,0 +1,121 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2025.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """Parser for sympy expressions srepr from ParameterExpression internals."""
14
+
15
+ import ast
16
+
17
+ from qiskit.qpy.exceptions import QpyError
18
+
19
+
20
+ ALLOWED_CALLERS = {
21
+ "Abs",
22
+ "Add",
23
+ "Sub",
24
+ "Mul",
25
+ "Div",
26
+ "Pow",
27
+ "Symbol",
28
+ "Integer",
29
+ "Rational",
30
+ "Complex",
31
+ "Float",
32
+ "log",
33
+ "sin",
34
+ "cos",
35
+ "tan",
36
+ "atan",
37
+ "acos",
38
+ "asin",
39
+ "exp",
40
+ "conjugate",
41
+ }
42
+
43
+ UNARY = {
44
+ "sin",
45
+ "cos",
46
+ "tan",
47
+ "atan",
48
+ "acos",
49
+ "asin",
50
+ "conjugate",
51
+ "Symbol",
52
+ "Integer",
53
+ "Complex",
54
+ "Abs",
55
+ "Float",
56
+ }
57
+
58
+
59
+ class ParseSympyWalker(ast.NodeVisitor):
60
+ """A custom ast walker that is passed the sympy srepr from QPY < 13 and creates a custom
61
+ expression."""
62
+
63
+ def __init__(self):
64
+ self.stack = []
65
+
66
+ def visit_UnaryOp(self, node: ast.UnaryOp): # pylint: disable=invalid-name
67
+ """Visit a python unary op node"""
68
+ self.visit(node.operand)
69
+ arg = self.stack.pop()
70
+ if isinstance(node.op, ast.UAdd):
71
+ self.stack.append(+arg)
72
+ elif isinstance(node.op, ast.USub):
73
+ self.stack.append(-arg)
74
+ elif isinstance(node.op, ast.Not):
75
+ self.stack.append(not arg)
76
+ elif isinstance(node.op, ast.Invert):
77
+ self.stack.append(~arg)
78
+ else:
79
+ raise QpyError(f"Invalid unary op as part of sympy srepr: {node.op}")
80
+
81
+ def visit_Constant(self, node: ast.Constant): # pylint: disable=invalid-name
82
+ """Visit a constant node."""
83
+ self.stack.append(node.value)
84
+
85
+ def visit_Call(self, node: ast.Call): # pylint: disable=invalid-name
86
+ """Visit a call node
87
+
88
+ This can only be parameter expression allowed sympy call types.
89
+ """
90
+ import sympy
91
+
92
+ if isinstance(node.func, ast.Name):
93
+ name = node.func.id
94
+ else:
95
+ raise QpyError("Unknown node type")
96
+
97
+ if name not in ALLOWED_CALLERS:
98
+ raise QpyError(f"{name} is not part of a valid sympy expression srepr")
99
+
100
+ args = node.args
101
+ if name in UNARY:
102
+ if len(args) != 1:
103
+ raise QpyError(f"{name} has an invalid number of args in sympy srepr")
104
+ self.visit(args[0])
105
+ obj = getattr(sympy, name)(self.stack.pop())
106
+ self.stack.append(obj)
107
+ else:
108
+ for arg in args:
109
+ self.visit(arg)
110
+ out_args = [self.stack.pop() for _ in range(len(args))]
111
+ out_args.reverse()
112
+ obj = getattr(sympy, name)(*out_args)
113
+ self.stack.append(obj)
114
+
115
+
116
+ def parse_sympy_repr(sympy_repr: str):
117
+ """Parse a given sympy srepr into a symbolic expression object."""
118
+ tree = ast.parse(sympy_repr, mode="eval")
119
+ visitor = ParseSympyWalker()
120
+ visitor.visit(tree)
121
+ return visitor.stack.pop()
@@ -34,6 +34,7 @@ from qiskit.circuit.parameterexpression import (
34
34
  )
35
35
  from qiskit.circuit.parametervector import ParameterVector, ParameterVectorElement
36
36
  from qiskit.qpy import common, formats, exceptions, type_keys
37
+ from qiskit.qpy.binary_io.parse_sympy_repr import parse_sympy_repr
37
38
 
38
39
 
39
40
  def _write_parameter(file_obj, obj):
@@ -473,9 +474,9 @@ def _read_parameter_expression(file_obj):
473
474
  data = formats.PARAMETER_EXPR(
474
475
  *struct.unpack(formats.PARAMETER_EXPR_PACK, file_obj.read(formats.PARAMETER_EXPR_SIZE))
475
476
  )
476
- from sympy.parsing.sympy_parser import parse_expr
477
477
 
478
- expr_ = symengine.sympify(parse_expr(file_obj.read(data.expr_size).decode(common.ENCODE)))
478
+ sympy_str = file_obj.read(data.expr_size).decode(common.ENCODE)
479
+ expr_ = symengine.sympify(parse_sympy_repr(sympy_str))
479
480
  symbol_map = {}
480
481
  for _ in range(data.map_elements):
481
482
  elem_data = formats.PARAM_EXPR_MAP_ELEM(
@@ -514,9 +515,8 @@ def _read_parameter_expression_v3(file_obj, vectors, use_symengine):
514
515
  if use_symengine:
515
516
  expr_ = common.load_symengine_payload(payload)
516
517
  else:
517
- from sympy.parsing.sympy_parser import parse_expr
518
-
519
- expr_ = symengine.sympify(parse_expr(payload.decode(common.ENCODE)))
518
+ sympy_str = payload.decode(common.ENCODE)
519
+ expr_ = symengine.sympify(parse_sympy_repr(sympy_str))
520
520
 
521
521
  symbol_map = {}
522
522
  for _ in range(data.map_elements):
@@ -496,7 +496,6 @@ class TemplateSubstitution:
496
496
  parameter constraints, returns None.
497
497
  """
498
498
  import sympy as sym
499
- from sympy.parsing.sympy_parser import parse_expr
500
499
 
501
500
  if _optionals.HAS_SYMENGINE:
502
501
  import symengine
@@ -572,7 +571,8 @@ class TemplateSubstitution:
572
571
  if isinstance(circuit_param, ParameterExpression):
573
572
  circ_param_sym = circuit_param.sympify()
574
573
  else:
575
- circ_param_sym = parse_expr(str(circuit_param))
574
+ # if it's not a ParameterExpression we're a float
575
+ circ_param_sym = sym.Float(circuit_param)
576
576
  equations.append(sym.Eq(template_param.sympify(), circ_param_sym))
577
577
 
578
578
  for param in template_param.parameters:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: qiskit
3
- Version: 2.0.0rc1
3
+ Version: 2.0.0rc2
4
4
  Summary: An open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
5
5
  Author-email: Qiskit Development Team <qiskit@us.ibm.com>
6
6
  License: Apache 2.0
@@ -1,10 +1,10 @@
1
1
  qiskit/version.py,sha256=MiraFeJt5GQEspFyvP3qJedHen2C1e8dNEttzg0u7YU,2498
2
2
  qiskit/__init__.py,sha256=BAdBBkA5KfLScFyiI6le8qONUJysnbFwidu1DchfbWw,7408
3
- qiskit/_accelerate.abi3.so,sha256=3g08wKYU_dfhE_v_0wAH0U9BJHMykQx8oVNaUNeuumY,11506916
3
+ qiskit/_accelerate.abi3.so,sha256=cFmD8g-rhhi6gR8Ah6Yp2GAWQYTeaKOoLbntzG2-9H4,10713876
4
4
  qiskit/user_config.py,sha256=3ez0XDwu0WKnjdHB-LNk4XRTQl9Eu-WgqkXOC771pTs,10325
5
5
  qiskit/_numpy_compat.py,sha256=ZlnDTF2KBTKcVF489ZuxoBk6r9KLsMuhAlozFhOn0a8,2815
6
6
  qiskit/exceptions.py,sha256=78bbfww9680_v4CaNgepavY5DwGTN7_j47Ckob3lLPM,5619
7
- qiskit/VERSION.txt,sha256=n3TIEW4DZ6G4lSP-VlGpxGo2k1ymRwbvbg6RuN1JN5c,9
7
+ qiskit/VERSION.txt,sha256=7aptyQ-2F8VHC1PykWxcrN6WGOVK7BfF8Ehq-dyauQY,9
8
8
  qiskit/visualization/circuit_visualization.py,sha256=6R-A96Uwb_RZOovsSB0LGVsC7lP5IhtLNp6VP2yVBwE,698
9
9
  qiskit/visualization/counts_visualization.py,sha256=qBJHQyD6oSAa9nacOQvUPu6WpGGJ7baxy2Y6YerAWVU,16887
10
10
  qiskit/visualization/pass_manager_visualization.py,sha256=hJIvex7i-DQuOOq73TbPMzsQZDOaoElqrJO000v51ck,10972
@@ -124,7 +124,7 @@ qiskit/transpiler/passes/optimization/consolidate_blocks.py,sha256=NTM7TEKikhwUQ
124
124
  qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py,sha256=PpvRkYe4xqqQ_H2xPEf8_9IoE-z24dx1aMmygxifuRY,2108
125
125
  qiskit/transpiler/passes/optimization/optimize_1q_commutation.py,sha256=vZk8xzidwp6lDlyVv9T1N8J9UTYP-4Gi6_-Fa5TsNU8,10294
126
126
  qiskit/transpiler/passes/optimization/template_matching/template_matching.py,sha256=Rmry8mO4rgB1uWvQ4UC7XGVjh53VT8eR-uQzRO3o9Xs,17655
127
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py,sha256=4yOgMvqcvWx8MS8myyT8reeiyePblS064qT_8teANk0,25910
127
+ qiskit/transpiler/passes/optimization/template_matching/template_substitution.py,sha256=Qwfe9UFFaQzR1SvfaBk62jPi5kiMf285ai38aZodV7I,25916
128
128
  qiskit/transpiler/passes/optimization/template_matching/__init__.py,sha256=WLBNsjSCRCJBtXQl8dRNIohoL3IbWB4RqfzJVxqv2IY,829
129
129
  qiskit/transpiler/passes/optimization/template_matching/backward_match.py,sha256=AA8OlwFA12pGOrzBPcK-7PVtzY7FoKjM-qS__EbpvEk,30053
130
130
  qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py,sha256=cZDRpCGZaQAbDQDDLQrWoL0Eybp0WcKq8-x1JVNYw1g,2437
@@ -220,7 +220,7 @@ qiskit/circuit/duration.py,sha256=_nN8cP9vjjurDXu74a_wiFOsP7bDmDcQgbjmzkQadGo,24
220
220
  qiskit/circuit/__init__.py,sha256=OtAgmKZEosWdp5UqZIOSG_V-bsTnN8IQnI26ky653f0,61953
221
221
  qiskit/circuit/operation.py,sha256=5SrIb_ap6EVKRHMNud5t-Iu7RU3Hz_KFSFjUUfHuf9w,2077
222
222
  qiskit/circuit/_add_control.py,sha256=YfJMZjonGp14emNNk67wFJMOnh5G_NF_xtozw0jvWUc,10987
223
- qiskit/circuit/parameterexpression.py,sha256=T6_EBbWW5vzNkB0rs8H7CHitszgQBCpUoYEGEhtlMl4,27242
223
+ qiskit/circuit/parameterexpression.py,sha256=qZlcvGdtN9qaeAOc-WHDQOGAsGzjO-6VeIjfFbARbOY,27542
224
224
  qiskit/circuit/delay.py,sha256=HmK9WnxZdYY7ggBBGXB5SayZ_vewXAeu0FvyAInhdfw,6603
225
225
  qiskit/circuit/twirling.py,sha256=HmpR4EzfKEkI5hW50gstzg2S6f464jF6MbtGquyGbG8,6213
226
226
  qiskit/circuit/gate.py,sha256=YPmZEWYDmsheKjSLOYg2GgYGqJEMnKUM5ngisA_n3oQ,10171
@@ -237,7 +237,7 @@ qiskit/circuit/instructionset.py,sha256=GtrxGA1Tnge96ke5Xd6pmLA-9CHxeKbfDHUfM6mn
237
237
  qiskit/circuit/parameter.py,sha256=NqPG5MFEIbZU2jhWnOkTsQjlSnz79nI0qv85fwXp7dU,7104
238
238
  qiskit/circuit/_utils.py,sha256=3M6KH31COnbiwYwjOf64l2xujBq23TeszSi1v5TMYcU,6447
239
239
  qiskit/circuit/commutation_library.py,sha256=uoghnYE4cdFMb-Yiwpe01iVSNYIZkzJI8slulUWDmwg,850
240
- qiskit/circuit/tools/pi_check.py,sha256=6gwDvgfhud2I9nW3UikG4w4GFzPF-na0w6AoPevYTfk,7173
240
+ qiskit/circuit/tools/pi_check.py,sha256=QWFwVu2JFrCBoH4RTEiaiu1kAjLTQkBGqCFzZ8opI0o,7331
241
241
  qiskit/circuit/tools/__init__.py,sha256=_Rpdz9Yqiksplpw9CSGq0gOAJDIxoXQ26BRkHi1x0HY,540
242
242
  qiskit/circuit/library/pauli_evolution.py,sha256=yv5H-xiUoOqeAvPUtFrSh-v10fqXHdK2eVKe9i0DN-c,6929
243
243
  qiskit/circuit/library/hidden_linear_function.py,sha256=2X_9jf8alqG2gbg7rJRWP1qDhSJFuH9MXC8Ct824Jek,5670
@@ -307,7 +307,7 @@ qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py,sha256=fhFUM0
307
307
  qiskit/circuit/library/standard_gates/s.py,sha256=yJRxBpKnJW8H6u8ZZPeoEp98saE5lzDK3U5MyDNjUpo,12457
308
308
  qiskit/circuit/library/standard_gates/rz.py,sha256=Y_JCZujQb_ol3jyWWRKokv2VJo9aqkQ_u90kKU0xN-8,10541
309
309
  qiskit/circuit/library/standard_gates/u1.py,sha256=5F5q4U4xuO_QWJ2A7RSuPvCzdFedit40bjI7WNDc6wY,15700
310
- qiskit/circuit/library/standard_gates/r.py,sha256=LO1YiwDDpGJ8fBb1-Ba5pub8B2ONR2-jqeHrhA1lxUg,3863
310
+ qiskit/circuit/library/standard_gates/r.py,sha256=11eurd-8yvZbdJsHX5fbYNiig4Tw8_q2qBfrdcZqFWY,3867
311
311
  qiskit/circuit/library/standard_gates/swap.py,sha256=WcfCalCRDcEnvrKSktezCJIFwe271XZZR5usa5jMq5I,8732
312
312
  qiskit/circuit/library/standard_gates/y.py,sha256=lvngibtU_ci-3qfzhKzWtOUsDbefdiOHPfIJi89RFBQ,7682
313
313
  qiskit/circuit/library/standard_gates/__init__.py,sha256=8wIoY7hEet-xOJQijyo-p4fAjaxaTfr0mohbdk5jaPY,3906
@@ -608,7 +608,8 @@ qiskit/qpy/formats.py,sha256=MaKel58rJ5bsk2AWZSr0DFmdU3I1M6jlk6tZOjPeqbw,12825
608
608
  qiskit/qpy/exceptions.py,sha256=YOwVSKR74VYOrXS5hBdln7EZ0ett0qsSQSALJDoJxwA,1847
609
609
  qiskit/qpy/binary_io/circuits.py,sha256=XORHbsST4Tg8Hu4TJhjGQUKkTFpoB9hc---wi1seAD8,56967
610
610
  qiskit/qpy/binary_io/__init__.py,sha256=6rvwDWSLMXjTorczGI2dCHEVKuYWQ1_aBlzpohOF7wk,1047
611
- qiskit/qpy/binary_io/value.py,sha256=HSorqz3xZCIFg4VcCTrfaXeZZNEF_AOE0h4erPqaiMo,46260
611
+ qiskit/qpy/binary_io/value.py,sha256=BAGJk-D3O9aylEyOYWroKvgm4Y_OoLVk95RtnweyQk8,46282
612
+ qiskit/qpy/binary_io/parse_sympy_repr.py,sha256=68szuHlFtspE9_fDlSoW15gU56g3doK9vfV4THARMKE,3290
612
613
  qiskit/qpy/binary_io/schedules.py,sha256=Z4MOsZVKQhFMGRIABU4cIFPVX92Sx8aQSk7GZU-rulo,11377
613
614
  qiskit/qasm/libs/stdgates.inc,sha256=UvFVDcEVQUrsHh3VBiUZ5JgoqkbnsSUtgqdSnEzI6Ko,2328
614
615
  qiskit/qasm/libs/qelib1.inc,sha256=2CddZ7ogjAwbU1pKvxfcp4YRGXW-1CHF47e1FFLrf2M,4820
@@ -681,9 +682,9 @@ qiskit/quantum_info/states/densitymatrix.py,sha256=Xc21mIvH2WM-u_XxMbQImjgzGILH8
681
682
  qiskit/quantum_info/states/quantum_state.py,sha256=v__EAFkAu2aJwafAfaVDce5_525fTkTrTaJdrdQhAr0,17774
682
683
  qiskit/compiler/__init__.py,sha256=oDzbHDFJQlrjnwsRZFfJJ5m_2ioDP6untCZP-8S_2os,802
683
684
  qiskit/compiler/transpiler.py,sha256=tVl3Z90mq3UZLc1BXrW-Sf7TAJjmRYjK94efA1da_z8,18048
684
- qiskit-2.0.0rc1.dist-info/RECORD,,
685
- qiskit-2.0.0rc1.dist-info/WHEEL,sha256=Q7UnxuL0prKqHj-_-792Mat687EaVdrbWpGXr0yNvDs,136
686
- qiskit-2.0.0rc1.dist-info/entry_points.txt,sha256=s7DbN_JlupsHGMLE4SzM0OObcstvjMeUlc7ZWTaJIp0,6238
687
- qiskit-2.0.0rc1.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
688
- qiskit-2.0.0rc1.dist-info/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
689
- qiskit-2.0.0rc1.dist-info/METADATA,sha256=jp1KIjjDrqwW8dX_c0IxB67kkYbhJDhEVZEIrLQ5A10,12732
685
+ qiskit-2.0.0rc2.dist-info/RECORD,,
686
+ qiskit-2.0.0rc2.dist-info/WHEEL,sha256=Q7UnxuL0prKqHj-_-792Mat687EaVdrbWpGXr0yNvDs,136
687
+ qiskit-2.0.0rc2.dist-info/entry_points.txt,sha256=s7DbN_JlupsHGMLE4SzM0OObcstvjMeUlc7ZWTaJIp0,6238
688
+ qiskit-2.0.0rc2.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
689
+ qiskit-2.0.0rc2.dist-info/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
690
+ qiskit-2.0.0rc2.dist-info/METADATA,sha256=CE7YDI1MvLcGPOOFCuTEV41bD0eAPeudyh9PMn8FfAM,12732