@@ -237,14 +237,6 @@ def __new__(cls, *args, **kwargs):
237237 cond = d .relation (cond , GuardFactor (d ))
238238 conditionals [d ] = cond
239239
240- # Replace the ConditionalDimensions in `expr`
241- for d , cond in conditionals .items ():
242- # Replace dimension with index
243- index = d .index
244- index = index - relational_min (cond , d .parent )
245- shift = relational_shift (cond , d .parent )
246- expr = uxreplace (expr , {d : IntDiv (index , d .symbolic_factor ) + shift })
247-
248240 # Merge conditionals when possible. E.g if we have an implicit_dim
249241 # and there is a dimension with the same parent, we ca merged
250242 # its condition
@@ -254,14 +246,22 @@ def __new__(cls, *args, **kwargs):
254246 for cd in dict (conditionals ):
255247 if cd .parent == d .parent and cd != d :
256248 cond = conditionals .pop (d )
257- mode = cd .relation and d .relation
258- if issubclass (mode , sympy .Or ):
259- conditionals [d ] = cond
260- conditionals .pop (cd )
249+ if d .relation == 'strict' :
250+ conditionals [cd ] = conditionals [d ] = cond
261251 else :
252+ mode = cd .relation and d .relation
262253 conditionals [cd ] = mode (cond , conditionals [cd ])
263254 break
264255
256+ # Replace the ConditionalDimensions in `expr`
257+ for d , cond in conditionals .items ():
258+ # Replace dimension with index
259+ index = d .index
260+ if d .condition is not None and d in expr .free_symbols :
261+ index = index - relational_min (cond , d .parent )
262+ shift = relational_shift (cond , d .parent )
263+ expr = uxreplace (expr , {d : IntDiv (index , d .symbolic_factor ) + shift })
264+
265265 # Lower all Differentiable operations into SymPy operations
266266 rhs = diff2sympy (expr .rhs )
267267
0 commit comments