def METHOD_NAME():
    name = get_test_id()
    # Routing problem
    def _routing_problem():
        cv = CanvasPDK()
        cv.addWire(cv.m2, 'A', 2, (6, -1), (9, 1), netType=PIN)
        cv.addWire(cv.m2, 'A', 4, (1, -1), (4, 1), netType=PIN)
        cv.addWire(cv.m2, 'A', 6, (1, -1), (4, 1), netType=PIN)
        cv.addWire(cv.m2, 'A', 8, (8, -1), (9, 1), netType=PIN)
        cv.addWire(cv.m2, 'B', 2, (1, -1), (4, 1), netType=PIN)
        cv.addWire(cv.m2, 'B', 4, (6, -1), (9, 1), netType=PIN)
        cv.addWire(cv.m2, 'B', 6, (6, -1), (9, 1), netType=PIN)
        cv.addWire(cv.m2, 'B', 8, (1, -1), (2, 1), netType=PIN)
        cv.bbox = transformation.Rect(*[0, 0, 10*cv.pdk['M1']['Pitch'], 10*cv.pdk['M2']['Pitch']])
        return cv
    # A hand-crafted solution
    cv = _routing_problem()
    cv.addWire(cv.m3, 'A', 3, (4, -1), (6, 1), netType=PIN)
    cv.addWire(cv.m3, 'A', 8, (2, -1), (8, 1), netType=PIN)
    cv.addWire(cv.m3, 'B', 2, (2, -1), (8, 1), netType=PIN)
    cv.addWire(cv.m3, 'B', 7, (4, -1), (6, 1), netType=PIN)
    cv.addWire(cv.m4, 'B', 4, (2, -1), (8, 1), netType=PIN)
    cv.addWire(cv.m4, 'A', 6, (3, -1), (8, 1), netType=PIN)
    cv.drop_via(cv.v2)
    cv.drop_via(cv.v3)
    data = run_postamble(name+'_GOLD', cv)
    cvr = CanvasPDK()
    cvr.terminals = data['terminals']
    check_symmetry(cv, 'A', 'B', 'V')
    cv = _routing_problem()
    data = run_postamble(name, cv, constraints=[
        {"constraint": "Route", "min_layer": "M3", "max_layer": "M4"},
        {
            "constraint": "SymmetricNets",
            "net1": "A",
            "net2": "B",
            "pins1": ["ileaf/A__1", "ileaf/A__2", "ileaf/A__3", "ileaf/A__4"],
            "pins2": ["ileaf/B__1", "ileaf/B__2", "ileaf/B__3", "ileaf/B__4"],
            "direction": "V"
            }
    ])
    cvr = CanvasPDK()
    cvr.terminals = data['terminals']
    check_symmetry(cvr, 'A', 'B', 'V')