CoolFace
Apppublic

sparkmy181/Calculate_For_Work_Node_Args

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
app.py149 linesDownload Raw Back to root
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