Skip to content

Commit 6e2f27a

Browse files
committed
Optional equiv7_mode.
1 parent 8609970 commit 6e2f27a

File tree

1 file changed

+59
-32
lines changed

1 file changed

+59
-32
lines changed

cutgeneratingfunctionology/igp/functions.sage

+59-32
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,15 @@ def verts(I1, J1, K1):
130130
if len(temp) > 0:
131131
return temp
132132

133+
equiv7_mode = False
134+
133135
def generate_maximal_additive_faces(fn):
134136
if hasattr(fn, '_maximal_additive_faces'):
135137
return fn._maximal_additive_faces
136138
if fn.is_discrete():
137139
result = generate_maximal_additive_faces_discrete(fn)
138-
#elif fn.is_continuous():
139-
# result = generate_maximal_additive_faces_continuous(fn)
140+
elif fn.is_continuous() and not equiv7_mode:
141+
result = generate_maximal_additive_faces_continuous(fn)
140142
else:
141143
result = generate_maximal_additive_faces_general(fn)
142144
fn._maximal_additive_faces = result
@@ -2715,36 +2717,61 @@ class FunctionalDirectedMove (FastPiecewise):
27152717
def reduced_by_components(self, covered_components, pts_of_discontinuity=True):
27162718
domain_move = [interval_including_endpoints_if_continuous(interval, pts_of_discontinuity, self) for interval in self.intervals()]
27172719
covered_domains = []
2718-
for component in covered_components:
2719-
preimages = [ self.apply_to_coho_interval(interval, inverse=True) for interval in component ]
2720-
preimages.sort(key=coho_interval_left_endpoint_with_epsilon)
2721-
covered_domain = list(intersection_of_coho_intervals([component, preimages]))
2722-
covered_domains.append(covered_domain) #list of open sets in the new version
2723-
domain_component_open = union_of_coho_intervals_minus_union_of_coho_intervals(covered_domains,[])
2724-
domain_component = union_of_coho_intervals_minus_union_of_coho_intervals([[interval_including_endpoints_if_continuous(interval, pts_of_discontinuity, self) for interval in domain_component_open]],[])
2725-
domains = []
2726-
for j in domain_component:
2727-
keep = False
2728-
for i in domain_move:
2729-
if coho_intervals_intersecting(i, j):
2730-
# extend to the boundary of covered interval.
2731-
keep = True
2732-
break
2733-
if keep:
2734-
domains.append(j)
2735-
extended_domains = union_of_coho_intervals_minus_union_of_coho_intervals([domain_move, domains], [])
2736-
reduced_domains = []
2737-
for i in extended_domains:
2738-
i_open = open_interval(i[0], i[1])
2739-
keep = True
2740-
for j in domain_component_open:
2741-
if coho_interval_contained_in_coho_interval(i_open, j):
2742-
# remove interval i from domain if it is fully covered.
2743-
keep = False
2744-
break
2745-
if keep:
2746-
reduced_domains.append(i)
2747-
open_domains = [open_interval(i[0],i[1]) for i in reduced_domains]
2720+
if equiv7_mode:
2721+
for component in covered_components:
2722+
preimages = [ self.apply_to_coho_interval(interval, inverse=True) for interval in component ]
2723+
preimages.sort(key=coho_interval_left_endpoint_with_epsilon)
2724+
covered_domain = list(intersection_of_coho_intervals([component, preimages]))
2725+
covered_domains.append(covered_domain) #list of open sets in the new version
2726+
domain_component_open = union_of_coho_intervals_minus_union_of_coho_intervals(covered_domains,[])
2727+
domain_component = union_of_coho_intervals_minus_union_of_coho_intervals([[interval_including_endpoints_if_continuous(interval, pts_of_discontinuity, self) for interval in domain_component_open]],[])
2728+
domains = []
2729+
for j in domain_component:
2730+
keep = False
2731+
for i in domain_move:
2732+
if coho_intervals_intersecting(i, j):
2733+
# extend to the boundary of covered interval.
2734+
keep = True
2735+
break
2736+
if keep:
2737+
domains.append(j)
2738+
extended_domains = union_of_coho_intervals_minus_union_of_coho_intervals([domain_move, domains], [])
2739+
reduced_domains = []
2740+
for i in extended_domains:
2741+
i_open = open_interval(i[0], i[1])
2742+
keep = True
2743+
for j in domain_component_open:
2744+
if coho_interval_contained_in_coho_interval(i_open, j):
2745+
# remove interval i from domain if it is fully covered.
2746+
keep = False
2747+
break
2748+
if keep:
2749+
reduced_domains.append(i)
2750+
open_domains = [open_interval(i[0],i[1]) for i in reduced_domains]
2751+
else:
2752+
for component in covered_components:
2753+
preimages = [ self.apply_to_coho_interval(interval, inverse=True) for interval in component ]
2754+
preimages.sort(key=coho_interval_left_endpoint_with_epsilon)
2755+
restricted_domain = intersection_of_coho_intervals([component, preimages])
2756+
covered_domain = [interval_including_endpoints_if_continuous(interval, pts_of_discontinuity, self) for interval in restricted_domain]
2757+
covered_domains.append(covered_domain)
2758+
domain_component = union_of_coho_intervals_minus_union_of_coho_intervals(covered_domains,[])
2759+
domain_component_indices = set([])
2760+
domain_move_indices = set(range(len(domain_move)))
2761+
domains = []
2762+
for index_i in list(domain_move_indices):
2763+
i = domain_move[index_i]
2764+
for index_j in range(len(domain_component)):
2765+
j = domain_component[index_j]
2766+
if coho_interval_contained_in_coho_interval(i, j):
2767+
# remove interval i from domain if it is fully covered.
2768+
domain_move_indices.remove(index_i)
2769+
elif coho_intervals_intersecting(i, j):
2770+
# extend to the boundary of covered interval.
2771+
domain_component_indices.add(index_j)
2772+
domains = [[domain_move[index_i] for index_i in sorted(domain_move_indices)], [domain_component[index_j] for index_j in sorted(domain_component_indices)]]
2773+
union_domains = union_of_coho_intervals_minus_union_of_coho_intervals(domains, [])
2774+
open_domains = [open_interval(i[0],i[1]) for i in union_domains]
27482775
return FunctionalDirectedMove(open_domains, self.directed_move)
27492776

27502777
def plot(self, rgbcolor=None, color=None, *args, **kwds):

0 commit comments

Comments
 (0)