diff --git a/src/traffic/algorithms/metadata/flightplan.py b/src/traffic/algorithms/metadata/flightplan.py index 170c4df2..db5b77c2 100644 --- a/src/traffic/algorithms/metadata/flightplan.py +++ b/src/traffic/algorithms/metadata/flightplan.py @@ -126,7 +126,7 @@ def most_probable_navpoints( ) -> Iterator[pd.DataFrame]: table = self.all_aligned_segments(traj, all_points) for block in self.groupby_intervals(table): - d_max = block.eval("duration.max()") + d_max = block.eval("duration.max()", engine="python") t_threshold = d_max - pd.Timedelta("30s") # noqa: F841 yield ( block.sort_values("shift_mean") diff --git a/src/traffic/algorithms/navigation/holding_pattern/__init__.py b/src/traffic/algorithms/navigation/holding_pattern/__init__.py index e4f7a8e5..19b162ed 100644 --- a/src/traffic/algorithms/navigation/holding_pattern/__init__.py +++ b/src/traffic/algorithms/navigation/holding_pattern/__init__.py @@ -90,7 +90,9 @@ def apply(self, flight: Flight) -> Iterator[Flight]: window = window.assign(flight_id=str(i)) resampled = window.resample(self.samples) - if resampled.data.eval("track.isnull()").any(): + if resampled.data.eval( + "track.isnull()", engine="python" + ).any(): continue features = ( @@ -99,7 +101,9 @@ def apply(self, flight: Flight) -> Iterator[Flight]: ).values.reshape(1, -1) if self.vertical_rate: - if resampled.data.eval("vertical_rate.notnull()").any(): + if resampled.data.eval( + "vertical_rate.notnull()", engine="python" + ).any(): continue vertical_rates = ( resampled.data.vertical_rate.values.reshape(1, -1) diff --git a/src/traffic/core/intervals.py b/src/traffic/core/intervals.py index 7af2f7e8..dbab2c39 100644 --- a/src/traffic/core/intervals.py +++ b/src/traffic/core/intervals.py @@ -222,7 +222,9 @@ def __eq__(self, other: Any) -> bool: def total_duration(self) -> pd.Timedelta: """Returns the sum of durations of all intervals.""" - return self.consolidate().data.eval("(stop - start).sum()") + return self.consolidate().data.eval( + "(stop - start).sum()", engine="python" + ) def __radd__(self, other: Literal[0] | Interval) -> IntervalCollection: if other == 0: diff --git a/src/traffic/data/datasets/flightradar24.py b/src/traffic/data/datasets/flightradar24.py index 4f39424f..42d874b9 100644 --- a/src/traffic/data/datasets/flightradar24.py +++ b/src/traffic/data/datasets/flightradar24.py @@ -52,7 +52,8 @@ def from_csv(cls, filename: str | Path) -> Flight: timestamp = @pd.to_datetime(timestamp, unit='s', utc=True) latitude = Position.str.split(",").str[0].astype("float") longitude = Position.str.split(",").str[1].astype("float") - """ + """, + engine="python", ) .drop(columns=["UTC", "Position"]) ) @@ -71,7 +72,8 @@ def from_csv(cls, filename: str | Path) -> Flight: timestamp = timestamp.str.replace("Z", "") timestamp = @pd.to_datetime(timestamp, utc=True) icao24 = icao24.str.slice(2) - """ + """, + engine="python", ) .drop( columns=[ @@ -111,13 +113,14 @@ def from_json(cls, filename: str | Path) -> Flight: pd.json_normalize( [elt["ems"] for elt in flight["track"] if elt["ems"]] ) - .eval("mach = mach / 1000") + .eval("mach = mach / 1000", engine="python") .rename(columns=dict(ts="timestamp")) ) data = pd.concat([data, ems_data]).sort_values("timestamp") data = ( data.eval( - "timestamp = @pd.to_datetime(timestamp, unit='s', utc=True)" + "timestamp = @pd.to_datetime(timestamp, unit='s', utc=True)", + engine="python", ) .assign( flight_id=flight["identification"]["id"], @@ -255,7 +258,8 @@ def extract_flights( ), on="flight_id", ).eval( - "timestamp = @pd.to_datetime(snapshot_id, utc=True, unit='s')" + "timestamp = @pd.to_datetime(snapshot_id, utc=True, unit='s')", + engine="python", ) ) diff --git a/src/traffic/data/eurocontrol/aixm/routes.py b/src/traffic/data/eurocontrol/aixm/routes.py index 44ef3131..689e3fc9 100644 --- a/src/traffic/data/eurocontrol/aixm/routes.py +++ b/src/traffic/data/eurocontrol/aixm/routes.py @@ -182,10 +182,12 @@ def parse_data(self) -> pd.DataFrame: pd.concat( [ self.data_routes.query("prefix.notnull()").eval( - "name = prefix + secondLetter + number" + "name = prefix + secondLetter + number", + engine="python", ), self.data_routes.query("prefix.isnull()").eval( - "name = secondLetter + number" + "name = secondLetter + number", + engine="python", ), ] )