qiskit 2.0.0rc1__cp39-abi3-win_amd64.whl → 2.0.0rc2__cp39-abi3-win_amd64.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
qiskit/_accelerate.pyd CHANGED
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=XtyE6PFyTt9PbWe-P91vRlQ4ug54c7RzUf_s2x0FkqM,10
1
+ qiskit/VERSION.txt,sha256=d3kDUuvFThC6SCGYbLCyL9bbAhN5Sl1KgXvh5BYV6TY,10
2
2
  qiskit/__init__.py,sha256=YwDQ1WkSQ4JqOW7ciwsjnWXKsv17x4wRIBJRA7DWuV8,7552
3
- qiskit/_accelerate.pyd,sha256=ryLD9Pwo2gYg7rrXde8Dhkk561gTZRxFYwbvn26U0dM,11500032
3
+ qiskit/_accelerate.pyd,sha256=zjXOUcbNkvXfz-URhee03MbuZcENVc1FkB45aD2ssRE,11363328
4
4
  qiskit/_numpy_compat.py,sha256=EV1RihNRJnvWzjb57z8sjMbv9EeRPzk8Mnegzw7ItR0,2888
5
5
  qiskit/exceptions.py,sha256=UamBNQmDJTx6ruzmj7iXgcsrBcvkfE-bZ4TH2-K_ngw,5772
6
6
  qiskit/user_config.py,sha256=yPpq2_vI1OXdUA6NS2e86qJHTU60MDSH68PzCdHVZCs,10591
@@ -26,7 +26,7 @@ qiskit/circuit/instructionset.py,sha256=jMo1446qm5J1YCVLvzykDRDpA-zDpGM588WH-Yq8
26
26
  qiskit/circuit/measure.py,sha256=4xwwPXAeM9pyttSRed7wdCanDBeVwo1i_UG7fbLKiAo,1864
27
27
  qiskit/circuit/operation.py,sha256=85i2oVIhvEF5mh4TTlpyEXdhfqKwver7LKD0ac2YLRQ,2145
28
28
  qiskit/circuit/parameter.py,sha256=5nZhW0cUdhRtSOwvxQHSKTZztFWl_yalcr0jK3Hwefk,7283
29
- qiskit/circuit/parameterexpression.py,sha256=YVU1s5afpEw1wn2OmHbootC4ePk1pjmKrToaHB8VqEw,27938
29
+ qiskit/circuit/parameterexpression.py,sha256=QxhI9gDdt4Tf9FYZtGhLaVSCTHAMttJHbPOlhHNEynQ,28245
30
30
  qiskit/circuit/parametertable.py,sha256=4u7EuKAiVskcnWQW8dnfU8jgYKZ92KdH2g6PeTvvjjA,3388
31
31
  qiskit/circuit/parametervector.py,sha256=NgNAy0Tzvy0fdfLIhTI6Bg0kqckevhKVPBP9ONMF3uU,4907
32
32
  qiskit/circuit/quantumcircuit.py,sha256=LxeIgxDlG6yqkjrmzBfZVAJjNV-zJLrHAncg6mcUmkk,316701
@@ -137,7 +137,7 @@ qiskit/circuit/library/standard_gates/h.py,sha256=jREt1RMfF7NqqBcYhe653yhi66vMzE
137
137
  qiskit/circuit/library/standard_gates/i.py,sha256=2erk8dvGEQl4fL-JbF1HsM0dKMAgNDFfsNSz8p4deGY,2396
138
138
  qiskit/circuit/library/standard_gates/iswap.py,sha256=qnct9_zJNzaCZkdUOdkocLlk6MVIO4tcN1UFiC0Jf6k,4021
139
139
  qiskit/circuit/library/standard_gates/p.py,sha256=4Hl0kFuUDGrH16XQ4K9subUS1c2YUXu9e1YEjdexP4s,14498
140
- qiskit/circuit/library/standard_gates/r.py,sha256=OIyzlaRAFw21Fu3-0BK2AcDo3g8Pebr3GMQaHlD1DT8,3976
140
+ qiskit/circuit/library/standard_gates/r.py,sha256=deteYBnev4vaXarqtrjLboZJuLt_56wYfKSY2JZZfbQ,3980
141
141
  qiskit/circuit/library/standard_gates/rx.py,sha256=rZ6CQNkb7VfJ_fi7Hn4o-PcqgSq51aZktjPnI2viNuA,10820
142
142
  qiskit/circuit/library/standard_gates/rxx.py,sha256=pckxbzG_bZT_kOrVsOZQqN73JpN2taH5jnYo1aKHhPQ,6737
143
143
  qiskit/circuit/library/standard_gates/ry.py,sha256=8gRei6yu8VF7Z0FvWWMlqvyEqHUjLLlWcM54DVG4LVw,10402
@@ -236,7 +236,7 @@ qiskit/circuit/library/templates/rzx/rzx_zz3.py,sha256=RDqK1pcyg-vRulclzK-0Ugooq
236
236
  qiskit/circuit/random/__init__.py,sha256=8Ndr3sYxCq3r03sI2KeFTXhSry8LX2TQy8VI5SuubOE,604
237
237
  qiskit/circuit/random/utils.py,sha256=LFAAAwaxlHM747B6yRRKr78aG2_PagXjL7EROYNnfKU,15413
238
238
  qiskit/circuit/tools/__init__.py,sha256=6O50HcNi3ilZfSEAWqlF0m4VSBkd2Pi2w3c2n0qBmkM,556
239
- qiskit/circuit/tools/pi_check.py,sha256=P6Ww17q3G86cML7zeBp1lNloXeJJyX9ZLKOj7m2mRfo,7363
239
+ qiskit/circuit/tools/pi_check.py,sha256=BjWYX21ini1YvxaPWwjbsTtmeslA1aQaP-a5WzwfBa0,7524
240
240
  qiskit/compiler/__init__.py,sha256=J5DFtTt3p6uZgxZXy6r3Q2RTG8EEwpLuuh1-fKIsSQI,829
241
241
  qiskit/compiler/transpiler.py,sha256=a8VLDeod9YA3qkC2Mo76F52AlHjSetjSr3HXLHv6Ji8,18423
242
242
  qiskit/converters/__init__.py,sha256=12OGiGl9vTNzbQbW-aBlwxttqaPNkWfHoAVIPeTjR-4,2243
@@ -329,8 +329,9 @@ qiskit/qpy/interface.py,sha256=cQErTZnn2DOIx23lercaM1W9v4TGCDKhf0As--QJuZE,12902
329
329
  qiskit/qpy/type_keys.py,sha256=5nblShiqWcYx-xCtykGSso0YXeuB9n-_UWuoL3lw14c,11132
330
330
  qiskit/qpy/binary_io/__init__.py,sha256=XuIWJ68xO8_f0TOuBeUh9RfUEoudlLNIGWuUWhq7rxA,1082
331
331
  qiskit/qpy/binary_io/circuits.py,sha256=cAkygN-3v_hKnryRA8K9rIIW06G4A8JxVzOsMQKVGhs,58417
332
+ qiskit/qpy/binary_io/parse_sympy_repr.py,sha256=EbCXrVMc0CNjzEnq81HHkAzyoveLbwjIquJ9E4Rqd9g,3411
332
333
  qiskit/qpy/binary_io/schedules.py,sha256=myzMfYKyuKvIinW2khnWxbAJLgcJQpqva4vYrdfzAD4,11685
333
- qiskit/qpy/binary_io/value.py,sha256=IqVYZNFYO1hC9hhZk3EIbxn_62wuSqens9YlWlFU4QA,47425
334
+ qiskit/qpy/binary_io/value.py,sha256=erA8Wl2nFscNC3Teb9NiqZy8_mgKCZ620df3ti827gA,47447
334
335
  qiskit/quantum_info/__init__.py,sha256=aJ0-ScJplIxqOZf7MYtQzF1xWXqq3_y_TvGZQfo_n_c,3589
335
336
  qiskit/quantum_info/quaternion.py,sha256=qlB8jMmWBmYzBgzDwiLjINGD9KlfllfS5D5yCr2DML4,5040
336
337
  qiskit/quantum_info/random.py,sha256=N9f6Vgo_oWf03xbV3drM6Pmi0jWw7w2SC6hpO5BQiaE,941
@@ -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=iDZUdCBeHZpVZXKFWLHWuUqjJQrEX42iZ1cgF4a4PeQ,17762
572
573
  qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py,sha256=vKrypbcMr58X6j2_bDHV9ZO-SSh2jGfCcaWJ7H0sBLI,2514
573
574
  qiskit/transpiler/passes/optimization/template_matching/template_matching.py,sha256=RSmJS7acqs8LxBrkkZ4a8Qxn7-A_uZUPJIvJ4H5zmmw,18025
574
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py,sha256=m5sv9hxHFrcYyLpppPVK4sGo4SYFwzQMIERZLAOi62s,26549
575
+ qiskit/transpiler/passes/optimization/template_matching/template_substitution.py,sha256=_j2wAyqUc2hcXu7fffDUgefj0ws4c6-nsqh7IKNe6u8,26555
575
576
  qiskit/transpiler/passes/routing/__init__.py,sha256=SfhAsVV6rPUZIeYl3jDdsF-a8kPGzVfiRcPaz7_cFWY,919
576
577
  qiskit/transpiler/passes/routing/basic_swap.py,sha256=2-psCRJsvxCKoNCKt_Tx9mC9vQp-V9AWr2hNSPc5MLs,6896
577
578
  qiskit/transpiler/passes/routing/layout_transformation.py,sha256=IWqOrP4_5V1DKNBSejSjFCyXCB51iMzJfGL4MjxWE44,4804
@@ -681,9 +682,9 @@ qiskit/visualization/timeline/types.py,sha256=jtpipQWUpahayNPQYKUst4GG6BqauovO0q
681
682
  qiskit/visualization/timeline/plotters/__init__.py,sha256=Klg9a1cSUIQhc815g8OpnD5vO1hcI51L9KlFfKzcuRg,588
682
683
  qiskit/visualization/timeline/plotters/base_plotter.py,sha256=taRkL2ZbyorRUEf6nJS8egdzKW2eznQ3w5oBLtMG_U8,1805
683
684
  qiskit/visualization/timeline/plotters/matplotlib.py,sha256=lqqNH3-bdf1F1cS2mDla9dLr5qEOeIFuqVl9Rhdg-Dw,7086
684
- qiskit-2.0.0rc1.dist-info/LICENSE.txt,sha256=pUbmRuPr1gJTTTWZu2c8UmNSntz-pDdKfGR-86NRkok,11619
685
- qiskit-2.0.0rc1.dist-info/METADATA,sha256=PVI6Otz7GT0SuSwRHdtSFimDOskl1Bx7KM_bHSwY_f4,12951
686
- qiskit-2.0.0rc1.dist-info/WHEEL,sha256=gmAbw2KMXvzCK2WBCU9yG78ZNLPoiprECHSnUbX8b8Y,99
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=pUbmRuPr1gJTTTWZu2c8UmNSntz-pDdKfGR-86NRkok,11619
686
+ qiskit-2.0.0rc2.dist-info/METADATA,sha256=n_MqAXSgLQfx5AJ0ynksdq-NfsAEziY-U8qjvyjXFeQ,12951
687
+ qiskit-2.0.0rc2.dist-info/WHEEL,sha256=gmAbw2KMXvzCK2WBCU9yG78ZNLPoiprECHSnUbX8b8Y,99
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,,