From cd18a225e7764d309315b870567e5b01ac6ccb7e Mon Sep 17 00:00:00 2001
From: Daniel Weindl <daniel.weindl@helmholtz-munich.de>
Date: Mon, 18 Dec 2023 10:50:53 +0100
Subject: [PATCH] dir

---
 python/sdist/amici/numpy.py | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/python/sdist/amici/numpy.py b/python/sdist/amici/numpy.py
index 8a1c687388..93b04603be 100644
--- a/python/sdist/amici/numpy.py
+++ b/python/sdist/amici/numpy.py
@@ -6,6 +6,7 @@
 
 import collections
 import copy
+import itertools
 from typing import Dict, Iterator, List, Literal, Union
 
 import amici
@@ -91,15 +92,6 @@ def __init__(self, swigptr):
         self._cache = {}
         super(SwigPtrView, self).__init__()
 
-        # create properties for all fields
-        for field in self._field_names:
-            if field not in dir(self):
-                setattr(
-                    self.__class__,
-                    field,
-                    property(lambda self_: self_.__getitem__(field)),
-                )
-
     def __len__(self) -> int:
         """
         Returns the number of available keys/fields
@@ -173,6 +165,13 @@ def __eq__(self, other):
             return False
         return self._swigptr == other._swigptr
 
+    def __dir__(self):
+        return sorted(
+            set(
+                itertools.chain(dir(super()), self.__dict__, self._field_names)
+            )
+        )
+
 
 class ReturnDataView(SwigPtrView):
     """
@@ -297,7 +296,7 @@ def __init__(self, rdata: Union[ReturnDataPtr, ReturnData]):
             "numerrtestfailsB": [rdata.nt],
             "numnonlinsolvconvfailsB": [rdata.nt],
         }
-        super(ReturnDataView, self).__init__(rdata)
+        super().__init__(rdata)
 
     def __getitem__(
         self, item: str
@@ -415,7 +414,7 @@ def __init__(self, edata: Union[ExpDataPtr, ExpData]):
         edata.observedDataStdDev = edata.getObservedDataStdDev()
         edata.observedEvents = edata.getObservedEvents()
         edata.observedEventsStdDev = edata.getObservedEventsStdDev()
-        super(ExpDataView, self).__init__(edata)
+        super().__init__(edata)
 
 
 def _field_as_numpy(