pub struct DeviceConfig {
pub qubit_frequencies: HashMap<usize, f64>,
pub coupling_strengths: HashMap<(usize, usize), f64>,
pub drive_amplitudes: HashMap<usize, f64>,
pub meas_frequencies: HashMap<usize, f64>,
pub sample_rate: f64,
}
Expand description
Device configuration for pulse control
Fields§
§qubit_frequencies: HashMap<usize, f64>
Qubit frequencies (GHz)
coupling_strengths: HashMap<(usize, usize), f64>
Coupling strengths (MHz)
drive_amplitudes: HashMap<usize, f64>
Drive amplitudes
meas_frequencies: HashMap<usize, f64>
Measurement frequencies
sample_rate: f64
Sample rate (GS/s)
Implementations§
Source§impl DeviceConfig
impl DeviceConfig
Sourcepub fn default_config(num_qubits: usize) -> Self
pub fn default_config(num_qubits: usize) -> Self
Create a default configuration
Examples found in repository?
examples/pulse_demo.rs (line 162)
158fn demo_pulse_compilation() -> quantrs2_core::error::QuantRS2Result<()> {
159 println!("--- Circuit to Pulse Compilation ---");
160
161 // Create device configuration
162 let device_config = DeviceConfig::default_config(4);
163 println!("Device configuration:");
164 println!(" Qubits: 4");
165 println!(" Qubit frequencies: ~5 GHz");
166 println!(" Sample rate: {} GS/s", device_config.sample_rate);
167
168 // Create compiler
169 let compiler = PulseCompiler::new(device_config);
170
171 // Create a simple circuit
172 let mut circuit = Circuit::<4>::new();
173 circuit.add_gate(Hadamard { target: QubitId(0) })?;
174 circuit.add_gate(CNOT {
175 control: QubitId(0),
176 target: QubitId(1),
177 })?;
178 circuit.add_gate(RotationZ {
179 target: QubitId(1),
180 theta: PI / 4.0,
181 })?;
182
183 println!("\nCompiling circuit:");
184 for (i, gate) in circuit.gates().iter().enumerate() {
185 println!(" {}: {}", i, gate.name());
186 }
187
188 // Compile to pulses
189 let pulse_schedule = compiler.compile(&circuit)?;
190
191 println!("\nCompiled pulse schedule:");
192 println!(" Duration: {} ns", pulse_schedule.duration);
193 println!(" Instructions: {}", pulse_schedule.instructions.len());
194
195 // Show channel usage
196 let mut channel_usage = std::collections::HashMap::new();
197 for (_, instruction) in &pulse_schedule.instructions {
198 match instruction {
199 PulseInstruction::Play { channel, .. } => {
200 *channel_usage.entry(format!("{:?}", channel)).or_insert(0) += 1;
201 }
202 _ => {}
203 }
204 }
205
206 println!("\nChannel usage:");
207 for (channel, count) in channel_usage {
208 println!(" {}: {} pulses", channel, count);
209 }
210
211 println!();
212 Ok(())
213}
Trait Implementations§
Source§impl Clone for DeviceConfig
impl Clone for DeviceConfig
Source§fn clone(&self) -> DeviceConfig
fn clone(&self) -> DeviceConfig
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl Freeze for DeviceConfig
impl RefUnwindSafe for DeviceConfig
impl Send for DeviceConfig
impl Sync for DeviceConfig
impl Unpin for DeviceConfig
impl UnwindSafe for DeviceConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.