(idx, sort)
| 131 | |
| 132 | |
| 133 | def test_difference(idx, sort): |
| 134 | first = idx |
| 135 | result = first.difference(idx[-3:], sort=sort) |
| 136 | vals = idx[:-3].values |
| 137 | |
| 138 | if sort is None: |
| 139 | vals = sorted(vals) |
| 140 | |
| 141 | expected = MultiIndex.from_tuples(vals, sortorder=0, names=idx.names) |
| 142 | |
| 143 | assert isinstance(result, MultiIndex) |
| 144 | assert result.equals(expected) |
| 145 | assert result.names == idx.names |
| 146 | tm.assert_index_equal(result, expected) |
| 147 | |
| 148 | # empty difference: reflexive |
| 149 | result = idx.difference(idx, sort=sort) |
| 150 | expected = idx[:0] |
| 151 | assert result.equals(expected) |
| 152 | assert result.names == idx.names |
| 153 | |
| 154 | # empty difference: superset |
| 155 | result = idx[-3:].difference(idx, sort=sort) |
| 156 | expected = idx[:0] |
| 157 | assert result.equals(expected) |
| 158 | assert result.names == idx.names |
| 159 | |
| 160 | # empty difference: degenerate |
| 161 | result = idx[:0].difference(idx, sort=sort) |
| 162 | expected = idx[:0] |
| 163 | assert result.equals(expected) |
| 164 | assert result.names == idx.names |
| 165 | |
| 166 | # names not the same |
| 167 | chunklet = idx[-3:] |
| 168 | chunklet.names = ["foo", "baz"] |
| 169 | result = first.difference(chunklet, sort=sort) |
| 170 | assert result.names == (None, None) |
| 171 | |
| 172 | # empty, but non-equal |
| 173 | result = idx.difference(idx.sortlevel(1)[0], sort=sort) |
| 174 | assert len(result) == 0 |
| 175 | |
| 176 | # raise Exception called with non-MultiIndex |
| 177 | result = first.difference(first.values, sort=sort) |
| 178 | assert result.equals(first[:0]) |
| 179 | |
| 180 | # name from empty array |
| 181 | result = first.difference([], sort=sort) |
| 182 | assert first.equals(result) |
| 183 | assert first.names == result.names |
| 184 | |
| 185 | # name from non-empty array |
| 186 | result = first.difference([("foo", "one")], sort=sort) |
| 187 | expected = MultiIndex.from_tuples( |
| 188 | [("bar", "one"), ("baz", "two"), ("foo", "two"), ("qux", "one"), ("qux", "two")] |
| 189 | ) |
| 190 | expected.names = first.names |
nothing calls this directly
no test coverage detected