C++ API Reference for Intel® Data Analytics Acceleration Library 2019 Update 4

data_management/data_source/modifiers/csv/internal/engine.h
1 /* file: engine.h */
2 /*******************************************************************************
3 * Copyright 2014-2019 Intel Corporation.
4 *
5 * This software and the related documents are Intel copyrighted materials, and
6 * your use of them is governed by the express license under which they were
7 * provided to you (License). Unless the License provides otherwise, you may not
8 * use, modify, copy, publish, distribute, disclose or transmit this software or
9 * the related documents without Intel's prior written permission.
10 *
11 * This software and the related documents are provided as is, with no express
12 * or implied warranties, other than those that are expressly stated in the
13 * License.
14 *******************************************************************************/
15 
16 #ifndef __DATA_SOURCE_MODIFIERS_CSV_INTERNAL_ENGINE_H__
17 #define __DATA_SOURCE_MODIFIERS_CSV_INTERNAL_ENGINE_H__
18 
19 #include <string>
20 
21 #include "services/internal/error_handling_helpers.h"
22 #include "data_management/features/internal/helpers.h"
23 #include "data_management/features/internal/identifiers_impl.h"
24 #include "data_management/data_source/modifiers/csv/modifier.h"
25 #include "data_management/data_source/modifiers/internal/engine.h"
26 #include "data_management/data_source/internal/csv_feature_utils.h"
27 
28 namespace daal
29 {
30 namespace data_management
31 {
32 namespace modifiers
33 {
34 namespace csv
35 {
36 namespace internal
37 {
38 
39 using data_management::internal::CSVFeaturesInfo;
40 
45 class InputFeatureInfo : public modifiers::internal::InputFeatureInfo
46 {
47 public:
48  InputFeatureInfo() : _detectedFeatureType(features::DAAL_CATEGORICAL), _token() { }
49 
50  explicit InputFeatureInfo(features::FeatureType detectedFeatureType) :
51  _detectedFeatureType(detectedFeatureType) { }
52 
53  const services::StringView &getToken() const
54  {
55  return _token;
56  }
57 
58  features::FeatureType getDetectedFeatureType() const
59  {
60  return _detectedFeatureType;
61  }
62 
63  void setToken(const services::StringView &token)
64  {
65  _token = token;
66  }
67 
68 private:
69  services::StringView _token;
70  features::FeatureType _detectedFeatureType;
71 };
72 
77 class OutputFeatureInfo : public modifiers::internal::OutputFeatureInfo { };
78 
83 class ConfigImpl : public Config,
84  public modifiers::internal::Config<InputFeatureInfo,
85  OutputFeatureInfo>
86 {
87 private:
88  typedef modifiers::internal::Config<InputFeatureInfo,
89  OutputFeatureInfo> impl;
90 
91 public:
92  ConfigImpl() { }
93 
94  explicit ConfigImpl(const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
95  services::Status *status = NULL) :
96  impl(pickedInputFeatures, status) { }
97 
98  virtual size_t getNumberOfInputFeatures() const DAAL_C11_OVERRIDE
99  {
100  return impl::getNumberOfInputFeatures();
101  }
102 
103  virtual features::FeatureType getInputFeatureDetectedType(size_t index) const DAAL_C11_OVERRIDE
104  {
105  return impl::getPickedInputFeature(index).getDetectedFeatureType();
106  }
107 
108  virtual services::Status setNumberOfOutputFeatures(size_t numberOfOutputFeatures) DAAL_C11_OVERRIDE
109  {
110  return impl::setNumberOfOutputFeatures(numberOfOutputFeatures);
111  }
112 
113  virtual services::Status setOutputFeatureType(size_t outputFeatureIndex,
114  features::FeatureType featureType) DAAL_C11_OVERRIDE
115  {
116  return impl::setOutputFeatureType(outputFeatureIndex, featureType);
117  }
118 
119  virtual services::Status setNumberOfCategories(size_t outputFeatureIndex,
120  size_t numberOfCategories) DAAL_C11_OVERRIDE
121  {
122  return impl::setNumberOfCategories(outputFeatureIndex, numberOfCategories);
123  }
124 
125  virtual services::Status setCategoricalDictionary(size_t outputFeatureIndex,
126  const CategoricalFeatureDictionaryPtr &dictionary) DAAL_C11_OVERRIDE
127  {
128  return impl::setCategoricalDictionary(outputFeatureIndex, dictionary);
129  }
130 };
131 
136 class ContextImpl : public Context,
137  public modifiers::internal::Context<InputFeatureInfo,
138  OutputFeatureInfo>
139 {
140 private:
141  typedef modifiers::internal::Context<InputFeatureInfo,
142  OutputFeatureInfo> impl;
143 
144 public:
145  ContextImpl() { }
146 
147  explicit ContextImpl(const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
148  services::Status *status = NULL) :
149  impl(pickedInputFeatures, status) { }
150 
151  virtual size_t getNumberOfTokens() const DAAL_C11_OVERRIDE
152  {
153  return impl::getNumberOfInputFeatures();
154  }
155 
156  virtual services::StringView getToken(size_t index) const DAAL_C11_OVERRIDE
157  {
158  return impl::getPickedInputFeature(index).getToken();
159  }
160 
161  virtual services::BufferView<DAAL_DATA_TYPE> getOutputBuffer() const DAAL_C11_OVERRIDE
162  {
163  return impl::getOutputBuffer();
164  }
165 };
166 
171 class ModifiersManager : public modifiers::internal::ModifiersManager<FeatureModifierIface,
172  ConfigImpl, ContextImpl>
173 {
174 public:
175  static services::SharedPtr<ModifiersManager> create(services::Status *status = NULL)
176  {
177  return services::internal::wrapSharedAndTryThrow<ModifiersManager>(new ModifiersManager(), status);
178  }
179 
180  void setToken(size_t tokenIndex, const services::StringView &token)
181  {
182  getBinder().getInputFeatureInfo(tokenIndex).setToken(token);
183  }
184 
185  services::Status prepare(const CSVFeaturesInfo &featuresInfo)
186  {
187  services::Status status;
188 
189  const features::FeatureIdMappingIfacePtr featureMapping = createFeatureMapping(featuresInfo, &status);
190  DAAL_CHECK_STATUS_VAR(status);
191 
192  const services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
193  createInputFeaturesInfo(featuresInfo, &status);
194  DAAL_CHECK_STATUS_VAR(status);
195 
196  status |= getBinder().bind(featureMapping, inputFeaturesInfo);
197 
198  return status;
199  }
200 
201 private:
202  services::internal::CollectionPtr<InputFeatureInfo> createInputFeaturesInfo(const CSVFeaturesInfo &featuresInfo,
203  services::Status *status = NULL)
204  {
205  const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
206 
207  services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
208  services::internal::HeapAllocatableCollection<InputFeatureInfo>::create(numberOfFeatures);
209  if (!inputFeaturesInfo)
210  {
211  services::internal::tryAssignStatusAndThrow(status, services::ErrorMemoryAllocationFailed);
212  return inputFeaturesInfo;
213  }
214 
215  for (size_t i = 0; i < numberOfFeatures; i++)
216  {
217  features::FeatureType fType = featuresInfo.getDetectedFeatureType(i);
218  (*inputFeaturesInfo)[i] = InputFeatureInfo(fType);
219  }
220 
221  return inputFeaturesInfo;
222  }
223 
224  features::FeatureIdMappingIfacePtr createFeatureMapping(const CSVFeaturesInfo &featuresInfo,
225  services::Status *status = NULL)
226  {
227  const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
228 
229  services::Status localStatus;
230  const features::internal::FeatureIdDefaultMappingPtr mapping =
231  features::internal::FeatureIdDefaultMapping::create(numberOfFeatures, &localStatus);
232  if (!localStatus)
233  {
234  services::internal::tryAssignStatusAndThrow(status, localStatus);
235  return mapping;
236  }
237 
238  if (featuresInfo.areFeatureNamesAvailable())
239  {
240  for (size_t i = 0; i < numberOfFeatures; ++i)
241  {
242  mapping->setFeatureKey(i, featuresInfo.getFeatureName(i));
243  }
244  }
245 
246  return mapping;
247  }
248 
249 private:
250  ModifiersManager() { }
251 };
252 typedef services::SharedPtr<ModifiersManager> ModifiersManagerPtr;
253 
254 } // namespace internal
255 } // namespace csv
256 } // namespace modifiers
257 } // namespace data_management
258 } // namespace daal
259 
260 #endif
daal::services::internal::HeapAllocatableCollection
Wrapper for services::Collection that allocates and deallocates memory using internal new/delete oper...
Definition: internal/collection.h:92
daal
Definition: algorithm_base_common.h:31
daal::data_management::modifiers::internal::Config
Base class for modifier configuration.
Definition: data_management/data_source/modifiers/internal/engine.h:100
daal::data_management::modifiers::csv::internal::ConfigImpl
Internal implementation of feature modifier configuration.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:83
daal::data_management::modifiers::csv::internal::ModifiersManager
Class that holds modifiers and implements logic of modifiers applying flow.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:171
daal::services::internal::CollectionPtr
Shared pointer to the Collection object.
Definition: internal/collection.h:136
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:146
daal::data_management::modifiers::csv::internal::InputFeatureInfo
Class represents configuration of single input feature.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:45
daal::data_management::modifiers::internal::OutputFeatureInfo
Base class represents output feature for modifier, contains information about single output feature...
Definition: data_management/data_source/modifiers/internal/engine.h:41
daal::data_management::modifiers::internal::Context
Base class for modifier context.
Definition: data_management/data_source/modifiers/internal/engine.h:214
daal::data_management::modifiers::internal::InputFeatureInfo
Base class represents input feature for modifier, contains information about single input feature...
Definition: data_management/data_source/modifiers/internal/engine.h:35
daal::data_management::modifiers::internal::ModifiersManager
Class that holds modifiers and implements logic of modifiers applying flow.
Definition: data_management/data_source/modifiers/internal/engine.h:449
daal::data_management::modifiers::csv::internal::ContextImpl
Internal implementation of feature modifier context.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:136
daal::data_management::modifiers::csv::internal::OutputFeatureInfo
Class represents configuration of single output feature.
Definition: data_management/data_source/modifiers/csv/internal/engine.h:77

For more complete information about compiler optimizations, see our Optimization Notice.