def METHOD_NAME(copy_subset, nonstrict):
    sdfg = dace.SDFG("testing")
    state = sdfg.add_state()
    sdfg.add_array("I", [9], dtype=dace.float32, transient=False)
    sdfg.add_array("T", [9], dtype=dace.float32, transient=True)
    sdfg.add_array("O", [3, 3], dtype=dace.float32, transient=False)
    state.add_mapped_tasklet("add_one",
                             dict(i="0:9"),
                             dict(inp=dace.Memlet("I[i]")),
                             "out = inp + 1",
                             dict(out=dace.Memlet("T[i]")),
                             external_edges=True)
    copy_state = sdfg.add_state_after(state)
    copy_state.add_edge(copy_state.add_read("T"), None, copy_state.add_write("O"), None,
                        sdfg.make_array_memlet(copy_subset))
    sdfg.simplify()
    if nonstrict:
        sdfg.apply_transformations_repeated(RedundantArray, permissive=True)
        # Ensure a view is created
        assert (len([n for n in sdfg.node(0).data_nodes() if type(n.desc(sdfg)) is data.Array]) == 2)
    I = np.ones((9, )).astype(np.float32)
    O = np.zeros((3, 3)).astype(np.float32)
    sdfg(I=I, O=O)
    assert np.allclose(O.flatten(), I + 1)