def test_if_quadratic_sequence_with_even_inner_pulses_is_identity(): """ Tests if the product of the pulses in a quadratic sequence with pre/post pi/2-pulses is an identity, when the total number of inner pulses is even. """ inner_even_quadratic_sequence = new_quadratic_sequence( duration=10.0, inner_offset_count=8, outer_offset_count=7, pre_post_rotation=True, ) # n_outer + n_inner*(n_outer+1) pi-pulses + 2 pi/2-pulses # total number here is even assert len(inner_even_quadratic_sequence.offsets) == 7 + 8 * (7 + 1) + 2 assert _pulses_produce_identity(inner_even_quadratic_sequence)
def test_quadratic_sequence(): """ Tests the quadratic sequence. """ duration = 10.0 inner_offset_count = 4 outer_offset_count = 4 sequence = new_quadratic_sequence( duration=duration, inner_offset_count=inner_offset_count, outer_offset_count=outer_offset_count, ) _offsets = np.zeros((outer_offset_count + 1, inner_offset_count + 1)) constant = 0.5 / (outer_offset_count + 1) _delta_positions = [ duration * (np.sin(np.pi * (k + 1) * constant))**2 for k in range(outer_offset_count) ] _outer_offsets = np.array(_delta_positions) _offsets[0:outer_offset_count, -1] = _outer_offsets _outer_offsets = np.insert( _outer_offsets, [0, _outer_offsets.shape[0]], [0, duration], ) _inner_durations = _outer_offsets[1:] - _outer_offsets[0:-1] constant = 0.5 / (inner_offset_count + 1) _delta_positions = [(np.sin(np.pi * (k + 1) * constant))**2 for k in range(inner_offset_count)] _delta_positions = np.array(_delta_positions) for inner_sequence_idx in range(_inner_durations.shape[0]): _inner_deltas = _inner_durations[inner_sequence_idx] * _delta_positions _inner_deltas = _outer_offsets[inner_sequence_idx] + _inner_deltas _offsets[inner_sequence_idx, 0:inner_offset_count] = _inner_deltas _rabi_rotations = np.zeros(_offsets.shape) _detuning_rotations = np.zeros(_offsets.shape) _rabi_rotations[0:outer_offset_count, -1] = np.pi _detuning_rotations[0:(outer_offset_count + 1), 0:inner_offset_count] = np.pi _offsets = np.reshape(_offsets, (-1, )) _rabi_rotations = np.reshape(_rabi_rotations, (-1, )) _detuning_rotations = np.reshape(_detuning_rotations, (-1, )) _offsets = _offsets[0:-1] _rabi_rotations = _rabi_rotations[0:-1] _detuning_rotations = _detuning_rotations[0:-1] _azimuthal_angles = np.zeros(_offsets.shape) assert np.allclose(_offsets, sequence.offsets) assert np.allclose(_rabi_rotations, sequence.rabi_rotations) assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) sequence = new_quadratic_sequence( duration=duration, inner_offset_count=inner_offset_count, outer_offset_count=outer_offset_count, pre_post_rotation=True, ) _offsets = np.insert(_offsets, [0, _offsets.shape[0]], [0, duration]) _rabi_rotations = np.insert(_rabi_rotations, [0, _rabi_rotations.shape[0]], [np.pi / 2, np.pi / 2]) _detuning_rotations = np.insert(_detuning_rotations, [0, _detuning_rotations.shape[0]], [0, 0]) _azimuthal_angles = np.zeros(_offsets.shape) _azimuthal_angles[-1] = np.pi assert np.allclose(_offsets, sequence.offsets) assert np.allclose(_rabi_rotations, sequence.rabi_rotations) assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations)