Example #1
0
 def test_gaussian_pulse(self):
     """Test that Gaussian sample pulse matches the pulse library."""
     gauss = Gaussian(duration=25, sigma=4, amp=0.5j)
     sample_pulse = gauss.get_waveform()
     self.assertIsInstance(sample_pulse, Waveform)
     pulse_lib_gauss = gaussian(duration=25, sigma=4, amp=0.5j, zero_ends=True).samples
     np.testing.assert_almost_equal(sample_pulse.samples, pulse_lib_gauss)
Example #2
0
 def test_sampled_pulse(self):
     """Test that we can convert to a sampled pulse."""
     gauss = Gaussian(duration=25, sigma=4, amp=0.5j)
     sample_pulse = gauss.get_waveform()
     self.assertIsInstance(sample_pulse, Waveform)
     pulse_lib_gaus = gaussian(duration=25, sigma=4,
                               amp=0.5j, zero_ends=False).samples
     np.testing.assert_almost_equal(sample_pulse.samples, pulse_lib_gaus)
Example #3
0
    def test_gaussian_limit_amplitude(self):
        """Test that the check for amplitude less than or equal to 1 can be disabled."""
        with self.assertRaises(PulseError):
            Gaussian(duration=100, sigma=1.0, amp=1.1 + 0.8j)

        with patch("qiskit.pulse.library.pulse.Pulse.limit_amplitude",
                   new=False):
            waveform = Gaussian(duration=100, sigma=1.0, amp=1.1 + 0.8j)
            self.assertGreater(np.abs(waveform.amp), 1.0)
Example #4
0
    def test_gaussian_limit_amplitude_per_instance(self):
        """Test that the check for amplitude per instance."""
        with self.assertRaises(PulseError):
            Gaussian(duration=100, sigma=1.0, amp=1.1 + 0.8j)

        waveform = Gaussian(duration=100,
                            sigma=1.0,
                            amp=1.1 + 0.8j,
                            limit_amplitude=False)
        self.assertGreater(np.abs(waveform.amp), 1.0)
Example #5
0
 def test_gauss_square_extremes(self):
     """Test that the gaussian square pulse can build a gaussian."""
     duration = 125
     sigma = 4
     amp = 0.5j
     gaus_square = GaussianSquare(duration=duration, sigma=sigma, amp=amp, width=0)
     gaus = Gaussian(duration=duration, sigma=sigma, amp=amp)
     np.testing.assert_almost_equal(gaus_square.get_waveform().samples,
                                    gaus.get_waveform().samples)
     gaus_square = GaussianSquare(duration=duration, sigma=sigma, amp=amp, width=121)
     const = Constant(duration=duration, amp=amp)
     np.testing.assert_almost_equal(gaus_square.get_waveform().samples[2:-2],
                                    const.get_waveform().samples[2:-2])
Example #6
0
 def test_gauss_samples(self):
     """Test that the gaussian samples match the formula."""
     duration = 25
     sigma = 4
     amp = 0.5j
     # formulaic
     times = np.array(range(25), dtype=np.complex_)
     times = times - (duration / 2) + 0.5
     gauss = amp * np.exp(-(times / sigma)**2 / 2)
     # wf
     wf = Gaussian(duration=duration, sigma=sigma, amp=amp)
     samples = wf.get_waveform().samples
     np.testing.assert_almost_equal(samples, gauss)
    def test_gaussian_limit_amplitude(self):
        """Test that the check for amplitude less than or equal to 1 can be disabled."""
        waveform = Gaussian(duration=100,
                            sigma=1.0,
                            amp=1.1 + 0.8j,
                            limit_amplitude=False)
        self.assertGreater(np.abs(waveform.amp), 1.0)

        with self.assertRaises(PulseError):
            Gaussian(duration=100,
                     sigma=1.0,
                     amp=1.1 + 0.8j,
                     limit_amplitude=True)
 def test_param_validation(self):
     """Test that parametric pulse parameters are validated when initialized."""
     with self.assertRaises(PulseError):
         Gaussian(duration=25, sigma=0, amp=0.5j)
     with self.assertRaises(PulseError):
         GaussianSquare(duration=150, amp=0.2, sigma=8)
     with self.assertRaises(PulseError):
         GaussianSquare(duration=150,
                        amp=0.2,
                        sigma=8,
                        width=100,
                        risefall_sigma_ratio=5)
     with self.assertRaises(PulseError):
         GaussianSquare(duration=150, amp=0.2, sigma=8, width=160)
     with self.assertRaises(PulseError):
         GaussianSquare(duration=150,
                        amp=0.2,
                        sigma=8,
                        risefall_sigma_ratio=10)
     with self.assertRaises(PulseError):
         Constant(duration=150, amp=0.9 + 0.8j)
     with self.assertRaises(PulseError):
         Drag(duration=25, amp=0.2 + 0.3j, sigma=-7.8, beta=4)
     with self.assertRaises(PulseError):
         Drag(duration=25, amp=0.2 + 0.3j, sigma=7.8, beta=4j)
Example #9
0
 def test_construction(self):
     """Test that parametric pulses can be constructed without error."""
     Gaussian(duration=25, sigma=4, amp=0.5j)
     GaussianSquare(duration=150, amp=0.2, sigma=8, width=140)
     GaussianSquare(duration=150, amp=0.2, sigma=8, risefall_sigma_ratio=2.5)
     Constant(duration=150, amp=0.1 + 0.4j)
     Drag(duration=25, amp=0.2 + 0.3j, sigma=7.8, beta=4)
Example #10
0
 def test_symbolic_amplitude_limit(self):
     """Test applying amplitude limit to symbolic pulse."""
     with builder.build() as test_sched:
         builder.play(
             Gaussian(160, 20, 40, limit_amplitude=False),
             DriveChannel(0),
         )
     self.assert_roundtrip_equal(test_sched)
Example #11
0
 def test_repr(self):
     """Test the repr methods for parametric pulses."""
     gaus = Gaussian(duration=25, amp=0.7, sigma=4)
     self.assertEqual(repr(gaus), 'Gaussian(duration=25, amp=(0.7+0j), sigma=4)')
     gaus_square = GaussianSquare(duration=20, sigma=30, amp=1.0, width=3)
     self.assertEqual(repr(gaus_square),
                      'GaussianSquare(duration=20, amp=(1+0j), sigma=30, width=3)')
     drag = Drag(duration=5, amp=0.5, sigma=7, beta=1)
     self.assertEqual(repr(drag), 'Drag(duration=5, amp=(0.5+0j), sigma=7, beta=1)')
     const = Constant(duration=150, amp=0.1 + 0.4j)
     self.assertEqual(repr(const), 'Constant(duration=150, amp=(0.1+0.4j))')
Example #12
0
 def test_gaussian_pulse_instruction(self):
     """Test that parametric pulses are correctly converted to PulseQobjInstructions."""
     converter = InstructionToQobjConverter(PulseQobjInstruction, meas_level=2)
     instruction = Play(Gaussian(duration=25, sigma=15, amp=-0.5 + 0.2j), DriveChannel(0))
     valid_qobj = PulseQobjInstruction(
         name='parametric_pulse',
         pulse_shape='gaussian',
         ch='d0',
         t0=0,
         parameters={'duration': 25, 'sigma': 15, 'amp': -0.5 + 0.2j})
     self.assertEqual(converter(0, instruction), valid_qobj)
Example #13
0
 def test_parametric_pulses(self):
     """Test converted qobj from ParametricInstruction."""
     instruction = Play(Gaussian(duration=25, sigma=15, amp=-0.5 + 0.2j), DriveChannel(0))
     qobj = PulseQobjInstruction(
         name='parametric_pulse',
         pulse_shape='gaussian',
         ch='d0',
         t0=0,
         parameters={'duration': 25, 'sigma': 15, 'amp': -0.5 + 0.2j})
     converted_instruction = self.converter(qobj)
     self.assertEqual(converted_instruction.start_time, 0)
     self.assertEqual(converted_instruction.duration, 25)
     self.assertEqual(converted_instruction.instructions[0][-1], instruction)
 def test_gaussian_pulse_instruction(self):
     """Test that parametric pulses are correctly converted to PulseQobjInstructions."""
     converter = InstructionToQobjConverter(PulseQobjInstruction,
                                            meas_level=2)
     instruction = Play(Gaussian(duration=25, sigma=15, amp=-0.5 + 0.2j),
                        DriveChannel(0))
     valid_qobj = PulseQobjInstruction(
         name="parametric_pulse",
         pulse_shape="gaussian",
         ch="d0",
         t0=0,
         parameters={
             "duration": 25,
             "sigma": 15,
             "amp": -0.5 + 0.2j
         },
     )
     self.assertEqual(converter(0, instruction), valid_qobj)
 def test_parametric_pulses(self):
     """Test converted qobj from ParametricInstruction."""
     instruction = Play(
         Gaussian(duration=25, sigma=15, amp=-0.5 + 0.2j, name="pulse1"),
         DriveChannel(0))
     qobj = PulseQobjInstruction(
         name="parametric_pulse",
         label="pulse1",
         pulse_shape="gaussian",
         ch="d0",
         t0=0,
         parameters={
             "duration": 25,
             "sigma": 15,
             "amp": -0.5 + 0.2j
         },
     )
     converted_instruction = self.converter(qobj)
     self.assertEqual(converted_instruction.start_time, 0)
     self.assertEqual(converted_instruction.duration, 25)
     self.assertEqual(converted_instruction.instructions[0][-1],
                      instruction)
     self.assertEqual(converted_instruction.instructions[0][-1].pulse.name,
                      "pulse1")
Example #16
0
 def test_parameterized(self, channel, *params):
     """Test playing parameterized pulse."""
     # pylint: disable=no-value-for-parameter
     with builder.build() as test_sched:
         builder.play(Gaussian(*params), DriveChannel(channel))
     self.assert_roundtrip_equal(test_sched)