(h5file: str, test_indices: list[int] | None = None)
| 24 | |
| 25 | |
| 26 | def _format_gt_data(h5file: str, test_indices: list[int] | None = None): |
| 27 | df = pd.read_hdf(h5file) |
| 28 | |
| 29 | animals = _get_unique_level_values(df.columns, "individuals") |
| 30 | kpts = _get_unique_level_values(df.columns, "bodyparts") |
| 31 | try: |
| 32 | n_unique = len(_get_unique_level_values(df.xs("single", level="individuals", axis=1).columns, "bodyparts")) |
| 33 | except KeyError: |
| 34 | n_unique = 0 |
| 35 | guarantee_multiindex_rows(df) |
| 36 | file_paths = [os.path.join(*row) for row in df.index.to_list()] |
| 37 | temp = ( |
| 38 | df.stack("individuals", dropna=False) |
| 39 | .reindex(animals, level="individuals") |
| 40 | .reindex(kpts, level="bodyparts", axis=1) |
| 41 | ) |
| 42 | data = temp.to_numpy().reshape((len(file_paths), len(animals), -1, 2)) |
| 43 | if test_indices is not None: |
| 44 | file_paths = [file_paths[i] for i in test_indices] |
| 45 | data = [data[i] for i in test_indices] |
| 46 | |
| 47 | meta = {"animals": animals, "keypoints": kpts, "n_unique": n_unique} |
| 48 | return { |
| 49 | "annotations": dict(zip(file_paths, data, strict=False)), |
| 50 | "metadata": meta, |
| 51 | } |
| 52 | |
| 53 | |
| 54 | def _get_unique_level_values(header, level): |
no test coverage detected