From 99770c2839642d13c065962adeca90d10c1950ab Mon Sep 17 00:00:00 2001 From: Raynel Sanchez Date: Wed, 4 Sep 2024 12:18:09 -0400 Subject: [PATCH] Fix: Use `intern!` when extracting attributes from Python. --- crates/circuit/src/converters.rs | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/crates/circuit/src/converters.rs b/crates/circuit/src/converters.rs index 50ce404870a0..679da97a29f3 100644 --- a/crates/circuit/src/converters.rs +++ b/crates/circuit/src/converters.rs @@ -12,7 +12,10 @@ use ::pyo3::prelude::*; use hashbrown::HashMap; -use pyo3::types::{PyDict, PyList}; +use pyo3::{ + intern, + types::{PyDict, PyList}, +}; use crate::{circuit_data::CircuitData, dag_circuit::DAGCircuit}; @@ -33,25 +36,32 @@ pub struct QuantumCircuitData<'py> { impl<'py> FromPyObject<'py> for QuantumCircuitData<'py> { fn extract_bound(ob: &Bound<'py, PyAny>) -> PyResult { + let py = ob.py(); let circuit_data = ob.getattr("_data")?; let data_borrowed = circuit_data.extract::()?; Ok(QuantumCircuitData { data: data_borrowed, - name: ob.getattr("name").ok(), - calibrations: ob.getattr("calibrations")?.extract().ok(), - metadata: ob.getattr("metadata").ok(), - qregs: ob.getattr("qregs").map(|ob| ob.downcast_into())?.ok(), - cregs: ob.getattr("cregs").map(|ob| ob.downcast_into())?.ok(), + name: ob.getattr(intern!(py, "name")).ok(), + calibrations: ob.getattr(intern!(py, "calibrations"))?.extract().ok(), + metadata: ob.getattr(intern!(py, "metadata")).ok(), + qregs: ob + .getattr(intern!(py, "qregs")) + .map(|ob| ob.downcast_into())? + .ok(), + cregs: ob + .getattr(intern!(py, "cregs")) + .map(|ob| ob.downcast_into())? + .ok(), input_vars: ob - .call_method0("iter_input_vars")? + .call_method0(intern!(py, "iter_input_vars"))? .iter()? .collect::>>()?, captured_vars: ob - .call_method0("iter_captured_vars")? + .call_method0(intern!(py, "iter_captured_vars"))? .iter()? .collect::>>()?, declared_vars: ob - .call_method0("iter_declared_vars")? + .call_method0(intern!(py, "iter_declared_vars"))? .iter()? .collect::>>()?, })