@@ -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,26 +50,43 @@ def __normal_max_workers(workers):
5050
5151 @classmethod
5252 def output (cls , * files , ** kwargs ):
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 :
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 :
6069 log .warn ("parameter stop_on_incorrect is deprecated and has no effect." )
6170
6271 if (max_workers is None or max_workers >= 0 ) and job_pool is None :
6372 max_workers = cls .__normal_max_workers (max_workers )
6473 try :
6574 from concurrent .futures import ThreadPoolExecutor
75+
6676 with ThreadPoolExecutor (max_workers = max_workers ) as job_pool :
67- return cls .output (* files , std = std , grader = grader , max_workers = max_workers , job_pool = 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+ )
6884 except ImportError :
6985 pass
7086
7187 def get_std ():
7288 return cls .__process_file (std )[1 ]
89+
7390 if job_pool is not None :
7491 std = job_pool .submit (get_std ).result ()
7592 else :
@@ -86,61 +103,121 @@ def do(file):
86103
87104 @classmethod
88105 def program (cls , * programs , ** kwargs ):
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 :
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 :
99129 log .warn ("parameter stop_on_incorrect is deprecated and has no effect." )
100130
101131 if (max_workers is None or max_workers >= 0 ) and job_pool is None :
102132 max_workers = cls .__normal_max_workers (max_workers )
103133 try :
104134 from concurrent .futures import ThreadPoolExecutor
135+
105136 with ThreadPoolExecutor (max_workers = max_workers ) as job_pool :
106- return cls .program (* programs , input = input , std = std , std_program = std_program , grader = grader , max_workers = max_workers , job_pool = 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+ )
107146 except ImportError :
108147 pass
109148
110149 if not isinstance (input , IO ):
111- raise TypeError ("expect {}, got {}" .format (type (IO ).__name__ , type (input ).__name__ ))
150+ raise TypeError (
151+ "expect {}, got {}" .format (type (IO ).__name__ , type (input ).__name__ )
152+ )
112153 input .flush_buffer ()
113154 input .input_file .seek (0 )
114155
115156 if std_program is not None :
157+
116158 def get_std ():
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 ))
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+ )
119170 input_file .seek (0 )
120171 return content
172+
121173 if job_pool is not None :
122174 std = job_pool .submit (get_std ).result ()
123175 else :
124176 std = get_std ()
125177 elif std is not None :
178+
126179 def get_std ():
127180 return cls .__process_file (std )[1 ]
181+
128182 if job_pool is not None :
129183 std = job_pool .submit (get_std ).result ()
130184 else :
131185 std = get_std ()
132186 else :
133- raise TypeError ('program() missing 1 required non-None keyword-only argument: \' std\' or \' std_program\' ' )
187+ raise TypeError (
188+ "program() missing 1 required non-None keyword-only argument: 'std' or 'std_program'"
189+ )
134190
135191 def do (program_name ):
136192 timeout = None
137- if list_like (program_name ) and len (program_name ) == 2 and int_like (program_name [- 1 ]):
193+ if (
194+ list_like (program_name )
195+ and len (program_name ) == 2
196+ and int_like (program_name [- 1 ])
197+ ):
138198 program_name , timeout = program_name
139- with open (os .dup (input .input_file .fileno ()), 'r' , newline = '\n ' ) as input_file :
199+ with open (
200+ os .dup (input .input_file .fileno ()), "r" , newline = "\n "
201+ ) as input_file :
140202 if timeout is None :
141- content = make_unicode (subprocess .check_output (program_name , shell = (not list_like (program_name )), stdin = input_file , universal_newlines = True ))
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+ )
142211 else :
143- content = make_unicode (subprocess .check_output (program_name , shell = (not list_like (program_name )), stdin = input_file , universal_newlines = True , timeout = timeout ))
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+ )
144221 input_file .seek (0 )
145222 cls .__compare_two (program_name , content , std , grader )
146223
0 commit comments