diff --git a/bt5/erp5_wendelin/DocumentTemplateItem/portal_components/document.erp5.DataTransformation.py b/bt5/erp5_wendelin/DocumentTemplateItem/portal_components/document.erp5.DataTransformation.py new file mode 100644 index 0000000000000000000000000000000000000000..76fa52b587e0214eb72aa611332d8ecce3727ddb --- /dev/null +++ b/bt5/erp5_wendelin/DocumentTemplateItem/portal_components/document.erp5.DataTransformation.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (c) 2020 Nexedi SA and Contributors. All Rights Reserved. +# Klaus Wölfel <klaus@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## +from erp5.component.document.Amount import Amount +from erp5.component.document.Transformation import Transformation + + +class DataTransformation(Transformation): + """ + Contains a list of transformed data operations and the data operation used + """ + meta_type = 'ERP5 Data Transformation' + portal_type = 'Data Transformation' + + # Use Amount implementation of *VariationCategoryList + # instead of the one VariatedMixin used by Transformation so that we can set Variation + # on Initial Product + getVariationBaseCategoryList = Amount.getVariationBaseCategoryList + getVariationBaseCategoryItemList = Amount.getVariationBaseCategoryItemList + getVariationCategoryList = Amount.getVariationCategoryList + getVariationCategoryItemList = Amount.getVariationCategoryItemList + getVariationRangeBaseCategoryList = Amount.getVariationRangeBaseCategoryList + getVariationRangeCategoryList = Amount.getVariationRangeCategoryList + getVariationRangeCategoryItemList = Amount.getVariationRangeCategoryItemList + setVariationBaseCategoryList = Amount.setVariationBaseCategoryList + setVariationCategoryList = Amount.setVariationCategoryList + _setVariationCategoryList = Amount._setVariationCategoryList diff --git a/bt5/erp5_wendelin/DocumentTemplateItem/portal_components/document.erp5.DataTransformation.xml b/bt5/erp5_wendelin/DocumentTemplateItem/portal_components/document.erp5.DataTransformation.xml new file mode 100644 index 0000000000000000000000000000000000000000..338a7c896c26e9abd3a0caeab36355831e816e0f --- /dev/null +++ b/bt5/erp5_wendelin/DocumentTemplateItem/portal_components/document.erp5.DataTransformation.xml @@ -0,0 +1,131 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Document Component" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_recorded_property_dict</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>DataTransformation</string> </value> + </item> + <item> + <key> <string>default_source_reference</string> </key> + <value> <string>Products.ERP5.Document.Transformation</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>document.erp5.DataTransformation</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Document Component</string> </value> + </item> + <item> + <key> <string>sid</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content_error_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>text_content_warning_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>erp5</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary/> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>component_validation_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>validate</string> </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>validated</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_wendelin/PortalTypeTemplateItem/portal_types/Data%20Transformation.xml b/bt5/erp5_wendelin/PortalTypeTemplateItem/portal_types/Data%20Transformation.xml index bcaca8f27d314c3647937665dfcd4fdb723feac3..e13dd00e62de062d760c5be625b6b98c347343b9 100644 --- a/bt5/erp5_wendelin/PortalTypeTemplateItem/portal_types/Data%20Transformation.xml +++ b/bt5/erp5_wendelin/PortalTypeTemplateItem/portal_types/Data%20Transformation.xml @@ -53,7 +53,7 @@ </item> <item> <key> <string>type_class</string> </key> - <value> <string>Transformation</string> </value> + <value> <string>DataTransformation</string> </value> </item> <item> <key> <string>type_interface</string> </key> diff --git a/bt5/erp5_wendelin/SkinTemplateItem/portal_skins/erp5_wendelin/DataTransformation_view.xml b/bt5/erp5_wendelin/SkinTemplateItem/portal_skins/erp5_wendelin/DataTransformation_view.xml index a0b6f7eb92ea4f8be6f186d7814e8bac7643fb95..464225cc3bdb023a2d33d422158b93072541de1d 100644 --- a/bt5/erp5_wendelin/SkinTemplateItem/portal_skins/erp5_wendelin/DataTransformation_view.xml +++ b/bt5/erp5_wendelin/SkinTemplateItem/portal_skins/erp5_wendelin/DataTransformation_view.xml @@ -87,6 +87,7 @@ <string>my_title</string> <string>my_reference</string> <string>my_resource_title</string> + <string>my_variation_category_list</string> <string>my_template_transformation_title_list</string> </list> </value> diff --git a/bt5/erp5_wendelin/SkinTemplateItem/portal_skins/erp5_wendelin/DataTransformation_view/my_variation_category_list.xml b/bt5/erp5_wendelin/SkinTemplateItem/portal_skins/erp5_wendelin/DataTransformation_view/my_variation_category_list.xml new file mode 100644 index 0000000000000000000000000000000000000000..78047ecfdb081b25d0b7dc40cff37ad8ad436397 --- /dev/null +++ b/bt5/erp5_wendelin/SkinTemplateItem/portal_skins/erp5_wendelin/DataTransformation_view/my_variation_category_list.xml @@ -0,0 +1,96 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ProxyField" module="Products.ERP5Form.ProxyField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>delegated_list</string> </key> + <value> + <list> + <string>title</string> + </list> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>my_variation_category_list</string> </value> + </item> + <item> + <key> <string>message_values</string> </key> + <value> + <dictionary> + <item> + <key> <string>external_validator_failed</string> </key> + <value> <string>The input failed the external validator.</string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>overrides</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>tales</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>values</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string>my_variation_category_list</string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string>TransformationTransformedResource_viewFieldLibrary</string> </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string>Click to edit the target</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Initial Product Variation</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_wendelin/TestTemplateItem/portal_components/test.erp5.testWendelin.py b/bt5/erp5_wendelin/TestTemplateItem/portal_components/test.erp5.testWendelin.py index 7b29e84f05a2ebbaed5229dacf2d0e8e8b08d45d..4f492a22e198bd54c43a361bac95a2ddb96dddb1 100644 --- a/bt5/erp5_wendelin/TestTemplateItem/portal_components/test.erp5.testWendelin.py +++ b/bt5/erp5_wendelin/TestTemplateItem/portal_components/test.erp5.testWendelin.py @@ -325,4 +325,20 @@ class Test(ERP5TypeTestCase): self.assertSameSet(data_stream_2.getRecursivePredecessorValueList(), \ [data_stream_1]) self.assertSameSet(data_stream_5.getRecursivePredecessorValueList(), \ - [data_stream_4, data_stream_3, data_stream_2, data_stream_1]) \ No newline at end of file + [data_stream_4, data_stream_3, data_stream_2, data_stream_1]) + + def test_08_ImportSklearn(self): + """ + Test import of Scikit-learn and minimal example of usage. + """ + + from sklearn.linear_model import LinearRegression + X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) + + # y = 1 * x_0 + 2 * x_1 + 3 + y = np.dot(X, np.array([1, 2])) + 3 + + reg = LinearRegression().fit(X, y) + predicted = reg.predict(np.array([[4, 10]])) + self.assertEqual(predicted.all(),np.array([27.]).all()) + \ No newline at end of file diff --git a/bt5/erp5_wendelin/bt/template_document_id_list b/bt5/erp5_wendelin/bt/template_document_id_list index efde4cd739b9a04c3b385324931d64e9e9924a08..faa5e5a167bb01a1e32a0565e8f308d47cf991bb 100644 --- a/bt5/erp5_wendelin/bt/template_document_id_list +++ b/bt5/erp5_wendelin/bt/template_document_id_list @@ -4,4 +4,5 @@ document.erp5.DataArray document.erp5.DataArrayLine document.erp5.DataArrayLineExistenceConstraint document.erp5.DataBucketStream -document.erp5.DataStream \ No newline at end of file +document.erp5.DataStream +document.erp5.DataTransformation \ No newline at end of file diff --git a/product/Wendelin/__init__.py b/product/Wendelin/__init__.py index 569359cf0bef5a0834587510c57d87f86c44182b..2f56087941ccfa17adce1c071ed4cc7ebe3eae00 100644 --- a/product/Wendelin/__init__.py +++ b/product/Wendelin/__init__.py @@ -57,6 +57,8 @@ sz = np.array([('2017-07-12T12:30:20',)], dtype=[('date', 'M8[s]')]) allow_type(type(sz[0]['date'])) allow_module('sklearn') +allow_module('sklearn.model_selection') +allow_module('sklearn.linear_model') allow_module('scipy') allow_module('wendelin.bigarray.array_zodb') @@ -76,6 +78,8 @@ allow_type(pd.Index) allow_type(pd.core.groupby.DataFrameGroupBy) allow_class(pd.DataFrame) +import sklearn.linear_model +allow_class(sklearn.linear_model.LinearRegression) # Modify 'safetype' dict in full_write_guard function # of RestrictedPython (closure) directly To allow