11import ast
2+ import copy
23import json
34import random
45import string
56
67import pandas as pd
78import pytest
89
10+ from ads .feature_store .common .enums import IngestionMode
911from ads .feature_store .common .exceptions import NotMaterializedError
1012from ads .feature_store .dataset import Dataset
13+ from ads .feature_store .feature_option_details import FeatureOptionDetails
1114from ads .feature_store .statistics_config import StatisticsConfig
1215from tests .integration .feature_store .test_base import FeatureStoreTestCase
1316from ads .feature_store .feature_group import FeatureGroup
@@ -77,6 +80,132 @@ def test_as_of_for_non_materialized_feature_group(self):
7780 with pytest .raises (NotMaterializedError ):
7881 fg .as_of ()
7982
83+ self .clean_up_feature_group (fg )
84+ self .clean_up_entity (entity )
85+ self .clean_up_feature_store (fs )
86+
87+ def test_as_of_for_non_materialized_dataset (self ):
88+ fs = self .define_feature_store_resource ().create ()
89+ assert fs .oci_fs .id
90+
91+ entity = self .create_entity_resource (fs )
92+ assert entity .oci_fs_entity .id
93+
94+ fg = self .define_feature_group_resource (
95+ entity .oci_fs_entity .id , fs .oci_fs .id
96+ ).create ()
97+ assert fg .oci_feature_group .id
98+
99+ fg .materialise (self .as_of_data_frame )
100+
101+ dataset = self .define_dataset_resource (
102+ entity .oci_fs_entity .id , fs .oci_fs .id , fg .name
103+ ).create ()
104+ assert fg .oci_feature_group .id
105+
106+ with pytest .raises (NotMaterializedError ):
107+ dataset .as_of ()
108+
109+ self .clean_up_dataset (dataset )
110+ self .clean_up_feature_group (fg )
111+ self .clean_up_entity (entity )
112+ self .clean_up_feature_store (fs )
113+
114+ def test_as_of_for_materialized_feature_group_for_only_one_version (self ):
115+ fs = self .define_feature_store_resource ().create ()
116+ assert fs .oci_fs .id
117+
118+ entity = self .create_entity_resource (fs )
119+ assert entity .oci_fs_entity .id
120+
121+ fg = self .define_feature_group_resource (
122+ entity .oci_fs_entity .id , fs .oci_fs .id
123+ ).create ()
124+ assert fg .oci_feature_group .id
125+
126+ fg .materialise (self .as_of_data_frame )
127+ df = fg .as_of (version_number = 0 )
128+
129+ assert df
130+ assert len (df .columns ) == len (self .test_as_of_data )
131+
132+ self .clean_up_feature_group (fg )
133+ self .clean_up_entity (entity )
134+ self .clean_up_feature_store (fs )
135+
136+ def test_as_of_for_materialized_feature_group_for_multiple_version (self ):
137+ fs = self .define_feature_store_resource ().create ()
138+ assert fs .oci_fs .id
139+
140+ entity = self .create_entity_resource (fs )
141+ assert entity .oci_fs_entity .id
142+
143+ fg = self .define_feature_group_resource (
144+ entity .oci_fs_entity .id , fs .oci_fs .id
145+ ).create ()
146+ assert fg .oci_feature_group .id
147+
148+ fg .materialise (self .as_of_data_frame )
149+
150+ # Now Update the Payload and materialize again
151+ new_data = copy .deepcopy (self .test_as_of_data )
152+ new_data .pop ("Score" )
153+ df = pd .DataFrame (new_data )
154+
155+ fg .with_schema_details_from_dataframe (df )
156+ fg .update ()
157+
158+ feature_option_write_config_details = (
159+ FeatureOptionDetails ().with_feature_option_write_config_details (
160+ overwrite_schema = True
161+ )
162+ )
163+ fg .materialise (
164+ input_dataframe = df ,
165+ feature_option_details = feature_option_write_config_details ,
166+ ingestion_mode = IngestionMode .OVERWRITE ,
167+ )
168+ df = fg .as_of (version_number = 0 )
169+
170+ assert df
171+ assert len (df .columns ) == len (self .test_as_of_data )
172+
173+ df = fg .as_of (version_number = 1 )
174+
175+ assert df
176+ assert len (df .columns ) == len (new_data )
177+
178+ self .clean_up_feature_group (fg )
179+ self .clean_up_entity (entity )
180+ self .clean_up_feature_store (fs )
181+
182+ def test_as_of_for_materialized_dataset (self ):
183+ fs = self .define_feature_store_resource ().create ()
184+ assert fs .oci_fs .id
185+
186+ entity = self .create_entity_resource (fs )
187+ assert entity .oci_fs_entity .id
188+
189+ fg = self .define_feature_group_resource (
190+ entity .oci_fs_entity .id , fs .oci_fs .id
191+ ).create ()
192+ assert fg .oci_feature_group .id
193+
194+ fg .materialise (self .as_of_data_frame )
195+
196+ dataset = self .define_dataset_resource (
197+ entity .oci_fs_entity .id , fs .oci_fs .id , fg .name
198+ ).create ()
199+ assert fg .oci_feature_group .id
200+
201+ dataset .materialise ()
202+
203+ df = dataset .as_of (version_number = 0 )
204+
205+ assert df
206+ assert len (df .columns ) == len (self .test_as_of_data )
207+
208+ self .clean_up_dataset (dataset )
80209 self .clean_up_feature_group (fg )
81210 self .clean_up_entity (entity )
82211 self .clean_up_feature_store (fs )
0 commit comments