def _features_parsing_creation(feats_info): """Features General parsing function. This function transforms any features information into a FeaturesManager object. Parameters ---------- feats_info: np.ndarray, list, tuple, pst.BaseFeatures, pst.FeaturesManager The features information to create features object. The Standards inputs accepted are: * np.ndarray * Features object * FeaturesManager object * (np.ndarray, pars_featuresManager) * (np.ndarray, pars_featuresManager, descriptormodel) * (Features object, pars_featuresManager) * (Features object, pars_featuresManager, descriptormodel) * (Features_info tuple, pars_featuresManager) * (Features_info tuple, pars_featuresManager, descriptormodel) Returns ------- feats_info: pst.FeaturesManager the features manager created by the information given in the input. """ if type(feats_info) == np.ndarray: feats_info = _featuresobject_parsing_creation(feats_info) feats_info = FeaturesManager(feats_info) elif isinstance(feats_info, BaseFeatures): feats_info = FeaturesManager(feats_info) elif type(feats_info) == list: assert all([isinstance(e, BaseFeatures) for e in feats_info]) feats_info = FeaturesManager(feats_info) elif isinstance(feats_info, FeaturesManager): pass else: assert type(feats_info) == tuple assert type(feats_info[1]) == dict if type(feats_info[0]) == np.ndarray: feats_info = _featuresobject_parsing_creation(feats_info) feats_info = FeaturesManager(feats_info) elif isinstance(feats_info[0], BaseFeatures): feats_info = _featuresmanager_parsing_creation(feats_info) elif type(feats_info[0]) == list: feats_info = _featuresmanager_parsing_creation(feats_info) else: assert type(feats_info[0]) == tuple new_feats_info = _featuresobject_parsing_creation(feats_info[0]) if len(feats_info) == 2: new_pars_info = (new_feats_info, feats_info[1]) else: new_pars_info = (new_feats_info, feats_info[1], feats_info[2]) feats_info = _featuresmanager_parsing_creation(new_pars_info) assert isinstance(feats_info, FeaturesManager) return feats_info
def _format_features(self, features_objects): """Formatter of features. Parameters ---------- features_objects: list or pst.BaseFeatures the features objects in order to be managed by the manage. """ ## 0. Format to list mode # Format to list mode if type(features_objects) != list: features_objects = [features_objects] # Format to feature objects nfeat = len(features_objects) for i in range(nfeat): # features_objects[i] = self._auxformat_features(features_objects[i]) features_objects[i] = _featuresobject_parsing_creation(features_objects[i]) self.features = features_objects ## 1. Check input if nfeat == 0: msg = "Any feature object is input in the featureRetriever." raise TypeError(msg) ## 2. Format kperturb self._format_k_perturbs()
def _featuresmanager_parsing_creation(feats_info): """FeaturesManager instantiation from features information. This function transforms features information into a FeaturesManager object. Parameters ---------- feats_info: np.ndarray, list, tuple, pst.BaseFeatures, pst.FeaturesManager The features information to create features object. The Standards inputs accepted are: * Features object * FeaturesManager object * (Features object, pars_featuresManager) * (Features object, pars_featuresManager, descriptormodel) Returns ------- feats_info: pst.FeaturesManager the features manager created by the information given in the input. """ if isinstance(feats_info, BaseFeatures): feats_info = FeaturesManager(feats_info) elif type(feats_info) == list: assert all([isinstance(e, BaseFeatures) for e in feats_info]) feats_info = FeaturesManager(feats_info) elif isinstance(feats_info, FeaturesManager): pass else: assert type(feats_info) == tuple if isinstance(feats_info[0], BaseFeatures) or type(feats_info[0]) == list: if type(feats_info[0]) == list: assert all([isinstance(e, BaseFeatures) for e in feats_info[0]]) assert type(feats_info[1]) == dict assert len(feats_info) >= 2 if len(feats_info) == 2: pars_features = feats_info[1] else: assert len(feats_info) == 3 if type(feats_info[2]) == list: for i in range(len(feats_info[2])): assert isinstance(feats_info[2][i], BaseDescriptorModel) else: assert isinstance(feats_info[2], BaseDescriptorModel) pars_features = feats_info[1] pars_features["descriptormodels"] = feats_info[2] feats_info = FeaturesManager(feats_info[0], **pars_features) else: assert type(feats_info[0]) == tuple new_feats_info = _featuresobject_parsing_creation(feats_info[0]) if len(feats_info) == 2: new_feats_info = (new_feats_info, feats_info[1]) else: new_feats_info = (new_feats_info, feats_info[1], feats_info[2]) feats_info = _featuresmanager_parsing_creation(new_feats_info) assert isinstance(feats_info, FeaturesManager) return feats_info
def create_aggfeatures(sp_descriptor, features): """Average distance of points of the different regions. Function to compute the spatial distances between regions. Parameters ---------- sp_descriptor: tuple (aggregation_info format) or SpatialDescriptorModel the information to compute aggregation. features: pst.BaseFeatures the features we want to aggregate. Returns ------- new_exlicit_features: pst.Features object the features object obtained by aggregating the features. """ ## 1. Computing if type(sp_descriptor) == tuple: ## 0. Parsing inputs disc_info, retriever_in, _, agg_info = sp_descriptor assert type(agg_info) == tuple assert len(agg_info) == 2 _, aggregating_feat = agg_info agg_f_ret, desc_in, pars_feat_in, pars_feats, desc_out = _parse_aggregation_feat(aggregating_feat, features) ## Retrievers locs, regs, disc = _discretization_parsing_creation(disc_info) retrievers = agg_f_ret(retriever_in, locs, regs, disc) ## Featurers # Feature creation object_feats, core_features, pars_fea_o_in = features.export_features() pars_fea_o_in["descriptormodel"] = desc_in new_features = object_feats(core_features, **pars_fea_o_in) # Feature manager creation pars_feat_in["maps_vals_i"] = regs pars_feat_in["selectors"] = (0, 0), (0, 0), (0, 0) featurers = FeaturesManager(new_features, **pars_feat_in) ## 1. Preparing spdesc object spdesc = SpatialDescriptorModel(retrievers, featurers) ## 2. Compute aggfeatures = spdesc.compute() else: aggfeatures = sp_descriptor.compute() pars_feats = {} desc_out = sp_descriptor.featurers.features[0].descriptormodel ## 3. Creation of the object features aggregations new_exlicit_features = _featuresobject_parsing_creation((aggfeatures, pars_feats, desc_out)) return new_exlicit_features