From ea4fabafa577d221c2e6f868d74d266fd178c22e Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Sun, 21 Apr 2024 17:48:19 -0400 Subject: [PATCH 1/5] removing consider-using-dict-items from lint exclusions and updates --- pyproject.toml | 1 - qiskit/dagcircuit/collect_blocks.py | 4 ++-- .../providers/basic_provider/basic_simulator.py | 4 ++-- qiskit/providers/models/backendconfiguration.py | 4 ++-- qiskit/providers/options.py | 16 ++++++++-------- qiskit/pulse/library/symbolic_pulses.py | 4 ++-- qiskit/result/models.py | 8 ++++---- qiskit/result/result.py | 8 ++++---- .../optimization/collect_multiqubit_blocks.py | 4 ++-- qiskit/transpiler/target.py | 6 ++++-- qiskit/visualization/circuit/latex.py | 7 +++---- qiskit/visualization/circuit/text.py | 3 +-- .../python/primitives/test_backend_sampler_v2.py | 4 ++-- .../primitives/test_statevector_sampler.py | 4 ++-- 14 files changed, 38 insertions(+), 39 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0d99f9256df3..c4657b5a71b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -218,7 +218,6 @@ disable = [ "arguments-renamed", "broad-exception-raised", "consider-iterating-dictionary", - "consider-using-dict-items", "consider-using-enumerate", "consider-using-f-string", "modified-iterating-list", diff --git a/qiskit/dagcircuit/collect_blocks.py b/qiskit/dagcircuit/collect_blocks.py index ea574536f45a..c5c7b49144f7 100644 --- a/qiskit/dagcircuit/collect_blocks.py +++ b/qiskit/dagcircuit/collect_blocks.py @@ -288,8 +288,8 @@ def run(self, block): self.group[self.find_leader(first)].append(node) blocks = [] - for index in self.leader: - if self.leader[index] == index: + for index, item in self.leader.items(): + if index == item: blocks.append(self.group[index]) return blocks diff --git a/qiskit/providers/basic_provider/basic_simulator.py b/qiskit/providers/basic_provider/basic_simulator.py index e19021519194..2722be5a009f 100644 --- a/qiskit/providers/basic_provider/basic_simulator.py +++ b/qiskit/providers/basic_provider/basic_simulator.py @@ -486,13 +486,13 @@ def run( from qiskit.compiler import assemble out_options = {} - for key in backend_options: + for key, value in backend_options.items(): if not hasattr(self.options, key): warnings.warn( "Option %s is not used by this backend" % key, UserWarning, stacklevel=2 ) else: - out_options[key] = backend_options[key] + out_options[key] = value qobj = assemble(run_input, self, **out_options) qobj_options = qobj.config self._set_options(qobj_config=qobj_options, backend_options=backend_options) diff --git a/qiskit/providers/models/backendconfiguration.py b/qiskit/providers/models/backendconfiguration.py index e346e293a38b..ebd0a6d9bbb6 100644 --- a/qiskit/providers/models/backendconfiguration.py +++ b/qiskit/providers/models/backendconfiguration.py @@ -892,9 +892,9 @@ def get_qubit_channels(self, qubit: Union[int, Iterable[int]]) -> List[Channel]: channels = set() try: if isinstance(qubit, int): - for key in self._qubit_channel_map.keys(): + for key, value in self._qubit_channel_map.items(): if qubit in key: - channels.update(self._qubit_channel_map[key]) + channels.update(value) if len(channels) == 0: raise KeyError elif isinstance(qubit, list): diff --git a/qiskit/providers/options.py b/qiskit/providers/options.py index 7a5b7a260354..e96ffc578429 100644 --- a/qiskit/providers/options.py +++ b/qiskit/providers/options.py @@ -233,24 +233,24 @@ def set_validator(self, field, validator_value): def update_options(self, **fields): """Update options with kwargs""" - for field in fields: - field_validator = self.validator.get(field, None) + for field_name, field in fields.items(): + field_validator = self.validator.get(field_name, None) if isinstance(field_validator, tuple): - if fields[field] > field_validator[1] or fields[field] < field_validator[0]: + if field > field_validator[1] or field < field_validator[0]: raise ValueError( - f"Specified value for '{field}' is not a valid value, " + f"Specified value for '{field_name}' is not a valid value, " f"must be >={field_validator[0]} or <={field_validator[1]}" ) elif isinstance(field_validator, list): - if fields[field] not in field_validator: + if field not in field_validator: raise ValueError( - f"Specified value for {field} is not a valid choice, " + f"Specified value for {field_name} is not a valid choice, " f"must be one of {field_validator}" ) elif isinstance(field_validator, type): - if not isinstance(fields[field], field_validator): + if not isinstance(field, field_validator): raise TypeError( - f"Specified value for {field} is not of required type {field_validator}" + f"Specified value for {field_name} is not of required type {field_validator}" ) self._fields.update(fields) diff --git a/qiskit/pulse/library/symbolic_pulses.py b/qiskit/pulse/library/symbolic_pulses.py index 9041dbc19510..b076bcf56cb0 100644 --- a/qiskit/pulse/library/symbolic_pulses.py +++ b/qiskit/pulse/library/symbolic_pulses.py @@ -677,8 +677,8 @@ def __eq__(self, other: object) -> bool: if not np.isclose(complex_amp1, complex_amp2): return False - for key in self.parameters: - if key not in ["amp", "angle"] and self.parameters[key] != other.parameters[key]: + for key, value in self.parameters.items(): + if key not in ["amp", "angle"] and value != other.parameters[key]: return False return True diff --git a/qiskit/result/models.py b/qiskit/result/models.py index 07286148f886..992810196713 100644 --- a/qiskit/result/models.py +++ b/qiskit/result/models.py @@ -171,11 +171,11 @@ def __repr__(self): out += ", seed=%s" % self.seed if hasattr(self, "meas_return"): out += ", meas_return=%s" % self.meas_return - for key in self._metadata: - if isinstance(self._metadata[key], str): - value_str = "'%s'" % self._metadata[key] + for key, value in self._metadata.items(): + if isinstance(value, str): + value_str = "'%s'" % value else: - value_str = repr(self._metadata[key]) + value_str = repr(value) out += f", {key}={value_str}" out += ")" return out diff --git a/qiskit/result/result.py b/qiskit/result/result.py index d99be996080e..c1792de56ae0 100644 --- a/qiskit/result/result.py +++ b/qiskit/result/result.py @@ -81,11 +81,11 @@ def __repr__(self): ) ) out += f", date={self.date}, status={self.status}, header={self.header}" - for key in self._metadata: - if isinstance(self._metadata[key], str): - value_str = "'%s'" % self._metadata[key] + for key, value in self._metadata.items(): + if isinstance(value, str): + value_str = "'%s'" % value else: - value_str = repr(self._metadata[key]) + value_str = repr(value) out += f", {key}={value_str}" out += ")" return out diff --git a/qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py b/qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py index 51b39d7e961b..e0dd61ff6cf4 100644 --- a/qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +++ b/qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py @@ -218,8 +218,8 @@ def collect_key(x): prev = bit self.gate_groups[self.find_set(prev)].append(nd) # need to turn all groups that still exist into their own blocks - for index in self.parent: - if self.parent[index] == index and len(self.gate_groups[index]) != 0: + for index, item in self.parent.items(): + if item == index and len(self.gate_groups[index]) != 0: block_list.append(self.gate_groups[index][:]) self.property_set["block_list"] = block_list diff --git a/qiskit/transpiler/target.py b/qiskit/transpiler/target.py index 8d609ce3b8a3..f9435a3ddc60 100644 --- a/qiskit/transpiler/target.py +++ b/qiskit/transpiler/target.py @@ -940,7 +940,9 @@ def instructions(self): is globally defined. """ return [ - (self._gate_name_map[op], qarg) for op in self._gate_map for qarg in self._gate_map[op] + (self._gate_name_map[op], qarg) + for op, qargs in self._gate_map.items() + for qarg in qargs ] def instruction_properties(self, index): @@ -979,7 +981,7 @@ def instruction_properties(self, index): InstructionProperties: The instruction properties for the specified instruction tuple """ instruction_properties = [ - inst_props for op in self._gate_map for _, inst_props in self._gate_map[op].items() + inst_props for _, qargs in self._gate_map.items() for _, inst_props in qargs.items() ] return instruction_properties[index] diff --git a/qiskit/visualization/circuit/latex.py b/qiskit/visualization/circuit/latex.py index ad4b8e070e13..baffa9f52bbf 100644 --- a/qiskit/visualization/circuit/latex.py +++ b/qiskit/visualization/circuit/latex.py @@ -213,10 +213,9 @@ def _initialize_latex_array(self): self._latex.append([" "] * (self._img_depth + 1)) # display the bit/register labels - for wire in self._wire_map: + for wire, index in self._wire_map.items(): if isinstance(wire, ClassicalRegister): register = wire - index = self._wire_map[wire] else: register, bit_index, reg_index = get_bit_reg_index(self._circuit, wire) index = bit_index if register is None else reg_index @@ -620,11 +619,11 @@ def _add_condition(self, op, wire_list, col): # First sort the val_bits in the order of the register bits in the circuit cond_wires = [] cond_bits = [] - for wire in self._wire_map: + for wire, index in self._wire_map.items(): reg, _, reg_index = get_bit_reg_index(self._circuit, wire) if reg == cond_reg: cond_bits.append(reg_index) - cond_wires.append(self._wire_map[wire]) + cond_wires.append(index) gap = cond_wires[0] - max(wire_list) prev_wire = cond_wires[0] diff --git a/qiskit/visualization/circuit/text.py b/qiskit/visualization/circuit/text.py index 1e6137275a9f..150842fd940a 100644 --- a/qiskit/visualization/circuit/text.py +++ b/qiskit/visualization/circuit/text.py @@ -894,10 +894,9 @@ def wire_names(self, with_initial_state=False): self._wire_map = get_wire_map(self._circuit, (self.qubits + self.clbits), self.cregbundle) wire_labels = [] - for wire in self._wire_map: + for wire, index in self._wire_map.items(): if isinstance(wire, ClassicalRegister): register = wire - index = self._wire_map[wire] else: register, bit_index, reg_index = get_bit_reg_index(self._circuit, wire) index = bit_index if register is None else reg_index diff --git a/test/python/primitives/test_backend_sampler_v2.py b/test/python/primitives/test_backend_sampler_v2.py index dcddbf1126ad..bc7a53d6b9b1 100644 --- a/test/python/primitives/test_backend_sampler_v2.py +++ b/test/python/primitives/test_backend_sampler_v2.py @@ -641,9 +641,9 @@ def test_circuit_with_aliased_cregs(self, backend): self.assertEqual(len(result), 1) data = result[0].data self.assertEqual(len(astuple(data)), 3) - for creg_name in target: + for creg_name, creg in target.items(): self.assertTrue(hasattr(data, creg_name)) - self._assert_allclose(getattr(data, creg_name), np.array(target[creg_name])) + self._assert_allclose(getattr(data, creg_name), np.array(creg)) @combine(backend=BACKENDS) def test_no_cregs(self, backend): diff --git a/test/python/primitives/test_statevector_sampler.py b/test/python/primitives/test_statevector_sampler.py index cd0622b18de7..3e279b4e4ab7 100644 --- a/test/python/primitives/test_statevector_sampler.py +++ b/test/python/primitives/test_statevector_sampler.py @@ -607,9 +607,9 @@ def test_circuit_with_aliased_cregs(self): self.assertEqual(len(result), 1) data = result[0].data self.assertEqual(len(astuple(data)), 3) - for creg_name in target: + for creg_name, creg in target.items(): self.assertTrue(hasattr(data, creg_name)) - self._assert_allclose(getattr(data, creg_name), np.array(target[creg_name])) + self._assert_allclose(getattr(data, creg_name), np.array(creg)) def test_no_cregs(self): """Test that the sampler works when there are no classical register in the circuit.""" From b62cf9317b3c82dab4203ff9423837fb6f7bfe75 Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Fri, 26 Apr 2024 09:56:50 -0400 Subject: [PATCH 2/5] switching items to values --- qiskit/transpiler/target.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/transpiler/target.py b/qiskit/transpiler/target.py index f9435a3ddc60..0d5bb5df1387 100644 --- a/qiskit/transpiler/target.py +++ b/qiskit/transpiler/target.py @@ -981,7 +981,7 @@ def instruction_properties(self, index): InstructionProperties: The instruction properties for the specified instruction tuple """ instruction_properties = [ - inst_props for _, qargs in self._gate_map.items() for _, inst_props in qargs.items() + inst_props for qargs in self._gate_map.values() for inst_props in qargs.values() ] return instruction_properties[index] From 3857fe8a8980d667cf7f22c5a64ca0a20db88e40 Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Fri, 26 Apr 2024 09:58:11 -0400 Subject: [PATCH 3/5] latex initialization updates for readability --- qiskit/visualization/circuit/latex.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/qiskit/visualization/circuit/latex.py b/qiskit/visualization/circuit/latex.py index baffa9f52bbf..00c264d82be5 100644 --- a/qiskit/visualization/circuit/latex.py +++ b/qiskit/visualization/circuit/latex.py @@ -216,13 +216,19 @@ def _initialize_latex_array(self): for wire, index in self._wire_map.items(): if isinstance(wire, ClassicalRegister): register = wire + wire_label = get_wire_label( + "latex", register, index, layout=self._layout, cregbundle=self._cregbundle + ) else: register, bit_index, reg_index = get_bit_reg_index(self._circuit, wire) - index = bit_index if register is None else reg_index + wire_label = get_wire_label( + "latex", + register, + bit_index if register is None else reg_index, + layout=self._layout, + cregbundle=self._cregbundle, + ) - wire_label = get_wire_label( - "latex", register, index, layout=self._layout, cregbundle=self._cregbundle - ) wire_label += " : " if self._initial_state: wire_label += "\\ket{{0}}" if isinstance(wire, Qubit) else "0" From 705ddf0666df9ff7868ff9452651e4fd93fdde48 Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Thu, 9 May 2024 22:19:12 -0400 Subject: [PATCH 4/5] quick update for using items after removing lint rule --- qiskit/visualization/circuit/latex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/visualization/circuit/latex.py b/qiskit/visualization/circuit/latex.py index 00c264d82be5..9341126bcd1a 100644 --- a/qiskit/visualization/circuit/latex.py +++ b/qiskit/visualization/circuit/latex.py @@ -239,7 +239,7 @@ def _initialize_latex_array(self): self._latex[pos][1] = "\\lstick{/_{_{" + str(register.size) + "}}} \\cw" wire_label = f"\\mathrm{{{wire_label}}}" else: - pos = self._wire_map[wire] + pos = index self._latex[pos][0] = "\\nghost{" + wire_label + " & " + "\\lstick{" + wire_label def _get_image_depth(self): From 555c86e6408688f9a3bad33ae62c73aa00934375 Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Thu, 9 May 2024 22:19:40 -0400 Subject: [PATCH 5/5] Github to GitHub in SECURITY.md --- SECURITY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 1a8e9cea671e..45e6a9d6f516 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -15,13 +15,13 @@ We provide more detail on [the release and support schedule of Qiskit in our doc ## Reporting a Vulnerability To report vulnerabilities, you can privately report a potential security issue -via the Github security vulnerabilities feature. This can be done here: +via the GitHub security vulnerabilities feature. This can be done here: https://github.com/Qiskit/qiskit/security/advisories Please do **not** open a public issue about a potential security vulnerability. -You can find more details on the security vulnerability feature in the Github +You can find more details on the security vulnerability feature in the GitHub documentation here: https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability