docs: def LayoutChildren( self, dc, children, parent, x,y,w,h, hot_map, depth=0, node_sum=None ):
          """Layout the set of children in the given rectangle
          
          node_sum -- if provided, we are a recursive call that already has sizes and sorting,
              so skip those operations
          """
          if node_sum is None:
              nodes = [ (self.adapter.value(node,parent),node) for node in children ]
              nodes.sort(key=operator.itemgetter(0))
              total = self.adapter.children_sum( children,parent )
          else:
              nodes = children
              total = node_sum
          if total:
              if self.square_style and len(nodes) > 5:
                  # new handling to make parents with large numbers of parents a little less 
                  # "sliced" looking (i.e. more square)
                  (head_sum,head),(tail_sum,tail) = split_by_value( total, nodes )
                  if head and tail:
                      # split into two sub-boxes and render each...
                      head_coord,tail_coord = split_box( head_sum/float(total), x,y,w,h )
                      if head_coord:
                          self.LayoutChildren( 
                              dc, head, parent, head_coord[0],head_coord[1],head_coord[2],head_coord[3],
                              hot_map, depth,
                              node_sum = head_sum,
                          )
                      if tail_coord and coord_bigger_than_padding( tail_coord, self.padding+self.margin ):
                          self.LayoutChildren( 
                              dc, tail, parent, tail_coord[0],tail_coord[1],tail_coord[2],tail_coord[3],
                              hot_map, depth,
                              node_sum = tail_sum,
                          )
                      return 
                          
              (firstSize,firstNode) = nodes[-1]
              fraction = firstSize/float(total)
              head_coord,tail_coord = split_box( firstSize/float(total), x,y,w,h )
              if head_coord:
                  self.DrawBox( 
                      dc, firstNode, head_coord[0],head_coord[1],head_coord[2],head_coord[3], 
                      hot_map, depth+1 
                  )
              else:
                  return # no other node will show up as non-0 either
                  
              if len(nodes) > 1 and tail_coord and coord_bigger_than_padding( tail_coord, self.padding+self.margin ):
                  self.LayoutChildren( 
                      dc, nodes[:-1], parent, 
                      tail_coord[0],tail_coord[1],tail_coord[2],tail_coord[3], 
                      hot_map, depth,
                      node_sum = total - firstSize,
                  )