<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def compile_high_data(self, high, orchestration_jid=None):
        '''
        "Compile" the high data as it is retrieved from the CLI or YAML into
        the individual state executor structures
        '''
        chunks = []
        for name, body in six.iteritems(high):
            if name.startswith('__'):
                continue
            for state, run in six.iteritems(body):
                funcs = set()
                names = []
                if state.startswith('__'):
                    continue
                chunk = OrderedDict()
                chunk['state'] = state
                chunk['name'] = name
                if orchestration_jid is not None:
                    chunk['__orchestration_jid__'] = orchestration_jid
                if '__sls__' in body:
                    chunk['__sls__'] = body['__sls__']
                if '__env__' in body:
                    chunk['__env__'] = body['__env__']
                chunk['__id__'] = name
                for arg in run:
                    if isinstance(arg, six.string_types):
                        funcs.add(arg)
                        continue
                    if isinstance(arg, dict):
                        for key, val in six.iteritems(arg):
                            if key == 'names':
                                for _name in val:
                                    if _name not in names:
                                        names.append(_name)
                            elif key == 'state':
                                # Don't pass down a state override
                                continue
                            elif (key == 'name' and
                                  not isinstance(val, six.string_types)):
                                # Invalid name, fall back to ID
                                chunk[key] = name
                            else:
                                chunk[key] = val
                if names:
                    name_order = 1
                    for entry in names:
                        live = copy.deepcopy(chunk)
                        if isinstance(entry, dict):
                            low_name = next(six.iterkeys(entry))
                            live['name'] = low_name
                            list(map(live.update, entry[low_name]))
                        else:
                            live['name'] = entry
                        live['name_order'] = name_order
                        name_order += 1
                        for fun in funcs:
                            live['fun'] = fun
                            chunks.append(live)
                else:
                    live = copy.deepcopy(chunk)
                    for fun in funcs:
                        live['fun'] = fun
                        chunks.append(live)
        chunks = self.order_chunks(chunks)
        return chunks