@@ -157,10 +157,6 @@ def _import_initialize():
157157# ----------------------------------------------------------------------
158158
159159
160- _NP_VERSION = tuple (map (int , np .__version__ .split ("." )[:2 ]))
161- _NP_HAS_COPY = not (_NP_VERSION < (2 , 1 ))
162-
163-
164160def _copy_if_needed (out , inp , copy = None ) -> np .ndarray :
165161 """Fallback implementation for asarray(*, copy: bool)"""
166162 if (
@@ -212,6 +208,11 @@ def _matlab_array_types():
212208 return {}
213209
214210
211+ def _empty_array () -> "Array" :
212+ """Matlab's default cell/struct elements are 0x0 arrays."""
213+ return Array .from_shape ([0 , 0 ])
214+
215+
215216# ----------------------------------------------------------------------
216217# Types
217218# ----------------------------------------------------------------------
@@ -534,7 +535,7 @@ def _finalize(self):
534535
535536 if self ._future is None :
536537 # FIXME: I am not entirely sure this should ever happen
537- self ._future = Array . from_any ([] )
538+ self ._future = _empty_array ( )
538539
539540 # if future array is wrapped, unwrap it
540541 if isinstance (self ._future , WrappedDelayedArray ):
@@ -1704,19 +1705,14 @@ class Cell(_ListMixin, WrappedArray):
17041705
17051706 @classmethod
17061707 def _DEFAULT (cls , shape : list = ()) -> np .ndarray :
1707- # if len(shape) == 0:
1708- # out = np.array(None)
1709- # out[()] = Array.from_any([])
1710- # return out
1711-
17121708 data = np .empty (shape , dtype = object )
17131709 opt = dict (
17141710 flags = ['refs_ok' , 'zerosize_ok' ],
17151711 op_flags = ['writeonly' , 'no_broadcast' ]
17161712 )
17171713 with np .nditer (data , ** opt ) as iter :
17181714 for elem in iter :
1719- elem [()] = Array . from_any ([] )
1715+ elem [()] = _empty_array ( )
17201716 return data
17211717
17221718 def _fill_default (self ):
@@ -1725,7 +1721,7 @@ def _fill_default(self):
17251721 op_flags = ['writeonly' , 'no_broadcast' ])
17261722 with np .nditer (arr , ** opt ) as iter :
17271723 for elem in iter :
1728- elem [()] = Array . from_any ([] )
1724+ elem [()] = _empty_array ( )
17291725 return self
17301726
17311727 def __new__ (cls , * args , ** kwargs ) -> "Cell" :
@@ -2111,7 +2107,7 @@ def __getitem__(self, key):
21112107 opt = dict (flags = ['refs_ok' , 'zerosize_ok' ], op_flags = ['readonly' ])
21122108 with np .nditer (arr , ** opt ) as iter :
21132109 for elem in iter :
2114- elem .item ().setdefault (key , Array . from_any ([] ))
2110+ elem .item ().setdefault (key , _empty_array ( ))
21152111
21162112 # NOTE
21172113 # We then defer to `as_dict`
@@ -2206,7 +2202,7 @@ def setdefault(self, key, value=None):
22062202 for elem in iter :
22072203 item = elem .item ()
22082204 if value is None :
2209- value = Array . from_any ([] )
2205+ value = _empty_array ( )
22102206 else :
22112207 value = MatlabType .from_any (value )
22122208 item .setdefault (key , value )
@@ -2604,7 +2600,7 @@ def _ensure_defaults_are_set(self, keys=None):
26042600 if keys :
26052601 item : dict = arr .item ()
26062602 for key in keys :
2607- item .setdefault (key , Array . from_any ([] ))
2603+ item .setdefault (key , _empty_array ( ))
26082604
26092605 if keys is None :
26102606 keys = self ._allkeys ()
@@ -2616,7 +2612,7 @@ def _ensure_defaults_are_set(self, keys=None):
26162612 for elem in iter :
26172613 item : dict = elem .item ()
26182614 for key in keys :
2619- item .setdefault (key , Array . from_any ([] ))
2615+ item .setdefault (key , _empty_array ( ))
26202616
26212617 # --------------
26222618 # Bracket syntax
0 commit comments