def visit_Assign(self, node): err.error("assigns in constraints?!!") if len(node.targets) != 1: err.error("unsupported[translateToZ3.py :: exprVisitor :: visit_Assign]:node.targets list has more than 1 elements") lhs = self.visit(node.targets[0]) rhs = self.visit(node.value) return lhs+":="+rhs
def visit_UnaryOp(self, node): if type(node.op) is ast.UAdd: return (self.visit(node.operand)) elif type(node.op) is ast.USub: return (-self.visit(node.operand)) else: err.error("translateToZ3.py::translatePythonExprToZ3Visitor::visit_UnaryOp unhandled operator" + ast.dump(node.op))
def getZ3VarList(varList): global varDictZ3 z3VarList = [] for v in varList: if v.typStr == "R": try: if v.subTypStr == 'V': z3Var = z3.RealVector(v.nameStr, v.dim) else: raise err.Fatal('unhandled subtype: {}'.format(v.subTypStr)) # if subtype is not present, default to regular 'Real' except AttributeError: z3Var = z3.Real(v.nameStr) elif v.typStr == "B": z3Var = z3.Bool(v.nameStr) elif v.typStr == "I": try: if v.subTypStr == 'V': z3Var = z3.IntVector(v.nameStr, v.dim) else: raise err.Fatal('unhandled subtype: {}'.format(v.subTypStr)) except AttributeError: z3Var = z3.Int(v.nameStr) # type X: don't care..treat it as anything, lets say Real elif v.typStr == "X": z3Var = z3.Real(v.nameStr) else: err.error("translateToZ3.py :: getOutputVars: unhandled type - " + v.typStr) varDictZ3[v.nameStr] = z3Var z3VarList.append(z3Var) return z3VarList
def get(self,ident): '''Gets an identifier from a context, exploring from the top to the bottom''' for i in range(len(self.contexts)-1,-1,-1): try: return self.contexts[i].get(ident) except: pass err.error(ident+ " is undefined",self)
def visit_BinOp(self, node): if type(node.op) is ast.Add: return (self.visit(node.left) + self.visit(node.right)) elif type(node.op) is ast.Sub: return (self.visit(node.left) - self.visit(node.right)) elif type(node.op) is ast.Mult: return (self.visit(node.left) * self.visit(node.right)) elif type(node.op) is ast.Div: return (self.visit(node.left) / self.visit(node.right)) else: err.error("translateToZ3.py::translatePythonExprToZ3Visitor::visit_BinOp unhandled operator: " + ast.dump(node.op))
def visit_Compare(self, node): self.visit(node.left) if len(node.ops) != 1: err.error("unsupported[translateToZ3.py :: exprVisitor :: visit_Compare]: node.ops list has more than 1 element") if len(node.comparators) != 1: err.error("unsupported[translateToZ3.py :: exprVisitor :: visit_Compare]: node.comparators list has more than 1 element") op = node.ops[0] rightOperand = node.comparators[0] if type(op) is ast.Lt: return (self.visit(node.left) < self.visit(rightOperand)) if type(op) is ast.Gt: return (self.visit(node.left) > self.visit(rightOperand)) if type(op) is ast.GtE: return (self.visit(node.left) >= self.visit(rightOperand)) if type(op) is ast.LtE: return (self.visit(node.left) <= self.visit(rightOperand)) if type(op) is ast.Eq: return (self.visit(node.left) == self.visit(rightOperand)) if type(op) is ast.NotEq: return (self.visit(node.left) != self.visit(rightOperand)) else: err.error("translateToZ3.py::translatePythonExprToZ3Visitor::visit_Compare unhandled operator" + ast.dump(op))
def put (self,ident,obj): '''Puts an identifier in the top context (if it is not already declared in that context)''' if not self.isInLastContext(ident): self.contexts[len(self.contexts)-1].put(ident,obj) else: err.error(ident+" is already defined in this context",self)
def login(): global d try: class do(QWidget): def __init__(self): import sys super().__init__() reply = QMessageBox.information( self, "登录提示", "将弹出浏览器框,请在浏览器中登录,登录成功后会自动登录到程序,按OK开始", QMessageBox.Ok) do() d = webdriver.Chrome(getpath() + r'\py\lib\chromedriver.exe') d.get(r"https://pan.baidu.com") def urlchange(): if "https://pan.baidu.com/disk/home" in d.current_url: return False else: return True while urlchange(): pass pg = d.page_source p = re.findall("<span class=\"user-name\">(.*?)</span>", pg) p = p[0] with open(getpath() + "\\py\\lib\\setting.json", "r") as j: r = json.load(j) r["isLogin"] = 1 time.sleep(5) r["cookie"] = d.get_cookies() r["username"] = p print(d.get_cookies()) with open(getpath() + "\\py\\lib\\setting.json", "w") as j: json.dump(r, j) d.quit() class do(QWidget): def __init__(self): import sys app = QApplication(sys.argv) super().__init__() reply = QMessageBox.information(self, "登录提示", "登陆成功", QMessageBox.Ok) d.quit() except: e = traceback.format_exc() if "selenium.common.exceptions.NoSuchWindowException" in e or "TypeError: argument of type 'NoneType' is not iterable" in e: class do(QWidget): def __init__(self): import sys app = QApplication(sys.argv) super().__init__() reply = QMessageBox.warning(self, "登录提示", "由于关闭了浏览器,登陆失败", QMessageBox.Ok) do() else: print(e) err.error(e) finally: try: d.quit() except: pass
def visit_Mult(self, node): err.error("op!!") return z3.Product
def visit_Sub(self, node): err.error("op!!") return z3.Sum
def visit_GtE(self, node): err.error("op!!") return ">="
if dl.islogin(): self.rec() else: sroot = QTreeWidgetItem() sroot.setText(0, "未登录") sroot.setIcon(0, QIcon(getpath() + "\\icon\\nfound.ico")) self.treeWidget.addTopLevelItem(sroot) with open(getpath() + "\\py\\lib\\setting.json", "r") as j: b = json.load(j) b = b["maindownload"] self.lineEdit_2.setText(b) self.pushButton_2.clicked.connect(lambda: self.browse()) self.pushButton_3.clicked.connect(lambda: self.version()) self.pushButton_4.clicked.connect(lambda: self.cr()) self.lineEdit_2.textChanged.connect(lambda: self.twi()) self.tweetb.clicked.connect(self.tw) self.pushButton_10.clicked.connect(lambda: self.ex()) self.pushButton.clicked.connect(lambda: self.lo()) self.show() if __name__ == "__main__": app = QApplication(sys.argv) window = Dx() sys.exit(app.exec_()) except SystemExit: pass except: e = traceback.format_exc() print(e) err.error(e)
def visit_USub(self, node): err.error("op!!") return "-"
def visit_LtE(self, node): err.error("op!!") return "<="
def visit_Module(self, node): if len(node.body) != 1: err.error("unsupported[translateToZ3.py :: exprVisitor :: visit_Module]:Module.body has more than 1 element") return self.visit(node.body[0])
def visit_Or(self, node): err.error("z3.Or unexpected!!") return z3.Or
def visit_NotEq(self, node): err.error("op!!") return "!="
def visit_Eq(self, node): err.error("op!!") return "=="
residuals = TCanvas('malus_res', "Residuals", 1200, 800) residuals.Divide(2, 2) for i, r in enumerate(res): residuals.cd(i + 1) r.res_graph.Draw('AEP') r.res_graph.SetMarkerStyle(6) residuals.Update() n = 1 current = [0] * n + [1] * n + [2] * n + [3] * n current = array('d', current) for tuple in zip(current, phi, phi_err): print "%i %.1f \pm %.1f" % tuple zeros = array('d', [0] * n * 4) graph = TGraphErrors(n * 4, current, phi, zeros, phi_err) canv = TCanvas('shift', 'shift') graph.SetMarkerStyle(8) func = TF1('pol1', 'pol1', 0, 4) graph.Fit('pol1', 'V') graph.Draw('AEP') slope = func.GetParameter(1) slope_err = func.GetParError(1) verdet = -(slope * ls) / (mu0 * N * lv) verdet_err = error(verdet, (slope, slope_err)) print 'Verdet = ', verdet, verdet_err print 'Chi2 / NDF = ', func.GetChisquare(), func.GetNDF() raw_input()
def visit_Div(self, node): err.error("op!!") return "/"