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, width=160) with self.assertRaises(PulseError): ConstantPulse(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)
def test_parameters(self): """Test that the parameters can be extracted as a dict through the `parameters` attribute.""" drag = Drag(duration=25, amp=0.2 + 0.3j, sigma=7.8, beta=4) self.assertEqual(set(drag.parameters.keys()), {'duration', 'amp', 'sigma', 'beta'}) const = ConstantPulse(duration=150, amp=1) self.assertEqual(set(const.parameters.keys()), {'duration', 'amp'})
def test_drag_samples(self): """Test that the drag samples match the formula.""" duration = 25 sigma = 4 amp = 0.5j beta = 1 # formulaic times = np.array(range(25), dtype=np.complex_) times = times - (25 / 2) + 0.5 gauss = amp * np.exp(-(times / sigma)**2 / 2) gauss_deriv = -(times / sigma**2) * gauss drag = gauss + 1j * beta * gauss_deriv # command command = Drag(duration=duration, sigma=sigma, amp=amp, beta=beta) samples = command.get_sample_pulse().samples np.testing.assert_almost_equal(samples, drag)
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 = ConstantPulse(duration=150, amp=0.1 + 0.4j) self.assertEqual(repr(const), 'ConstantPulse(duration=150, amp=(0.1+0.4j))')
def test_drag_validation(self): """Test drag parameter validation, specifically the beta validation.""" duration = 25 sigma = 4 amp = 0.5j beta = 1 command = Drag(duration=duration, sigma=sigma, amp=amp, beta=beta) samples = command.get_sample_pulse().samples self.assertTrue(max(np.abs(samples)) <= 1) beta = sigma ** 2 with self.assertRaises(PulseError): command = Drag(duration=duration, sigma=sigma, amp=amp, beta=beta) # If sigma is high enough, side peaks fall out of range and norm restriction is met sigma = 100 command = Drag(duration=duration, sigma=sigma, amp=amp, beta=beta)
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) ConstantPulse(duration=150, amp=0.1 + 0.4j) Drag(duration=25, amp=0.2 + 0.3j, sigma=7.8, beta=4)
def check_drag(duration, sigma, amp, beta): command = Drag(duration=duration, sigma=sigma, amp=amp, beta=beta) samples = command.get_sample_pulse().samples self.assertTrue(max(np.abs(samples)) <= 1)