<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_neighborhood(self, ids, radius=1, full_subgraph=True):
 """ Retrieve the graph neighborhood around a set of vertices, ignoring edge directions. Note that setting radius greater than two often results in a time-consuming query for a very large subgraph. Parameters ids : list [int | float | str] List of target vertex IDs. radius : int, optional Radius of the neighborhood. Every vertex in the returned subgraph is reachable from at least one of the target vertices on a path of length no longer than ``radius``. Setting radius larger than 2 may result in a very large subgraph. full_subgraph : bool, optional If True, return all edges between vertices in the returned neighborhood. The result is also known as the subgraph induced by the target nodes' neighbors, or the egocentric network for the target nodes. If False, return only edges on paths of length <= ``radius`` from the target node, also known as the reachability graph. Returns ------- out : Graph The subgraph with the neighborhoods around the target vertices. See Also -------- get_edges, get_vertices References - Marsden, P. (2002) `Egocentric and sociocentric measures of network centrality <http://www.sciencedirect.com/science/article/pii/S03788733 02000163>`_. - `Wikipedia - Reachability <http://en.wikipedia.org/wiki/Reachability>`_ Examples -------- full_subgraph=True) """



        verts = ids

        ## find the vertices within radius (and the path edges)
        for i in range(radius):
            edges_out = self.get_edges(src_ids=verts)
            edges_in = self.get_edges(dst_ids=verts)

            verts = list(edges_in['__src_id']) + list(edges_in['__dst_id']) + \
                list(edges_out['__src_id']) + list(edges_out['__dst_id'])
            verts = list(set(verts))

        ## make a new graph to return and add the vertices
        g = SGraph()
        g = g.add_vertices(self.get_vertices(verts), vid_field='__id')

        ## add the requested edge set
        if full_subgraph is True:
            induced_edge_out = self.get_edges(src_ids=verts)
            induced_edge_in = self.get_edges(dst_ids=verts)
            df_induced = induced_edge_out.append(induced_edge_in)
            df_induced = df_induced.groupby(df_induced.column_names(), {})

            verts_sa = SArray(list(verts))
            edges = df_induced.filter_by(verts_sa, "__src_id")
            edges = edges.filter_by(verts_sa, "__dst_id")

        else:
            path_edges = edges_out.append(edges_in)
            edges = path_edges.groupby(path_edges.column_names(), {})

        g = g.add_edges(edges, src_field='__src_id', dst_field='__dst_id')
        return g