Skip to content

Commit

Permalink
Avoid lossing precision when scaling frequencies
Browse files Browse the repository at this point in the history
Classes in pulse_instruction.py scale frequency values to GHz by
multipliying `ParameterExpression` with float 1e9. This can lead
to numerical errors on some systems using symengine. Instead, this
scaling can be done multiplying by integer 10**9.

See: Qiskit#12359 (comment)
  • Loading branch information
iyanmv committed May 12, 2024
1 parent f20dad0 commit fa5d8a7
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions qiskit/qobj/converters/pulse_instruction.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ def _convert_set_frequency(
"name": "setf",
"t0": time_offset + instruction.start_time,
"ch": instruction.channel.name,
"frequency": instruction.frequency / 1e9,
"frequency": instruction.frequency / 10**9,
}
return self._qobj_model(**command_dict)

Expand All @@ -257,7 +257,7 @@ def _convert_shift_frequency(
"name": "shiftf",
"t0": time_offset + instruction.start_time,
"ch": instruction.channel.name,
"frequency": instruction.frequency / 1e9,
"frequency": instruction.frequency / 10**9,
}
return self._qobj_model(**command_dict)

Expand Down Expand Up @@ -746,7 +746,7 @@ def _convert_setf(
.. note::
We assume frequency value is expressed in string with "GHz".
Operand value is thus scaled by a factor of 1e9.
Operand value is thus scaled by a factor of 10^9.
Args:
instruction: SetFrequency qobj instruction
Expand All @@ -755,7 +755,7 @@ def _convert_setf(
Qiskit Pulse set frequency instructions
"""
channel = self.get_channel(instruction.ch)
frequency = self.disassemble_value(instruction.frequency) * 1e9
frequency = self.disassemble_value(instruction.frequency) * 10**9

yield instructions.SetFrequency(frequency, channel)

Expand All @@ -768,7 +768,7 @@ def _convert_shiftf(
.. note::
We assume frequency value is expressed in string with "GHz".
Operand value is thus scaled by a factor of 1e9.
Operand value is thus scaled by a factor of 10^9.
Args:
instruction: ShiftFrequency qobj instruction
Expand All @@ -777,7 +777,7 @@ def _convert_shiftf(
Qiskit Pulse shift frequency schedule instructions
"""
channel = self.get_channel(instruction.ch)
frequency = self.disassemble_value(instruction.frequency) * 1e9
frequency = self.disassemble_value(instruction.frequency) * 10**9

yield instructions.ShiftFrequency(frequency, channel)

Expand Down

0 comments on commit fa5d8a7

Please sign in to comment.