def assert_dof_map_two_blocks_no_restriction(V1, V2, block_V):
    local_dimension1 = V1.dofmap().ownership_range()[1] - V1.dofmap().ownership_range()[0]
    local_dimension2 = V2.dofmap().ownership_range()[1] - V2.dofmap().ownership_range()[0]
    block_local_dimension = block_V.block_dofmap().ownership_range()[1] - block_V.block_dofmap().ownership_range()[0]
    assert local_dimension1 + local_dimension2 == block_local_dimension
    global_dimension1 = V1.dofmap().global_dimension()
    global_dimension2 = V2.dofmap().global_dimension()
    block_global_dimension = block_V.block_dofmap().global_dimension()
    assert global_dimension1 + global_dimension2 == block_global_dimension
    for c in cells(block_V.mesh()):
        V1_cell_dofs = V1.dofmap().cell_dofs(c.index())
        V1_cell_owned_local_dofs = [a for a in V1_cell_dofs if a < local_dimension1]
        V1_cell_unowned_local_dofs = [a for a in V1_cell_dofs if a >= local_dimension1]
        V2_cell_dofs = V2.dofmap().cell_dofs(c.index())
        V2_cell_owned_local_dofs = [a + local_dimension1 for a in V2_cell_dofs if a < local_dimension2]
        V2_cell_unowned_local_dofs = [a + local_dimension1 for a in V2_cell_dofs if a >= local_dimension2]
        V_cell_owned_local_dofs = concatenate((V1_cell_owned_local_dofs, V2_cell_owned_local_dofs))
        V_cell_unowned_local_dofs = concatenate((V1_cell_unowned_local_dofs, V2_cell_unowned_local_dofs))
        block_V_cell_dofs = block_V.block_dofmap().cell_dofs(c.index())
        block_V_cell_owned_local_dofs = [b for b in block_V_cell_dofs if b < block_local_dimension]
        block_V_cell_unowned_local_dofs = [b for b in block_V_cell_dofs if b >= block_local_dimension]
        assert_owned_local_dofs(V_cell_owned_local_dofs, block_V_cell_owned_local_dofs)
        assert_unowned_local_dofs(V_cell_unowned_local_dofs, block_V_cell_unowned_local_dofs)
    V_dof_coordinates = concatenate((V1.tabulate_dof_coordinates(), V2.tabulate_dof_coordinates()))
    block_V_dof_coordinates = block_V.tabulate_dof_coordinates()
    assert_tabulated_dof_coordinates(V_dof_coordinates, block_V_dof_coordinates)
def assert_dof_map_single_block_no_restriction(V, block_V):
    local_dimension = V.dofmap().ownership_range()[1] - V.dofmap().ownership_range()[0]
    block_local_dimension = block_V.block_dofmap().ownership_range()[1] - block_V.block_dofmap().ownership_range()[0]
    assert local_dimension == block_local_dimension
    global_dimension = V.dofmap().global_dimension()
    block_global_dimension = block_V.block_dofmap().global_dimension()
    assert global_dimension == block_global_dimension
    V_local_to_global_unowned = V.dofmap().local_to_global_unowned()
    block_V_local_to_global_unowned = block_V.block_dofmap().local_to_global_unowned()
    block_V_local_to_global_unowned = unique([b//V.dofmap().index_map().block_size() for b in block_V_local_to_global_unowned])
    assert array_sorted_equal(V_local_to_global_unowned, block_V_local_to_global_unowned)
    for c in cells(block_V.mesh()):
        V_cell_dofs = V.dofmap().cell_dofs(c.index())
        V_cell_owned_local_dofs = [a for a in V_cell_dofs if a < local_dimension]
        V_cell_unowned_local_dofs = [a for a in V_cell_dofs if a >= local_dimension]
        V_cell_global_dofs = [V.dofmap().local_to_global_index(a) for a in V_cell_dofs]
        block_V_cell_dofs = block_V.block_dofmap().cell_dofs(c.index())
        block_V_cell_owned_local_dofs = [b for b in block_V_cell_dofs if b < block_local_dimension]
        block_V_cell_unowned_local_dofs = [b for b in block_V_cell_dofs if b >= block_local_dimension]
        block_V_cell_global_dofs = [block_V.block_dofmap().local_to_global_index(b) for b in block_V_cell_dofs]
        assert_owned_local_dofs(V_cell_owned_local_dofs, block_V_cell_owned_local_dofs)
        assert_unowned_local_dofs(V_cell_unowned_local_dofs, block_V_cell_unowned_local_dofs)
        assert_global_dofs(V_cell_global_dofs, block_V_cell_global_dofs)
    V_dof_coordinates = V.tabulate_dof_coordinates()
    block_V_dof_coordinates = block_V.tabulate_dof_coordinates()
    assert_tabulated_dof_coordinates(V_dof_coordinates, block_V_dof_coordinates)