Skip to content

Instantly share code, notes, and snippets.

@wence-
Last active January 29, 2016 12:06
Show Gist options
  • Select an option

  • Save wence-/a594eef1df5301764d0e to your computer and use it in GitHub Desktop.

Select an option

Save wence-/a594eef1df5301764d0e to your computer and use it in GitHub Desktop.
diff --git a/firedrake/fc/driver.py b/firedrake/fc/driver.py
index 1fb0e92..93da812 100644
--- a/firedrake/fc/driver.py
+++ b/firedrake/fc/driver.py
@@ -2,6 +2,7 @@ from __future__ import absolute_import
import numpy
import time
+import collections
from ufl.algorithms import compute_form_data
@@ -83,7 +84,7 @@ def compile_integral(integral, fd, prefix):
decl = coffee.Decl("const int *restrict *restrict", coffee.Symbol("cell_orientations"))
arglist.insert(2, decl)
- index_extents = {}
+ index_extents = collections.OrderedDict()
for e in simplified:
index_extents.update(ein.collect_index_extents(e))
index_ordering = apply_prefix_ordering(index_extents.keys(),
diff --git a/firedrake/fc/einstein.py b/firedrake/fc/einstein.py
index 2eb824d..2af258c 100644
--- a/firedrake/fc/einstein.py
+++ b/firedrake/fc/einstein.py
@@ -514,7 +514,7 @@ def inline_indices(expression):
def collect_index_extents(expression):
- result = {}
+ result = collections.OrderedDict()
for node in traversal([expression]):
if isinstance(node, Indexed):
diff --git a/firedrake/fc/scheduling.py b/firedrake/fc/scheduling.py
index 3cccbc5..db97627 100644
--- a/firedrake/fc/scheduling.py
+++ b/firedrake/fc/scheduling.py
@@ -8,10 +8,20 @@ from firedrake.fc import einstein as ein, impero as imp
from firedrake.fc.node import traversal
+class OrderedDefaultDict(collections.OrderedDict):
+ def __init__(self, factory, *args, **kwargs):
+ self.factory = factory
+ super(OrderedDefaultDict, self).__init__(*args, **kwargs)
+
+ def __missing__(self, key):
+ val = self[key] = self.factory()
+ return val
+
+
class Queue(object):
def __init__(self, reference_count, get_indices):
self.waiting = reference_count.copy()
- self.queue = collections.defaultdict(list)
+ self.queue = OrderedDefaultDict(list)
self.get_indices = get_indices
def reference(self, o):
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment