def test_request_data_source_deprecation(): with pytest.warns(DeprecationWarning): request_data_source = RequestDataSource( name="vals_to_add", schema={"val_to_add": ValueType.INT64, "val_to_add_2": ValueType.INT64}, ) request_data_source_proto = request_data_source.to_proto() returned_request_source = RequestSource.from_proto(request_data_source_proto) assert returned_request_source == request_data_source
def create_driver_age_request_feature_view(): return RequestFeatureView( name="driver_age", request_data_source=RequestDataSource( name="driver_age_source", schema={"driver_age": ValueType.INT32} ), )
def from_proto(cls, request_feature_view_proto: RequestFeatureViewProto): """ Creates a request feature view from a protobuf representation. Args: request_feature_view_proto: A protobuf representation of an request feature view. Returns: A RequestFeatureView object based on the request feature view protobuf. """ request_feature_view_obj = cls( name=request_feature_view_proto.spec.name, request_data_source=RequestDataSource.from_proto( request_feature_view_proto.spec.request_data_source ), ) # FeatureViewProjections are not saved in the RequestFeatureView proto. # Create the default projection. request_feature_view_obj.projection = FeatureViewProjection.from_definition( request_feature_view_obj ) return request_feature_view_obj
def create_similarity_request_data_source(): return RequestDataSource( name="similarity_input", schema={ "vector_double": ValueType.DOUBLE_LIST, "vector_float": ValueType.FLOAT_LIST, }, )
def from_proto(cls, on_demand_feature_view_proto: OnDemandFeatureViewProto): """ Creates an on demand feature view from a protobuf representation. Args: on_demand_feature_view_proto: A protobuf representation of an on-demand feature view. Returns: A OnDemandFeatureView object based on the on-demand feature view protobuf. """ inputs = {} for ( input_name, on_demand_input, ) in on_demand_feature_view_proto.spec.inputs.items(): if on_demand_input.WhichOneof("input") == "feature_view": inputs[input_name] = FeatureView.from_proto( on_demand_input.feature_view).projection elif on_demand_input.WhichOneof( "input") == "feature_view_projection": inputs[input_name] = FeatureViewProjection.from_proto( on_demand_input.feature_view_projection) else: inputs[input_name] = RequestDataSource.from_proto( on_demand_input.request_data_source) on_demand_feature_view_obj = cls( name=on_demand_feature_view_proto.spec.name, features=[ Feature( name=feature.name, dtype=ValueType(feature.value_type), labels=dict(feature.labels), ) for feature in on_demand_feature_view_proto.spec.features ], inputs=inputs, udf=dill.loads( on_demand_feature_view_proto.spec.user_defined_function.body), ) # FeatureViewProjections are not saved in the OnDemandFeatureView proto. # Create the default projection. on_demand_feature_view_obj.projection = FeatureViewProjection.from_definition( on_demand_feature_view_obj) if on_demand_feature_view_proto.meta.HasField("created_timestamp"): on_demand_feature_view_obj.created_timestamp = ( on_demand_feature_view_proto.meta.created_timestamp.ToDatetime( )) return on_demand_feature_view_obj
def test_modify_feature_views_success(): # Create Feature Views date_request = RequestDataSource( name="date_request", schema={"some_date": ValueType.UNIX_TIMESTAMP}) @on_demand_feature_view( inputs={"date_request": date_request}, features=[Feature("output", ValueType.UNIX_TIMESTAMP)], ) def test_view(features_df: pd.DataFrame) -> pd.DataFrame: data = pd.DataFrame() data["output"] = features_df["some_date"] return data test_view.infer_features()
def from_proto(cls, on_demand_feature_view_proto: OnDemandFeatureViewProto): """ Creates an on demand feature view from a protobuf representation. Args: on_demand_feature_view_proto: A protobuf representation of an on-demand feature view. Returns: A OnDemandFeatureView object based on the on-demand feature view protobuf. """ inputs = {} for ( input_name, on_demand_input, ) in on_demand_feature_view_proto.spec.inputs.items(): if on_demand_input.WhichOneof("input") == "feature_view": inputs[input_name] = FeatureView.from_proto( on_demand_input.feature_view) else: inputs[input_name] = RequestDataSource.from_proto( on_demand_input.request_data_source) on_demand_feature_view_obj = cls( name=on_demand_feature_view_proto.spec.name, features=[ Feature( name=feature.name, dtype=ValueType(feature.value_type), labels=dict(feature.labels), ) for feature in on_demand_feature_view_proto.spec.features ], inputs=inputs, udf=dill.loads( on_demand_feature_view_proto.spec.user_defined_function.body), ) return on_demand_feature_view_obj
def create_conv_rate_request_data_source(): return RequestDataSource( name="conv_rate_input", schema={"val_to_add": ValueType.INT32} )
), Feature( name="string_feature", dtype=ValueType.STRING, labels=dict(description="String feature"), ), ], online=True, batch_source=driver_hourly_stats_source, tags={}, ) input_request = RequestDataSource( name="vals_to_add", schema={ "val_to_add": ValueType.INT64, "val_to_add_2": ValueType.INT64 }, ) @on_demand_feature_view( # type: ignore inputs={ "driver_hourly_stats": driver_hourly_stats_view, "vals_to_add": input_request, }, features=[ Feature(name="conv_rate_plus_val1", dtype=ValueType.DOUBLE), Feature(name="conv_rate_plus_val2", dtype=ValueType.DOUBLE), ], )