Пример #1
0
def test_stops_load(network_dir, network_date):
    '''
    Test to ensure that the Stops are loaded and processed
    '''
    gtfs_feed = get_gtfs_feed(network_dir, network_date)
    out_dir = os.path.join(EXAMPLE_DIR, 'output', 'test_gtfs_stops_load')
    try:
        os.makedirs(out_dir)
    except OSError:
        if not os.path.isdir(out_dir):
            raise

    stops = Stop(network_dir, out_dir, gtfs_feed, network_date)

    #Test existence, length, and required columns
    assert not stops.stop_id_df.empty
    assert len(stops.stop_id_df) == 8
    assert ({Stop.STOPS_COLUMN_STOP_ID,
             Stop.STOPS_COLUMN_STOP_ID_NUM}.issubset(stops.stop_id_df))
    assert stops.max_stop_id_num == 8

    #Test existence, length, dtype, and column names for stops_df
    assert not stops.stops_df.empty
    assert len(stops.stops_df == 8)
    stop_df_dtypes = {
        Stop.STOPS_COLUMN_STOP_ID: object,
        Stop.STOPS_COLUMN_STOP_LATITUDE: np.float64,
        Stop.STOPS_COLUMN_STOP_LONGITUDE: np.float64,
        Stop.STOPS_COLUMN_STOP_NAME: object,
        Stop.STOPS_COLUMN_ZONE_ID: object,
        Stop.STOPS_COLUMN_STOP_ID_NUM: np.int64,
        Stop.STOPS_COLUMN_ZONE_ID_NUM: np.float64
    }
    assert (set(stop_df_dtypes.keys()).issubset(stops.stops_df))
    assert stops.stops_df.dtypes.to_dict() == stop_df_dtypes
    pd.testing.assert_frame_equal(
        stops.stop_id_df.set_index(Stop.STOPS_COLUMN_STOP_ID_NUM),
        stops.stops_df.set_index(Stop.STOPS_COLUMN_STOP_ID_NUM),
    )

    #Test to make sure stop_id and stops dataframe are identical
    stops_with_zones = stops.stops_df[stops.stops_df[
        Stop.STOPS_COLUMN_ZONE_ID_NUM].notnull()]
    assert len(stops_with_zones) == 2
    assert len(
        stops_with_zones[stops_with_zones[Stop.STOPS_COLUMN_STOP_ID].isin(
            ['B1', 'B3'])]) == 2

    assert len(stops.zone_id_df) == 2
    pd.testing.assert_frame_equal(stops_with_zones[[
        Stop.STOPS_COLUMN_ZONE_ID_NUM, Stop.STOPS_COLUMN_ZONE_ID
    ]].drop_duplicates().set_index(Stop.STOPS_COLUMN_ZONE_ID_NUM),
                                  stops.zone_id_df.set_index(
                                      Stop.STOPS_COLUMN_ZONE_ID_NUM),
                                  check_dtype=False,
                                  check_index_type=False)

    assert not stops.trip_times_df
Пример #2
0
def test_trips_load(network_dir, network_date):
    """
        Test to ensure that the Trips are loaded and processed
        properly by the FastTrips initialization
    """
    from fasttrips import Assignment
    Assignment.NETWORK_BUILD_DATE = network_date
    gtfs_feed = get_gtfs_feed(network_dir, network_date)
    out_dir = os.path.join(EXAMPLE_DIR, 'output', 'test_gtfs_trips_load')
    try:
        os.makedirs(out_dir)
    except OSError:
        if not os.path.isdir(out_dir):
            raise

    stops = Stop(network_dir, out_dir, gtfs_feed, network_date)

    routes = Route(network_dir, out_dir, gtfs_feed, network_date, stops)

    trips = Trip(network_dir, out_dir, gtfs_feed, network_date, stops, routes,
                 True)

    assert not trips.trips_df.empty
    assert len(trips.trips_df) == 153
    trips_df_dtypes = {
        'route_id': object,
        'service_id': object,
        'trip_id': object,
        'vehicle_name': object,
        'direction_id': np.int64,
        'shape_id': object,
        'trip_id_num': np.int64,
        'seated_capacity': np.int64,
        'standing_capacity': np.int64,
        'max_speed': np.float64,
        'acceleration': np.float64,
        'deceleration': np.float64,
        'dwell_formula': object,
        'capacity': np.int64,
        'max_speed_fps': np.float64,
        'route_long_name': object,
        'route_short_name': object,
        'route_type': np.int64,
        'mode': object,
        'proof_of_payment': bool,
        'mode_num': np.int64,
        'mode_type': object,
        'route_id_num': np.int64,
        'max_stop_seq': np.int64,
        'trip_departure_time': np.dtype('datetime64[ns]'),
    }
    assert (set(trips_df_dtypes.keys()).issubset(trips.trips_df))
    assert trips.trips_df.dtypes.to_dict() == trips_df_dtypes
    assert len(trips.trips_df[Route.ROUTES_COLUMN_ROUTE_ID].isin(routes.routes_df[Route.ROUTES_COLUMN_ROUTE_ID])) == \
        len(trips.trips_df)
    assert len(trips.trips_df[trips.trips_df.duplicated(
        subset=Trip.TRIPS_COLUMN_TRIP_ID)]) == 0

    pd.testing.assert_frame_equal(
        trips.trips_df[[
            Route.ROUTES_COLUMN_MODE, Route.ROUTES_COLUMN_MODE_NUM,
            Route.ROUTES_COLUMN_MODE_TYPE
        ]].drop_duplicates().sort_values(
            by=Route.ROUTES_COLUMN_MODE_NUM).set_index(
                Route.ROUTES_COLUMN_MODE_NUM),
        routes.modes_df.sort_values(by=Route.ROUTES_COLUMN_MODE_NUM).set_index(
            Route.ROUTES_COLUMN_MODE_NUM))

    pd.testing.assert_frame_equal(
        trips.trips_df[[
            Route.ROUTES_COLUMN_ROUTE_ID_NUM, Route.ROUTES_COLUMN_ROUTE_ID
        ]].drop_duplicates().sort_values(
            by=Route.ROUTES_COLUMN_ROUTE_ID_NUM).set_index(
                Route.ROUTES_COLUMN_ROUTE_ID_NUM),
        routes.route_id_df.sort_values(
            by=Route.ROUTES_COLUMN_ROUTE_ID_NUM).set_index(
                Route.ROUTES_COLUMN_ROUTE_ID_NUM))

    assert not trips.trip_id_df.empty
    pd.testing.assert_frame_equal(
        trips.trips_df[[
            Trip.TRIPS_COLUMN_TRIP_ID_NUM, Trip.TRIPS_COLUMN_TRIP_ID
        ]].drop_duplicates().sort_values(
            by=Trip.TRIPS_COLUMN_TRIP_ID_NUM).set_index(
                Trip.TRIPS_COLUMN_TRIP_ID_NUM),
        trips.trip_id_df.sort_values(
            by=Trip.TRIPS_COLUMN_TRIP_ID_NUM).set_index(
                Trip.TRIPS_COLUMN_TRIP_ID_NUM))

    assert not trips.stop_times_df.empty
    assert len(trips.stop_times_df[
        (trips.stop_times_df[Trip.STOPTIMES_COLUMN_ARRIVAL_TIME].dt.month ==
         network_date.month) & (trips.stop_times_df[
             Trip.STOPTIMES_COLUMN_ARRIVAL_TIME].dt.day == network_date.day) &
        (trips.stop_times_df[Trip.STOPTIMES_COLUMN_ARRIVAL_TIME].dt.year
         == network_date.year)]) == len(trips.stop_times_df)

    assert len(trips.stop_times_df[
        (trips.stop_times_df[Trip.STOPTIMES_COLUMN_DEPARTURE_TIME].dt.month ==
         network_date.month) & (trips.stop_times_df[
             Trip.STOPTIMES_COLUMN_DEPARTURE_TIME].dt.day == network_date.day)
        & (trips.stop_times_df[Trip.STOPTIMES_COLUMN_DEPARTURE_TIME].dt.year
           == network_date.year)]) == len(trips.stop_times_df)

    assert not trips.vehicles_df.empty

    assert trips.capacity_configured
Пример #3
0
def test_routes_load(network_dir, network_date):
    """
        Test to ensure that the Routes are loaded and processed
        properly by the FastTrips initialization
    """
    gtfs_feed = get_gtfs_feed(network_dir, network_date)
    out_dir = os.path.join(EXAMPLE_DIR, 'output', 'test_gtfs_routes_load')
    try:
        os.makedirs(out_dir)
    except OSError:
        if not os.path.isdir(out_dir):
            raise

    stops = Stop(network_dir, out_dir, gtfs_feed, network_date)

    routes = Route(network_dir, out_dir, gtfs_feed, network_date, stops)

    #routes.routes_df
    assert not routes.routes_df.empty
    assert len(routes.routes_df) == 4
    routes_df_dtypes = {
        'route_id': object,
        'route_long_name': object,
        'route_short_name': object,
        'route_type': np.int64,
        'mode': object,
        'proof_of_payment': bool,
        'mode_num': np.int64,
        'mode_type': object,
        'route_id_num': np.int64,
    }
    assert (set(routes_df_dtypes.keys()).issubset(routes.routes_df))
    assert routes.routes_df.dtypes.to_dict() == routes_df_dtypes
    assert len(routes.routes_df[routes.routes_df[
        Route.ROUTES_COLUMN_PROOF_OF_PAYMENT]]) == 1

    #routes.modes_df
    assert not routes.modes_df.empty
    assert len(routes.routes_df[routes.routes_df['mode'].isin(
        routes.modes_df['mode'])]) == len(routes.routes_df)
    pd.testing.assert_frame_equal(
        routes.routes_df[[
            Route.ROUTES_COLUMN_MODE, Route.ROUTES_COLUMN_MODE_NUM,
            Route.ROUTES_COLUMN_MODE_TYPE
        ]].drop_duplicates().set_index(Route.ROUTES_COLUMN_MODE_NUM),
        routes.modes_df.set_index(Route.ROUTES_COLUMN_MODE_NUM))

    #routes.route_id_df
    assert not routes.route_id_df.empty
    assert len(routes.route_id_df) == len(routes.routes_df)
    pd.testing.assert_frame_equal(
        routes.routes_df[[
            Route.ROUTES_COLUMN_ROUTE_ID_NUM, Route.ROUTES_COLUMN_ROUTE_ID
        ]].set_index(Route.ROUTES_COLUMN_ROUTE_ID_NUM),
        routes.route_id_df.set_index(Route.ROUTES_COLUMN_ROUTE_ID_NUM))

    #routes.agencies_df
    assert not routes.agencies_df.empty
    #The SIMPLE network doesn't really do much with agency.
    #TODO: Consider adding here once these tests includes more networks

    #routes.fare_rules_df
    assert not routes.fare_rules_df.empty

    #routes.fare_attrs_df
    assert not routes.fare_attrs_df.empty
    fare_attrs_df_dtype = {
        'fare_period': object,
        'price': np.float64,
        'currency_type': object,
        'payment_method': np.int64,
        'transfers': np.int64,
        'transfer_duration': np.float64,
    }
    assert (set(fare_attrs_df_dtype.keys()).issubset(routes.fare_attrs_df))
    assert routes.fare_attrs_df.dtypes.to_dict() == fare_attrs_df_dtype
    assert len(routes.fare_attrs_df) == 9
    match_fare_rule_attr_df = routes.fare_rules_df[routes.fare_rules_df[
        Route.FARE_ATTR_COLUMN_FARE_PERIOD].isin(
            routes.fare_attrs_df[Route.FARE_ATTR_COLUMN_FARE_PERIOD])]
    assert len(match_fare_rule_attr_df) == len(routes.fare_rules_df)
    #pd.testing.assert_frame_equal(routes.fare_rules_df[fare_attrs_df_dtype.keys()].drop_duplicates().set_index(Route.FARE_ATTR_COLUMN_FARE_PERIOD),
    #                              routes.fare_attrs_df[routes.fare_attrs_df[Route.FARE_ATTR_COLUMN_FARE_PERIOD].isin(match_fare_rule_attr_df[Route.FARE_ATTR_COLUMN_FARE_PERIOD])].set_index(Route.FARE_ATTR_COLUMN_FARE_PERIOD),
    #                              check_dtype=False, check_index_type=False)

    #routes.fare_ids_df
    assert not routes.fare_ids_df.empty
    pd.testing.assert_frame_equal(
        routes.fare_rules_df[[
            Route.FARE_RULES_COLUMN_FARE_ID,
            Route.FARE_RULES_COLUMN_FARE_ID_NUM
        ]].drop_duplicates().set_index(Route.FARE_RULES_COLUMN_FARE_ID_NUM),
        routes.fare_ids_df.set_index(Route.FARE_RULES_COLUMN_FARE_ID_NUM))

    #routes.fare_by_class
    assert routes.fare_by_class

    #routes.fare_transfer_rules_df
    assert not routes.fare_transfer_rules_df.empty
    assert len(routes.fare_transfer_rules_df[routes.fare_transfer_rules_df[
        Route.FARE_TRANSFER_RULES_COLUMN_FROM_FARE_PERIOD].isin(
            routes.fare_attrs_df[Route.FARE_ATTR_COLUMN_FARE_PERIOD])]) == len(
                routes.fare_transfer_rules_df)
    assert len(routes.fare_transfer_rules_df[routes.fare_transfer_rules_df[
        Route.FARE_TRANSFER_RULES_COLUMN_TO_FARE_PERIOD].isin(
            routes.fare_attrs_df[Route.FARE_ATTR_COLUMN_FARE_PERIOD])]) == len(
                routes.fare_transfer_rules_df)