Whether or not we need to reindex variables for a set of matching indexes. We don't reindex when all matching indexes are equal for two reasons: - It's faster for the usual case (already aligned objects). - It ensures it's possible to do operations that don't require
(self, dim, cmp_indexes)
| 337 | self.unindexed_dim_sizes = unindexed_dim_sizes |
| 338 | |
| 339 | def _need_reindex(self, dim, cmp_indexes) -> bool: |
| 340 | """Whether or not we need to reindex variables for a set of |
| 341 | matching indexes. |
| 342 | |
| 343 | We don't reindex when all matching indexes are equal for two reasons: |
| 344 | - It's faster for the usual case (already aligned objects). |
| 345 | - It ensures it's possible to do operations that don't require alignment |
| 346 | on indexes with duplicate values (which cannot be reindexed with |
| 347 | pandas). This is useful, e.g., for overwriting such duplicate indexes. |
| 348 | |
| 349 | """ |
| 350 | if not indexes_all_equal(cmp_indexes, self.exclude_dims): |
| 351 | # always reindex when matching indexes are not equal |
| 352 | return True |
| 353 | |
| 354 | unindexed_dims_sizes = {} |
| 355 | for d in dim: |
| 356 | if d in self.unindexed_dim_sizes: |
| 357 | sizes = self.unindexed_dim_sizes[d] |
| 358 | if len(sizes) > 1: |
| 359 | # reindex if different sizes are found for unindexed dims |
| 360 | return True |
| 361 | else: |
| 362 | unindexed_dims_sizes[d] = next(iter(sizes)) |
| 363 | |
| 364 | if unindexed_dims_sizes: |
| 365 | indexed_dims_sizes = {} |
| 366 | for cmp in cmp_indexes: |
| 367 | index_vars = cmp[1] |
| 368 | for var in index_vars.values(): |
| 369 | indexed_dims_sizes.update(var.sizes) |
| 370 | |
| 371 | for d, size in unindexed_dims_sizes.items(): |
| 372 | if indexed_dims_sizes.get(d, -1) != size: |
| 373 | # reindex if unindexed dimension size doesn't match |
| 374 | return True |
| 375 | |
| 376 | return False |
| 377 | |
| 378 | def _get_index_joiner(self, index_cls) -> Callable: |
| 379 | if self.join in ["outer", "inner"]: |
no test coverage detected