Commit e571a68b authored by Ivan Tyagov's avatar Ivan Tyagov

Machine learning

See merge request nexedi/wendelin!55
parents 9fa9c251 fecb8e7e
# -*- 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
<?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>
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
</item> </item>
<item> <item>
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>Transformation</string> </value> <value> <string>DataTransformation</string> </value>
</item> </item>
<item> <item>
<key> <string>type_interface</string> </key> <key> <string>type_interface</string> </key>
......
...@@ -87,6 +87,7 @@ ...@@ -87,6 +87,7 @@
<string>my_title</string> <string>my_title</string>
<string>my_reference</string> <string>my_reference</string>
<string>my_resource_title</string> <string>my_resource_title</string>
<string>my_variation_category_list</string>
<string>my_template_transformation_title_list</string> <string>my_template_transformation_title_list</string>
</list> </list>
</value> </value>
......
<?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>
...@@ -325,4 +325,20 @@ class Test(ERP5TypeTestCase): ...@@ -325,4 +325,20 @@ class Test(ERP5TypeTestCase):
self.assertSameSet(data_stream_2.getRecursivePredecessorValueList(), \ self.assertSameSet(data_stream_2.getRecursivePredecessorValueList(), \
[data_stream_1]) [data_stream_1])
self.assertSameSet(data_stream_5.getRecursivePredecessorValueList(), \ self.assertSameSet(data_stream_5.getRecursivePredecessorValueList(), \
[data_stream_4, data_stream_3, data_stream_2, data_stream_1]) [data_stream_4, data_stream_3, data_stream_2, data_stream_1])
\ No newline at end of file
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
...@@ -4,4 +4,5 @@ document.erp5.DataArray ...@@ -4,4 +4,5 @@ document.erp5.DataArray
document.erp5.DataArrayLine document.erp5.DataArrayLine
document.erp5.DataArrayLineExistenceConstraint document.erp5.DataArrayLineExistenceConstraint
document.erp5.DataBucketStream document.erp5.DataBucketStream
document.erp5.DataStream document.erp5.DataStream
\ No newline at end of file document.erp5.DataTransformation
\ No newline at end of file
...@@ -57,6 +57,8 @@ sz = np.array([('2017-07-12T12:30:20',)], dtype=[('date', 'M8[s]')]) ...@@ -57,6 +57,8 @@ sz = np.array([('2017-07-12T12:30:20',)], dtype=[('date', 'M8[s]')])
allow_type(type(sz[0]['date'])) allow_type(type(sz[0]['date']))
allow_module('sklearn') allow_module('sklearn')
allow_module('sklearn.model_selection')
allow_module('sklearn.linear_model')
allow_module('scipy') allow_module('scipy')
allow_module('wendelin.bigarray.array_zodb') allow_module('wendelin.bigarray.array_zodb')
...@@ -76,6 +78,8 @@ allow_type(pd.Index) ...@@ -76,6 +78,8 @@ allow_type(pd.Index)
allow_type(pd.core.groupby.DataFrameGroupBy) allow_type(pd.core.groupby.DataFrameGroupBy)
allow_class(pd.DataFrame) allow_class(pd.DataFrame)
import sklearn.linear_model
allow_class(sklearn.linear_model.LinearRegression)
# Modify 'safetype' dict in full_write_guard function # Modify 'safetype' dict in full_write_guard function
# of RestrictedPython (closure) directly To allow # of RestrictedPython (closure) directly To allow
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment