@@ -17,7 +17,7 @@ def __init__(self, name, mismatch):
1717 self .mismatch = mismatch
1818
1919 def __str__ (self ):
20- return " In program: '{}'. {}" .format (self .name , self .mismatch )
20+ return ' In program: \ ' {}\ ' . {}' .format (self .name ,self .mismatch )
2121
2222
2323class Compare :
@@ -37,7 +37,7 @@ def __process_file(file):
3737 file .output_file .seek (0 )
3838 return file .output_filename , file .output_file .read ()
3939 else :
40- with open (file , "r" , newline = " \n " ) as f :
40+ with open (file , "r" , newline = ' \n ' ) as f :
4141 return file , f .read ()
4242
4343 @staticmethod
@@ -50,43 +50,26 @@ def __normal_max_workers(workers):
5050
5151 @classmethod
5252 def output (cls , * files , ** kwargs ):
53- kwargs = unpack_kwargs (
54- "output" ,
55- kwargs ,
56- (
57- "std" ,
58- ("grader" , DEFAULT_GRADER ),
59- ("max_workers" , - 1 ),
60- ("job_pool" , None ),
61- ("stop_on_incorrect" , None ),
62- ),
63- )
64- std = kwargs ["std" ]
65- grader = kwargs ["grader" ]
66- max_workers = kwargs ["max_workers" ]
67- job_pool = kwargs ["job_pool" ]
68- if kwargs ["stop_on_incorrect" ] is not None :
53+ kwargs = unpack_kwargs ('output' , kwargs , ('std' , ('grader' , DEFAULT_GRADER ), ('max_workers' , - 1 ),
54+ ('job_pool' , None ), ('stop_on_incorrect' , None )))
55+ std = kwargs ['std' ]
56+ grader = kwargs ['grader' ]
57+ max_workers = kwargs ['max_workers' ]
58+ job_pool = kwargs ['job_pool' ]
59+ if kwargs ['stop_on_incorrect' ] is not None :
6960 log .warn ("parameter stop_on_incorrect is deprecated and has no effect." )
7061
7162 if (max_workers is None or max_workers >= 0 ) and job_pool is None :
7263 max_workers = cls .__normal_max_workers (max_workers )
7364 try :
7465 from concurrent .futures import ThreadPoolExecutor
75-
7666 with ThreadPoolExecutor (max_workers = max_workers ) as job_pool :
77- return cls .output (
78- * files ,
79- std = std ,
80- grader = grader ,
81- max_workers = max_workers ,
82- job_pool = job_pool
83- )
67+ return cls .output (* files , std = std , grader = grader , max_workers = max_workers , job_pool = job_pool )
8468 except ImportError :
8569 pass
8670
8771 def get_std ():
8872 return cls .__process_file (std )[1 ]
89-
9073 if job_pool is not None :
9174 std = job_pool .submit (get_std ).result ()
9275 else :
@@ -103,121 +86,61 @@ def do(file):
10386
10487 @classmethod
10588 def program (cls , * programs , ** kwargs ):
106- kwargs = unpack_kwargs (
107- "program" ,
108- kwargs ,
109- (
110- "input" ,
111- ("std" , None ),
112- ("std_program" , None ),
113- ("grader" , DEFAULT_GRADER ),
114- ("max_workers" , - 1 ),
115- ("job_pool" , None ),
116- ("stop_on_incorrect" , None ),
117- ),
118- )
119- input = kwargs ["input" ]
120- std = kwargs ["std" ]
121- std_program = kwargs ["std_program" ]
122- grader = kwargs ["grader" ]
123- max_workers = kwargs ["max_workers" ]
124- job_pool = kwargs ["job_pool" ]
125- time_limit = kwargs ["time_limit" ]
126- memory_limit = kwargs ["memory_limit" ]
127-
128- if kwargs ["stop_on_incorrect" ] is not None :
89+ kwargs = unpack_kwargs ('program' , kwargs , ('input' , ('std' , None ), ('std_program' , None ),
90+ ('grader' , DEFAULT_GRADER ), ('max_workers' , - 1 ),
91+ ('job_pool' , None ), ('stop_on_incorrect' , None )))
92+ input = kwargs ['input' ]
93+ std = kwargs ['std' ]
94+ std_program = kwargs ['std_program' ]
95+ grader = kwargs ['grader' ]
96+ max_workers = kwargs ['max_workers' ]
97+ job_pool = kwargs ['job_pool' ]
98+ if kwargs ['stop_on_incorrect' ] is not None :
12999 log .warn ("parameter stop_on_incorrect is deprecated and has no effect." )
130100
131101 if (max_workers is None or max_workers >= 0 ) and job_pool is None :
132102 max_workers = cls .__normal_max_workers (max_workers )
133103 try :
134104 from concurrent .futures import ThreadPoolExecutor
135-
136105 with ThreadPoolExecutor (max_workers = max_workers ) as job_pool :
137- return cls .program (
138- * programs ,
139- input = input ,
140- std = std ,
141- std_program = std_program ,
142- grader = grader ,
143- max_workers = max_workers ,
144- job_pool = job_pool
145- )
106+ return cls .program (* programs , input = input , std = std , std_program = std_program , grader = grader , max_workers = max_workers , job_pool = job_pool )
146107 except ImportError :
147108 pass
148109
149110 if not isinstance (input , IO ):
150- raise TypeError (
151- "expect {}, got {}" .format (type (IO ).__name__ , type (input ).__name__ )
152- )
111+ raise TypeError ("expect {}, got {}" .format (type (IO ).__name__ , type (input ).__name__ ))
153112 input .flush_buffer ()
154113 input .input_file .seek (0 )
155114
156115 if std_program is not None :
157-
158116 def get_std ():
159- with open (
160- os .dup (input .input_file .fileno ()), "r" , newline = "\n "
161- ) as input_file :
162- content = make_unicode (
163- subprocess .check_output (
164- std_program ,
165- shell = (not list_like (std_program )),
166- stdin = input .input_file ,
167- universal_newlines = True ,
168- )
169- )
117+ with open (os .dup (input .input_file .fileno ()), 'r' , newline = '\n ' ) as input_file :
118+ content = make_unicode (subprocess .check_output (std_program , shell = (not list_like (std_program )), stdin = input .input_file , universal_newlines = True ))
170119 input_file .seek (0 )
171120 return content
172-
173121 if job_pool is not None :
174122 std = job_pool .submit (get_std ).result ()
175123 else :
176124 std = get_std ()
177125 elif std is not None :
178-
179126 def get_std ():
180127 return cls .__process_file (std )[1 ]
181-
182128 if job_pool is not None :
183129 std = job_pool .submit (get_std ).result ()
184130 else :
185131 std = get_std ()
186132 else :
187- raise TypeError (
188- "program() missing 1 required non-None keyword-only argument: 'std' or 'std_program'"
189- )
133+ raise TypeError ('program() missing 1 required non-None keyword-only argument: \' std\' or \' std_program\' ' )
190134
191135 def do (program_name ):
192136 timeout = None
193- if (
194- list_like (program_name )
195- and len (program_name ) == 2
196- and int_like (program_name [- 1 ])
197- ):
137+ if list_like (program_name ) and len (program_name ) == 2 and int_like (program_name [- 1 ]):
198138 program_name , timeout = program_name
199- with open (
200- os .dup (input .input_file .fileno ()), "r" , newline = "\n "
201- ) as input_file :
139+ with open (os .dup (input .input_file .fileno ()), 'r' , newline = '\n ' ) as input_file :
202140 if timeout is None :
203- content = make_unicode (
204- subprocess .check_output (
205- program_name ,
206- shell = (not list_like (program_name )),
207- stdin = input_file ,
208- universal_newlines = True ,
209- )
210- )
141+ content = make_unicode (subprocess .check_output (program_name , shell = (not list_like (program_name )), stdin = input_file , universal_newlines = True ))
211142 else :
212- content = make_unicode (
213- subprocess .check_output (
214- program_name ,
215- shell = (not list_like (program_name )),
216- stdin = input_file ,
217- universal_newlines = True ,
218- timeout = timeout ,
219- )
220- )
143+ content = make_unicode (subprocess .check_output (program_name , shell = (not list_like (program_name )), stdin = input_file , universal_newlines = True , timeout = timeout ))
221144 input_file .seek (0 )
222145 cls .__compare_two (program_name , content , std , grader )
223146
0 commit comments