def local_csm_grad_c(node): """ csm_grad(None) -> csm_grad_c """ if node.op == csm_grad(None): return [csm_grad_c(*node.inputs)] return False
from basic import _is_sparse_variable # This is tested in tests/test_basic.py:UsmmTests local_usmm = gof.opt.PatternSub( (theano.tensor.sub, 'z', (theano.tensor.mul, {'pattern': 'alpha', 'constraint': lambda expr: numpy.all(expr.type.broadcastable)}, (sparse._dot, 'x', 'y'))), (usmm, (theano.tensor.neg, 'alpha'), 'x', 'y', 'z')) register_specialize(local_usmm, name="local_usmm") # This is tested in tests/test_opt.py:test_local_csm_grad_c @gof.local_optimizer([csm_grad(None)]) def local_csm_grad_c(node): """ csm_grad(None) -> csm_grad_c """ if node.op == csm_grad(None): return [csm_grad_c(*node.inputs)] return False register_specialize(local_csm_grad_c) # This is tested in tests/test_opt.py:test_local_csm_properties_csm @gof.local_optimizer([csm_properties]) def local_csm_properties_csm(node): """if we find csm_properties(CSM(*args)), then we can replace that with the *args directly""" if node.op == csm_properties: csm, = node.inputs