From 4703dc616ad2010e0d1437f79620de98d6424d29 Mon Sep 17 00:00:00 2001
From: Marc Bonnici <marc.bonnici@arm.com>
Date: Wed, 14 Feb 2018 16:59:06 +0000
Subject: [PATCH] framework/agenda: Remove unused code

---
 wa/framework/agenda.py | 247 -----------------------------------------
 1 file changed, 247 deletions(-)
 delete mode 100644 wa/framework/agenda.py

diff --git a/wa/framework/agenda.py b/wa/framework/agenda.py
deleted file mode 100644
index a260047c..00000000
--- a/wa/framework/agenda.py
+++ /dev/null
@@ -1,247 +0,0 @@
-#    Copyright 2015 ARM Limited
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import os
-from copy import copy
-from collections import OrderedDict, defaultdict
-
-from wa.framework.exception import ConfigError, SerializerSyntaxError
-from wa.utils.serializer import yaml
-from wa.utils import counter
-
-
-def get_aliased_param(d, aliases, default=None, pop=True):
-    alias_map = [i for i, a in enumerate(aliases) if a in d]
-    if len(alias_map) > 1:
-        message = 'Only one of {} may be specified in a single entry'
-        raise ConfigError(message.format(aliases))
-    elif alias_map:
-        if pop:
-            return d.pop(aliases[alias_map[0]])
-        else:
-            return d[aliases[alias_map[0]]]
-    else:
-        return default
-
-
-class AgendaEntry(object):
-
-    def to_dict(self):
-        return copy(self.__dict__)
-
-    def __str__(self):
-        name = self.__class__.__name__.split('.')[-1]
-        if hasattr(self, 'id'):
-            # pylint: disable=no-member
-            return '{}({})'.format(name, self.id)
-        else:
-            return name
-
-    __repr__ = __str__
-
-
-class AgendaWorkloadEntry(AgendaEntry):
-    """
-    Specifies execution of a workload, including things like the number of
-    iterations, device runtime_parameters configuration, etc.
-
-    """
-
-    def __init__(self, **kwargs):
-        super(AgendaWorkloadEntry, self).__init__()
-        self.id = kwargs.pop('id')
-        self.workload_name = get_aliased_param(kwargs, ['workload_name', 'name'])
-        if not self.workload_name:
-            raise ConfigError('No workload name specified in entry {}'.format(self.id))
-        self.label = kwargs.pop('label', self.workload_name)
-        self.number_of_iterations = kwargs.pop('iterations', None)
-        self.boot_parameters = get_aliased_param(kwargs,
-                                                 ['boot_parameters', 'boot_params'],
-                                                 default=OrderedDict())
-        self.runtime_parameters = get_aliased_param(kwargs,
-                                                    ['runtime_parameters', 'runtime_params'],
-                                                    default=OrderedDict())
-        self.workload_parameters = get_aliased_param(kwargs,
-                                                     ['workload_parameters', 'workload_params', 'params'],
-                                                     default=OrderedDict())
-        self.instruments = kwargs.pop('instruments', [])
-        self.flash = kwargs.pop('flash', OrderedDict())
-        self.classifiers = kwargs.pop('classifiers', OrderedDict())
-        if kwargs:
-            raise ConfigError('Invalid entry(ies) in workload {}: {}'.format(self.id, ', '.join(kwargs.keys())))
-
-
-class AgendaSectionEntry(AgendaEntry):
-    """
-    Specifies execution of a workload, including things like the number of
-    iterations, device runtime_parameters configuration, etc.
-
-    """
-
-    def __init__(self, agenda, **kwargs):
-        super(AgendaSectionEntry, self).__init__()
-        self.id = kwargs.pop('id')
-        self.number_of_iterations = kwargs.pop('iterations', None)
-        self.boot_parameters = get_aliased_param(kwargs,
-                                                 ['boot_parameters', 'boot_params'],
-                                                 default=OrderedDict())
-        self.runtime_parameters = get_aliased_param(kwargs,
-                                                    ['runtime_parameters', 'runtime_params', 'params'],
-                                                    default=OrderedDict())
-        self.workload_parameters = get_aliased_param(kwargs,
-                                                     ['workload_parameters', 'workload_params'],
-                                                     default=OrderedDict())
-        self.instruments = kwargs.pop('instruments', [])
-        self.flash = kwargs.pop('flash', OrderedDict())
-        self.classifiers = kwargs.pop('classifiers', OrderedDict())
-        self.workloads = []
-        for w in kwargs.pop('workloads', []):
-            self.workloads.append(agenda.get_workload_entry(w))
-        if kwargs:
-            raise ConfigError('Invalid entry(ies) in section {}: {}'.format(self.id, ', '.join(kwargs.keys())))
-
-    def to_dict(self):
-        d = copy(self.__dict__)
-        d['workloads'] = [w.to_dict() for w in self.workloads]
-        return d
-
-
-class AgendaGlobalEntry(AgendaEntry):
-    """
-    Workload configuration global to all workloads.
-
-    """
-
-    def __init__(self, **kwargs):
-        super(AgendaGlobalEntry, self).__init__()
-        self.number_of_iterations = kwargs.pop('iterations', None)
-        self.boot_parameters = get_aliased_param(kwargs,
-                                                 ['boot_parameters', 'boot_params'],
-                                                 default=OrderedDict())
-        self.runtime_parameters = get_aliased_param(kwargs,
-                                                    ['runtime_parameters', 'runtime_params', 'params'],
-                                                    default=OrderedDict())
-        self.workload_parameters = get_aliased_param(kwargs,
-                                                     ['workload_parameters', 'workload_params'],
-                                                     default=OrderedDict())
-        self.instruments = kwargs.pop('instruments', [])
-        self.flash = kwargs.pop('flash', OrderedDict())
-        self.classifiers = kwargs.pop('classifiers', OrderedDict())
-        if kwargs:
-            raise ConfigError('Invalid entries in global section: {}'.format(kwargs))
-
-
-class Agenda(object):
-
-    def __init__(self, source=None):
-        self.filepath = None
-        self.config = None
-        self.global_ = None
-        self.sections = []
-        self.workloads = []
-        self._seen_ids = defaultdict(set)
-        if source:
-            try:
-                counter.reset('section')
-                counter.reset('workload')
-                self._load(source)
-            except (ConfigError, SerializerSyntaxError, SyntaxError), e:
-                raise ConfigError(str(e))
-
-    def add_workload_entry(self, w):
-        entry = self.get_workload_entry(w)
-        self.workloads.append(entry)
-
-    def get_workload_entry(self, w):
-        if isinstance(w, basestring):
-            w = {'name': w}
-        if not isinstance(w, dict):
-            raise ConfigError('Invalid workload entry: "{}" in {}'.format(w, self.filepath))
-        self._assign_id_if_needed(w, 'workload')
-        return AgendaWorkloadEntry(**w)
-
-    def expand(self, target):
-        # TODO: currently a no-op, this method is here to support future features, such
-        #       as section cross products and sweeps.
-        pass
-
-    def _load(self, source):  # pylint: disable=too-many-branches
-        try:
-            raw = self._load_raw_from_source(source)
-        except SerializerSyntaxError as e:
-            name = getattr(source, 'name', '')
-            raise ConfigError('Error parsing agenda {}: {}'.format(name, e))
-        if not isinstance(raw, dict):
-            message = '{} does not contain a valid agenda structure; top level must be a dict.'
-            raise ConfigError(message.format(self.filepath))
-        for k, v in raw.iteritems():
-            if k == 'config':
-                if not isinstance(v, dict):
-                    raise ConfigError('Invalid agenda: "config" entry must be a dict')
-                self.config = v
-            elif k == 'global':
-                self.global_ = AgendaGlobalEntry(**v)
-            elif k == 'sections':
-                self._collect_existing_ids(v, 'section')
-                for s in v:
-                    if not isinstance(s, dict):
-                        raise ConfigError('Invalid section entry: "{}" in {}'.format(s, self.filepath))
-                    self._collect_existing_ids(s.get('workloads', []), 'workload')
-                for s in v:
-                    self._assign_id_if_needed(s, 'section')
-                    self.sections.append(AgendaSectionEntry(self, **s))
-            elif k == 'workloads':
-                self._collect_existing_ids(v, 'workload')
-                for w in v:
-                    self.workloads.append(self.get_workload_entry(w))
-            else:
-                raise ConfigError('Unexpected agenda entry "{}" in {}'.format(k, self.filepath))
-
-    def _load_raw_from_source(self, source):
-        if hasattr(source, 'read') and hasattr(source, 'name'):  # file-like object
-            self.filepath = source.name
-            raw = yaml.load(source)
-        elif isinstance(source, basestring):
-            if os.path.isfile(source):
-                self.filepath = source
-                with open(source, 'rb') as fh:
-                    raw = yaml.load(fh)
-            else:  # assume YAML text
-                raw = yaml.loads(source)
-        else:
-            raise ConfigError('Unknown agenda source: {}'.format(source))
-        return raw
-
-    def _collect_existing_ids(self, ds, pool):
-        # Collection needs to take place first  so that auto IDs can be
-        # correctly assigned, e.g. if someone explicitly specified an ID
-        # of '1' for one of the workloads.
-        for d in ds:
-            if isinstance(d, dict) and 'id' in d:
-                did = str(d['id'])
-                if did in self._seen_ids[pool]:
-                    raise ConfigError('Duplicate {} ID: {}'.format(pool, did))
-                self._seen_ids[pool].add(did)
-
-    def _assign_id_if_needed(self, d, pool):
-        # Also enforces string IDs
-        if d.get('id') is None:
-            did = str(counter.next(pool))
-            while did in self._seen_ids[pool]:
-                did = str(counter.next(pool))
-            d['id'] = did
-            self._seen_ids[pool].add(did)
-        else:
-            d['id'] = str(d['id'])