Source code for vista.tracks.tracker

import uuid
import pandas as pd
import pathlib
from dataclasses import dataclass, field
from typing import List, Union
from vista.tracks.track import Track


[docs] @dataclass class Tracker: name: str tracks: List[Track] uuid: str = field(init=False, default=None)
[docs] def __post_init__(self): """Initialize UUID if not already set""" if self.uuid is None: self.uuid = uuid.uuid4()
[docs] def __eq__(self, other): """Compare Trackers based on UUID""" return hasattr(other, 'uuid') and (self.uuid == other.uuid)
def __str__(self): return self.__repr__() def __repr__(self): return f"{self.__class__.__name__}({self.name}, {len(self.tracks)} Tracks)"
[docs] @classmethod def from_dataframe(cls, name: str, df: pd.DataFrame, imagery=None): tracks = [] for track_name, track_df in df.groupby(["Track Name"]): tracks.append(Track.from_dataframe( name = track_name, df = track_df, imagery = imagery )) return cls(name=name, tracks=tracks)
[docs] def to_csv(self, file: Union[str, pathlib.Path]): self.to_dataframe().to_csv(file, index=None)
[docs] def to_dataframe(self): """ Convert all tracks to a DataFrame Returns: DataFrame with all tracks' data """ df = pd.DataFrame() for track in self.tracks: track_df = track.to_dataframe() track_df["Tracker"] = len(track_df)*[self.name] df = pd.concat((df, track_df)) return df