@@ -250,50 +250,46 @@ def struct_gen(args, struct_builders, blocks, sub):
250250 # that holds the type, the value and the traceback. After storing
251251 # the error, we return the failure code so we know which code
252252 # block failed.
253- do_return = (
254- """
255- if (%(failure_var)s) {
253+ do_return = """
254+ if ({failure_var}) {{
256255 // When there is a failure, this code puts the exception
257256 // in __ERROR.
258257 PyObject* err_type = NULL;
259258 PyObject* err_msg = NULL;
260259 PyObject* err_traceback = NULL;
261260 PyErr_Fetch(&err_type, &err_msg, &err_traceback);
262- if (!err_type) {err_type = Py_None;Py_INCREF(Py_None);}
263- if (!err_msg) {err_msg = Py_None; Py_INCREF(Py_None);}
264- if (!err_traceback) {err_traceback = Py_None; Py_INCREF(Py_None);}
261+ if (!err_type) {{ err_type = Py_None;Py_INCREF(Py_None);} }
262+ if (!err_msg) {{ err_msg = Py_None; Py_INCREF(Py_None);} }
263+ if (!err_traceback) {{ err_traceback = Py_None; Py_INCREF(Py_None);} }
265264 PyObject* old_err_type = PyList_GET_ITEM(__ERROR, 0);
266265 PyObject* old_err_msg = PyList_GET_ITEM(__ERROR, 1);
267266 PyObject* old_err_traceback = PyList_GET_ITEM(__ERROR, 2);
268267 PyList_SET_ITEM(__ERROR, 0, err_type);
269268 PyList_SET_ITEM(__ERROR, 1, err_msg);
270269 PyList_SET_ITEM(__ERROR, 2, err_traceback);
271- {Py_XDECREF(old_err_type);}
272- {Py_XDECREF(old_err_msg);}
273- {Py_XDECREF(old_err_traceback);}
274- }
270+ {{ Py_XDECREF(old_err_type);} }
271+ {{ Py_XDECREF(old_err_msg);} }
272+ {{ Py_XDECREF(old_err_traceback);} }
273+ }}
275274 // The failure code is returned to index what code block failed.
276- return %(failure_var)s;
277- """
278- % sub
279- )
275+ return {failure_var};
276+ """ .format (** sub )
280277
281278 sub = dict (sub )
282279 sub .update (locals ())
283280
284281 # TODO: add some error checking to make sure storage_<x> are
285282 # 1-element lists and __ERROR is a 3-elements list.
286283
287- struct_code = (
288- """
289- namespace {
290- struct %(name)s {
284+ struct_code = """
285+ namespace {{
286+ struct {name} {{
291287 PyObject* __ERROR;
292288
293- %( storage_decl)s
294- %( struct_decl)s
289+ { storage_decl}
290+ { struct_decl}
295291
296- %( name)s () {
292+ { name} () { {
297293 // This is only somewhat safe because we:
298294 // 1) Are not a virtual class
299295 // 2) Do not use any virtual classes in the members
@@ -306,32 +302,30 @@ def struct_gen(args, struct_builders, blocks, sub):
306302 #ifndef PYTENSOR_DONT_MEMSET_STRUCT
307303 memset(this, 0, sizeof(*this));
308304 #endif
309- }
310- ~%( name)s (void) {
305+ }}
306+ ~{ name} (void) { {
311307 cleanup();
312- }
308+ }}
313309
314- int init(PyObject* __ERROR, %( args_decl)s) {
315- %( storage_incref)s
316- %( storage_set)s
317- %( struct_init_head)s
310+ int init(PyObject* __ERROR, { args_decl}) { {
311+ { storage_incref}
312+ { storage_set}
313+ { struct_init_head}
318314 this->__ERROR = __ERROR;
319315 return 0;
320- }
321- void cleanup(void) {
322- %(struct_cleanup)s
323- %(storage_decref)s
324- }
325- int run(void) {
326- int %(failure_var)s = 0;
327- %(behavior)s
328- %(do_return)s
329- }
330- };
331- }
332- """
333- % sub
334- )
316+ }}
317+ void cleanup(void) {{
318+ {struct_cleanup}
319+ {storage_decref}
320+ }}
321+ int run(void) {{
322+ int {failure_var} = 0;
323+ {behavior}
324+ {do_return}
325+ }}
326+ }};
327+ }}
328+ """ .format (** sub )
335329
336330 return struct_code
337331
@@ -380,9 +374,9 @@ def get_c_init(fgraph, r, name, sub):
380374 pre = (
381375 ""
382376 """
383- py_%( name)s = Py_None;
384- {Py_XINCREF(py_%( name)s); }
385- """ % locals ()
377+ py_{ name} = Py_None;
378+ {{ Py_XINCREF(py_{ name});} }
379+ """ . format ( ** locals () )
386380 )
387381 return pre + r .type .c_init (name , sub )
388382
@@ -418,9 +412,9 @@ def get_c_extract(fgraph, r, name, sub):
418412 c_extract = r .type .c_extract (name , sub , False )
419413
420414 pre = """
421- py_%( name)s = PyList_GET_ITEM(storage_%( name)s , 0);
422- {Py_XINCREF(py_%( name)s); }
423- """ % locals ()
415+ py_{ name} = PyList_GET_ITEM(storage_{ name} , 0);
416+ {{ Py_XINCREF(py_{ name});} }
417+ """ . format ( ** locals () )
424418 return pre + c_extract
425419
426420
@@ -447,9 +441,9 @@ def get_c_extract_out(fgraph, r, name, sub):
447441 c_extract = r .type .c_extract_out (name , sub , check_input , check_broadcast = False )
448442
449443 pre = """
450- py_%( name)s = PyList_GET_ITEM(storage_%( name)s , 0);
451- {Py_XINCREF(py_%( name)s); }
452- """ % locals ()
444+ py_{ name} = PyList_GET_ITEM(storage_{ name} , 0);
445+ {{ Py_XINCREF(py_{ name});} }
446+ """ . format ( ** locals () )
453447 return pre + c_extract
454448
455449
@@ -459,8 +453,8 @@ def get_c_cleanup(fgraph, r, name, sub):
459453
460454 """
461455 post = """
462- {Py_XDECREF(py_%( name)s); }
463- """ % locals ()
456+ {{ Py_XDECREF(py_{ name});} }
457+ """ . format ( ** locals () )
464458 return r .type .c_cleanup (name , sub ) + post
465459
466460
@@ -470,14 +464,14 @@ def get_c_sync(fgraph, r, name, sub):
470464
471465 """
472466 return """
473- if (!%( failure_var)s) {
474- %( sync)s
475- PyObject* old = PyList_GET_ITEM(storage_%( name)s , 0);
476- {Py_XINCREF(py_%( name)s); }
477- PyList_SET_ITEM(storage_%( name)s , 0, py_%( name)s );
478- {Py_XDECREF(old);}
479- }
480- """ % dict (sync = r .type .c_sync (name , sub ), name = name , ** sub )
467+ if (!{ failure_var}) { {
468+ { sync}
469+ PyObject* old = PyList_GET_ITEM(storage_{ name} , 0);
470+ {{ Py_XINCREF(py_{ name});} }
471+ PyList_SET_ITEM(storage_{ name} , 0, py_{ name} );
472+ {{ Py_XDECREF(old);} }
473+ }}
474+ """ . format ( ** dict (sync = r .type .c_sync (name , sub ), name = name , ** sub ) )
481475
482476
483477def apply_policy (fgraph , policy , r , name , sub ):
0 commit comments