@classmethod
    def build_soft_chain(cls, files):
        nodes = []

        for f in files:
            if not Constants.FILENAME_STANDARD.search(f):
                continue

            try:
                my_file = open(os.path.join(Constants.ALTER_DIR, f))
                head = list(islice(my_file, 4))
            except OSError, ex:
                raise ReadError("Could not open file '%s'.\n\t=>%s" % (os.path.join(Constants.ALTER_DIR, f), ex.message))

            if not MetaDataUtil.parse_direction(head) == 'up':
                continue

            meta_data = MetaDataUtil.parse_meta(head)

            if 'ref' not in meta_data:
                continue

            node = SimpleNode(filename=f, id=meta_data['ref'])
            if 'backref' in meta_data:
                node.backref = meta_data['backref']
            if 'require-env' in meta_data:
                node.require_env = MetaDataUtil.parse_env(meta_data['require-env'])
            if 'skip-env' in meta_data:
                if 'require-env' in meta_data:
                    raise Exception('Cannot use skip-env with require-env')
                node.skip_env = MetaDataUtil.parse_env(meta_data['skip-env'])

            node.meta = meta_data

            nodes.append(node)

        return nodes
Split into complex and real parts, combining conjugate pairs.
dataset/ETHPy150Open appnexus/schema-tool/schematool/util/chain.py/ChainUtil.build_soft_chain--crossover with--dataset/ETHPy150Open scipy/scipy/scipy/signal/filter_design.py/_cplxreal