示例#1
0
def test_pulse_from_func():
    """Test instantiating pulse from a simple function"""
    tgrid = pulse_tgrid(10, 100)
    ampl = lambda t: 100 * blackman(t, 0, 10)
    pulse1 = Pulse.from_func(tgrid, ampl, ampl_unit='MHz', time_unit='ns')
    pulse2 = Pulse(tgrid, ampl(tgrid), ampl_unit='MHz', time_unit='ns')
    assert pulse1 == pulse2
示例#2
0
def test_pulse_from_func():
    """Test instantiating pulse from a simple function"""
    tgrid = pulse_tgrid(10, 100)
    ampl = lambda t: 100 * blackman(t, 0, 10)
    pulse1 = Pulse.from_func(tgrid, ampl, ampl_unit='MHz', time_unit='ns')
    pulse2 = Pulse(tgrid, ampl(tgrid), ampl_unit='MHz', time_unit='ns')
    assert pulse1 == pulse2
示例#3
0
def test_write_oct_spectral_filter(tmpdir, request):
    tgrid = pulse_tgrid(10, 100)
    ampl = gaussian(tgrid, 5, 1)
    pulse = Pulse(tgrid=tgrid, amplitude=ampl, ampl_unit='MHz', time_unit='ns')
    filename = str(tmpdir.join("spectral_filter.dat"))
    pulse.write_oct_spectral_filter(filename, filter_func=lambda f: abs(f) < 2)
    datadir = os.path.splitext(request.module.__file__)[0]
    assert filecmp.cmp(filename, os.path.join(datadir, 'spectral_filter.dat'))
示例#4
0
def test_write_oct_spectral_filter(tmpdir, request):
    tgrid = pulse_tgrid(10, 100)
    ampl = gaussian(tgrid, 5, 1)
    pulse = Pulse(tgrid=tgrid, amplitude=ampl, ampl_unit='MHz', time_unit='ns')
    filename = str(tmpdir.join("spectral_filter.dat"))
    pulse.write_oct_spectral_filter(filename, filter_func=lambda f: abs(f) < 2)
    datadir = os.path.splitext(request.module.__file__)[0]
    assert filecmp.cmp(filename, os.path.join(datadir, 'spectral_filter.dat'))
示例#5
0
def test_pulse_derivative():
    tgrid = pulse_tgrid(10, 100)
    ampl = gaussian(tgrid, 5, 1)
    pulse = Pulse(tgrid=tgrid, amplitude=ampl, ampl_unit='MHz', time_unit='ns')
    deriv = pulse.derivative()
    assert deriv.dt == pulse.dt
    assert deriv.ampl_unit == 'unitless'
    assert deriv.time_unit == 'ns'
    assert "%.3f" % abs(np.max(deriv.amplitude)) == '0.613'
    assert "%.3f" % abs(np.min(deriv.amplitude)) == '0.613'
示例#6
0
def test_pulse_derivative():
    tgrid = pulse_tgrid(10, 100)
    ampl = gaussian(tgrid, 5, 1)
    pulse = Pulse(tgrid=tgrid, amplitude=ampl, ampl_unit='MHz', time_unit='ns')
    deriv = pulse.derivative()
    assert deriv.dt == pulse.dt
    assert deriv.ampl_unit == 'unitless'
    assert deriv.time_unit == 'ns'
    assert "%.3f" % abs(np.max(deriv.amplitude)) == '0.613'
    assert "%.3f" % abs(np.min(deriv.amplitude)) == '0.613'
示例#7
0
def test_analytical_pulse_with_tgrid():
    p0 = AnalyticalPulse.from_func(
        ampl_1freq,
        parameters={
            'E0': 100,
            'T': 200,
            'w_L': 6.5
        },
        time_unit='ns',
        ampl_unit='MHz',
    )
    assert p0.t0 == 0.0
    assert p0.T is None
    assert p0.nt is None
    assert p0.dt is None
    assert p0.tgrid is None
    assert p0.tgrid is None
    assert p0.w_max is None
    assert p0.dw is None
    assert p0.to_num_pulse() is None

    p1 = AnalyticalPulse.from_func(
        ampl_1freq,
        parameters={
            'E0': 100,
            'T': 200,
            'w_L': 6.5
        },
        time_unit='ns',
        ampl_unit='MHz',
        t0=0,
        T='T',
        nt=lambda _p: int(float(_p.T * 10)) + 1,
    )
    assert p0 != p1
    assert p1.time_unit == 'ns'
    assert p1.ampl_unit == 'MHz'
    assert p1.freq_unit == 'GHz'
    assert p1.copy() == p1
    assert p1.t0 == 0.0
    assert p1.T == UnitFloat(200, 'ns')
    assert p1.nt == 2001
    assert p1.dt == UnitFloat(0.1, 'ns')
    assert (np.max(np.abs(p1.tgrid - np.linspace(0.05, 200 - 0.05, 2000))) <
            1e-14)
    assert p1.w_max == 5.0
    assert p1.dw == 0.005
    p1_num = p1.to_num_pulse()
    assert p1_num == p0.to_num_pulse(pulse_tgrid(200, 2001))
    assert np.max(np.abs(p1_num.tgrid - p1.tgrid)) < 1e-14
    assert np.max(np.abs(p1_num.states_tgrid - p1.states_tgrid)) < 1e-14
    assert p1_num.dt == p1.dt
    assert p1_num.w_max == p1.w_max
    assert p1_num.dw == p1.dw
示例#8
0
def test_pulse_as_func():
    """Test converting pulse as a function"""
    tgrid = pulse_tgrid(t0=1.0, T=11.0, nt=6)
    pulse = Pulse(
        tgrid=tgrid,
        amplitude=np.array([0, 1.0, 2.0, 0, 1.0]),
        ampl_unit='MHz',
        time_unit='ns',
    )
    f = pulse.as_func(interpolation='linear')
    with pytest.raises(ValueError):
        f(0.5)
        f(11.1)
    assert abs(f(1.0) - 0.0) < 1e-12
    assert abs(f(1.9) - 0.0) < 1e-12
    assert abs(f(2.0) - 0.0) < 1e-12
    assert abs(f(3.0) - 0.5) < 1e-12
    assert abs(f(3.5) - 0.75) < 1e-12
    assert abs(f(4.0) - 1.0) < 1e-12
    assert abs(f(5.0) - 1.5) < 1e-12
    assert abs(f(6.0) - 2.0) < 1e-12
    assert abs(f(7.0) - 1.0) < 1e-12
    assert abs(f(8.0) - 0.0) < 1e-12
    assert abs(f(9.0) - 0.5) < 1e-12
    assert abs(f(10.0) - 1.0) < 1e-12
    assert abs(f(11.0) - 1.0) < 1e-12

    f = pulse.as_func(interpolation='piecewise')
    with pytest.raises(ValueError):
        f(0.5)
        f(11.1)
    assert abs(f(1.00) - 0.0) < 1e-12
    assert abs(f(1.90) - 0.0) < 1e-12
    assert abs(f(2.00) - 0.0) < 1e-12
    assert abs(f(2.99) - 0.0) < 1e-12
    assert abs(f(3.01) - 1.0) < 1e-12
    assert abs(f(4.00) - 1.0) < 1e-12
    assert abs(f(4.50) - 1.0) < 1e-12
    assert abs(f(4.99) - 1.0) < 1e-12
    assert abs(f(5.01) - 2.0) < 1e-12
    assert abs(f(6.00) - 2.0) < 1e-12
    assert abs(f(6.99) - 2.0) < 1e-12
    assert abs(f(7.01) - 0.0) < 1e-12
    assert abs(f(9.01) - 1.0) < 1e-12
    assert abs(f(10.0) - 1.0) < 1e-12
    assert abs(f(11.0) - 1.0) < 1e-12

    assert abs(f(UnitFloat(6.0, 'ns')) - 2.0) < 1e-12

    with pytest.raises(ValueError):
        f = pulse.as_func(interpolation='invalid')
示例#9
0
def test_pulse_as_func():
    """Test converting pulse as a function"""
    tgrid = pulse_tgrid(t0=1.0, T=11.0, nt=6)
    pulse = Pulse(
        tgrid=tgrid,
        amplitude=np.array([0, 1.0, 2.0, 0, 1.0]),
        ampl_unit='MHz',
        time_unit='ns',
    )
    f = pulse.as_func(interpolation='linear')
    with pytest.raises(ValueError):
        f(0.5)
        f(11.1)
    assert abs(f(1.0) - 0.0) < 1e-12
    assert abs(f(1.9) - 0.0) < 1e-12
    assert abs(f(2.0) - 0.0) < 1e-12
    assert abs(f(3.0) - 0.5) < 1e-12
    assert abs(f(3.5) - 0.75) < 1e-12
    assert abs(f(4.0) - 1.0) < 1e-12
    assert abs(f(5.0) - 1.5) < 1e-12
    assert abs(f(6.0) - 2.0) < 1e-12
    assert abs(f(7.0) - 1.0) < 1e-12
    assert abs(f(8.0) - 0.0) < 1e-12
    assert abs(f(9.0) - 0.5) < 1e-12
    assert abs(f(10.0) - 1.0) < 1e-12
    assert abs(f(11.0) - 1.0) < 1e-12

    f = pulse.as_func(interpolation='piecewise')
    with pytest.raises(ValueError):
        f(0.5)
        f(11.1)
    assert abs(f(1.00) - 0.0) < 1e-12
    assert abs(f(1.90) - 0.0) < 1e-12
    assert abs(f(2.00) - 0.0) < 1e-12
    assert abs(f(2.99) - 0.0) < 1e-12
    assert abs(f(3.01) - 1.0) < 1e-12
    assert abs(f(4.00) - 1.0) < 1e-12
    assert abs(f(4.50) - 1.0) < 1e-12
    assert abs(f(4.99) - 1.0) < 1e-12
    assert abs(f(5.01) - 2.0) < 1e-12
    assert abs(f(6.00) - 2.0) < 1e-12
    assert abs(f(6.99) - 2.0) < 1e-12
    assert abs(f(7.01) - 0.0) < 1e-12
    assert abs(f(9.01) - 1.0) < 1e-12
    assert abs(f(10.0) - 1.0) < 1e-12
    assert abs(f(11.0) - 1.0) < 1e-12

    assert abs(f(UnitFloat(6.0, 'ns')) - 2.0) < 1e-12

    with pytest.raises(ValueError):
        f = pulse.as_func(interpolation='invalid')
示例#10
0
def test_analytical_pulse(tmpdir):

    AnalyticalPulse.register_formula('field_free', ampl_field_free)
    AnalyticalPulse.register_formula('1freq', ampl_1freq)
    AnalyticalPulse.register_formula('2freq', ampl_2freq)
    AnalyticalPulse.register_formula('5freq', ampl_5freq)
    AnalyticalPulse.register_formula('1freq_rwa', ampl_1freq_rwa)
    AnalyticalPulse.register_formula('2freq_rwa', ampl_2freq_rwa)
    AnalyticalPulse.register_formula('2freq_rwa_box', ampl_2freq_rwa_box)
    AnalyticalPulse.register_formula('5freq_rwa', ampl_5freq_rwa)
    AnalyticalPulse.register_formula('CRAB_rwa', ampl_CRAB_rwa)

    tmp = lambda filename: str(tmpdir.join(filename))

    with pytest.raises(TypeError) as exc_info:
        AnalyticalPulse.register_formula('1freq_0', 'bla')
    assert 'is not a Python function' in str(
        exc_info) or 'unsupported callable' in str(  # <= 3.3
            exc_info)  # >= 3.4

    AnalyticalPulse.register_formula('1freq_0', ampl_1freq_0)
    with pytest.raises(ValueError) as exc_info:
        AnalyticalPulse('1freq_0',
                        parameters={'E0': 100},
                        time_unit='ns',
                        ampl_unit='MHz')
    assert 'Required parameter "T" for formula' in str(exc_info)

    with pytest.raises(ValueError) as exc_info:
        AnalyticalPulse(
            '1freq_0',
            parameters={
                'E0': 100,
                'T': 200,
                'extra': 0
            },
            time_unit='ns',
            ampl_unit='MHz',
        )
    assert 'Parameter "extra" does not exist in formula' in str(exc_info)

    p1 = AnalyticalPulse('field_free', time_unit='ns', ampl_unit='MHz')
    assert p1.header == '# Formula "field_free"'
    p1.write(tmp('p1.json'), pretty=True)
    p1.to_num_pulse(tgrid=pulse_tgrid(200, 500)).write(tmp('p1.dat'))
    p1_copy = AnalyticalPulse.read(tmp('p1.json'))
    p1_copy.write(tmp('p1_copy.json'), pretty=True)
    assert filecmp.cmp(tmp("p1.json"), tmp("p1_copy.json"))

    p2 = AnalyticalPulse(
        '1freq',
        parameters={
            'E0': 100,
            'T': 200,
            'w_L': 6.5
        },
        time_unit='ns',
        ampl_unit='MHz',
    )
    assert p2.header == '# Formula "1freq" with E0 = 100, T = 200, w_L = 6.5'
    p2.write(tmp('p2.json'), pretty=True)
    p2.to_num_pulse(tgrid=pulse_tgrid(200, 10000)).write(tmp('p2.dat'))
    p2_copy = AnalyticalPulse.read(tmp('p2.json'))
    p2_copy.write(tmp('p2_copy.json'), pretty=True)
    assert filecmp.cmp(tmp("p2.json"), tmp("p2_copy.json"))

    parameters = {
        'E0': 100,
        'T': 200,
        'freq_1': 6.0,
        'freq_2': 6.5,
        'a_1': 0.5,
        'a_2': 1.0,
        'phi': 0.0,
    }
    p3 = AnalyticalPulse('2freq',
                         parameters=parameters,
                         time_unit='ns',
                         ampl_unit='MHz')
    assert (
        p3.header ==
        '# Formula "2freq" with E0 = 100, T = 200, a_1 = 0.5, a_2 = 1.0, freq_1 = 6.0, freq_2 = 6.5, phi = 0.0'
    )
    p3.write(tmp('p3.json'), pretty=True)
    p3.to_num_pulse(tgrid=pulse_tgrid(200, 10000)).write(tmp('p3.dat'))
    p3_copy = AnalyticalPulse.read(tmp('p3.json'))
    p3_copy.write(tmp('p3_copy.json'), pretty=True)
    assert filecmp.cmp(tmp("p3.json"), tmp("p3_copy.json"))

    freq_low = np.array([0.01, 0.0243])
    freq_high = np.array([8.32, 10.1, 5.3])
    a_low = np.array([1.0, 0.21])
    a_high = np.array([0.58, 0.89, 0.1])
    b_low = np.array([1.0, 0.51])
    b_high = np.array([0.09, 0.12, 0.71])
    p4 = AnalyticalPulse(
        '5freq',
        parameters={
            'E0': 100,
            'T': 200,
            'freq_low': freq_low,
            'freq_high': freq_high,
            'a_low': a_low,
            'a_high': a_high,
            'b_low': b_low,
            'b_high': b_high,
        },
        time_unit='ns',
        ampl_unit='MHz',
    )
    assert (
        p4.header ==
        '# Formula "5freq" with E0 = 100, T = 200, a_high = [0.58, 0.89, 0.1], a_low = [1.0, 0.21], b_high = [0.09, 0.12, 0.71], b_low = [1.0, 0.51], freq_high = [8.32, 10.1, 5.3], freq_low = [0.01, 0.0243]'
    )
    p4.write(tmp('p4.json'), pretty=True)
    p4.to_num_pulse(tgrid=pulse_tgrid(200, 10000)).write(tmp('p4.dat'))
    p4_copy = AnalyticalPulse.read(tmp('p4.json'))
    assert isinstance(
        p4_copy.parameters['a_low'],
        np.ndarray), "Coefficients 'a_low' should be a numpy array"
    p4_copy.write(tmp('p4_copy.json'), pretty=True)
    assert filecmp.cmp(tmp("p4.json"), tmp("p4_copy.json"))