# # samechek.py -- Simple program to superficially check certain equivalences. # Written May 22 2007 and placed in Public Domain. # # Usage: # from samechek import * # samechek('uusimmatp.txt') # (for example...) import os import re def readbfile_as_oneline(Anum): '''Open b-file for reading and construct a string from it.''' filename = "b" + Anum[1:] + ".txt" infp = open(filename,'r') linepat = re.compile(r'^([0-9]+) ([0-9]+)') terms = "" for line in infp.xreadlines(): m = linepat.match(line) if(m): ind = m.group(1) # val = m.group(2) # terms = terms + "," + val else: print "SKIPPING THE FOLLOWING LINE in " + filename + ": " + line + "\n" return(terms[1:]) # Skip the first comma. def samechek(filename): '''Opens file "filename" for reading and some checking...''' infp = open(filename,'r') # try: # lastdot = filename.rindex('.') # outfilename = filename[:lastdot] + ".htm" # except ValueError: # There were no dot in the filename # outfilename = filename + ".htm" # outfp = open(outfilename,'w') # outfp.write("Check " + filename +"
\n")

  linepat = re.compile(r'^(..) (A[0-9]+) ')

  prev_key = ""
  prev_anum = ""
  prev_terms = ""

  for line in infp.xreadlines(): 
    m = linepat.match(line)
    if(m):
      key  = m.group(1) #
      anum = m.group(2) #
      terms = m.string[m.end(2)+1:-1] # The rest, sans newline


      if("" == prev_anum):
        huihai = "slapstick"

      elif(anum == prev_anum):
        if(len(terms) < len(prev_terms)):
          print ("ERROR: Length of terms on line " + key + anum
                + " is less than length of terms on line " + prev_key + prev_anum
                + "\n")
        elif(terms[0:len(prev_terms)] == prev_terms):
          print ("OK: The terms on line " + prev_key + prev_anum
                + "  match the beginning of the terms on line " + key + anum
                + "\n")
        else:
          print ("ERROR: The terms on line " + prev_key + prev_anum
                + "  DO NOT match the beginning of the terms on line " + key + anum
                + "\n")
          print ("prev_terms=" + prev_terms + "\n")
          print ("terms[0:len(prev_terms)]=" + terms[0:len(prev_terms)] + "\n")


      else: # i.e. if(anum != prev_anum):
        print "ERROR: prev_anum != anum (" + prev_key + prev_anum + " != " + key + anum + ")\n"


      if("CC" == key):
        bfile_terms = readbfile_as_oneline(anum)
        if(len(bfile_terms) > len(terms)):
          print ("ERROR: Length of terms (" + str(len(terms)) + ") on line " + key + anum
                + " is less than the length of terms constructed from b-file (= " + str(len(bfile_terms))
                + ")\n")
          print "terms=" + terms + "\n"
          print "bfile_terms=" + bfile_terms + "\n"
        elif(bfile_terms == terms):
          print ("OK: The terms on line " + key + anum
                + "  match the terms in b-file"
                + "(" + str(len(terms)) + " = " + str(len(bfile_terms)) + ")"
                + "\n")
#         print "terms=" + terms + "\n"
#         print "bfile_terms=" + bfile_terms + "\n"

        elif(terms[0:len(bfile_terms)] == bfile_terms):
          print ("OK: The beginning of the terms on line " + key + anum
                + "  match the terms in b-file"
                + "\n")
#         print "terms=" + terms + "\n"
#         print "bfile_terms=" + bfile_terms + "\n"

        else:
          print ("ERROR: The terms on line " + key + anum
                + "  DO NOT match the terms in b-file!"
                + "\n")
          print ("terms=" + terms + "\n")
          print ("bfile_terms=" + bfile_terms + "\n")


      prev_key = key
      prev_anum = anum
      prev_terms = terms
    else:
      prev_key = ""
      prev_anum = ""
      prev_terms = ""


# This module ends here.