# File lib/skynet/skynet_partitioners.rb, line 10
      def self.reduce_partition(data, partitions)    
        partitioned_data = Array.new

        # If data size is significantly greater than the number of desired
        # partitions, we can divide the data roughly but the last partition
        # may be smaller than the others.
        #      
        return data if (not data) or data.empty?
    
        if partitions >= data.length
          data.each do |datum|
           partitioned_data << [datum]
          end
        elsif (data.length >= partitions * 2)
          # Use quicker but less "fair" method
          size = data.length / partitions

          if (data.length % partitions != 0)
            size += 1 # Last slice of leftovers
          end

          (0..partitions - 1).each do |i|
            partitioned_data[i] = data[i * size, size]
          end
        else
          # Slower method, but partitions evenly
          partitions = (data.size < partitions ? data.size : partitions)
          (0..partitions - 1).each { |i| partitioned_data[i] = Array.new }
  
          data.each_with_index do |datum, i|
            partitioned_data[i % partitions] << datum
          end
        end
  
        partitioned_data
      end