@@ -915,7 +915,7 @@ def __init_finalize__(self, name, parent=None, factor=None, condition=None,
915
915
916
916
# Process subsampling factor
917
917
fname = f"{ name } f"
918
- if factor is None :
918
+ if factor is None or factor == 1 :
919
919
self ._factor = None
920
920
elif is_number (factor ):
921
921
self ._factor = int (factor )
@@ -966,9 +966,14 @@ def free_symbols(self):
966
966
pass
967
967
return retval
968
968
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
+
972
977
toint = lambda x : math .ceil (x / fact )
973
978
vals = {}
974
979
try :
@@ -981,6 +986,9 @@ def _arg_values(self, interval, grid=None, **kwargs):
981
986
except (KeyError , TypeError ):
982
987
pass
983
988
989
+ if self .symbolic_factor is not None :
990
+ vals [self .symbolic_factor .name ] = fact
991
+
984
992
return vals
985
993
986
994
def _arg_defaults (self , _min = None , size = None , alias = None ):
@@ -990,11 +998,9 @@ def _arg_defaults(self, _min=None, size=None, alias=None):
990
998
# `factor` endpoints are legal, so we return them all. It's then
991
999
# up to the caller to decide which one to pick upon reduction
992
1000
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 )
998
1004
999
1005
return defaults
1000
1006
0 commit comments