import re,sys,collections,json

def summary(path):
 result=collections.defaultdict(list)
 for op in re.split(r'(?=^Some\(OperationId)',open(path).read(),flags=re.M):
  if not op:continue
  h=op.splitlines()[0];src=int(re.search(r'OperationId\((\d+)\)',h).group(1))
  kind=h.split(')) ',1)[1].split(' {',1)[0]
  vals=[]
  for v in op.splitlines()[1:]:
   shape=re.search(r'TensorShape\(([^)]+)\)',v).group(1)
   precision=re.search(r'precision: (.*?), layout:',v).group(1)
   order=re.search(r'order: (.*?), tiling:',v).group(1)
   tiles=re.search(r'tile_count: (\d+)',v).group(1)
   vals.append(f'{shape}/{precision}/{order}/{tiles}')
  price=re.search(r'ProgramCycles \{[^}]*\}',h)
  result[src].append((kind, vals,price.group(0) if price else None))
 return result
if __name__=='__main__':
 a,b=map(summary,sys.argv[1:3])
 for op in a:
  if a[op]!=b[op]:
   print('OPERATION',op)
   print('OLD',json.dumps(a[op]));print('NEW',json.dumps(b[op]))
