CMS 3D CMS Logo

diffProv.py
Go to the documentation of this file.
1 from __future__ import print_function
2 
3 from builtins import range
4 class difference :
5 
6  def __init__(self,v):
7  self.verbose = v
8  self._diffprocess=[]
9  self._sameprocess=()
10  def list_diff(self,aList1, aList2, string1, string2):
11  "Searches for differences between two modules of the same kind"
12  differences=[]
13  for i in range(2,len(aList1)):
14  for j in range(2,len(aList2)):
15  if (i==j) and (aList1[i]!=aList2[j]):
16  if aList1[i][:(aList1[i].index('=')+1)] == aList2[j][:(aList2[j].index('=')+1)]:
17  if self.verbose==str(2) or self.verbose==str(1):
18  str1 = aList1[i][2:aList1[i].index('=')+1] + aList1[i][aList1[i].index('=')+1:]+' ['+ string1+']'
19  str2 = len(aList1[i][2:aList1[i].index('=')+1])*' '+aList2[j][aList2[j].index('=')+1:]+' ['+string2+']'
20  print(str1,'\n',str2,'\n')
21  differences.append(str1)
22  differences.append(str2)
23 
24  return differences
25 
26  def module_diff(self,module1,module2, string1, string2):
27  "Searches for modules which are in both the files but whose parameters are setted at different values"
28  print('\nList of modules present in both the files with different parameter values\n')
29  for i in module1.keys():
30  for j in module2.keys():
31  if (i==j) and (i=='Processing'):
32  list= module1[i]
33  for k in range(len(list)):
34  process1=module1[i][k].split()
35  process2=module2[i][k].split()
36  if process1[0]!= process2[0]:
37  key1=process1[0]
38  key2=process2[0]
39  self._diffprocess.append( (key1,key2) )
40 
41  if len(self._diffprocess)>1:
42  print('Differences in the processing history')
43  for l,m in self._diffprocess:
44  print(l+' ['+string1+']')
45  print(m+' ['+string2+']')
46  print('')
47  if len(self._diffprocess)==1:
48  self._sameprocess=self._diffprocess[0]
49 
50  elif ( (i==j)or (i,j)==self._sameprocess ) and (i!='Processing'):
51  for name1,value1 in module1[i]:
52  for name2,value2 in module2[j]:
53  if (name1==name2) and (value1[1:]!=value2[1:]):
54  print('Process: '+'"'+i+'"'+'\n'+'Module: '+'"'+name1+'"'+'\n')
55  d=difference(self.verbose)
56  d.firstvalue=value1
57  d.secondvalue=value2
58  self.list_diff(d.firstvalue,d.secondvalue, string1, string2)
59 
60  self.onefilemodules(module1,module2,'first')
61  self.onefilemodules(module2,module1,'second')
62 
63 
64  def onefilemodules(self,module1,module2,string):
65  "Searches for modules present only in one of the two files"
66  print('\nModules run only on the '+string+ ' edmfile:'+'\n')
67  for i in module1.keys():
68  labelList=[]
69  if (i not in module2.keys())and (i not in self._sameprocess):
70  print('\n Process '+i+' not run on edmfile '+string +'\n')
71  elif i!='Processing':
72  k=i
73  if i in self._sameprocess:
74  if i==self._sameprocess[0]:
75  k= self._sameprocess[1]
76  elif i==self._sameprocess[1]:
77  k= self._sameprocess[0]
78  labelList2=[module[0] for module in module2[k]]
79  labelList1=[module[0] for module in module1[i]]
80  for name, value in module1[i] :
81  if (name not in labelList2):
82  print('Process: '+'"'+i+'"'+'\n'+'Module: '+'"'+name+'"')
83  if self.verbose==str(2):
84  for k in value[1:]:
85  print(k)
86 
87 
88 
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
python.diffProv.difference.onefilemodules
def onefilemodules(self, module1, module2, string)
Definition: diffProv.py:64
python.diffProv.difference.list_diff
def list_diff(self, aList1, aList2, string1, string2)
Definition: diffProv.py:10
cms::dd::split
std::vector< std::string_view > split(std::string_view, const char *)
python.diffProv.difference._sameprocess
_sameprocess
Definition: diffProv.py:9
str
#define str(s)
Definition: TestProcessor.cc:48
python.diffProv.difference
Definition: diffProv.py:4
python.diffProv.difference.verbose
verbose
Definition: diffProv.py:7
mps_setup.append
append
Definition: mps_setup.py:85
edm::print
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
python.diffProv.difference.module_diff
def module_diff(self, module1, module2, string1, string2)
Definition: diffProv.py:26
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
python.diffProv.difference._diffprocess
_diffprocess
Definition: diffProv.py:8
python.diffProv.difference.__init__
def __init__(self, v)
Definition: diffProv.py:6