qat.experimental.dialect.q1.ir.schedule module

Q1 operation visitor for the generic schedule ledger.

class Q1ScheduleVisitor(tracker, sequence='sequence', target_description=QbloxTargetDescription(q1asm=Q1AsmSpec(min_gain=-32768, max_gain=32767, min_offset=-32768, max_offset=32767, max_wait_time_ns=65532, register_size=4294967295, loop_unroll_threshold=4), sequencer_specs=frozendict.frozendict({<Q1SequencerType.control: 'control'>: Q1SequencerSpec(type=<Q1SequencerType.control: 'control'>, instruction_capacity=16384, clock_period_ns=4, sample_rate_hz=1000000000, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=None), <Q1SequencerType.readout: 'readout'>: Q1SequencerSpec(type=<Q1SequencerType.readout: 'readout'>, instruction_capacity=12288, clock_period_ns=4, sample_rate_hz=1000000000, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=ReadoutSpec(min_integration_length_samples=4, max_integration_length_samples=16777212, min_acquisition_threshold=-16777212, max_acquisition_threshold=16777212, weight_sample_capacity=16384))}), module_specs=frozendict.frozendict({<QbloxModuleKind.qcm: 'qcm'>: ModuleSpec(kind=<QbloxModuleKind.qcm: 'qcm'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=4, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5), 2: (0, 1, 2, 3, 4, 5), 3: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({}), marker_count=4, acquisition_memory_bins=None, supports_mixer_correction=True, is_rf=False, local_oscillator=None), <QbloxModuleKind.qcm_rf: 'qcm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qcm_rf: 'qcm_rf'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=2, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({}), marker_count=2, acquisition_memory_bins=None, supports_mixer_correction=True, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrm: 'qrm'>: ModuleSpec(kind=<QbloxModuleKind.qrm: 'qrm'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=2, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), marker_count=4, acquisition_memory_bins=3000000, supports_mixer_correction=True, is_rf=False, local_oscillator=None), <QbloxModuleKind.qrm_rf: 'qrm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qrm_rf: 'qrm_rf'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=1, input_count=1, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), marker_count=2, acquisition_memory_bins=3000000, supports_mixer_correction=True, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrc: 'qrc'>: ModuleSpec(kind=<QbloxModuleKind.qrc: 'qrc'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=6, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7), 2: (0, 4, 8, 9, 10, 11), 3: (1, 5, 8, 9, 10, 11), 4: (2, 6, 8, 9, 10, 11), 5: (3, 7, 8, 9, 10, 11)}), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7)}), marker_count=1, acquisition_memory_bins=7000000, supports_mixer_correction=False, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=500000000, max_frequency_hz=10100000000, frequency_step_hz=100000000))}), min_module_slot=1, max_module_slot=20), waveforms=None, sequencer_type=Q1SequencerType.control)

Bases: object

Translate statically known Q1 instructions into ledger updates.

visit(operation)
Return type:

None

build_q1_schedule(module, sequence='sequence', target=QbloxTargetDescription(q1asm=Q1AsmSpec(min_gain=-32768, max_gain=32767, min_offset=-32768, max_offset=32767, max_wait_time_ns=65532, register_size=4294967295, loop_unroll_threshold=4), sequencer_specs=frozendict.frozendict({<Q1SequencerType.control: 'control'>: Q1SequencerSpec(type=<Q1SequencerType.control: 'control'>, instruction_capacity=16384, clock_period_ns=4, sample_rate_hz=1000000000, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=None), <Q1SequencerType.readout: 'readout'>: Q1SequencerSpec(type=<Q1SequencerType.readout: 'readout'>, instruction_capacity=12288, clock_period_ns=4, sample_rate_hz=1000000000, min_waveform_sample=-1.0, max_waveform_sample=1.0, nco_min_frequency_hz=-500000000.0, nco_max_frequency_hz=500000000.0, nco_phase_steps=1000000000, nco_phase_steps_per_degree=2777777.777777778, nco_frequency_steps_per_hz=4, nco_frequency_limit_steps=2000000000, register_count=64, waveform_sample_capacity=16384, readout=ReadoutSpec(min_integration_length_samples=4, max_integration_length_samples=16777212, min_acquisition_threshold=-16777212, max_acquisition_threshold=16777212, weight_sample_capacity=16384))}), module_specs=frozendict.frozendict({<QbloxModuleKind.qcm: 'qcm'>: ModuleSpec(kind=<QbloxModuleKind.qcm: 'qcm'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=4, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5), 2: (0, 1, 2, 3, 4, 5), 3: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({}), marker_count=4, acquisition_memory_bins=None, supports_mixer_correction=True, is_rf=False, local_oscillator=None), <QbloxModuleKind.qcm_rf: 'qcm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qcm_rf: 'qcm_rf'>, sequencers=(<Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=2, input_count=0, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({}), marker_count=2, acquisition_memory_bins=None, supports_mixer_correction=True, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrm: 'qrm'>: ModuleSpec(kind=<QbloxModuleKind.qrm: 'qrm'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=2, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5), 1: (0, 1, 2, 3, 4, 5)}), marker_count=4, acquisition_memory_bins=3000000, supports_mixer_correction=True, is_rf=False, local_oscillator=None), <QbloxModuleKind.qrm_rf: 'qrm_rf'>: ModuleSpec(kind=<QbloxModuleKind.qrm_rf: 'qrm_rf'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>), output_count=1, input_count=1, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5)}), marker_count=2, acquisition_memory_bins=3000000, supports_mixer_correction=True, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=2000000000, max_frequency_hz=18000000000, frequency_step_hz=1)), <QbloxModuleKind.qrc: 'qrc'>: ModuleSpec(kind=<QbloxModuleKind.qrc: 'qrc'>, sequencers=(<Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.readout: 'readout'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>, <Q1SequencerType.control: 'control'>), output_count=6, input_count=2, output_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7), 2: (0, 4, 8, 9, 10, 11), 3: (1, 5, 8, 9, 10, 11), 4: (2, 6, 8, 9, 10, 11), 5: (3, 7, 8, 9, 10, 11)}), input_channel_map=frozendict.frozendict({0: (0, 1, 2, 3, 4, 5, 6, 7), 1: (0, 1, 2, 3, 4, 5, 6, 7)}), marker_count=1, acquisition_memory_bins=7000000, supports_mixer_correction=False, is_rf=True, local_oscillator=LocalOscillatorSpec(min_frequency_hz=500000000, max_frequency_hz=10100000000, frequency_step_hz=100000000))}), min_module_slot=1, max_module_slot=20), waveforms=None, sequencer_type=Q1SequencerType.control)

Walk a Q1 module and record its linear instruction schedule.

Parameters:
  • module (ModuleOp) – Q1 module containing Q1 assembly operations.

  • sequence (str) – Name assigned to the tracked Q1 sequence.

  • target (QbloxTargetDescription) – Qblox target constants used for Q1 timing and NCO conversion.

  • waveforms (Optional[Mapping[int, Iterable[float]]]) – Real waveform-memory samples keyed by Q1 table index for a flat module. Enclosed Q1 sequence operations use their own waveform tables.

  • sequencer_type (Q1SequencerType) – Sequencer type used for flat or unbound Q1 IR. Bound sequence operations derive their type from their physical module configuration.

Return type:

ScheduleTracker

Returns:

The populated schedule tracker.