def recurse_module( overall_record, index, shared, stop_types=STOP_TYPES, already_seen=None, min_size=0 ):
    """Creates a has-a recursive-cost hierarchy
    
    Mutates objects in-place to produce a hierarchy of memory usage based on 
    reference-holding cost assignment
    """
    for record in recurse( 
        overall_record, index, 
        stop_types=stop_types, 
        already_seen=already_seen, 
        type_group=True,
    ):
        # anything with a totsize we've already processed...
        if record.get('totsize') is not None:
            continue 
        rinfo = record 
        rinfo['module'] = overall_record.get('name',NON_MODULE_REFS )
        if not record['refs']:
            rinfo['rsize'] = 0
            rinfo['children'] = []
        else:
            # TODO: provide a flag to coalesce based on e.g. type at each level or throughout...
            rinfo['children'] = rinfo_children = list ( children( record, index, stop_types=stop_types ) )
            rinfo['rsize'] = sum([
                (
                    child.get('totsize',0.0)/float(len(shared.get( child['address'], [])) or 1)
                )
                for child in rinfo_children
            ], 0.0 )
        rinfo['totsize'] = record['size'] + rinfo['rsize']
    
    return None
def recurse_module ( overall_record , index , shared , stop_types = STOP_TYPES , already_seen = None , min_size = 0 ) : for record in recurse ( overall_record , index , stop_types = stop_types , already_seen = already_seen , type_group = True , ) : if record . get ( 'totsize' ) is not None : continue rinfo = record rinfo [ 'module' ] = overall_record . get ( 'name' , NON_MODULE_REFS ) if not record [ 'refs' ] : rinfo [ 'rsize' ] = 0 rinfo [ 'children' ] = [ ] else : rinfo [ 'children' ] = rinfo_children = list ( children ( record , index , stop_types = stop_types ) ) rinfo [ 'rsize' ] = sum ( [ ( child . get ( 'totsize' , 0.0 ) / float ( len ( shared . get ( child [ 'address' ] , [ ] ) ) or 1 ) ) for child in rinfo_children ] , 0.0 ) rinfo [ 'totsize' ] = record [ 'size' ] + rinfo [ 'rsize' ] return None
Creates a has-a recursive-cost hierarchy
    
    Mutates objects in-place to produce a hierarchy of memory usage based on 
    reference-holding cost assignment