77import numpy as np
88
99from devito .data import LEFT , RIGHT
10+ from devito .deprecations import deprecations
1011from devito .exceptions import InvalidArgument
1112from devito .logger import debug
1213from devito .tools import Pickable , is_integer , is_number , memoized_meth
1314from devito .types .args import ArgProvider
1415from devito .types .basic import Symbol , DataSymbol , Scalar
16+ from devito .types .constant import Constant
1517
1618
1719__all__ = ['Dimension' , 'SpaceDimension' , 'TimeDimension' , 'DefaultDimension' ,
@@ -920,8 +922,9 @@ def __init_finalize__(self, name, parent=None, factor=None, condition=None,
920922 elif is_number (factor ):
921923 self ._factor = int (factor )
922924 elif factor .is_Constant :
923- self ._factor = factor .data
924- fname = factor .name
925+ deprecations .constant_factor_warn
926+ self ._factor = factor
927+ symbolic_factor = factor
925928 else :
926929 raise ValueError ("factor must be an integer or integer Constant" )
927930
@@ -937,7 +940,14 @@ def __init_finalize__(self, name, parent=None, factor=None, condition=None,
937940
938941 @property
939942 def spacing (self ):
940- return self .factor * self .parent .spacing
943+ return self .factor_data * self .parent .spacing
944+
945+ @property
946+ def factor_data (self ):
947+ if isinstance (self .factor , Constant ):
948+ return self .factor .data
949+ else :
950+ return self .factor
941951
942952 @property
943953 def factor (self ):
@@ -970,7 +980,7 @@ def _arg_values(self, interval, grid=None, args=None, **kwargs):
970980 if self .symbolic_factor is not None :
971981 fname = self .symbolic_factor .name
972982 args = args or {}
973- fact = kwargs .get (fname , args .get (fname , self .factor ))
983+ fact = kwargs .get (fname , args .get (fname , self .factor_data ))
974984 else :
975985 # No factor
976986 return {}
@@ -1000,7 +1010,7 @@ def _arg_defaults(self, _min=None, size=None, alias=None):
10001010 # up to the caller to decide which one to pick upon reduction
10011011 dim = alias or self
10021012 if dim .symbolic_factor is not None :
1003- factor = defaults [dim .symbolic_factor .name ] = self .factor
1013+ factor = defaults [dim .symbolic_factor .name ] = self .factor_data
10041014 defaults [dim .parent .max_name ] = range (0 , factor * size - 1 )
10051015
10061016 return defaults
0 commit comments