Skip to content

Commit f6f5aa5

Browse files
committed
name
1 parent d2eff1c commit f6f5aa5

6 files changed

Lines changed: 95 additions & 74 deletions

File tree

test/test_mixed_function_space_with_mesh_sequence.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ def test_mixed_function_space_with_mesh_sequence_cell():
4747
dx2 = Measure(
4848
"dx",
4949
mesh2,
50-
extra_measures={
51-
mesh0: "dx",
52-
mesh1: "dx",
53-
},
50+
extra_measures=(
51+
Measure("dx", mesh0),
52+
Measure("dx", mesh1),
53+
),
5454
)
5555
x1 = SpatialCoordinate(mesh1)
5656
# Assemble (0, 1)-block.
@@ -106,17 +106,17 @@ def test_mixed_function_space_with_mesh_sequence_facet():
106106
dS1 = Measure(
107107
"dS",
108108
mesh1,
109-
extra_measures={
110-
mesh2: "ds",
111-
},
109+
extra_measures=(
110+
Measure("ds", mesh2),
111+
),
112112
)
113113
ds2 = Measure(
114114
"ds",
115115
mesh2,
116-
extra_measures={
117-
mesh0: "dS",
118-
mesh1: "ds",
119-
},
116+
extra_measures=(
117+
Measure("dS", mesh0),
118+
Measure("ds", mesh1),
119+
),
120120
)
121121
x2 = SpatialCoordinate(mesh2)
122122
# Assemble (2, 1)-block.

ufl/algorithms/domain_analysis.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -152,16 +152,16 @@ def group_integrals_by_domain_and_type(integrals, domains):
152152
153153
Returns:
154154
Dictionary mapping (domain, integral_type) to a
155-
dictionary mapping (extra_measures, list(Integral)).
155+
dictionary mapping (extra_domain_integral_type_map, list(Integral)).
156156
"""
157157
integrals_by_domain_and_type = defaultdict(lambda: defaultdict(list))
158158
for itg in integrals:
159159
if itg.ufl_domain() is None:
160160
raise ValueError("Integral has no domain.")
161-
key = (itg.ufl_domain(), itg.integral_type())
162-
key2 = tuple(itg.extra_measures().items())
161+
key0 = (itg.ufl_domain(), itg.integral_type())
162+
key1 = tuple(itg.extra_domain_integral_type_map().items())
163163
# Append integral to list of integrals with shared key
164-
integrals_by_domain_and_type[key][key2].append(itg)
164+
integrals_by_domain_and_type[key0][key1].append(itg)
165165

166166
return integrals_by_domain_and_type
167167

@@ -293,7 +293,7 @@ def build_integral_data(integrals):
293293
integral_type = integral.integral_type()
294294
ufl_domain = integral.ufl_domain()
295295
subdomain_ids = integral.subdomain_id()
296-
extra_measures_tuple = tuple(integral.extra_measures().items())
296+
extra_domain_integral_type_tuple = tuple(integral.extra_domain_integral_type_map().items())
297297
if "everywhere" in subdomain_ids:
298298
raise ValueError(
299299
"'everywhere' not a valid subdomain id. "
@@ -302,32 +302,34 @@ def build_integral_data(integrals):
302302

303303
# Group for integral data (One integral data object for all
304304
# integrals with same domain, itype, (but possibly different metadata).
305-
itgs[(ufl_domain, integral_type, subdomain_ids, extra_measures_tuple)].append(integral)
305+
itgs[(ufl_domain, integral_type, subdomain_ids, extra_domain_integral_type_tuple)].append(
306+
integral
307+
)
306308

307309
# Build list with canonical ordering, iteration over dicts
308310
# is not deterministic across python versions
309311
def keyfunc(item):
310-
(d, itype, sid, extra_meas_tuple), integrals = item
312+
(d, itype, sid, extra_d_itype_tuple), integrals = item
311313
sid_int = tuple(-1 if i == "otherwise" else i for i in sid)
312314
return (
313315
d._ufl_sort_key_(),
314316
itype,
315317
(type(sid).__name__,),
316318
sid_int,
317-
tuple((d_._ufl_sort_key_(), itype_) for d_, itype_ in extra_meas_tuple),
319+
tuple((d_._ufl_sort_key_(), itype_) for d_, itype_ in extra_d_itype_tuple),
318320
)
319321

320322
integral_datas = []
321-
for (d, itype, sid, extra_meas_tuple), integrals in sorted(itgs.items(), key=keyfunc):
322-
domain_integral_type_tuple = ((d, itype),) + extra_meas_tuple
323+
for (d, itype, sid, extra_d_itype_tuple), integrals in sorted(itgs.items(), key=keyfunc):
324+
d_itype_tuple = ((d, itype),) + extra_d_itype_tuple
323325
integral_datas.append(
324326
IntegralData(
325327
d,
326328
itype,
327329
sid,
328330
integrals,
329331
{},
330-
domain_integral_type_map=dict(domain_integral_type_tuple),
332+
domain_integral_type_map=dict(d_itype_tuple),
331333
)
332334
)
333335
return integral_datas
@@ -357,7 +359,7 @@ def group_form_integrals(form, domains, do_append_everywhere_integrals=True):
357359
if ddt_integrals_map is None:
358360
continue
359361

360-
for extra_measures_tuple, ddt_integrals in ddt_integrals_map.items():
362+
for extra_domain_integral_type_tuple, ddt_integrals in ddt_integrals_map.items():
361363
# Group integrals by subdomain id, after splitting e.g.
362364
# f*dx((1,2)) + g*dx((2,3)) -> f*dx(1) + (f+g)*dx(2) + g*dx(3)
363365
# (note: before this call, 'everywhere' is a valid subdomain_id,
@@ -406,7 +408,9 @@ def calc_hash(cd):
406408
subdomain_id,
407409
metadata,
408410
None,
409-
extra_measures=dict(extra_measures_tuple),
411+
extra_domain_integral_type_map=dict(
412+
extra_domain_integral_type_tuple
413+
),
410414
)
411415
integral = attach_coordinate_derivatives(integral, samecd_integrals[0])
412416
integrals.append(integral)
@@ -423,15 +427,15 @@ def calc_hash(cd):
423427
meta_hash = hash(canonicalize_metadata(metadata))
424428
subdomain_id = integral.subdomain_id()
425429
subdomain_data = id_or_none(integral.subdomain_data())
426-
extra_measures_tuple = tuple(integral.extra_measures().items())
430+
extra_domain_integral_type_tuple = tuple(integral.extra_domain_integral_type_map().items())
427431
integrand = renumber_indices(integral.integrand())
428432
key = (
429433
integral_type,
430434
ufl_domain,
431435
meta_hash,
432436
integrand,
433437
subdomain_data,
434-
extra_measures_tuple,
438+
extra_domain_integral_type_tuple,
435439
)
436440
unique_integrals[key] += (subdomain_id,)
437441
metadata_table[key] = metadata
@@ -444,7 +448,7 @@ def calc_hash(cd):
444448
metadata,
445449
integrand,
446450
subdomain_data,
447-
extra_measures_tuple,
451+
extra_domain_integral_type_tuple,
448452
) = integral_data
449453
integral = Integral(
450454
integrand,
@@ -453,7 +457,7 @@ def calc_hash(cd):
453457
subdomain_ids,
454458
metadata_table[integral_data],
455459
subdomain_data,
456-
extra_measures=dict(extra_measures_tuple),
460+
extra_domain_integral_type_map=dict(extra_domain_integral_type_tuple),
457461
)
458462
grouped_integrals.append(integral)
459463

ufl/algorithms/signature.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,10 @@ def compute_form_signature(form, renumbering): # FIXME: Fix callers
144144
integrand_hashdata = compute_expression_hashdata(integral.integrand(), terminal_hashdata)
145145

146146
domain_hashdata = integral.ufl_domain()._ufl_signature_data_(renumbering)
147-
extra_measures_hash_data = tuple(
148-
(d._ufl_signature_data_(renumbering), it) for d, it in integral.extra_measures().items()
147+
# Note that integlra.extra_domain_integral_type_map() has been sorted by domain.
148+
extra_domain_integral_type_map_hashdata = tuple(
149+
(d._ufl_signature_data_(renumbering), it)
150+
for d, it in integral.extra_domain_integral_type_map().items()
149151
)
150152

151153
# Collect all data about integral that should be reflected in
@@ -157,7 +159,7 @@ def compute_form_signature(form, renumbering): # FIXME: Fix callers
157159
integrand_hashdata,
158160
domain_hashdata,
159161
integral.integral_type(),
160-
extra_measures_hash_data,
162+
extra_domain_integral_type_map_hashdata,
161163
integral.subdomain_id(),
162164
canonicalize_metadata(integral.metadata()),
163165
)

ufl/form.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,11 @@ def _sorted_integrals(integrals):
5353
it = integral.integral_type()
5454
si = integral.subdomain_id()
5555
# Make a sortable key.
56-
extra_measures_sortable = tuple(
57-
(d_._ufl_sort_key_(), it_) for d_, it_ in integral.extra_measures().items()
56+
extra_sortable = tuple(
57+
(d_._ufl_sort_key_(), it_)
58+
for d_, it_ in integral.extra_domain_integral_type_map().items()
5859
)
59-
integrals_dict[d][it][extra_measures_sortable][si].append(integral)
60+
integrals_dict[d][it][extra_sortable][si].append(integral)
6061

6162
all_integrals = []
6263

@@ -604,11 +605,11 @@ def _analyze_domains(self):
604605
self._integration_domains = sort_domains(
605606
join_domains([itg.ufl_domain() for itg in self._integrals])
606607
)
607-
# Collect domains in extra_measures.
608-
domains_in_extra_measures = join_domains(
609-
[d for itg in self._integrals for d in itg.extra_measures()]
608+
# Collect domains in extra_domain_integral_type_map.
609+
domains_in_extra_domain_integral_type_map = join_domains(
610+
[d for itg in self._integrals for d in itg.extra_domain_integral_type_map()]
610611
)
611-
domains_in_extra_measures -= set(self._integration_domains)
612+
domains_in_extra_domain_integral_type_map -= set(self._integration_domains)
612613
# Collect domains in integrands.
613614
domains_in_integrands = set()
614615
for o in chain(
@@ -618,7 +619,7 @@ def _analyze_domains(self):
618619
domains_in_integrands.update(domain.meshes)
619620
domains_in_integrands -= set(self._integration_domains)
620621
all_domains = self._integration_domains + sort_domains(
621-
join_domains(domains_in_extra_measures | domains_in_integrands)
622+
join_domains(domains_in_extra_domain_integral_type_map | domains_in_integrands)
622623
)
623624
# Let problem solving environments access all domains via
624625
# self._domain_numbering.keys() (wrapped in extract_domains()).

ufl/integral.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class Integral:
2323
"""An integral over a single domain."""
2424

2525
__slots__ = (
26-
"_extra_measures",
26+
"_extra_domain_integral_type_map",
2727
"_integral_type",
2828
"_integrand",
2929
"_metadata",
@@ -40,7 +40,7 @@ def __init__(
4040
subdomain_id,
4141
metadata,
4242
subdomain_data,
43-
extra_measures=None,
43+
extra_domain_integral_type_map=None,
4444
):
4545
"""Initialise."""
4646
if not isinstance(integrand, Expr):
@@ -51,11 +51,12 @@ def __init__(
5151
self._subdomain_id = subdomain_id
5252
self._metadata = metadata
5353
self._subdomain_data = subdomain_data
54-
if extra_measures is None:
55-
self._extra_measures = {}
54+
if extra_domain_integral_type_map is None:
55+
self._extra_domain_integral_type_map = {}
5656
else:
57-
self._extra_measures = {
58-
d: extra_measures[d] for d in sort_domains(extra_measures.keys())
57+
self._extra_domain_integral_type_map = {
58+
d: extra_domain_integral_type_map[d]
59+
for d in sort_domains(extra_domain_integral_type_map.keys())
5960
}
6061

6162
def reconstruct(
@@ -66,7 +67,7 @@ def reconstruct(
6667
subdomain_id=None,
6768
metadata=None,
6869
subdomain_data=None,
69-
extra_measures=None,
70+
extra_domain_integral_type_map=None,
7071
):
7172
"""Construct a new Integral object with some properties replaced with new values.
7273
@@ -87,16 +88,16 @@ def reconstruct(
8788
metadata = self.metadata()
8889
if subdomain_data is None:
8990
subdomain_data = self._subdomain_data
90-
if extra_measures is None:
91-
extra_measures = self._extra_measures
91+
if extra_domain_integral_type_map is None:
92+
extra_domain_integral_type_map = self._extra_domain_integral_type_map
9293
return Integral(
9394
integrand,
9495
integral_type,
9596
domain,
9697
subdomain_id,
9798
metadata,
9899
subdomain_data,
99-
extra_measures=extra_measures,
100+
extra_domain_integral_type_map=extra_domain_integral_type_map,
100101
)
101102

102103
def integrand(self):
@@ -115,9 +116,9 @@ def subdomain_id(self):
115116
"""Return the subdomain id of this integral."""
116117
return self._subdomain_id
117118

118-
def extra_measures(self):
119-
"""Return the additional domain-integral_type map."""
120-
return self._extra_measures
119+
def extra_domain_integral_type_map(self):
120+
"""Return the extra domain-integral_type map."""
121+
return self._extra_domain_integral_type_map
121122

122123
def metadata(self):
123124
"""Return the compiler metadata this integral has been annotated with."""
@@ -150,7 +151,7 @@ def __str__(self):
150151
mname = ufl.measure.integral_type_to_measure_name[self._integral_type]
151152
temp = {
152153
d: ufl.measure.integral_type_to_measure_name[it]
153-
for d, it in self._extra_measures.items()
154+
for d, it in self._extra_domain_integral_type_map.items()
154155
}
155156
return (
156157
f"{{self._integrand}} * "
@@ -162,7 +163,7 @@ def __repr__(self):
162163
return (
163164
f"Integral({self._integrand!r}, {self._integral_type!r}, {self._ufl_domain!r}, "
164165
f"{self._subdomain_id!r}, {self._metadata!r}, {self._subdomain_data!r}, "
165-
f"extra_measures={self._extra_measures!r})"
166+
f"extra_domain_integral_type_map={self._extra_domain_integral_type_map!r})"
166167
)
167168

168169
def __eq__(self, other):
@@ -175,7 +176,7 @@ def __eq__(self, other):
175176
and self._integrand == other._integrand
176177
and self._metadata == other._metadata
177178
and id_or_none(self._subdomain_data) == id_or_none(other._subdomain_data)
178-
and self._extra_measures == other._extra_measures
179+
and self._extra_domain_integral_type_map == other._extra_domain_integral_type_map
179180
)
180181

181182
def __hash__(self):
@@ -189,6 +190,6 @@ def __hash__(self):
189190
hash(self._ufl_domain),
190191
self._subdomain_id,
191192
id_or_none(self._subdomain_data),
192-
tuple((hash(d), it) for d, it in self._extra_measures.items()),
193+
tuple((hash(d), it) for d, it in self._extra_domain_integral_type_map.items()),
193194
)
194195
return hash(hashdata)

0 commit comments

Comments
 (0)