code: def do_expand_array(self, array_name, depth=0):
          
          if depth > self.master._depth:
              raise Exception("deep recursion detected")
          if not array_name in self.master._array:
              raise Exception("array '%s' not defined" % (array_name))
          ret = list(self.master._array[array_name])
          for array in self.master._array[array_name]:
              if array.startswith('@'):
                  ret.remove(array)
                  expanded = self.do_expand_array(array[1:], depth+1)
                  ret.extend(expanded)
  
          return set(ret)
docs: Do recurrent array expansion, returning a set of keywords.
  
          Exception is thrown when there are cyclical dependencies between
          arrays or if the ``@array`` name references an undefined array.
  
          :param str array_name: The name of the array to expand.
          :param int depth: The recursion depth counter.
  
          :return set: The final set of array entries.