@@ -904,10 +904,10 @@ class ConditionalDimension(DerivedDimension):
904904 is_Conditional = True
905905
906906 __rkwargs__ = DerivedDimension .__rkwargs__ + \
907- ('symbolic_factor' , ' factor' , 'condition' , 'indirect' )
907+ ('factor' , 'condition' , 'indirect' )
908908
909909 def __init_finalize__ (self , name , parent = None , factor = None , condition = None ,
910- indirect = False , symbolic_factor = None , ** kwargs ):
910+ indirect = False , ** kwargs ):
911911 # `parent=None` degenerates to a ConditionalDimension outside of
912912 # any iteration space
913913 if parent is None :
@@ -916,31 +916,22 @@ def __init_finalize__(self, name, parent=None, factor=None, condition=None,
916916 super ().__init_finalize__ (name , parent )
917917
918918 # Process subsampling factor
919- fname = f"{ name } f"
920919 if factor is None or factor == 1 :
921920 self ._factor = None
922921 elif is_number (factor ):
923922 self ._factor = int (factor )
924923 elif factor .is_Constant :
925924 deprecations .constant_factor_warn
926925 self ._factor = factor
927- symbolic_factor = factor
928926 else :
929- raise ValueError ("factor must be an integer or integer Constant" )
930-
931- if self ._factor is not None :
932- # Always make the factor symbolic to allow overrides with different factor.
933- self ._symbolic_factor = symbolic_factor or \
934- SubsamplingFactor (name = fname , dtype = np .int32 , is_const = True )
935- else :
936- self ._symbolic_factor = None
927+ raise ValueError ("factor must be an integer" )
937928
938929 self ._condition = condition
939930 self ._indirect = indirect
940931
941932 @property
942- def spacing (self ):
943- return self .factor_data * self . parent . spacing
933+ def uses_symbolic_factor (self ):
934+ return self ._factor is not None
944935
945936 @property
946937 def factor_data (self ):
@@ -950,12 +941,23 @@ def factor_data(self):
950941 return self .factor
951942
952943 @property
953- def factor (self ):
954- return self ._factor if self ._factor is not None else 1
944+ def spacing (self ):
945+ return self .factor_data * self .parent . spacing
955946
956947 @property
948+ def factor (self ):
949+ return self ._factor if self .uses_symbolic_factor else 1
950+
951+ @cached_property
957952 def symbolic_factor (self ):
958- return self ._symbolic_factor
953+ if not self .uses_symbolic_factor :
954+ return None
955+ elif isinstance (self .factor , Constant ):
956+ return self .factor
957+ else :
958+ return SubsamplingFactor (
959+ name = f'{ self .name } f' , dtype = np .int32 , is_const = True
960+ )
959961
960962 @property
961963 def condition (self ):
@@ -977,14 +979,13 @@ def free_symbols(self):
977979 return retval
978980
979981 def _arg_values (self , interval , grid = None , args = None , ** kwargs ):
980- if self .symbolic_factor is not None :
981- fname = self .symbolic_factor .name
982- args = args or {}
983- fact = kwargs .get (fname , args .get (fname , self .factor_data ))
984- else :
985- # No factor
982+ if not self .uses_symbolic_factor :
986983 return {}
987984
985+ args = args or {}
986+ fname = self .symbolic_factor .name
987+ fact = kwargs .get (fname , args .get (fname , self .factor_data ))
988+
988989 toint = lambda x : math .ceil (x / fact )
989990 vals = {}
990991 try :
@@ -997,8 +998,7 @@ def _arg_values(self, interval, grid=None, args=None, **kwargs):
997998 except (KeyError , TypeError ):
998999 pass
9991000
1000- if self .symbolic_factor is not None :
1001- vals [self .symbolic_factor .name ] = fact
1001+ vals [self .symbolic_factor .name ] = fact
10021002
10031003 return vals
10041004
@@ -1009,7 +1009,7 @@ def _arg_defaults(self, _min=None, size=None, alias=None):
10091009 # `factor` endpoints are legal, so we return them all. It's then
10101010 # up to the caller to decide which one to pick upon reduction
10111011 dim = alias or self
1012- if dim .symbolic_factor is not None :
1012+ if dim .uses_symbolic_factor :
10131013 factor = defaults [dim .symbolic_factor .name ] = self .factor_data
10141014 defaults [dim .parent .max_name ] = range (0 , factor * size - 1 )
10151015
0 commit comments