@@ -202,40 +202,47 @@ def generate_output_handler(
202202
203203 from loopy .kernel .data import KernelArgument
204204
205+ def is_output (idi ):
206+ from loopy .kernel .array import ArrayBase
207+ if not issubclass (idi .arg_class , ArrayBase ):
208+ return False
209+
210+ arg = kernel .impl_arg_to_arg [idi .name ]
211+ return arg .is_output
212+
205213 if not options .no_numpy :
206214 gen ("if out_host is None and (_lpy_encountered_numpy "
207215 "and not _lpy_encountered_dev):" )
208216 with Indentation (gen ):
209217 gen ("out_host = True" )
210218
211- for arg in implemented_data_info :
212- if not issubclass (arg .arg_class , KernelArgument ):
219+ for idi in implemented_data_info :
220+ if not issubclass (idi .arg_class , KernelArgument ):
213221 continue
214222
215- is_written = arg .base_name in kernel .get_written_variables ()
216- if is_written :
217- np_name = "_lpy_%s_np_input" % arg .name
223+ if is_output (idi ):
224+ np_name = "_lpy_%s_np_input" % idi .name
218225 gen ("if out_host or %s is not None:" % np_name )
219226 with Indentation (gen ):
220227 gen ("%s = %s.get(queue=queue, ary=%s)"
221- % (arg .name , arg .name , np_name ))
228+ % (idi .name , idi .name , np_name ))
222229
223230 gen ("" )
224231
225232 if options .return_dict :
226233 gen ("return _lpy_evt, {%s}"
227- % ", " .join (f'"{ arg .name } ": { arg .name } '
228- for arg in implemented_data_info
229- if issubclass (arg .arg_class , KernelArgument )
230- if arg . base_name in kernel . get_written_variables ( )))
234+ % ", " .join (f'"{ idi .name } ": { idi .name } '
235+ for idi in implemented_data_info
236+ if issubclass (idi .arg_class , KernelArgument )
237+ if is_output ( idi )))
231238 else :
232- out_args = [arg
233- for arg in implemented_data_info
234- if issubclass (arg .arg_class , KernelArgument )
235- if arg . base_name in kernel . get_written_variables ( )]
236- if out_args :
239+ out_idis = [idi
240+ for idi in implemented_data_info
241+ if issubclass (idi .arg_class , KernelArgument )
242+ if is_output ( idi )]
243+ if out_idis :
237244 gen ("return _lpy_evt, (%s,)"
238- % ", " .join (arg .name for arg in out_args ))
245+ % ", " .join (idi .name for idi in out_idis ))
239246 else :
240247 gen ("return _lpy_evt, ()" )
241248
0 commit comments