diff --git a/examples/creating-a-driven-control.ipynb b/examples/creating-a-driven-control.ipynb index c9d90f1b..6da001a4 100644 --- a/examples/creating-a-driven-control.ipynb +++ b/examples/creating-a-driven-control.ipynb @@ -380,7 +380,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.6.4" }, "toc": { "base_numbering": 1, @@ -397,5 +397,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/creating-a-dynamical-decoupling-sequence.ipynb b/examples/creating-a-dynamical-decoupling-sequence.ipynb index 7d9c7c50..f39dffc0 100644 --- a/examples/creating-a-dynamical-decoupling-sequence.ipynb +++ b/examples/creating-a-dynamical-decoupling-sequence.ipynb @@ -28,7 +28,14 @@ "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from qctrlopencontrols import new_predefined_dds, DynamicDecouplingSequence\n", + "from qctrlopencontrols import (new_spin_echo_sequence,\n", + " new_carr_purcell_sequence,\n", + " new_walsh_sequence,\n", + " new_ramsey_sequence,\n", + " new_x_concatenated_sequence,\n", + " new_quadratic_sequence,\n", + " DynamicDecouplingSequence\n", + " )\n", "from qctrlvisualizer import plot_sequences" ] }, @@ -51,7 +58,7 @@ "9. `X concatenated`\n", "10. `XY concatenated`\n", "\n", - "See the [documentation](https://docs.q-ctrl.com/wiki/control-formats#dynamical-decoupling-sequences) for details." + "See the [documentation](https://docs.q-ctrl.com/references/python/qctrl-open-controls/qctrlopencontrols.html) for details." ] }, { @@ -60,9 +67,10 @@ "source": [ "## Creating and printing a DDS\n", "\n", - "A DDS is defined as a set of instant unitary operations, each defined by a `rabi_rotation`, `azimuthal_angle`, `detuning_angle`, and `offset` (giving the time at which the operation is applied). The mathematical definition of a sequence is explained in the [documentation](http://docs.q-ctrl.com/wiki/control-library#dynamical-decoupling-sequences).\n", + "A DDS is defined as a set of instant unitary operations, each defined by a `rabi_rotation`, `azimuthal_angle`, `detuning_angle`, and `offset` (giving the time at which the operation is applied). The mathematical definition of a sequence is explained in the [documentation](https://docs.q-ctrl.com/references/python/qctrl-open-controls/qctrlopencontrols.html#qctrlopencontrols.DynamicDecouplingSequence).\n", "\n", - "Q-CTRL Open controls can generate a DDS from a library of dynamical decoupling schemes, mathematically defined in the [documentation](https://docs.q-ctrl.com/wiki/control-formats#dynamical-decoupling-sequences). Below we give a few examples of generating DDSs. The schemes are grouped into cells if they have common keywords." + "Q-CTRL Open controls provides a set of functions to generate commonly used DDSs. For each sequence, the detailed mathematical definition can be found in the [documentation](https://docs.q-ctrl.com/references/python/qctrl-open-controls/qctrlopencontrols.html#qctrlopencontrols).\n", + "Below we give a few examples of generating DDSs." ] }, { @@ -85,7 +93,7 @@ ], "source": [ "## Spin echo sequence\n", - "se_dds = new_predefined_dds(scheme='spin echo', duration=10e-6, name='SE DDS')\n", + "se_dds = new_spin_echo_sequence(duration=10e-6, name='SE DDS')\n", "print(se_dds)" ] }, @@ -109,9 +117,7 @@ ], "source": [ "## Carr-Purcell sequence\n", - "## 'Carr-Purcell-Meiboom-Gill', 'Uhrig single-axis' or 'Periodic single-axis' schemes use same keywords\n", - "cp_dds = new_predefined_dds(\n", - " scheme='Carr-Purcell', \n", + "cp_dds = new_carr_purcell_sequence( \n", " duration=10e-6, \n", " number_of_offsets = 4.,\n", " name='CP DDS')\n", @@ -138,8 +144,7 @@ ], "source": [ "## Walsh single-axis\n", - "walsh_dds = new_predefined_dds(\n", - " scheme='Walsh single-axis', \n", + "walsh_dds = new_walsh_sequence(\n", " duration=10e-6, \n", " paley_order = 4.,\n", " name='Walsh DDS')\n", @@ -166,8 +171,7 @@ ], "source": [ "## Quadratic sequence\n", - "quadratic_dds = new_predefined_dds(\n", - " scheme='quadratic', \n", + "quadratic_dds = new_quadratic_sequence(\n", " duration=10e-6, \n", " number_inner_offsets = 2,\n", " number_outer_offsets = 2,\n", @@ -196,8 +200,7 @@ "source": [ "## X concatenated sequence\n", "## 'XY concatenated' scheme uses the same keyword\n", - "xc_dds = new_predefined_dds(\n", - " scheme='X concatenated', \n", + "xc_dds = new_x_concatenated_sequence(\n", " duration=10e-6, \n", " concatenation_order = 2,\n", " name='XC DDS')\n", @@ -224,7 +227,7 @@ ], "source": [ "## Ramsay DDS\n", - "ramsey_dds = new_predefined_dds(scheme='Ramsey', duration=1e-6, name='Ramsey DDS')\n", + "ramsey_dds = new_ramsey_sequence(duration=1e-6, name='Ramsey DDS')\n", "print(ramsey_dds)" ] }, @@ -244,7 +247,7 @@ "outputs": [ { "data": { - "image/png": "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35DrikREREQqVMS3835njZsBXAX8kmSogaUFrEdERESkMrmfiWpljftDYDpwa4h+S2ErEhERESlZoUWUiIiISF0VcWO5iIiISO2piBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpgIooERERkQ6oiBIRERHpwPiqA+h1//bE04MTxvdVHUZutmx9mfF99a6ty85RfSq9pAnbUseA/NUtx02btzyzYN7sWSO1UxG1kyaM72P+PjOqDiM3/csH2H/uzKrDKFTZOapPpZc0YVvqGJC/uuXYv3xg+Wja1adsFBERESmRzkQNY42bDPwMmETSP9eF6L9UbVTl+PTUAQAuXldxIAWqIscF82aXt7IKNOHvpimasi3L3Ceb0KdNyLEdnYna3ibg6BD9W4BDgGOtcW+tOCbpYWvWbaw6BBFpoX1S8qIzUcOE6AeB9enkhPRnsLqIpNc9tXod06fuWnUYIpLSPil5URGVwRrXBywF9gcuDNHfU3FIIiIi0mV0OS9DiH5riP4QYC5whDXu4Nb3rXGLrHH3WePuW//8+uyFiIiISK3pTNQOhOjXWON+AhwLPNgyfzGwGGDZqtW61Cc7NGfWtKpDEJEW2iclLzoTNYw1bpY1bnr6elfgGODRaqOSXjZ5ov6vItJNtE9KXlREbW8f4CfWuPuBJcCPQ/Q3VRyT9LDfr3y26hBEpIX2ScmLyvFhQvT3A4dWHYeIiIh0N52JEhEREemAiiiRgk2bMrnqEESkhfZJyYuKKJGC7b3nHlWHICIttE9KXlREiRRs2arVVYcgIi20T0peVESJFGzT5i1VhyAiLbRPSl5URImIiIh0QEWUSMH6+rSbiXQT7ZOSl8rHibLGLQGGPzplLXA3cH6Ifn1LWwdcGqJfa42LwOHAaSH620sLWGSM9p87s+oQRKSF9knJSzeU43cATwB/l/4sBx4G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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -301,7 +304,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "rabi_rate,azimuthal_angle,detuning,duration,maximum_rabi_rate\n", + "amplitude_x,amplitude_y,detuning,duration,maximum_rabi_rate\n", "\n", "0.0,0.0,0.0,4.999999999999999e-07,6283185.3071795935\n", "\n", @@ -377,7 +380,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -425,7 +428,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.6.4" }, "toc": { "base_numbering": 1, @@ -442,5 +445,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/qctrlopencontrols/__init__.py b/qctrlopencontrols/__init__.py index 68cbf9d8..20e51ef4 100644 --- a/qctrlopencontrols/__init__.py +++ b/qctrlopencontrols/__init__.py @@ -40,7 +40,6 @@ new_carr_purcell_sequence, new_cpmg_sequence, new_periodic_sequence, - new_predefined_dds, new_quadratic_sequence, new_ramsey_sequence, new_spin_echo_sequence, @@ -60,7 +59,6 @@ "new_corpse_in_scrofulous_control", "new_corpse_in_sk1_control", "new_modulated_gaussian_control", - "new_predefined_dds", "new_predefined_driven_control", "new_primitive_control", "new_scrofulous_control", diff --git a/qctrlopencontrols/constants.py b/qctrlopencontrols/constants.py index 035bbf99..f5e8a328 100644 --- a/qctrlopencontrols/constants.py +++ b/qctrlopencontrols/constants.py @@ -77,33 +77,3 @@ # Matplotlib format of data for plotting MATPLOTLIB = "matplotlib" - -# Ramsey sequence -RAMSEY = "Ramsey" - -# Spin echo (SE) dynamical decoupling sequence -SPIN_ECHO = "spin echo" - -# Carr-Purcell (CP) dynamical decoupling sequence -CARR_PURCELL = "Carr-Purcell" - -# Carr-Purcell-Meiboom-Gill (CPMG) dynamical decoupling sequence -CARR_PURCELL_MEIBOOM_GILL = "Carr-Purcell-Meiboom-Gill" - -# Uhrig (single-axis) dynamical decoupling sequence -UHRIG_SINGLE_AXIS = "Uhrig single-axis" - -# Periodical dynamical decoupling sequence -PERIODIC_SINGLE_AXIS = "periodic single-axis" - -# Walsh dynamical decoupling sequence -WALSH_SINGLE_AXIS = "Walsh single-axis" - -# Quadratic dynamical decoupling sequence -QUADRATIC = "quadratic" - -# X-Concatenated dynamical decoupling sequence -X_CONCATENATED = "X concatenated" - -# XY-Concatenated dynamical decoupling sequence -XY_CONCATENATED = "XY concatenated" diff --git a/qctrlopencontrols/dynamic_decoupling_sequences/predefined.py b/qctrlopencontrols/dynamic_decoupling_sequences/predefined.py index 437c4f1e..376bd739 100644 --- a/qctrlopencontrols/dynamic_decoupling_sequences/predefined.py +++ b/qctrlopencontrols/dynamic_decoupling_sequences/predefined.py @@ -23,18 +23,6 @@ import numpy as np -from ..constants import ( - CARR_PURCELL, - CARR_PURCELL_MEIBOOM_GILL, - PERIODIC_SINGLE_AXIS, - QUADRATIC, - RAMSEY, - SPIN_ECHO, - UHRIG_SINGLE_AXIS, - WALSH_SINGLE_AXIS, - X_CONCATENATED, - XY_CONCATENATED, -) from ..exceptions import ArgumentsValueError from .dynamic_decoupling_sequence import DynamicDecouplingSequence @@ -160,86 +148,6 @@ def _add_pre_post_rotations( return offsets, rabi_rotations, azimuthal_angles, detuning_rotations -def new_predefined_dds(scheme=SPIN_ECHO, **kwargs): - """ - Creates a new instance of one of the predefined dynamic decoupling sequences. - - Parameters - ---------- - scheme : string - The name of the sequence. The available options are: - - - 'Ramsey' - - 'spin echo' - - 'Carr-Purcell' - - 'Carr-Purcell-Meiboom-Gill' - - 'Uhrig single-axis' - - 'Periodic single-axis' - - 'Walsh single-axis' - - 'quadratic' - - 'X concatenated' - - 'XY concatenated' - - Defaults to 'spin echo'. - kwargs : dict, optional - Additional keyword argument to create the sequence. - - Returns - ------ - qctrlopencontrols.dynamic_decoupling_sequences.DynamicDecouplingSequence - A dynamical decoupling sequence corresponding to `scheme`. - - Raises - ----- - ArgumentsValueError - Raised when an argument is invalid. - """ - - if scheme == RAMSEY: - sequence = new_ramsey_sequence(**kwargs) - elif scheme == SPIN_ECHO: - sequence = new_spin_echo_sequence(**kwargs) - elif scheme == CARR_PURCELL: - sequence = new_carr_purcell_sequence(**kwargs) - elif scheme == CARR_PURCELL_MEIBOOM_GILL: - sequence = new_cpmg_sequence(**kwargs) - elif scheme == UHRIG_SINGLE_AXIS: - sequence = new_uhrig_sequence(**kwargs) - elif scheme == PERIODIC_SINGLE_AXIS: - sequence = new_periodic_sequence(**kwargs) - elif scheme == WALSH_SINGLE_AXIS: - sequence = new_walsh_sequence(**kwargs) - elif scheme == QUADRATIC: - sequence = new_quadratic_sequence(**kwargs) - elif scheme == X_CONCATENATED: - sequence = new_x_concatenated_sequence(**kwargs) - elif scheme == XY_CONCATENATED: - sequence = new_xy_concatenated_sequence(**kwargs) - # Raise an error if the input sequence is not known - else: - raise ArgumentsValueError( - "Unknown predefined sequence scheme. Allowed schemes are: " - + ", ".join( - [ - RAMSEY, - SPIN_ECHO, - CARR_PURCELL, - CARR_PURCELL_MEIBOOM_GILL, - UHRIG_SINGLE_AXIS, - PERIODIC_SINGLE_AXIS, - WALSH_SINGLE_AXIS, - QUADRATIC, - X_CONCATENATED, - XY_CONCATENATED, - ] - ) - + ".", - {"sequence_name": scheme}, - ) - - return sequence - - def _check_duration(duration: Optional[float] = None) -> float: """ Validates sequence duration. diff --git a/tests/test_predefined_dynamical_decoupling.py b/tests/test_predefined_dynamical_decoupling.py index 9eb2495c..cedfc51d 100644 --- a/tests/test_predefined_dynamical_decoupling.py +++ b/tests/test_predefined_dynamical_decoupling.py @@ -18,35 +18,35 @@ import numpy as np -import pytest -from qctrlopencontrols import new_predefined_dds +from qctrlopencontrols import ( + new_carr_purcell_sequence, + new_cpmg_sequence, + new_periodic_sequence, + new_quadratic_sequence, + new_ramsey_sequence, + new_spin_echo_sequence, + new_uhrig_sequence, + new_walsh_sequence, + new_x_concatenated_sequence, + new_xy_concatenated_sequence, +) from qctrlopencontrols.constants import ( - CARR_PURCELL, - CARR_PURCELL_MEIBOOM_GILL, - PERIODIC_SINGLE_AXIS, - QUADRATIC, SIGMA_X, SIGMA_Y, SIGMA_Z, - SPIN_ECHO, - UHRIG_SINGLE_AXIS, - WALSH_SINGLE_AXIS, - X_CONCATENATED, - XY_CONCATENATED, ) -from qctrlopencontrols.exceptions import ArgumentsValueError -def test_ramsey(): +def test_ramsey_sequence(): """ - Tests Ramsey sequence. + Tests the Ramsey sequence. """ duration = 10.0 - sequence = new_predefined_dds(scheme="Ramsey", duration=duration) + sequence = new_ramsey_sequence(duration=duration) _offsets = np.array([]) _rabi_rotations = np.array([]) @@ -58,9 +58,7 @@ def test_ramsey(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme="Ramsey", duration=duration, pre_post_rotation=True - ) + sequence = new_ramsey_sequence(duration=duration, pre_post_rotation=True) _rabi_rotations = np.array([np.pi / 2, np.pi / 2]) _azimuthal_angles = np.array([0.0, np.pi]) @@ -71,15 +69,15 @@ def test_ramsey(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_spin_echo(): +def test_spin_echo_sequence(): """ - Test for Spin Echo Sequence. + Test the spin echo sequence. """ duration = 10.0 - sequence = new_predefined_dds(scheme=SPIN_ECHO, duration=duration) + sequence = new_spin_echo_sequence(duration=duration) _offsets = np.array([duration / 2.0]) _rabi_rotations = np.array([np.pi]) @@ -91,9 +89,7 @@ def test_spin_echo(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=SPIN_ECHO, duration=duration, pre_post_rotation=True - ) + sequence = new_spin_echo_sequence(duration=duration, pre_post_rotation=True) _offsets = np.array([0, duration / 2.0, duration]) _rabi_rotations = np.array([np.pi / 2, np.pi, np.pi / 2]) @@ -106,16 +102,16 @@ def test_spin_echo(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_curr_purcell(): +def test_carr_purcell_sequence(): """ - Test for Carr-Purcell (CP) sequence. + Test the Carr-Purcell sequence. """ duration = 10.0 number_of_offsets = 4 - sequence = new_predefined_dds( - scheme=CARR_PURCELL, duration=duration, number_of_offsets=number_of_offsets + sequence = new_carr_purcell_sequence( + duration=duration, number_of_offsets=number_of_offsets ) _spacing = duration / number_of_offsets @@ -136,11 +132,8 @@ def test_curr_purcell(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=CARR_PURCELL, - duration=duration, - number_of_offsets=number_of_offsets, - pre_post_rotation=True, + sequence = new_carr_purcell_sequence( + duration=duration, number_of_offsets=number_of_offsets, pre_post_rotation=True, ) _offsets = np.array( @@ -163,18 +156,16 @@ def test_curr_purcell(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_curr_purcell_meiboom_sequence(): +def test_cpmg_sequence(): """ - Tests for Carr-Purcell-Meiboom-Sequence (CPMG) sequence. + Tests the CPMG sequence. """ duration = 10.0 number_of_offsets = 4 - sequence = new_predefined_dds( - scheme=CARR_PURCELL_MEIBOOM_GILL, - duration=duration, - number_of_offsets=number_of_offsets, + sequence = new_cpmg_sequence( + duration=duration, number_of_offsets=number_of_offsets, ) _spacing = duration / number_of_offsets @@ -195,11 +186,8 @@ def test_curr_purcell_meiboom_sequence(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=CARR_PURCELL_MEIBOOM_GILL, - duration=duration, - number_of_offsets=number_of_offsets, - pre_post_rotation=True, + sequence = new_cpmg_sequence( + duration=duration, number_of_offsets=number_of_offsets, pre_post_rotation=True, ) _offsets = np.array( @@ -222,16 +210,16 @@ def test_curr_purcell_meiboom_sequence(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_uhrig_single_axis_sequence(): +def test_uhrig_sequence(): """ - Tests for Uhrig Single Axis Sequence. + Tests the Uhrig sequence. """ duration = 10.0 number_of_offsets = 4 - sequence = new_predefined_dds( - scheme=UHRIG_SINGLE_AXIS, duration=duration, number_of_offsets=number_of_offsets + sequence = new_uhrig_sequence( + duration=duration, number_of_offsets=number_of_offsets ) constant = 0.5 / (number_of_offsets + 1) @@ -250,11 +238,8 @@ def test_uhrig_single_axis_sequence(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=UHRIG_SINGLE_AXIS, - duration=duration, - number_of_offsets=number_of_offsets, - pre_post_rotation=True, + sequence = new_uhrig_sequence( + duration=duration, number_of_offsets=number_of_offsets, pre_post_rotation=True, ) _offsets = np.array(_delta_positions) @@ -272,18 +257,16 @@ def test_uhrig_single_axis_sequence(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_periodic_single_axis_sequence(): +def test_periodic_sequence(): """ - Tests for Periodic Single Axis Sequence. + Tests the periodic sequence. """ duration = 10.0 number_of_offsets = 4 - sequence = new_predefined_dds( - scheme=PERIODIC_SINGLE_AXIS, - duration=duration, - number_of_offsets=number_of_offsets, + sequence = new_periodic_sequence( + duration=duration, number_of_offsets=number_of_offsets, ) constant = 1 / (number_of_offsets + 1) @@ -301,11 +284,8 @@ def test_periodic_single_axis_sequence(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=PERIODIC_SINGLE_AXIS, - duration=duration, - number_of_offsets=number_of_offsets, - pre_post_rotation=True, + sequence = new_periodic_sequence( + duration=duration, number_of_offsets=number_of_offsets, pre_post_rotation=True, ) _offsets = np.array(_delta_positions) @@ -321,17 +301,15 @@ def test_periodic_single_axis_sequence(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_walsh_single_axis_sequence(): +def test_walsh_sequence(): """ - Tests for Periodic Single Axis Sequence. + Tests the Walsh sequence. """ duration = 10.0 paley_order = 20 - sequence = new_predefined_dds( - scheme=WALSH_SINGLE_AXIS, duration=duration, paley_order=paley_order - ) + sequence = new_walsh_sequence(duration=duration, paley_order=paley_order) hamming_weight = 5 samples = 2 ** hamming_weight @@ -362,11 +340,8 @@ def test_walsh_single_axis_sequence(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=WALSH_SINGLE_AXIS, - duration=duration, - paley_order=paley_order, - pre_post_rotation=True, + sequence = new_walsh_sequence( + duration=duration, paley_order=paley_order, pre_post_rotation=True, ) _offsets = np.insert(_offsets, [0, _offsets.shape[0]], [0, duration],) @@ -385,15 +360,14 @@ def test_walsh_single_axis_sequence(): def test_quadratic_sequence(): """ - Tests for Quadratic Sequence. + Tests the quadratic sequence. """ duration = 10.0 number_inner_offsets = 4 number_outer_offsets = 4 - sequence = new_predefined_dds( - scheme=QUADRATIC, + sequence = new_quadratic_sequence( duration=duration, number_inner_offsets=number_inner_offsets, number_outer_offsets=number_outer_offsets, @@ -446,8 +420,7 @@ def test_quadratic_sequence(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=QUADRATIC, + sequence = new_quadratic_sequence( duration=duration, number_inner_offsets=number_inner_offsets, number_outer_offsets=number_outer_offsets, @@ -471,18 +444,15 @@ def test_quadratic_sequence(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_xconcatenated_sequence(): +def test_x_concatenated_sequence(): """ - Tests X-CDD Sequence. + Tests the X-concatenated sequence. """ - duration = 10.0 concatenation_order = 3 - sequence = new_predefined_dds( - scheme=X_CONCATENATED, - duration=duration, - concatenation_order=concatenation_order, + sequence = new_x_concatenated_sequence( + duration=duration, concatenation_order=concatenation_order, ) _spacing = duration / (2 ** concatenation_order) @@ -498,8 +468,7 @@ def test_xconcatenated_sequence(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=X_CONCATENATED, + sequence = new_x_concatenated_sequence( duration=duration, concatenation_order=concatenation_order, pre_post_rotation=True, @@ -518,18 +487,16 @@ def test_xconcatenated_sequence(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_xyconcatenated_sequence(): +def test_xy_concatenated_sequence(): """ - Tests XY4-CDD Sequence. + Tests the XY-concatenated sequence. """ duration = 10.0 concatenation_order = 2 - sequence = new_predefined_dds( - scheme=XY_CONCATENATED, - duration=duration, - concatenation_order=concatenation_order, + sequence = new_xy_concatenated_sequence( + duration=duration, concatenation_order=concatenation_order, ) _spacing = duration / (2 ** (concatenation_order * 2)) @@ -592,8 +559,7 @@ def test_xyconcatenated_sequence(): assert np.allclose(_azimuthal_angles, sequence.azimuthal_angles) assert np.allclose(_detuning_rotations, sequence.detuning_rotations) - sequence = new_predefined_dds( - scheme=XY_CONCATENATED, + sequence = new_xy_concatenated_sequence( duration=duration, concatenation_order=concatenation_order, pre_post_rotation=True, @@ -616,62 +582,6 @@ def test_xyconcatenated_sequence(): assert np.allclose(_detuning_rotations, sequence.detuning_rotations) -def test_attribute_values(): - """ - Tests the correctness of the attribute values. - """ - - # Check that errors are raised correctly - - # duration cannot be <= 0 - with pytest.raises(ArgumentsValueError): - _ = new_predefined_dds(scheme=SPIN_ECHO, duration=-2) - - # number_of_offsets cannot be <= 0 - _ = new_predefined_dds( - scheme=CARR_PURCELL_MEIBOOM_GILL, duration=2, number_of_offsets=-1 - ) - # for QDD, none of the offsets can be <=0 - _ = new_predefined_dds( - scheme=QUADRATIC, - duration=2, - number_inner_offsets=-1, - number_outer_offsets=2, - ) - _ = new_predefined_dds( - scheme=QUADRATIC, - duration=2, - number_inner_offsets=1, - number_outer_offsets=-2, - ) - _ = new_predefined_dds( - scheme=QUADRATIC, - duration=2, - number_inner_offsets=-1, - number_outer_offsets=-2, - ) - - # for x-cdd and xy-cdd concatenation_order cannot be <=0 - _ = new_predefined_dds( - scheme=X_CONCATENATED, duration=2, concatenation_order=-1 - ) - _ = new_predefined_dds( - scheme=X_CONCATENATED, duration=-2, concatenation_order=1 - ) - _ = new_predefined_dds( - scheme=X_CONCATENATED, duration=-2, concatenation_order=-1 - ) - _ = new_predefined_dds( - scheme=XY_CONCATENATED, duration=2, concatenation_order=-1 - ) - _ = new_predefined_dds( - scheme=XY_CONCATENATED, duration=-2, concatenation_order=1 - ) - _ = new_predefined_dds( - scheme=XY_CONCATENATED, duration=-2, concatenation_order=-1 - ) - - def _pulses_produce_identity(sequence): """ Tests if the pulses of a DDS sequence produce an identity or Z rotation in absence of noise. @@ -717,9 +627,7 @@ def test_if_ramsey_sequence_is_identity(): Tests if the product of the pulses in the Ramsey sequence with pre/post pi/2-pulses is an identity. """ - ramsey_sequence = new_predefined_dds( - scheme="Ramsey", duration=10.0, pre_post_rotation=True - ) + ramsey_sequence = new_ramsey_sequence(duration=10.0, pre_post_rotation=True) assert _pulses_produce_identity(ramsey_sequence) @@ -729,9 +637,7 @@ def test_if_spin_echo_sequence_is_identity(): Tests if the product of the pulses in a Spin Echo sequence with pre/post pi/2-pulses is an identity. """ - spin_echo_sequence = new_predefined_dds( - scheme=SPIN_ECHO, duration=10.0, pre_post_rotation=True - ) + spin_echo_sequence = new_spin_echo_sequence(duration=10.0, pre_post_rotation=True) assert _pulses_produce_identity(spin_echo_sequence) @@ -741,8 +647,8 @@ def test_if_carr_purcell_sequence_with_odd_pulses_is_identity(): Tests if the product of the pulses in a Carr-Purcell sequence with pre/post pi/2-pulses is an identity, when the number of pulses is odd. """ - odd_carr_purcell_sequence = new_predefined_dds( - scheme=CARR_PURCELL, duration=10.0, number_of_offsets=7, pre_post_rotation=True + odd_carr_purcell_sequence = new_carr_purcell_sequence( + duration=10.0, number_of_offsets=7, pre_post_rotation=True ) assert _pulses_produce_identity(odd_carr_purcell_sequence) @@ -753,8 +659,8 @@ def test_if_carr_purcell_sequence_with_even_pulses_is_identity(): Tests if the product of the pulses in a Carr-Purcell sequence with pre/post pi/2-pulses is an identity, when the number of pulses is even. """ - even_carr_purcell_sequence = new_predefined_dds( - scheme=CARR_PURCELL, duration=10.0, number_of_offsets=8, pre_post_rotation=True + even_carr_purcell_sequence = new_carr_purcell_sequence( + duration=10.0, number_of_offsets=8, pre_post_rotation=True ) assert _pulses_produce_identity(even_carr_purcell_sequence) @@ -765,11 +671,8 @@ def test_if_cpmg_sequence_with_odd_pulses_is_identity(): Tests if the product of the pulses in a CPMG sequence with pre/post pi/2-pulses and an extra Z rotation is an identity, when the number of pulses is odd. """ - odd_cpmg_sequence = new_predefined_dds( - scheme=CARR_PURCELL_MEIBOOM_GILL, - duration=10.0, - number_of_offsets=7, - pre_post_rotation=True, + odd_cpmg_sequence = new_cpmg_sequence( + duration=10.0, number_of_offsets=7, pre_post_rotation=True, ) assert _pulses_produce_identity(odd_cpmg_sequence) @@ -780,11 +683,8 @@ def test_if_cpmg_sequence_with_even_pulses_is_identity(): Tests if the product of the pulses in a CPMG sequence with pre/post pi/2-pulses is an identity, when the number of pulses is even. """ - even_cpmg_sequence = new_predefined_dds( - scheme=CARR_PURCELL_MEIBOOM_GILL, - duration=10.0, - number_of_offsets=8, - pre_post_rotation=True, + even_cpmg_sequence = new_cpmg_sequence( + duration=10.0, number_of_offsets=8, pre_post_rotation=True, ) assert _pulses_produce_identity(even_cpmg_sequence) @@ -795,11 +695,8 @@ def test_if_uhrig_sequence_with_odd_pulses_is_identity(): Tests if the product of the pulses in an Uhrig sequence with pre/post pi/2-pulses and an extra Z rotation is an identity, when the number of pulses is odd. """ - odd_uhrig_sequence = new_predefined_dds( - scheme=UHRIG_SINGLE_AXIS, - duration=10.0, - number_of_offsets=7, - pre_post_rotation=True, + odd_uhrig_sequence = new_uhrig_sequence( + duration=10.0, number_of_offsets=7, pre_post_rotation=True, ) assert _pulses_produce_identity(odd_uhrig_sequence) @@ -810,11 +707,8 @@ def test_if_uhrig_sequence_with_even_pulses_is_identity(): Tests if the product of the pulses in an Uhrig sequence with pre/post pi/2-pulses is an identity, when the number of pulses is even. """ - even_uhrig_sequence = new_predefined_dds( - scheme=UHRIG_SINGLE_AXIS, - duration=10.0, - number_of_offsets=8, - pre_post_rotation=True, + even_uhrig_sequence = new_uhrig_sequence( + duration=10.0, number_of_offsets=8, pre_post_rotation=True, ) assert _pulses_produce_identity(even_uhrig_sequence) @@ -825,11 +719,8 @@ def test_if_periodic_sequence_with_odd_pulses_is_identity(): Tests if the product of the pulses in a periodic DDS with pre/post pi/2-pulses is an identity, when the number of pulses is odd. """ - odd_periodic_sequence = new_predefined_dds( - scheme=PERIODIC_SINGLE_AXIS, - duration=10.0, - number_of_offsets=7, - pre_post_rotation=True, + odd_periodic_sequence = new_periodic_sequence( + duration=10.0, number_of_offsets=7, pre_post_rotation=True, ) assert _pulses_produce_identity(odd_periodic_sequence) @@ -840,11 +731,8 @@ def test_if_periodic_sequence_with_even_pulses_is_identity(): Tests if the product of the pulses in a periodic DDS with pre/post pi/2-pulses is an identity, when the number of pulses is even. """ - even_periodic_sequence = new_predefined_dds( - scheme=PERIODIC_SINGLE_AXIS, - duration=10.0, - number_of_offsets=8, - pre_post_rotation=True, + even_periodic_sequence = new_periodic_sequence( + duration=10.0, number_of_offsets=8, pre_post_rotation=True, ) assert _pulses_produce_identity(even_periodic_sequence) @@ -855,8 +743,8 @@ def test_if_walsh_sequence_with_odd_pulses_is_identity(): Tests if the product of the pulses in a Walsh sequence with pre/post pi/2-pulses is an identity, when the number of pulses is odd. """ - odd_walsh_sequence = new_predefined_dds( - scheme=WALSH_SINGLE_AXIS, duration=10.0, paley_order=7, pre_post_rotation=True + odd_walsh_sequence = new_walsh_sequence( + duration=10.0, paley_order=7, pre_post_rotation=True ) # A Walsh sequence with paley_order 7 has 5 pi-pulses + 2 pi/2-pulses, @@ -871,8 +759,8 @@ def test_if_walsh_sequence_with_even_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 number of pulses is even. """ - even_walsh_sequence = new_predefined_dds( - scheme=WALSH_SINGLE_AXIS, duration=10.0, paley_order=6, pre_post_rotation=True + even_walsh_sequence = new_walsh_sequence( + duration=10.0, paley_order=6, pre_post_rotation=True ) # A Walsh sequence with paley_order 6 has 4 pi-pulses + 2 pi/2-pulses, @@ -887,8 +775,7 @@ def test_if_quadratic_sequence_with_odd_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 pulses is odd. """ - odd_quadratic_sequence = new_predefined_dds( - scheme=QUADRATIC, + odd_quadratic_sequence = new_quadratic_sequence( duration=10.0, number_inner_offsets=7, number_outer_offsets=7, @@ -907,8 +794,7 @@ def test_if_quadratic_sequence_with_even_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 pulses is even. """ - even_quadratic_sequence = new_predefined_dds( - scheme=QUADRATIC, + even_quadratic_sequence = new_quadratic_sequence( duration=10.0, number_inner_offsets=8, number_outer_offsets=8, @@ -928,8 +814,7 @@ def test_if_quadratic_sequence_with_odd_inner_pulses_is_identity(): pi/2-pulses and an extra rotation is an identity, when the total number of inner pulses is odd. """ - inner_odd_quadratic_sequence = new_predefined_dds( - scheme=QUADRATIC, + inner_odd_quadratic_sequence = new_quadratic_sequence( duration=10.0, number_inner_offsets=7, number_outer_offsets=8, @@ -948,8 +833,7 @@ 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_predefined_dds( - scheme=QUADRATIC, + inner_even_quadratic_sequence = new_quadratic_sequence( duration=10.0, number_inner_offsets=8, number_outer_offsets=7, @@ -968,11 +852,8 @@ def test_if_x_concatenated_sequence_is_identity(): Tests if the product of the pulses in an X concatenated sequence with pre/post pi/2-pulses is an identity. """ - x_concat_sequence = new_predefined_dds( - scheme=X_CONCATENATED, - duration=10.0, - concatenation_order=4, - pre_post_rotation=True, + x_concat_sequence = new_x_concatenated_sequence( + duration=10.0, concatenation_order=4, pre_post_rotation=True, ) assert _pulses_produce_identity(x_concat_sequence) @@ -983,11 +864,8 @@ def test_if_xy_concatenated_sequence_is_identity(): Tests if the product of the pulses in an XY concatenated sequence with pre/post pi/2-pulses is an identity. """ - xy_concat_sequence = new_predefined_dds( - scheme=XY_CONCATENATED, - duration=10.0, - concatenation_order=4, - pre_post_rotation=True, + xy_concat_sequence = new_xy_concatenated_sequence( + duration=10.0, concatenation_order=4, pre_post_rotation=True, ) assert _pulses_produce_identity(xy_concat_sequence)