"""Utilities for converting to and from ``clairvoyance2`` datasets."""fromtypingimportList,Typeimportpandasaspdfromtempor.dataimportdataset,samplesfromtempor.models.clairvoyance2.dataimportDatasetasClairvoyance2Datasetfrom.importutilsdef_from_clv2_static(df:pd.DataFrame)->pd.DataFrame:df=utils.set_df_column_names_inplace(df,names=[str(c)forcindf.columns])df.index.name="sample_idx"returndfdef_from_clv2_time_series(df:pd.DataFrame)->pd.DataFrame:df=utils.set_df_column_names_inplace(df,names=[str(c)forcindf.columns])df.index.names=["sample_idx","time_idx"]returndfdef_from_clv2_event(df:pd.DataFrame)->pd.DataFrame:column_names=[str(c)forcindf.columns]sample_index=df.index.get_level_values(0)sample_index.name="sample_idx"event_times=df.index.get_level_values(1)data_={k:list(zip(event_times,df[k].astype(bool)))forkincolumn_names}df_out=pd.DataFrame(data=data_,index=sample_index,columns=column_names)returndf_out
[docs]defclairvoyance2_dataset_to_tempor_dataset(data:Clairvoyance2Dataset)->dataset.BaseDataset:"""A utility function to convert a ``clairvoyance2`` dataset to a TemporAI dataset. Args: data (Clairvoyance2Dataset): The ``clairvoyance2`` dataset to convert. Returns: dataset.BaseDataset: The converted dataset. """if(data.temporal_targetsisNoneanddata.temporal_treatmentsisNoneanddata.event_targetsisNoneanddata.event_treatmentsisNone):raiseValueError("`clairvoyance2` dataset did not have any predictive data (targets or treatments), ""this case is not supported")ifdata.temporal_targetsisnotNoneanddata.event_targetsisnotNone:raiseValueError("`clairvoyance2` dataset had both `temporal_targets` and `event_targets`, this case is not supported")ifdata.temporal_treatmentsisnotNoneanddata.event_treatmentsisnotNone:raiseValueError("`clairvoyance2` dataset had both `temporal_treatments` and `event_treatments`, this case is not supported")ifdata.event_covariatesisnotNone:raiseValueError("`clairvoyance2` dataset had `event_covariates`, this case is not supported.")# Covariates.static_df=data.static_covariates.dfifdata.static_covariatesisnotNoneelseNonetime_series_df=data.temporal_covariates.to_multi_index_dataframe()# Targets.ifdata.temporal_targetsisnotNone:targets_df=data.temporal_targets.to_multi_index_dataframe()elifdata.event_targetsisnotNone:targets_df=data.event_targets.dfelse:# pragma: no cover# Case caught by exceptions above.targets_df=None# Treatments.ifdata.temporal_treatmentsisnotNone:treatments_df=data.temporal_treatments.to_multi_index_dataframe()elifdata.event_treatmentsisnotNone:treatments_df=data.event_treatments.dfelse:treatments_df=None# Conversions.ifstatic_dfisnotNone:static_df=_from_clv2_static(static_df)time_series_df=_from_clv2_time_series(time_series_df)ifdata.temporal_targetsisnotNone:targets_df=_from_clv2_time_series(targets_df)# pyright: ignoreelifdata.event_targetsisnotNone:targets_df=_from_clv2_event(targets_df)# pyright: ignoreelse:# pragma: no cover# Case caught by exceptions above.targets_df=Noneifdata.temporal_treatmentsisnotNone:treatments_df=_from_clv2_time_series(treatments_df)# pyright: ignoreelifdata.event_treatmentsisnotNone:treatments_df=_from_clv2_event(treatments_df)# pyright: ignore# Determine tempor.Dataset subclass.ifdata.temporal_targetsisnotNoneanddata.temporal_treatmentsisNoneanddata.event_treatmentsisNone:TemporDatasetCls:Type[dataset.BaseDataset]=dataset.TemporalPredictionDatasetelifdata.event_targetsisnotNoneanddata.temporal_treatmentsisNoneanddata.event_treatmentsisNone:TemporDatasetCls=dataset.TimeToEventAnalysisDatasetelifdata.temporal_targetsisnotNoneanddata.event_treatmentsisnotNone:TemporDatasetCls=dataset.OneOffTreatmentEffectsDatasetelifdata.temporal_targetsisnotNoneanddata.temporal_treatmentsisnotNone:TemporDatasetCls=dataset.TemporalTreatmentEffectsDatasetelse:# pragma: no coverraiseValueError("Cannot convert a clairvoyance2 dataset to tempor dataset in this case, as it is "f"not supported, see clairvoyance2 dataset components:\n{data}")returnTemporDatasetCls(time_series=time_series_df,static=static_df,targets=targets_df,# pyright: ignoretreatments=treatments_df,# pyright: ignore)
def_to_clv2_static(s:samples.StaticSamplesBase)->pd.DataFrame:int_sample_index=list(range(s.num_samples))returns.dataframe().set_index(keys=pd.Index(int_sample_index),drop=True)def_to_clv2_time_series(s:samples.TimeSeriesSamplesBase)->List[pd.DataFrame]:return[df.droplevel(0)fordfins.list_of_dataframes()]def_to_clv2_event(s:samples.EventSamplesBase)->pd.DataFrame:int_sample_index=list(range(s.num_samples))df_event_times,df_event_values=s.split_as_two_dataframes()all_event_times_match=df_event_times.eq(df_event_times.iloc[:,0],axis=0).all(1).all()# ^ Check all time columns equal else exception.ifnotall_event_times_match:raiseValueError("Event times must be the same for all features of each sample in order to ""be convertible to a clairvoyance2 dataset")times=df_event_times.iloc[:,0].to_list()df=df_event_values.astype(int).set_index(keys=[pd.Index(int_sample_index),times])# pyright: ignorereturndf
[docs]deftempor_dataset_to_clairvoyance2_dataset(data:dataset.BaseDataset)->Clairvoyance2Dataset:"""A utility function to convert a TemporAI dataset to a ``clairvoyance2`` dataset. Args: data (dataset.BaseDataset): The TemporAI dataset to convert. Returns: Clairvoyance2Dataset: The converted dataset. """ifisinstance(data,dataset.OneOffPredictionDataset):raiseValueError("Cannot convert a `OneOffPredictionDataset` to a clairvoyance2 dataset, as this setting is not supported")defhas_temporal_targets(d:dataset.BaseDataset)->bool:ifd.predictiveisnotNone:returnisinstance(d.predictive.targets,samples.TimeSeriesSamplesBase)else:returnFalsedefhas_temporal_treatments(d:dataset.BaseDataset)->bool:ifd.predictiveisnotNone:returnisinstance(d.predictive.treatments,samples.TimeSeriesSamplesBase)else:returnFalsedefhas_event_targets(d:dataset.BaseDataset)->bool:ifd.predictiveisnotNone:returnisinstance(d.predictive.targets,samples.EventSamplesBase)else:returnFalsedefhas_event_treatments(d:dataset.BaseDataset)->bool:ifd.predictiveisnotNone:returnisinstance(d.predictive.treatments,samples.EventSamplesBase)else:returnFalsereturnClairvoyance2Dataset(temporal_covariates=_to_clv2_time_series(data.time_series),static_covariates=_to_clv2_static(data.static)ifdata.staticisnotNoneelseNone,event_covariates=None,temporal_targets=(_to_clv2_time_series(data.predictive.targets)ifhas_temporal_targets(data)elseNone# type: ignore),temporal_treatments=(_to_clv2_time_series(data.predictive.treatments)ifhas_temporal_treatments(data)elseNone# type: ignore),event_targets=(_to_clv2_event(data.predictive.targets)ifhas_event_targets(data)elseNone),# type: ignoreevent_treatments=(_to_clv2_event(data.predictive.treatments)ifhas_event_treatments(data)elseNone# type: ignore),)