In [1]: from astropy.modeling import models
...: import numpy as np
...: m = models.Identity(3) | models.Mapping((2, 1, 0))
...: m.bounding_box = ((0, 100), (0, 200), (0, 50))
...: mf = models.fix_inputs(m, {2: 22})
...: t = mf | models.Mapping((2, 1), n_inputs=3)
...: print(mf(1, 2)) # works: (22, 2, 1)
...: print(t(1, 2)) # works: (1, 2)
...: print(t(np.ones((3, 5)), np.ones((3, 5)))) # fails
(22.0, 2.0, 1.0)
(1.0, 2.0)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-71292af2df6f> in <module>
7 print(mf(1, 2)) # works: (22, 2, 1)
8 print(t(1, 2)) # works: (1, 2)
----> 9 print(t(np.ones((3, 5)), np.ones((3, 5)))) # fails
.../lib/python3.8/site-packages/astropy/modeling/core.py in __call__(self, *args, **kw)
2818 return outputs
2819 else:
-> 2820 return self._evaluate(*args, **kw)
2821
2822 def _evaluate(self, *args, **kw):
.../lib/python3.8/site-packages/astropy/modeling/core.py in _evaluate(self, *args, **kw)
2824 if op != 'fix_inputs':
2825 if op != '&':
-> 2826 leftval = self.left(*args, **kw)
2827 if op != '|':
2828 rightval = self.right(*args, **kw)
.../lib/python3.8/site-packages/astropy/modeling/core.py in __call__(self, *args, **kw)
2818 return outputs
2819 else:
-> 2820 return self._evaluate(*args, **kw)
2821
2822 def _evaluate(self, *args, **kw):
.../lib/python3.8/site-packages/astropy/modeling/core.py in _evaluate(self, *args, **kw)
2882 for ind, val in subargs:
2883 newargs.insert(ind, val)
-> 2884 return self.left(*newargs, **kw)
2885
2886 @property
.../lib/python3.8/site-packages/astropy/modeling/core.py in __call__(self, *args, **kw)
2818 return outputs
2819 else:
-> 2820 return self._evaluate(*args, **kw)
2821
2822 def _evaluate(self, *args, **kw):
.../lib/python3.8/site-packages/astropy/modeling/core.py in _evaluate(self, *args, **kw)
2839 elif op == '|':
2840 if isinstance(leftval, tuple):
-> 2841 return self.right(*leftval, **kw)
2842 else:
2843 return self.right(leftval, **kw)
.../lib/python3.8/site-packages/astropy/modeling/core.py in __call__(self, *args, **kwargs)
917 new_args, kwargs = self._get_renamed_inputs_as_positional(*args, **kwargs)
918
--> 919 return generic_call(self, *new_args, **kwargs)
920
921 def _get_renamed_inputs_as_positional(self, *args, **kwargs):
.../lib/python3.8/site-packages/astropy/modeling/core.py in generic_call(self, *inputs, **kwargs)
4123 if self.n_outputs == 1:
4124 outputs = (outputs,)
-> 4125 outputs = self.prepare_outputs(format_info, *outputs, **kwargs)
4126
4127 outputs = self._process_output_units(inputs, outputs)
.../lib/python3.8/site-packages/astropy/modeling/core.py in prepare_outputs(self, format_info, *outputs, **kwargs)
1779
1780 if len(self) == 1:
-> 1781 return _prepare_outputs_single_model(outputs, format_info)
1782 else:
1783 return _prepare_outputs_model_set(self, outputs, format_info, model_set_axis)
.../lib/python3.8/site-packages/astropy/modeling/core.py in _prepare_outputs_single_model(outputs, format_info)
3903 outputs[idx] = output.item()
3904 else:
-> 3905 outputs[idx] = output.reshape(broadcast_shape)
3906
3907 return tuple(outputs)
ValueError: cannot reshape array of size 1 into shape (3,5)
I do not think this code should be failing: it produces (maps) correct inputs to correct outputs for scalar inputs but fails for array inputs.
macOS-10.15.7-x86_64-i386-64bit
Python 3.8.5 (default, Sep 4 2020, 02:22:02)
[Clang 10.0.0 ]
Numpy 1.20.1
astropy 4.2
Scipy 1.6.0
Matplotlib 3.3.4
Description
I am trying to simulate a situation when
fix_inputsis applied to a slightly convoluted model (inputs-to-outputs is remapped). Created model works for simple scalar inputs but fails fornumpy.ndarraydata.Steps to Reproduce
I do not think this code should be failing: it produces (maps) correct inputs to correct outputs for scalar inputs but fails for array inputs.
System Details