Skip to content

Commit ddc1759

Browse files
committed
remove_indices
1 parent bc1a5e0 commit ddc1759

File tree

1 file changed

+0
-94
lines changed

1 file changed

+0
-94
lines changed

tsfc/ufl_utils.py

Lines changed: 0 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -496,97 +496,3 @@ class TSFCConstantMixin:
496496

497497
def __init__(self):
498498
pass
499-
500-
501-
class FixedIndexRemover(MultiFunction):
502-
503-
def __init__(self, fimap):
504-
MultiFunction.__init__(self)
505-
self.fimap = fimap
506-
507-
expr = MultiFunction.reuse_if_untouched
508-
509-
def zero(self, o):
510-
free_indices = []
511-
index_dimensions = []
512-
for i, d in zip(o.ufl_free_indices, o.ufl_index_dimensions):
513-
if Index(i) in self.fimap:
514-
ind_j = self.fimap[Index(i)]
515-
if not isinstance(ind_j, FixedIndex):
516-
free_indices.append(ind_j.count())
517-
index_dimensions.append(d)
518-
else:
519-
free_indices.append(i)
520-
index_dimensions.append(d)
521-
return Zero(shape=o.ufl_shape, free_indices=tuple(free_indices), index_dimensions=tuple(index_dimensions))
522-
523-
def list_tensor(self, o):
524-
rule = FixedIndexRemover(self.fimap)
525-
cc = []
526-
for o1 in o.ufl_operands:
527-
comp = map_expr_dag(rule, o1)
528-
cc.append(comp)
529-
return ListTensor(*cc)
530-
531-
def multi_index(self, o):
532-
return MultiIndex(tuple(self.fimap.get(i, i) for i in o.indices()))
533-
534-
535-
class IndexRemover(MultiFunction):
536-
537-
def __init__(self):
538-
MultiFunction.__init__(self)
539-
540-
expr = MultiFunction.reuse_if_untouched
541-
542-
def _zero_simplify(self, o):
543-
operand, = o.ufl_operands
544-
rule = IndexRemover()
545-
operand = map_expr_dag(rule, operand)
546-
if isinstance(operand, Zero):
547-
return Zero(shape=o.ufl_shape, free_indices=o.ufl_free_indices, index_dimensions=o.ufl_index_dimensions)
548-
else:
549-
return o._ufl_expr_reconstruct_(operand)
550-
551-
def indexed(self, o):
552-
o1, i1 = o.ufl_operands
553-
if isinstance(o1, ComponentTensor):
554-
o2, i2 = o1.ufl_operands
555-
fimap = dict(zip(i2.indices(), i1.indices(), strict=True))
556-
rule = FixedIndexRemover(fimap)
557-
v = map_expr_dag(rule, o2)
558-
rule = IndexRemover()
559-
return map_expr_dag(rule, v)
560-
elif isinstance(o1, ListTensor):
561-
if isinstance(i1[0], FixedIndex):
562-
o1 = o1.ufl_operands[i1[0]._value]
563-
rule = IndexRemover()
564-
if len(i1) > 1:
565-
i1 = MultiIndex(i1[1:])
566-
return map_expr_dag(rule, Indexed(o1, i1))
567-
else:
568-
return map_expr_dag(rule, o1)
569-
rule = IndexRemover()
570-
o1 = map_expr_dag(rule, o1)
571-
return Indexed(o1, i1)
572-
573-
# Do something nicer
574-
positive_restricted = _zero_simplify
575-
negative_restricted = _zero_simplify
576-
single_value_restricted = _zero_simplify
577-
to_be_restricted = _zero_simplify
578-
reference_grad = _zero_simplify
579-
reference_value = _zero_simplify
580-
581-
582-
def remove_indices(o):
583-
if isinstance(o, Form):
584-
integrals = []
585-
for integral in o.integrals():
586-
integrand = remove_indices(integral.integrand())
587-
if not isinstance(integrand, Zero):
588-
integrals.append(integral.reconstruct(integrand=integrand))
589-
return o._ufl_expr_reconstruct_(integrals)
590-
else:
591-
rule = IndexRemover()
592-
return map_expr_dag(rule, o)

0 commit comments

Comments
 (0)