@@ -915,7 +915,7 @@ def __init_finalize__(self, name, parent=None, factor=None, condition=None,
915915
916916 # Process subsampling factor
917917 fname = f"{ name } f"
918- if factor is None :
918+ if factor is None or factor == 1 :
919919 self ._factor = None
920920 elif is_number (factor ):
921921 self ._factor = int (factor )
@@ -966,9 +966,14 @@ def free_symbols(self):
966966 pass
967967 return retval
968968
969- def _arg_values (self , interval , grid = None , ** kwargs ):
970- # Parent dimension define the interval
971- fact = self .factor
969+ def _arg_values (self , interval , grid = None , args = None , ** kwargs ):
970+ if self .symbolic_factor is not None :
971+ fname = self .symbolic_factor .name
972+ fact = kwargs .get (fname , args .get (fname , self .factor ))
973+ else :
974+ # No factor
975+ return {}
976+
972977 toint = lambda x : math .ceil (x / fact )
973978 vals = {}
974979 try :
@@ -981,6 +986,9 @@ def _arg_values(self, interval, grid=None, **kwargs):
981986 except (KeyError , TypeError ):
982987 pass
983988
989+ if self .symbolic_factor is not None :
990+ vals [self .symbolic_factor .name ] = fact
991+
984992 return vals
985993
986994 def _arg_defaults (self , _min = None , size = None , alias = None ):
@@ -990,11 +998,9 @@ def _arg_defaults(self, _min=None, size=None, alias=None):
990998 # `factor` endpoints are legal, so we return them all. It's then
991999 # up to the caller to decide which one to pick upon reduction
9921000 dim = alias or self
993- if dim .condition is not None or size is None or dim ._factor is None :
994- return defaults
995-
996- factor = defaults [dim .symbolic_factor .name ] = self .factor
997- defaults [dim .parent .max_name ] = range (0 , factor * size - 1 )
1001+ if dim .symbolic_factor is not None :
1002+ factor = defaults [dim .symbolic_factor .name ] = self .factor
1003+ defaults [dim .parent .max_name ] = range (0 , factor * size - 1 )
9981004
9991005 return defaults
10001006
0 commit comments