@@ -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,15 @@ 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+ args = args or {}
973+ fact = kwargs .get (fname , args .get (fname , self .factor ))
974+ else :
975+ # No factor
976+ return {}
977+
972978 toint = lambda x : math .ceil (x / fact )
973979 vals = {}
974980 try :
@@ -981,6 +987,9 @@ def _arg_values(self, interval, grid=None, **kwargs):
981987 except (KeyError , TypeError ):
982988 pass
983989
990+ if self .symbolic_factor is not None :
991+ vals [self .symbolic_factor .name ] = fact
992+
984993 return vals
985994
986995 def _arg_defaults (self , _min = None , size = None , alias = None ):
@@ -990,11 +999,9 @@ def _arg_defaults(self, _min=None, size=None, alias=None):
990999 # `factor` endpoints are legal, so we return them all. It's then
9911000 # up to the caller to decide which one to pick upon reduction
9921001 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 )
1002+ if dim .symbolic_factor is not None :
1003+ factor = defaults [dim .symbolic_factor .name ] = self .factor
1004+ defaults [dim .parent .max_name ] = range (0 , factor * size - 1 )
9981005
9991006 return defaults
10001007
0 commit comments