TimeResponseData.to_pandas() fails if there are no states in a NonlinearIOSystem
TimeResponseData.to_pandas() fails if there are no states in a NonlinearIOSystem:
import control as ct class System: @classmethod def _outputs(cls, t, x, u, params: dict): v = u[0] i = u[1] k = u[2] return k*v**2 + i @classmethod def build(cls): return ct.NonlinearIOSystem( None, cls._outputs, name="system", states=None, inputs=('v', 'i', 'V'), outputs=('I',), params=params, ) T = np.arange(100) # simulation time in seconds U = np.ones(shape=(3, len(T))) sys = System.build() ydata = ct.input_output_response(sys, T=T, U=U, solve_ivp_method="Radau").to_pandas() --------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[106], [line 28](vscode-notebook-cell:?execution_count=106&line=28) [25](vscode-notebook-cell:?execution_count=106&line=25) U = np.ones(shape=(3, len(T))) [27](vscode-notebook-cell:?execution_count=106&line=27) sys = System.build() ---> [28](vscode-notebook-cell:?execution_count=106&line=28) ydata = ct.input_output_response(sys, T=T, U=U, solve_ivp_method="Radau").to_pandas() [29](vscode-notebook-cell:?execution_count=106&line=29) ydata File [~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:655](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:655), in TimeResponseData.to_pandas(self) [650](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:650) data.update( [651](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:651) {name: self.u[i] for i, name in enumerate(self.input_labels)}) [652](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:652) data.update( [653](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:653) {name: self.y[i] for i, name in enumerate(self.output_labels)}) [654](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:654) data.update( --> [655](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:655) {name: self.x[i] for i, name in enumerate(self.state_labels)}) [657](https://file+.vscode-resource.vscode-cdn.net/home/joaoantoniocardoso/workspace_TCC/repo_2022_2/models/2020/panel/~/workspace_TCC/repo_2022_2/.env/lib/python3.10/site-packages/control/timeresp.py:657) return pandas.DataFrame(data) TypeError: 'NoneType' object is not iterable
Not optimal, but as a workaround, I'm introducing a state:
class System: @classmethod def _updates(cls, t, x, u, params: dict): return 0 @classmethod def _outputs(cls, t, x, u, params: dict): v = u[0] i = u[1] k = u[2] return k*v**2 + i @classmethod def build(cls): return ct.NonlinearIOSystem( cls._updates, cls._outputs, name="system", states=1, inputs=('v', 'i', 'V'), outputs=('I',), params=params, )