Skip to content

Commit 0520177

Browse files
committed
tweak mul mode
1 parent e74e828 commit 0520177

4 files changed

Lines changed: 13 additions & 30 deletions

File tree

devito/finite_differences/differentiable.py

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,6 @@ def coefficients(self):
185185
return sorted(coefficients, key=key, reverse=True)[0]
186186

187187
def _eval_at(self, func, **kwargs):
188-
if not func.is_Staggered and not self.is_Staggered:
189-
# Cartesian grid, do no waste time
190-
return self
191188
return self.func(*[getattr(a, '_eval_at', lambda x, **kw: a)(func, **kwargs)
192189
for a in self.args])
193190

@@ -491,42 +488,21 @@ def has_free(self, *patterns):
491488
return all(i in self.free_symbols for i in patterns)
492489

493490

494-
<<<<<<< HEAD
495491
def highest_priority(diff_op):
496492
if not diff_op._args_diff:
497493
return diff_op
498494

499-
=======
500-
def highest_priority(DiffOp, ref=None):
501-
>>>>>>> c34bae6f0 (tweak mul mode)
502495
# We want to get the object with highest priority
503496
# We also need to make sure that the object with the largest
504497
# set of dimensions is used when multiple ones with the same
505498
# priority appear
506-
<<<<<<< HEAD
507499
prio = lambda x: (getattr(x, '_fd_priority', 0), len(x.dimensions))
508-
<<<<<<< HEAD
509500
prio_func = sorted(diff_op._args_diff, key=prio, reverse=True)[0]
510501

511502
# The highest priority must be a Function
512503
if not isinstance(prio_func, AbstractFunction):
513504
return highest_priority(prio_func)
514505
return prio_func
515-
=======
516-
=======
517-
def stagg(x):
518-
try:
519-
return int(x.staggered == ref.staggered)
520-
except AttributeError:
521-
return 0
522-
prio = lambda x: (stagg(x), getattr(x, '_fd_priority', 0), len(x.dimensions))
523-
>>>>>>> c34bae6f0 (tweak mul mode)
524-
args = DiffOp._args_diff
525-
if not args:
526-
return DiffOp
527-
else:
528-
return sorted(DiffOp._args_diff, key=prio, reverse=True)[0]
529-
>>>>>>> 198aedce4 (api: add mul interp mode)
530506

531507

532508
class DifferentiableOp(Differentiable):
@@ -594,16 +570,14 @@ class DifferentiableFunction(DifferentiableOp):
594570
def __new__(cls, *args, **kwargs):
595571
return cls.__sympy_class__.__new__(cls, *args, **kwargs)
596572

597-
<<<<<<< HEAD
598573
@property
599574
def _fd_priority(self):
600575
if highest_priority(self) is self:
601576
return super()._fd_priority
602577
return highest_priority(self)._fd_priority
603-
=======
578+
604579
def _eval_at(self, func, **kwargs):
605580
return self
606-
>>>>>>> 198aedce4 (api: add mul interp mode)
607581

608582

609583
class Add(DifferentiableOp, sympy.Add):
@@ -1179,7 +1153,7 @@ class diffify:
11791153
11801154
Notes
11811155
-----
1182-
The name "diffify" stems from SymPy's "simpify", which has an analogous task --
1156+
The name "diffify" stems from SymPy's "simplify", which has an analogous task --
11831157
converting all arguments into SymPy core objects.
11841158
"""
11851159

devito/types/basic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ def c0(self):
10111011
def _eval_deriv(self):
10121012
return self
10131013

1014-
@cached_property
1014+
@property
10151015
def _grid_map(self):
10161016
"""
10171017
Mapper of off-grid interpolation points indices for each dimension.

devito/types/dense.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,7 @@ def __fd_setup__(self):
11181118
def _fd_priority(self):
11191119
return 1.2 if self.staggered.on_node else 1.1
11201120

1121-
def _eval_at(self, func):
1121+
def _eval_at(self, func, **kwargs):
11221122
if self.staggered == func.staggered or self.interp_order == 0:
11231123
return self
11241124

devito/types/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ def __eq__(self, other):
6565

6666
return all_same or all_node
6767

68+
@property
69+
def _ref(self):
70+
if not self:
71+
return None
72+
elif self.on_node:
73+
return NODE
74+
else:
75+
return tuple(d for d, s in zip(self.getters, self, strict=True) if s == 1)
76+
6877
__hash__ = DimensionTuple.__hash__
6978

7079

0 commit comments

Comments
 (0)