## Description
The foreach subgraph operator is sensitive to what should be irrelevant details
of its construction, incorrectly failing when the inputs of a symmetric
function are re-ordered.
## Environment info (Required)
Package used (Python/R/Scala/Julia):
I'm using Python.
## Error Message:
The error message is actually incorrect. The graph is shape-correct!
```
infer_shape error. Arguments:
a: (1, 3)
b: (1,)
Traceback (most recent call last):
File "Untitled 9.py", line 68, in <module>
print(sym.infer_shape(a=(1,3), b=(1,)))
File
"/Users/taliesinb/.anaconda3/lib/python3.6/site-packages/mxnet-1.3.0-py3.6.egg/mxnet/symbol/symbol.py",
line 996, in infer_shape
res = self._infer_shape_impl(False, *args, **kwargs)
File
"/Users/taliesinb/.anaconda3/lib/python3.6/site-packages/mxnet-1.3.0-py3.6.egg/mxnet/symbol/symbol.py",
line 1126, in _infer_shape_impl
ctypes.byref(complete)))
File
"/Users/taliesinb/.anaconda3/lib/python3.6/site-packages/mxnet-1.3.0-py3.6.egg/mxnet/base.py",
line 255, in check_call
raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: Error in operator .: Error in operator mul2: [21:50:42]
src/operator/contrib/../tensor/../elemwise_op_common.h:133: Check failed:
assign(&dattr, (*vec)[i]) Incompatible attr in node mul2 at 1-th input:
expected [3], got [1]
```
## Minimum reproducible example
```
import mxnet as mx
json = """{
"nodes":[
{
"op":"null",
"name":"a",
"inputs":[]
},
{
"op":"null",
"name":"b",
"inputs":[]
},
{
"op":"_foreach",
"name":".",
"attrs":{
"in_data_locs":"[0]",
"in_state_locs":"[]",
"num_args":"3",
"num_out_data":"1",
"num_outputs":"1",
"remain_locs":"[1]"
},
"inputs":[[0,0,0],[1,0,0]],
"subgraphs":[
{
"nodes":[
{
"op":"null",
"name":"inner_a",
"inputs":[]
},
{
"op":"null",
"name":"inner_b",
"inputs":[]
},
{
"op":"broadcast_mul",
"name":"mul1",
"inputs":[[1,0,0],[0,0,0]]
},
{
"op":"elemwise_mul",
"name":"mul2",
"inputs":[[2,0,0],[0,0,0]]
}
],
"arg_nodes":[0,1],
"heads":[[3,0,0]]
}
]
}
],
"arg_nodes":[0,1],
"heads":[[2,0,0]],
"attrs":{
"mxnet_version":[
"int",
10300
]
}
}""";
sym = mx.sym.load_json(json)
print(sym.infer_shape(a=(1,3), b=(1,)))
```
## Steps to reproduce
Run the above code in Python, you'll get an infer shape error.
if you flip the order of inputs in `mul2` from `[[2,0,0],[0,0,0]]` to
`[[0,0,0],[2,0,0]]`, shape inference succeeds as expected.
## What have you tried to solve it?
I have no idea how to approach solving this.
[ Full content available at:
https://github.com/apache/incubator-mxnet/issues/12760 ]
This message was relayed via gitbox.apache.org for [email protected]