qiskit 2.0.0rc1__cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl → 2.0.0rc2__cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.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,6 +1,6 @@
1
- qiskit/VERSION.txt,sha256=n3TIEW4DZ6G4lSP-VlGpxGo2k1ymRwbvbg6RuN1JN5c,9
1
+ qiskit/VERSION.txt,sha256=7aptyQ-2F8VHC1PykWxcrN6WGOVK7BfF8Ehq-dyauQY,9
2
2
  qiskit/__init__.py,sha256=BAdBBkA5KfLScFyiI6le8qONUJysnbFwidu1DchfbWw,7408
3
- qiskit/_accelerate.abi3.so,sha256=OgdavQAv8wDiQe4OUbLQOZEv13mP807bY52PJ7arEmg,12079560
3
+ qiskit/_accelerate.abi3.so,sha256=-hHT_yEtoj1yfuAXTyPNeiF70hknq18nJCUNeGL-92U,12155064
4
4
  qiskit/_numpy_compat.py,sha256=ZlnDTF2KBTKcVF489ZuxoBk6r9KLsMuhAlozFhOn0a8,2815
5
5
  qiskit/exceptions.py,sha256=78bbfww9680_v4CaNgepavY5DwGTN7_j47Ckob3lLPM,5619
6
6
  qiskit/user_config.py,sha256=3ez0XDwu0WKnjdHB-LNk4XRTQl9Eu-WgqkXOC771pTs,10325
@@ -26,7 +26,7 @@ qiskit/circuit/instructionset.py,sha256=GtrxGA1Tnge96ke5Xd6pmLA-9CHxeKbfDHUfM6mn
26
26
  qiskit/circuit/measure.py,sha256=eJZ_cRyOyogSyo2eQD8I0Q3uJ1QKZk1w9fTIyJzebhk,1811
27
27
  qiskit/circuit/operation.py,sha256=5SrIb_ap6EVKRHMNud5t-Iu7RU3Hz_KFSFjUUfHuf9w,2077
28
28
  qiskit/circuit/parameter.py,sha256=NqPG5MFEIbZU2jhWnOkTsQjlSnz79nI0qv85fwXp7dU,7104
29
- qiskit/circuit/parameterexpression.py,sha256=T6_EBbWW5vzNkB0rs8H7CHitszgQBCpUoYEGEhtlMl4,27242
29
+ qiskit/circuit/parameterexpression.py,sha256=qZlcvGdtN9qaeAOc-WHDQOGAsGzjO-6VeIjfFbARbOY,27542
30
30
  qiskit/circuit/parametertable.py,sha256=6sT2UO-U4MoHoz-w6UabDgdAZtpqdVfmJ-gb1uyVbqg,3269
31
31
  qiskit/circuit/parametervector.py,sha256=2YfNejcpqiKPHFOVQP7MME3jqSRrjpXcBBQ7HCuqumA,4767
32
32
  qiskit/circuit/quantumcircuit.py,sha256=TZRUr-h5YfbOPy6a9xzjSzlj-VdWGuMR0pFbmYdAKKc,309486
@@ -137,7 +137,7 @@ qiskit/circuit/library/standard_gates/h.py,sha256=hy35X6IEZgR4BiEGnbvoQztHMcNNYY
137
137
  qiskit/circuit/library/standard_gates/i.py,sha256=flmOfJhb6CHzDtwbQZQERnnuHwIcYRRbwLHOxXLvvRU,2320
138
138
  qiskit/circuit/library/standard_gates/iswap.py,sha256=2DEhBo_hY84R8Ep67hH6IdlOs0nghdhFAZlsp3juOps,3888
139
139
  qiskit/circuit/library/standard_gates/p.py,sha256=adTtUejz7q-HYomQlG1dTCTb47aqH01bxLe6OrUnCBg,14076
140
- qiskit/circuit/library/standard_gates/r.py,sha256=LO1YiwDDpGJ8fBb1-Ba5pub8B2ONR2-jqeHrhA1lxUg,3863
140
+ qiskit/circuit/library/standard_gates/r.py,sha256=11eurd-8yvZbdJsHX5fbYNiig4Tw8_q2qBfrdcZqFWY,3867
141
141
  qiskit/circuit/library/standard_gates/rx.py,sha256=KMBVhrHzrudafsvOOwu0gt9fQkIqsMuGSa_5C0_7Bes,10527
142
142
  qiskit/circuit/library/standard_gates/rxx.py,sha256=KOmiK28qIAKx4erAjmp8rMjGBeT8uSFfcphhgTaq5FE,6557
143
143
  qiskit/circuit/library/standard_gates/ry.py,sha256=vxSB70aqrRUmW3iFIXZXoMwQi36BguAaYSdd357lda4,10116
@@ -236,7 +236,7 @@ qiskit/circuit/library/templates/rzx/rzx_zz3.py,sha256=TOtQ6AjPxh5ZoAseiQOagfwDs
236
236
  qiskit/circuit/random/__init__.py,sha256=8c5pzxEva0bHKI4d9bumaEgA7mUU7EdfNlJMKSKn61k,589
237
237
  qiskit/circuit/random/utils.py,sha256=s47l_0aDOYdm18d9NG1J3K4-NEKyQJYaIqGjRcReKKE,15047
238
238
  qiskit/circuit/tools/__init__.py,sha256=_Rpdz9Yqiksplpw9CSGq0gOAJDIxoXQ26BRkHi1x0HY,540
239
- qiskit/circuit/tools/pi_check.py,sha256=6gwDvgfhud2I9nW3UikG4w4GFzPF-na0w6AoPevYTfk,7173
239
+ qiskit/circuit/tools/pi_check.py,sha256=QWFwVu2JFrCBoH4RTEiaiu1kAjLTQkBGqCFzZ8opI0o,7331
240
240
  qiskit/compiler/__init__.py,sha256=oDzbHDFJQlrjnwsRZFfJJ5m_2ioDP6untCZP-8S_2os,802
241
241
  qiskit/compiler/transpiler.py,sha256=tVl3Z90mq3UZLc1BXrW-Sf7TAJjmRYjK94efA1da_z8,18048
242
242
  qiskit/converters/__init__.py,sha256=2GTLmBLr9Azkfn7cYAJ35rVEzGeSnot_aRuMKBPAkTM,2169
@@ -329,8 +329,9 @@ qiskit/qpy/interface.py,sha256=HVK0xJwLGs3ioemVfgU4jBKULbRTOVMdGO4tWQAPvYE,12558
329
329
  qiskit/qpy/type_keys.py,sha256=-m_JhZXz7TDhxNFr1MCPz5m1zcfQfszofrbwHN2PR5E,10723
330
330
  qiskit/qpy/binary_io/__init__.py,sha256=6rvwDWSLMXjTorczGI2dCHEVKuYWQ1_aBlzpohOF7wk,1047
331
331
  qiskit/qpy/binary_io/circuits.py,sha256=XORHbsST4Tg8Hu4TJhjGQUKkTFpoB9hc---wi1seAD8,56967
332
+ qiskit/qpy/binary_io/parse_sympy_repr.py,sha256=68szuHlFtspE9_fDlSoW15gU56g3doK9vfV4THARMKE,3290
332
333
  qiskit/qpy/binary_io/schedules.py,sha256=Z4MOsZVKQhFMGRIABU4cIFPVX92Sx8aQSk7GZU-rulo,11377
333
- qiskit/qpy/binary_io/value.py,sha256=HSorqz3xZCIFg4VcCTrfaXeZZNEF_AOE0h4erPqaiMo,46260
334
+ qiskit/qpy/binary_io/value.py,sha256=BAGJk-D3O9aylEyOYWroKvgm4Y_OoLVk95RtnweyQk8,46282
334
335
  qiskit/quantum_info/__init__.py,sha256=YnnktJ0Fu1vrN2o6YrgKFIE5jgo1cu_lXvmXv0x6DJU,3427
335
336
  qiskit/quantum_info/quaternion.py,sha256=z4zFPPEmzrP3XqNiPloxbLHRBSI-YOCxDYfIIppo_3M,4884
336
337
  qiskit/quantum_info/random.py,sha256=jOXP_QIpfxb-oXoWdCVBN8Js6DqKu2tD3veQZ_D-3Hc,915
@@ -571,7 +572,7 @@ qiskit/transpiler/passes/optimization/template_matching/backward_match.py,sha256
571
572
  qiskit/transpiler/passes/optimization/template_matching/forward_match.py,sha256=z9dCJAKLGzpYUXYS0zu7--120tsycIFTdBc0TtP3hgs,17310
572
573
  qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py,sha256=cZDRpCGZaQAbDQDDLQrWoL0Eybp0WcKq8-x1JVNYw1g,2437
573
574
  qiskit/transpiler/passes/optimization/template_matching/template_matching.py,sha256=Rmry8mO4rgB1uWvQ4UC7XGVjh53VT8eR-uQzRO3o9Xs,17655
574
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py,sha256=4yOgMvqcvWx8MS8myyT8reeiyePblS064qT_8teANk0,25910
575
+ qiskit/transpiler/passes/optimization/template_matching/template_substitution.py,sha256=Qwfe9UFFaQzR1SvfaBk62jPi5kiMf285ai38aZodV7I,25916
575
576
  qiskit/transpiler/passes/routing/__init__.py,sha256=OL-E0K_-kEaYf_7Dxtlg6-7alBNnC_LCxPD5ODwVA5o,898
576
577
  qiskit/transpiler/passes/routing/basic_swap.py,sha256=SreeyuuPeeciL_Zu43w7V83JaRnu2lNZU5uyJmQK3FQ,6730
577
578
  qiskit/transpiler/passes/routing/layout_transformation.py,sha256=4Hz0y11jfZcFJ0vfCiqtbdDcYNxxhhvf12eJW04SecA,4685
@@ -681,9 +682,9 @@ qiskit/visualization/timeline/types.py,sha256=-mp8Oh7FrDvmCJGfFjViuY_SGuJMZZdkxJ
681
682
  qiskit/visualization/timeline/plotters/__init__.py,sha256=3uM5AgCcqxqBHhslUGjjmqEL6Q04hVSGvl3d2bsUtTI,572
682
683
  qiskit/visualization/timeline/plotters/base_plotter.py,sha256=1do-sZjHjUzqh3HI3MtN4jXJiLEE1j1f56JSXaR_C68,1747
683
684
  qiskit/visualization/timeline/plotters/matplotlib.py,sha256=4PfgOQCJa4dzwEpGR9me403DKyJ7W6Gk2PVINOTxQpM,6894
684
- qiskit-2.0.0rc1.dist-info/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
685
- qiskit-2.0.0rc1.dist-info/METADATA,sha256=jp1KIjjDrqwW8dX_c0IxB67kkYbhJDhEVZEIrLQ5A10,12732
686
- qiskit-2.0.0rc1.dist-info/WHEEL,sha256=i1a9YUtvOFK1zRWuu5216XPtq0D_WEQHkq5b8KRAPT4,149
687
- qiskit-2.0.0rc1.dist-info/entry_points.txt,sha256=s7DbN_JlupsHGMLE4SzM0OObcstvjMeUlc7ZWTaJIp0,6238
688
- qiskit-2.0.0rc1.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
689
- qiskit-2.0.0rc1.dist-info/RECORD,,
685
+ qiskit-2.0.0rc2.dist-info/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
686
+ qiskit-2.0.0rc2.dist-info/METADATA,sha256=CE7YDI1MvLcGPOOFCuTEV41bD0eAPeudyh9PMn8FfAM,12732
687
+ qiskit-2.0.0rc2.dist-info/WHEEL,sha256=i1a9YUtvOFK1zRWuu5216XPtq0D_WEQHkq5b8KRAPT4,149
688
+ qiskit-2.0.0rc2.dist-info/entry_points.txt,sha256=s7DbN_JlupsHGMLE4SzM0OObcstvjMeUlc7ZWTaJIp0,6238
689
+ qiskit-2.0.0rc2.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
690
+ qiskit-2.0.0rc2.dist-info/RECORD,,