7
7
import numpy as np
8
8
9
9
from devito .data import LEFT , RIGHT
10
+ from devito .deprecations import deprecations
10
11
from devito .exceptions import InvalidArgument
11
12
from devito .logger import debug
12
13
from devito .tools import Pickable , is_integer , is_number , memoized_meth
13
14
from devito .types .args import ArgProvider
14
15
from devito .types .basic import Symbol , DataSymbol , Scalar
16
+ from devito .types .constant import Constant
15
17
16
18
17
19
__all__ = ['Dimension' , 'SpaceDimension' , 'TimeDimension' , 'DefaultDimension' ,
@@ -920,8 +922,9 @@ def __init_finalize__(self, name, parent=None, factor=None, condition=None,
920
922
elif is_number (factor ):
921
923
self ._factor = int (factor )
922
924
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
925
928
else :
926
929
raise ValueError ("factor must be an integer or integer Constant" )
927
930
@@ -937,7 +940,14 @@ def __init_finalize__(self, name, parent=None, factor=None, condition=None,
937
940
938
941
@property
939
942
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
941
951
942
952
@property
943
953
def factor (self ):
@@ -970,7 +980,7 @@ def _arg_values(self, interval, grid=None, args=None, **kwargs):
970
980
if self .symbolic_factor is not None :
971
981
fname = self .symbolic_factor .name
972
982
args = args or {}
973
- fact = kwargs .get (fname , args .get (fname , self .factor ))
983
+ fact = kwargs .get (fname , args .get (fname , self .factor_data ))
974
984
else :
975
985
# No factor
976
986
return {}
@@ -1000,7 +1010,7 @@ def _arg_defaults(self, _min=None, size=None, alias=None):
1000
1010
# up to the caller to decide which one to pick upon reduction
1001
1011
dim = alias or self
1002
1012
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
1004
1014
defaults [dim .parent .max_name ] = range (0 , factor * size - 1 )
1005
1015
1006
1016
return defaults
0 commit comments