def test_ocation_joined_query_raises_error(): """ Test that location_joined_query raises an error if spatial_unit is not a SpatialUnit object. """ table = SubscriberLocations("2016-01-05", "2016-01-07", spatial_unit=make_spatial_unit("cell")) with pytest.raises(InvalidSpatialUnitError): location_joined_query(table, spatial_unit="foo")
def __init__( self, start, stop, *, subscriber_identifier="msisdn", statistic="sum", spatial_unit: Optional[AnySpatialUnit] = None, hours="all", subscriber_subset=None, ): self.start = standardise_date(start) self.stop = standardise_date(stop) self.subscriber_identifier = subscriber_identifier if spatial_unit is None: self.spatial_unit = make_spatial_unit("admin", level=3) else: self.spatial_unit = spatial_unit self.statistic = statistic.lower() if self.statistic not in valid_stats: raise ValueError( "{} is not a valid statistic. Use one of {}".format( self.statistic, valid_stats ) ) column_list = [ "id", self.subscriber_identifier, "msisdn_counterpart", "outgoing", "duration", "location_id", "datetime", ] unioned_query = location_joined_query( EventsTablesUnion( self.start, self.stop, tables="events.calls", columns=column_list, hours=hours, subscriber_subset=subscriber_subset, subscriber_identifier=self.subscriber_identifier, ), spatial_unit=self.spatial_unit, time_col="datetime", ) self.joined = unioned_query.subset("outgoing", "t").join( unioned_query.subset("outgoing", "f"), on_left="id", on_right="id", right_append="_counterpart", how="left", ) warnings.warn("This query is considerably slower than the other variants.") super().__init__()
def test_location_joined_query_return_type(exemplar_spatial_unit_param): """ Test that location_joined_query(query, spatial_unit) returns a JoinToLocation object when spatial_unit != CellSpatialUnit(), and returns query when spatial_unit == CellSpatialUnit(). """ table = SubscriberLocations( "2016-01-05", "2016-01-07", spatial_unit=make_spatial_unit("cell") ) joined = location_joined_query(table, spatial_unit=exemplar_spatial_unit_param) if make_spatial_unit("cell") == exemplar_spatial_unit_param: assert joined is table else: assert isinstance(joined, JoinToLocation)
def __init__( self, start, stop, *, subscriber_identifier="msisdn", direction: Union[str, Direction] = Direction.OUT, statistic="sum", spatial_unit: Optional[AnySpatialUnit] = None, hours="all", subscriber_subset=None, ): self.start = standardise_date(start) self.stop = standardise_date(stop) self.subscriber_identifier = subscriber_identifier self.direction = Direction(direction) if spatial_unit is None: self.spatial_unit = make_spatial_unit("admin", level=3) else: self.spatial_unit = spatial_unit self.statistic = statistic.lower() if self.statistic not in valid_stats: raise ValueError( "{} is not a valid statistic. Use one of {}".format( self.statistic, valid_stats ) ) column_list = [ self.subscriber_identifier, "msisdn_counterpart", "duration", "location_id", "datetime", *self.direction.required_columns, ] self.unioned_query = location_joined_query( EventsTablesUnion( self.start, self.stop, tables="events.calls", columns=column_list, hours=hours, subscriber_subset=subscriber_subset, subscriber_identifier=self.subscriber_identifier, ), spatial_unit=self.spatial_unit, time_col="datetime", ) super().__init__()
def __init__( self, start, stop, statistic="avg", *, spatial_unit: AnySpatialUnit = make_spatial_unit("cell"), hours="all", tables="all", subscriber_identifier="msisdn", direction: Union[str, Direction] = Direction.BOTH, subscriber_subset=None, ): self.start = standardise_date(start) self.stop = standardise_date(stop) self.spatial_unit = spatial_unit self.hours = hours self.tables = tables self.subscriber_identifier = subscriber_identifier self.direction = Direction(direction) self.statistic = statistic if self.statistic not in valid_stats: raise ValueError( "{} is not a valid statistic. Use one of {}".format( self.statistic, valid_stats)) column_list = [ self.subscriber_identifier, "location_id", "datetime", *self.direction.required_columns, ] self.unioned_query = location_joined_query( EventsTablesUnion( self.start, self.stop, tables=self.tables, columns=column_list, hours=hours, subscriber_identifier=subscriber_identifier, subscriber_subset=subscriber_subset, ), spatial_unit=self.spatial_unit, time_col="datetime", ) super().__init__()