コード例 #1
0
def test_parse_not_supported_yet():
    with pytest.raises(NotImplementedError,
                       match='Custom gates not supported yet'):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols": [[]], "gates": []}')

    with pytest.raises(NotImplementedError,
                       match='initial states not supported yet'):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols": [[]], "init": []}')
コード例 #2
0
def test_parse_failures():
    with pytest.raises(ValueError, match='must start with "circuit="'):
        _ = quirk_url_to_circuit('http://algassert.com/quirk#bad')

    with pytest.raises(json.JSONDecodeError):
        _ = quirk_url_to_circuit('http://algassert.com/quirk#circuit=')

    with pytest.raises(ValueError, match='top-level dictionary'):
        _ = quirk_url_to_circuit('http://algassert.com/quirk#circuit=[]')

    with pytest.raises(ValueError, match='"cols" entry'):
        _ = quirk_url_to_circuit('http://algassert.com/quirk#circuit={}')

    with pytest.raises(ValueError, match='cols must be a list'):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols": 1}')

    with pytest.raises(ValueError, match='col must be a list'):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols": [0]}')

    with pytest.raises(ValueError, match='Unrecognized column entry: 0'):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols": [[0]]}')

    with pytest.raises(ValueError, match='Unrecognized column entry: '):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols": [["not a real"]]}')

    with pytest.raises(ValueError, match='Unrecognized Circuit JSON keys'):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols": [[]], "other": 1}')
コード例 #3
0
def test_parse_simple_cases():
    a, b = cirq.LineQubit.range(2)

    assert quirk_url_to_circuit('http://algassert.com/quirk') == cirq.Circuit()
    assert quirk_url_to_circuit('https://algassert.com/quirk') == cirq.Circuit()
    assert quirk_url_to_circuit(
        'https://algassert.com/quirk#') == cirq.Circuit()
    assert quirk_url_to_circuit(
        'http://algassert.com/quirk#circuit={"cols":[]}') == cirq.Circuit()

    assert quirk_url_to_circuit(
        'https://algassert.com/quirk#circuit={'
        '%22cols%22:[[%22H%22],[%22%E2%80%A2%22,%22X%22]]'
        '}') == cirq.Circuit(cirq.H(a),
                             cirq.X(b).controlled_by(a))
コード例 #4
0
def test_custom_gate_parse_failures():
    with pytest.raises(ValueError, match='must be a list'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":5}')

    with pytest.raises(ValueError, match='gate json must be a dict'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":[5]}')

    with pytest.raises(ValueError, match='Circuit JSON must be a dict'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":[{"id":"~a","circuit":5}]}')

    with pytest.raises(ValueError, match='matrix json must be a string'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":[{"id":"~a","matrix":5}]}')

    with pytest.raises(ValueError, match='Not surrounded by {{}}'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":[{"id":"~a","matrix":"abc"}]}')

    with pytest.raises(ValueError, match='must have an id'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":['
            '{"matrix":"{{1,0},{0,1}}"}'
            ']}')

    with pytest.raises(ValueError, match='both a matrix and a circuit'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":['
            '{"id":"~a","circuit":{"cols":[]},"matrix":"{{1,0},{0,1}}"}'
            ']}')

    with pytest.raises(ValueError, match='matrix or a circuit'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":['
            '{"id":"~a"}'
            ']}')

    with pytest.raises(ValueError, match='duplicate identifier'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":[],'
            '"gates":['
            '{"id":"~a","matrix":"{{1,0},{0,1}}"},'
            '{"id":"~a","matrix":"{{1,0},{0,1}}"}]}')
コード例 #5
0
def test_parse_failures(url, msg):
    parsed_url = urllib.parse.urlparse(url)
    data = json.loads(parsed_url.fragment[len('circuit='):])

    with pytest.raises(ValueError, match=msg):
        _ = quirk_url_to_circuit(url)

    with pytest.raises(ValueError, match=msg):
        _ = quirk_json_to_circuit(data)
コード例 #6
0
def test_parse_with_qubits():
    a = cirq.GridQubit(0, 0)
    b = cirq.GridQubit(0, 1)
    c = cirq.GridQubit(0, 2)

    assert quirk_url_to_circuit(
        'http://algassert.com/quirk#circuit={"cols":[["H"],["•","X"]]}',
        qubits=cirq.GridQubit.rect(4, 4)) == cirq.Circuit(
            cirq.H(a),
            cirq.X(b).controlled_by(a))

    assert quirk_url_to_circuit(
        'http://algassert.com/quirk#circuit={"cols":[["H"],["•",1,"X"]]}',
        qubits=cirq.GridQubit.rect(4, 4)) == cirq.Circuit(
            cirq.H(a),
            cirq.X(c).controlled_by(a))

    with pytest.raises(IndexError, match="qubits specified"):
        _ = quirk_url_to_circuit(
            'http://algassert.com/quirk#circuit={"cols":[["H"],["•","X"]]}',
            qubits=[cirq.GridQubit(0, 0)])
コード例 #7
0
ファイル: input_cells_test.py プロジェクト: yy8yy/Cirq
def test_input_cell():
    assert_url_to_circuit_returns('{"cols":[["inputA4",1,1,1,"+=A4"]]}',
                                  maps={
                                      0x_0_0: 0x_0_0,
                                      0x_2_3: 0x_2_5,
                                  })

    assert_url_to_circuit_returns(
        '{"cols":[["inputA3",1,1,"inputB3",1,1,"+=AB3"]]}',
        maps={
            0o_0_0_0: 0o_0_0_0,
            0o_2_3_1: 0o_2_3_7,
            0o_1_1_0: 0o_1_1_1,
            0o_4_4_0: 0o_4_4_0,
        })

    # Overlaps with effect.
    with pytest.raises(ValueError, match='Overlapping registers'):
        _ = quirk_url_to_circuit('https://algassert.com/quirk#circuit={"cols":['
                                 '["+=A3","inputA3"]]}')
コード例 #8
0
def test_set_default_input_cell():
    # Later column.
    assert_url_to_circuit_returns(
        '{"cols":[[{"id":"setA","arg":11}],["+=A4"]]}',
        maps={
            0: 11,
            4: 15,
            5: 0,
        })

    # Same column.
    assert_url_to_circuit_returns('{"cols":[["+=A4",{"id":"setA","arg":11}]]}',
                                  maps={
                                      0: 11,
                                      4: 15,
                                      5: 0,
                                  })

    # Overwrite.
    assert_url_to_circuit_returns(
        '{"cols":[[{"id":"setA","arg":0}],["+=A4",{"id":"setA","arg":11}]]}',
        maps={
            0: 11,
            4: 15,
            5: 0,
        })
    assert_url_to_circuit_returns(
        '{"cols":[[{"id":"setA","arg":11}],["+=A4",{"id":"setA","arg":0}]]}',
        maps={
            0: 0,
            4: 4,
            5: 5,
        })

    # Different values over time.
    assert_url_to_circuit_returns(
        '{"cols":['
        '[{"id":"setA","arg":1}],'
        '["+=A4"],'
        '[{"id":"setA","arg":4}],'
        '["+=A4"]]}',
        maps={
            0: 5,
        })

    # Broadcast.
    assert_url_to_circuit_returns(
        '{"cols":['
        '[{"id":"setA","arg":1}],'
        '["+=A2",1,"+=A2"],'
        '["+=A2",1,"+=A2"]]}',
        maps={
            0b_00_00: 0b_10_10,
            0b_10_01: 0b_00_11,
        })

    # Too late.
    with pytest.raises(ValueError, match='Missing input'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":['
            '["+=A2"],'
            '[{"id":"setA","arg":1}]]}')
コード例 #9
0
def test_missing_input_cell():
    with pytest.raises(ValueError, match='Missing input'):
        _ = quirk_url_to_circuit(
            'https://algassert.com/quirk#circuit={"cols":['
            '["+=A2"]]}')
コード例 #10
0
def test_parse_url_failures(url, error_cls, msg):
    with pytest.raises(error_cls, match=msg):
        _ = quirk_url_to_circuit(url)