Integer symbolicIdx = getInteger(sched2symbolicIdx.size());
Integer symbolicIdx = getInteger(symbolicIdx2symbolic.size());
    Integer convertToSymbolic(Schedule sched)    {        if (sched2symbolicIdx.containsKey(sched))        {            return (Integer)sched2symbolicIdx.get(sched);        }        // convert all the children        if (!sched.isBottomSchedule())        {            for (int nPhase = 0; nPhase < sched.getNumPhases(); nPhase++)            {                convertToSymbolic(sched.getSubSched(nPhase));            }        }        Integer symbolicIdx = getInteger(sched2symbolicIdx.size());        // create a vector version of self        Vector self = new Vector();        if (!sched.isBottomSchedule())        {            for (int nPhase = 0; nPhase < sched.getNumPhases(); nPhase++)            {                self.add(getInteger(sched.getSubSchedNumExecs(nPhase)));                self.add(sched2symbolicIdx.get(sched.getSubSched(nPhase)));            }        }        else        {            // this is an actual leaf - create a vector with just            // a single entry - the schedule            self.add(sched);        }        if (symbolic2symbolicIdx.containsKey(self))        {            symbolicIdx = (Integer)symbolic2symbolicIdx.get(self);            sched2symbolicIdx.put(sched, symbolicIdx);            return symbolicIdx;        }        // and insert the symbolic representation and idx         // into both way lookups        symbolicIdx2symbolic.put(symbolicIdx, self);        symbolic2symbolicIdx.put(self, symbolicIdx);        // also record the stream to which this schedule belongs        symbolicIdx2stream.put(symbolicIdx, sched.getStream());        // and store two-way maps of the sched <=> idx        sched2symbolicIdx.put(sched, symbolicIdx);        symbolicIdx2sched.put(symbolicIdx, sched);        return symbolicIdx;    }