def __init__(self, svg_source, **kwargs):
        from svg_model import svg_polygons_to_df, compute_shape_centers

        extend = kwargs.pop('extend', .5)
        self.electrode_channels = svg_polygons_to_channels(svg_source,
                                                           **kwargs)
        # Read device layout from SVG file.
        df_device = svg_polygons_to_df(svg_source)
        #self.df_paths = scale_svg_frame(df_device)
        self.df_paths = compute_shape_centers(df_device, 'path_id')
        self.df_connected = extract_adjacent_paths(self.df_paths, extend)
        self.df_connected['cost'] = 1

        # The following returns one row per electrode, indexed by electrode path id
        self.df_path_centers = (self.df_paths.drop_duplicates(['path_id'])
                                .set_index('path_id')[['x_center',
                                                       'y_center']])
        (self.adjacency_matrix, self.indexed_paths,
         self.path_indexes) = get_adjacency_matrix(self.df_connected)
        self.df_indexed_path_centers = (self.df_path_centers
                                        .loc[self.path_indexes.index]
                                        .reset_index())
        self.df_indexed_path_centers.rename(columns={'index': 'path_id'},
                                            inplace=True)

        self.df_connected_indexed = self.df_connected.copy()
        self.df_connected_indexed['source'] = map(str, self.path_indexes
                                                  [self.df_connected
                                                   ['source']])
        self.df_connected_indexed['target'] = map(str, self.path_indexes
                                                       [self.df_connected
                                                        ['target']])

        self.df_paths_indexed = self.df_paths.copy()
        self.df_paths_indexed['path_id'] = map(str, self.path_indexes
                                               [self.df_paths.path_id])
        self.graph = nx.Graph()
        for index, row in self.df_connected.iterrows():
            self.graph.add_edge(row['source'], row['target'],
                                cost=row['cost'])
 def from_svg(cls, svg_filepath, **kwargs):
     df_shapes = svg_polygons_to_df(svg_filepath)
     return cls(df_shapes, 'path_id', **kwargs)