(
cls,
levels=None,
codes=None,
sortorder=None,
names=None,
copy: bool = False,
name=None,
verify_integrity: bool = True,
)
| 295 | # Constructors |
| 296 | |
| 297 | def __new__( |
| 298 | cls, |
| 299 | levels=None, |
| 300 | codes=None, |
| 301 | sortorder=None, |
| 302 | names=None, |
| 303 | copy: bool = False, |
| 304 | name=None, |
| 305 | verify_integrity: bool = True, |
| 306 | ) -> Self: |
| 307 | # compat with Index |
| 308 | if name is not None: |
| 309 | names = name |
| 310 | if levels is None or codes is None: |
| 311 | raise TypeError("Must pass both levels and codes") |
| 312 | if len(levels) != len(codes): |
| 313 | raise ValueError("Length of levels and codes must be the same.") |
| 314 | if len(levels) == 0: |
| 315 | raise ValueError("Must pass non-zero number of levels/codes") |
| 316 | |
| 317 | result = object.__new__(cls) |
| 318 | result._cache = {} |
| 319 | |
| 320 | # we've already validated levels and codes, so shortcut here |
| 321 | result._set_levels(levels, copy=copy, validate=False) |
| 322 | result._set_codes(codes, copy=copy, validate=False) |
| 323 | |
| 324 | result._names = [None] * len(levels) |
| 325 | if names is not None: |
| 326 | # handles name validation |
| 327 | result._set_names(names) |
| 328 | |
| 329 | if sortorder is not None: |
| 330 | result.sortorder = int(sortorder) |
| 331 | else: |
| 332 | result.sortorder = sortorder |
| 333 | |
| 334 | if verify_integrity: |
| 335 | new_codes = result._verify_integrity() |
| 336 | result._codes = new_codes |
| 337 | |
| 338 | result._reset_identity() |
| 339 | result._references = None |
| 340 | |
| 341 | return result |
| 342 | |
| 343 | def _validate_codes(self, level: Index, code: np.ndarray) -> np.ndarray: |
| 344 | """ |
nothing calls this directly
no test coverage detected