예제 #1
0
    def convert_set_phase(self, instruction):
        """Return converted `SetPhase`.

        Args:
            instruction (PulseQobjInstruction): phase set qobj instruction
        Returns:
            Schedule: Converted and scheduled Instruction
        """
        t0 = instruction.t0
        channel = self.get_channel(instruction.ch)
        phase = instruction.phase

        # This is parameterized
        if isinstance(phase, str):
            phase_expr = parse_string_expr(phase, partial_binding=False)

            def gen_fc_sched(*args, **kwargs):
                # this should be real value
                _phase = phase_expr(*args, **kwargs)
                return instructions.SetPhase(_phase, channel) << t0

            return ParameterizedSchedule(gen_fc_sched,
                                         parameters=phase_expr.params)

        return instructions.SetPhase(phase, channel) << t0
예제 #2
0
    def test_default(self):
        """Test basic SetPhase."""
        set_phase = instructions.SetPhase(1.57, channels.DriveChannel(0))

        self.assertIsInstance(set_phase.id, int)
        self.assertEqual(set_phase.name, None)
        self.assertEqual(set_phase.duration, 0)
        self.assertEqual(set_phase.phase, 1.57)
        self.assertEqual(set_phase.operands, (1.57, channels.DriveChannel(0)))
        self.assertEqual(
            set_phase,
            instructions.SetPhase(1.57, channels.DriveChannel(0), name="test"))
        self.assertNotEqual(
            set_phase,
            instructions.SetPhase(1.57j, channels.DriveChannel(0),
                                  name="test"))
        self.assertEqual(repr(set_phase), "SetPhase(1.57, DriveChannel(0))")
예제 #3
0
    def test_set_phase(self):  # pylint: disable=no-member
        """Test set phase instruction."""
        d0 = pulse.DriveChannel(0)

        with pulse.build() as schedule:
            pulse.set_phase(3.14, d0)

        reference = pulse.Schedule()
        reference += instructions.SetPhase(3.14, d0)  # pylint: disable=no-member

        self.assertEqual(schedule, reference)
예제 #4
0
    def test_set_phase(self):
        """Test set phase instruction."""
        d0 = pulse.DriveChannel(0)

        with pulse.build() as schedule:
            pulse.set_phase(3.14, d0)

        reference = pulse.Schedule()
        reference += instructions.SetPhase(3.14, d0)

        self.assertScheduleEqual(schedule, reference)
예제 #5
0
    def convert_set_phase(self, instruction):
        """Return converted `SetPhase`.

        Args:
            instruction (PulseQobjInstruction): phase set qobj instruction
        Returns:
            Schedule: Converted and scheduled Instruction
        """
        t0 = instruction.t0
        channel = self.get_channel(instruction.ch)
        phase = self.disassemble_value(instruction.phase)

        return instructions.SetPhase(phase, channel) << t0
예제 #6
0
 def gen_fc_sched(*args, **kwargs):
     # this should be real value
     _phase = phase_expr(*args, **kwargs)
     return instructions.SetPhase(_phase, channel) << t0
예제 #7
0
 def test_set_phase_non_pulse_channel(self):
     """Test shift phase constructor with illegal channel"""
     with self.assertRaises(exceptions.PulseError):
         instructions.SetPhase(1.57, channels.RegisterSlot(1), name="test")