[Erp5-report] r31296 kazuhiko - /erp5/trunk/products/ERP5/mixin/rule.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Dec 14 18:20:37 CET 2009
Author: kazuhiko
Date: Mon Dec 14 18:20:36 2009
New Revision: 31296
URL: http://svn.erp5.org?rev=31296&view=rev
Log:
try to match by 'order' value first, and then try to match by using divergence testers.
Modified:
erp5/trunk/products/ERP5/mixin/rule.py
Modified: erp5/trunk/products/ERP5/mixin/rule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/mixin/rule.py?rev=31296&r1=31295&r2=31296&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/mixin/rule.py [utf8] (original)
+++ erp5/trunk/products/ERP5/mixin/rule.py [utf8] Mon Dec 14 18:20:36 2009
@@ -157,6 +157,25 @@
self._getMovementGeneratorContext(context),
movement_list=self._getMovementGeneratorMovementList(), rounding=rounding)
+ # Prepare a mapping between prevision and decision
+ # The prevision_to_decision_map is a list of tuples
+ # of the form (prevision_movement_dict, list of decision_movement)
+ prevision_to_decision_map = []
+
+ # XXX First we try to match by 'order' value if possible.
+ matched_prevision_list = []
+ matched_decision_list = []
+ prevision_order_dict = dict(
+ (x.getOrder(), x) for x in prevision_movement_list)
+ for decision_movement in decision_movement_list:
+ prevision_movement = prevision_order_dict.get(
+ decision_movement.getOrder(), None)
+ if prevision_movement is not None:
+ prevision_to_decision_map.append(
+ (prevision_movement, [decision_movement]))
+ matched_prevision_list.append(prevision_movement)
+ matched_decision_list.append(decision_movement)
+
# Get divergence testers
tester_list = self._getMatchingTesterList()
if len(tester_list) == 0:
@@ -165,6 +184,8 @@
# Create small groups of movements per hash keys
decision_movement_dict = {}
for movement in decision_movement_list:
+ if movement in matched_decision_list:
+ continue
tester_key = []
for tester in tester_list:
if tester.test(movement):
@@ -175,6 +196,8 @@
decision_movement_dict.setdefault(tester_key, []).append(movement)
prevision_movement_dict = {}
for movement in prevision_movement_list:
+ if movement in matched_prevision_list:
+ continue
tester_key = []
for tester in tester_list:
if tester.test(movement):
@@ -183,11 +206,6 @@
tester_key.append(None)
tester_key = tuple(tester_key)
prevision_movement_dict.setdefault(tester_key, []).append(movement)
-
- # Prepare a mapping between prevision and decision
- # The prevision_to_decision_map is a list of tuples
- # of the form (prevision_movement_dict, list of decision_movement)
- prevision_to_decision_map = []
# First find out all existing (decision) movements which belong to no group
no_group_list = []
@@ -217,6 +235,7 @@
map_list = []
for decision_movement in decision_movement_dict.get(tester_key, ()):
if _compare(tester_list, prevision_movement, decision_movement):
+ # XXX is it OK to have more than 2 decision_movements?
map_list.append(decision_movement)
prevision_to_decision_map.append((prevision_movement, map_list))
More information about the Erp5-report
mailing list