sparkmy181/Calculate_For_Work_Node_Args
0
1import re,time2import gradio as gr3from Cfile.calculate import *4 5##建立一个gradio,来接收输入信息。。6class set_gradio_for():7 def __init__(self,tip_input,description):8 self.tip_input = tip_input9 self.description = description10 11 def get_work_node_ls(self,input_):12 input_ = re.sub('\n',' ',input_).upper()13 # 在开头输入一个T,则无需将字母数字隔开,所以所有数字必须是单位数。14 if input_[0] != 'T': # 否则需要隔开,以非字母或数字隔开即可。15 sub_input = re.sub(r'(?<=[A-Z\d])([^\da-zA-Z])+(?=[A-Z\d])', ' ', input_) # 取代字母数字之前的一切东西,以空格代替。16 find_input = re.findall(r'N [0]?|[a-zA-Z][\W]\d+|\d+[\W]\d+', sub_input) # 匹配字母和数字,数字和数字,不会重复。17 else:18 sub_input = re.sub(r'(?<=[A-Z\d])([^\da-zA-Z])*(?=[A-Z\d])', ' ', input_[1:])19 find_input = re.findall(r'N [0]?|[a-zA-Z]\W\d|\d[\W]\d', sub_input)20 if len(find_input) % 2 != 0:21 return None22 work_node_ls = [] ; n=123 for index in range(0, int(len(find_input) / 2)):24 work_D = find_input[index * 2].split(' ')25 if 'N' in work_D[0]:26 work_D = ['N'+str(n), 0]27 n += 128 else:29 work_D[-1] = int(work_D[-1])30 i_j = find_input[index * 2 + 1].split(' ')31 i_j[0], i_j[-1] = int(i_j[0]), int(i_j[-1])32 work_node_ls.append([work_D, i_j])33 return work_node_ls34 def print_node_arg(self,node_arg):35 s=''36 header =['节点','ET','LT']37 for i in header:38 s+=f'{i: ^6}'39 s+='\n'40 for i in node_arg:41 for j in i:42 s+=f'{j: ^9}'43 s+='\n'44 return s45 def print_work_arg(self,work_arg):46 head = ['工序','ES','EF','LS','LF','TF','FF']47 s=''48 for i in head:49 s+=f'{i: ^6}'50 s+='\n'51 for key, value in work_arg.items():52 s+=f'{key: ^9}'53 for i in value:54 s+=f'{i: ^9}'55 s+='\n'56 return s57 58 def print_output_graph(self,work_nodes, work_arg):59 s = ''60 headers = ['Work', 'i->j', 'D', 'ES', 'EF',61 'LS', 'LF', 'TF', 'FF']62 for header in headers:63 s += f'{header: ^6}'64 s+='\n'65 for work_node in work_nodes:66 work, D, i, j = work_node[0] + work_node[1]67 i_j = f'{i} --> {j}'68 for value in [work,i_j,D]:69 s += f'{value: ^8}'70 for time in work_arg[work]:71 s += f'{time: ^8}'72 s+='\n'73 return s74 75 def transfer_result(self,input_):76 print(time.strftime("%m-%d %H:%M",time.localtime()))77 print('User:',input_)78 try:79 work_node_ls = self.get_work_node_ls(input_)80 if work_node_ls:81 my = calcualte_work_node_time_args(work_node_ls)82 my.run()83 #判断非负,进而判断输入是否有问题。84 if min({j for i in my.work_arg.values() for j in i})>=0:85 node_agr_graph_str = '节点时间参数表:\n' + self.print_node_arg(my.node_arg)86 work_agr_graph_str = '工序时间参数表:\n' + self.print_work_arg(my.work_arg)87 key_way_work_str = my.key_work_str; key_way_node_str = my.key_way_node_str88 total_graph_str = '\n总表:\n' + self.print_output_graph(my.work_node_sort,my.work_arg)89 90 reply = '\n'.join([node_agr_graph_str,work_agr_graph_str,91 key_way_work_str,key_way_node_str,total_graph_str])92 else:93 reply = 'Error!! 出错了!很可能是你输入的遗漏了某个工序!!!'94 else:95 reply = 'Error!! 出错了!是你输入的错误,请按照输入规则输入!!!'96 except:97 reply = 'Error!! 出错了!很可能是你输入的错误,请按照输入规则输入!!!'98 print('----------------')99 return reply100 101 def run_in_gradio(self):102 #接受的输入框103 inputs = gr.Textbox(lines=3, label="Click To Input!",104 placeholder = self.tip_input105 ).style(show_copy_button=True,container=False)106 #显示输入的框107 outputs = gr.Textbox(lines=30,label='Display Results Below',108 placeholder='After you submiting, there will show results.'109 ).style(show_copy_button=True,container=False)110 # 建立interface111 interface = gr.Interface(fn=self.transfer_result, inputs=inputs, outputs=outputs,112 title="Calculate--By Sparkmy(MeiYu)",113 description=self.description,114 theme=gr.themes.Default(primary_hue=gr.themes.colors.green, )115 )116 #interface launch117 interface.launch(show_error=True,share=False)118 119 120 121if __name__=='__main__':122 tip_input = '''Please comply with rules!!\n输入技巧:按工序字母顺序(ABCD)依次输入,最后再输入所有的虚工序,这样输入不容易遗漏。'''123 description = '''124Please comply with rules to input!125Rules:1261.输入规则:工序、持续时间、节点i、节点j 如(a、1、2、3、b、3、4、5)。 代表a工序时长1天,a前节点是2,后节点是3。\127虚工序以N表示,持续时间可以不输入或者输入0,节点当然需要输入。1282.字母大小写都行,字母和数字之间需要有分隔,使用空格、句号逗号都行分隔 ,使用任何分隔符都行,总之要隔开。1293.如果所有的数字都只是个位数,则在前面输入“T”字母,可以不分隔输入。如:Ta123b345(代表的意义同上)1304.examples (you can copy to test):131example1:[‘A’,1],[1,3]],[[‘B’,2],[1,2[[‘C’,4],[3,5]][[‘D’,3],[2,4]]\132[[‘E’,6],[5,7] [[‘F’,5],[4,6 [[‘G’,5],[6,7]], [[‘N’,0],[2,3]], [[‘N’,0], [4,5\n133excample2:(使用不分隔模式,t一定要在第一个位置上) 134T a513b212c435d334e324f346g547h257k467n45\n135excample3:(大作业上的测试题目)136T a(1)12b913c514d425e336f641377g759h689k(1)79n68n58n67n23138注意:()中的数字为你的学号最后一位。139'''140 my = set_gradio_for(tip_input,description)141 my.run_in_gradio()142 143 144 145 146 147 148 149 