CalebPaste123

trial sieve processor

Jul 29th, 2023 (edited)
1,005
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.38 KB | None | 0 0
  1. # PREPARATION
  2. import argparse
  3. import math
  4. parser = argparse.ArgumentParser(
  5.     prog="tsproc.py",
  6.     description="Processes test sieve results, and returns the results of the test sieve.",
  7.     epilog="Hopefully I save you some time when test sieving."
  8.            "Also, credits for Stack Overflow for some of the code I stole."
  9. )
  10. parser.add_argument(
  11.     '-b',
  12.     "--basic",
  13.     help="returns only relations found",
  14.     action="store_true"
  15. )
  16. parser.add_argument(
  17.     '-v',
  18.     "--verbose",
  19.     help="includes extra process logs",
  20.     action="store_true"
  21. )
  22. parser.add_argument(
  23.     '-d',
  24.     "--debug",
  25.     help="shows variable info, as well as verbose information",
  26.     action="store_true"
  27. )
  28. parser.add_argument(
  29.     '-i',
  30.     "--input",
  31.     type=str,
  32.     help="file containing ggnfs output(s) (required, isn't it obvious?)",
  33.     required=True
  34. )
  35. parser.add_argument(
  36.     '-l',
  37.     "--length",
  38.     type=int,
  39.     help="amount of q in test sieve block (required for normalized rel calculation)",
  40.     required=True
  41. )
  42.  
  43. args = parser.parse_args()
  44. def verboseprint(arg): print(arg) if args.verbose or args.debug else ()
  45. def debugprint(arg): print(arg) if args.debug else ()
  46.  
  47. # PARAMETER GRABBING
  48.  
  49. # index lines of input file to a list
  50. print("processing file...")
  51. output = open(args.input, 'r')
  52. filelines = output.readlines()
  53. verboseprint("finished reading file")
  54. debugprint(("file lines var:", filelines))
  55.  
  56. # sanitization part 1 | isolates result lines
  57. verboseprint("isolating result lines...")
  58. def isolate1(detectstring):
  59.     outputs = [x for x in filelines if detectstring in x]
  60.     return outputs
  61.  
  62. rellines = isolate1("need at least")
  63. debugprint(("rellines list:", rellines))
  64.  
  65. qlines = isolate1("at user specified")
  66. debugprint(("qlines list:", qlines))
  67.  
  68. speedlines = isolate1("sec/rel")
  69. debugprint(("speedlines var:", speedlines))
  70.  
  71. specialqlines = isolate1("special q")
  72. debugprint(("specialqlines var:", specialqlines))
  73.  
  74. threads = int(len(speedlines) / len(qlines))
  75.  
  76. # sanitizing part 2 | isolates variables
  77. verboseprint("isolating results from lines...")
  78.  
  79. def isolate2(listinput, range1, range2):  # function to isolate int values from line
  80.     data = []
  81.     for x in range(len(listinput)):
  82.         currentline = listinput[x]
  83.         datalineunfiltered = (currentline[range1:range2])
  84.         debugprint(("index var:", datalineunfiltered))
  85.         datalineunfiltered = datalineunfiltered.strip()
  86.         dataline = ""
  87.         for y in datalineunfiltered:
  88.             if y.isnumeric():
  89.                 dataline += y
  90.         data.append(int(dataline))
  91.         x += 1
  92.     return data
  93.  
  94. relationdata = isolate2(rellines, 11, 17)
  95. debugprint(("relation data:", relationdata))
  96.  
  97. qdata = isolate2(qlines, 55, -1)
  98. debugprint(("starting Q data:", qdata))
  99.  
  100. speeddata = isolate2(speedlines, 31, 39)
  101. debugprint(("speed data:", speeddata))
  102.  
  103. specialqdata = isolate2(specialqlines, 0, 3)
  104. debugprint(("special Q data:", specialqdata))
  105.  
  106. # RESULTA
  107. print("file processing complete, calculating results...")
  108.  
  109. verboseprint("averaging speed...")
  110. avgspeeddata = []
  111. x = 0
  112. while x < len(speeddata):  # averages speed data to average per block
  113.     y = x
  114.     debugprint(x)
  115.     avgspeed = sum(speeddata[y] for y in range(x, x + threads))/threads
  116.     debugprint(("speed average:", avgspeed))
  117.     avgspeeddata.append(avgspeed)
  118.     x += threads
  119.  
  120. verboseprint("summing special q...")
  121. sumqdata = []
  122. x = 0
  123. while x < len(specialqdata):  # sums special q into total per block
  124.     y = x
  125.     debugprint(x)
  126.     sumq = sum(specialqdata[y] for y in range(x, x + threads))
  127.     debugprint(("special q sum:", sumq))
  128.     sumqdata.append(sumq)
  129.     x += threads
  130.  
  131. verboseprint("calculating normalized relations...")
  132. normreldata = []
  133. x = 0
  134. while x < len(relationdata):  # gets normalized relation values
  135.     debugprint(x)
  136.     normrel = relationdata[x]*args.length / (sumqdata[x] * math.log(qdata[x]))
  137.     debugprint(("normalized relations:", normrel))
  138.     normreldata.append(normrel)
  139.     x += 1
  140.  
  141. if not args.basic:
  142.     for x in range(len(normreldata)):
  143.         print("Q=", qdata[x],
  144.               "| yield / normalized yield:", relationdata[x], "/", round(normreldata[x]),
  145.               "| speed (ms/rel):", avgspeeddata[x])
  146. else:
  147.     for x in range(len(normreldata)):
  148.         print("Q=", qdata[x],
  149.             "| yield / normalized yield:", relationdata[x], "/", round(normreldata[x]))
  150.  
Advertisement
Add Comment
Please, Sign In to add comment