<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def calc_geo_branches_in_buffer(node, mv_grid, radius, radius_inc, proj):
 """ Determines branches in nodes' associated graph that are at least partly within buffer of `radius` from `node`. If there are no nodes, the buffer is successively extended by `radius_inc` until nodes are found. Parameters node : LVStationDing0, GeneratorDing0, or CableDistributorDing0 origin node (e.g. LVStationDing0 object) with associated shapely object (attribute `geo_data`) in any CRS (e.g. WGS84) radius : float buffer radius in m radius_inc : float radius increment in m proj : int pyproj projection object: nodes' CRS to equidistant CRS (e.g. WGS84 -> ETRS) Returns ------- :any:`list` of :networkx:`NetworkX Graph Obj< >` List of branches (NetworkX branch objects) """


    branches = []

    while not branches:
        node_shp = transform(proj, node.geo_data)
        buffer_zone_shp = node_shp.buffer(radius)
        for branch in mv_grid.graph_edges():
            nodes = branch['adj_nodes']
            branch_shp = transform(proj, LineString([nodes[0].geo_data, nodes[1].geo_data]))
            if buffer_zone_shp.intersects(branch_shp):
                branches.append(branch)
        radius += radius_inc

    return branches