def _write_symbolic_pulse(file_obj, data): pulse_type_bytes = data.pulse_type.encode(common.ENCODE) envelope_bytes = _dumps_symbolic_expr(data.envelope) constraints_bytes = _dumps_symbolic_expr(data.constraints) valid_amp_conditions_bytes = _dumps_symbolic_expr( data.valid_amp_conditions) header_bytes = struct.pack( formats.SYMBOLIC_PULSE_PACK, len(pulse_type_bytes), len(envelope_bytes), len(constraints_bytes), len(valid_amp_conditions_bytes), data._limit_amplitude, ) file_obj.write(header_bytes) file_obj.write(pulse_type_bytes) file_obj.write(envelope_bytes) file_obj.write(constraints_bytes) file_obj.write(valid_amp_conditions_bytes) common.write_mapping( file_obj, mapping=data._params, serializer=value.dumps_value, ) value.write_value(file_obj, data.duration) value.write_value(file_obj, data.name)
def _write_calibrations(file_obj, calibrations, metadata_serializer): flatten_dict = {} for gate, caldef in calibrations.items(): for (qubits, params), schedule in caldef.items(): key = (gate, qubits, params) flatten_dict[key] = schedule header = struct.pack(formats.CALIBRATION_PACK, len(flatten_dict)) file_obj.write(header) for (name, qubits, params), schedule in flatten_dict.items(): # In principle ScheduleBlock and Schedule can be supported. # As of version 5 only ScheduleBlock is supported. name_bytes = name.encode(common.ENCODE) defheader = struct.pack( formats.CALIBRATION_DEF_PACK, len(name_bytes), len(qubits), len(params), type_keys.Program.assign(schedule), ) file_obj.write(defheader) file_obj.write(name_bytes) for qubit in qubits: file_obj.write(struct.pack("!q", qubit)) for param in params: value.write_value(file_obj, param) schedules.write_schedule_block(file_obj, schedule, metadata_serializer)
def _write_waveform(file_obj, data): samples_bytes = common.data_to_binary(data.samples, np.save) header = struct.pack( formats.WAVEFORM_PACK, data.epsilon, len(samples_bytes), data._limit_amplitude, ) file_obj.write(header) file_obj.write(samples_bytes) value.write_value(file_obj, data.name)
def _write_element(file_obj, element, metadata_serializer): if isinstance(element, ScheduleBlock): common.write_type_key(file_obj, type_keys.Program.SCHEDULE_BLOCK) write_schedule_block(file_obj, element, metadata_serializer) else: type_key = type_keys.ScheduleInstruction.assign(element) common.write_type_key(file_obj, type_key) common.write_sequence( file_obj, sequence=element.operands, serializer=_dumps_operand, ) value.write_value(file_obj, element.name)
def _write_channel(file_obj, data): type_key = type_keys.ScheduleChannel.assign(data) common.write_type_key(file_obj, type_key) value.write_value(file_obj, data.index)