Esempio n. 1
0
    def get_eattr(self, edges, name=None):
        g = self.parent()

        eid = g.edge_id

        if nonstring_container(edges[0]):
            # many edges
            if name is None:
                eprop = {}

                for k in self.keys():
                    prop = self.prop[k]

                    dtype = super().__getitem__(k)

                    eprop[k] = _to_np_array(
                        [prop[eid(tuple(e))] for e in edges], dtype)

                return eprop

            prop = self.prop[name]

            dtype = super().__getitem__(name)

            return _to_np_array([prop[eid(tuple(e))] for e in edges], dtype)

        # single edge
        if name is None:
            eprop = {}
            for k in self.keys():
                eprop[k] = self.prop[k][eid(tuple(edges))]

            return eprop

        return self.prop[name][eid(tuple(edges))]
Esempio n. 2
0
    def get_eattr(self, edges, name=None):
        g = self.parent()._graph

        if nonstring_container(edges[0]):
            # many edges
            eids = [g.get_eid(*e) for e in edges]

            if name is None:
                eprop = {}

                if nonstring_container(name[0]):
                    for k in self.keys():
                        dtype = _np_dtype(super().__getitem__(k))
                        eprop[k] = _to_np_array(
                            [g.es[eid][k] for eid in eids], dtype=dtype)

            dtype = _np_dtype(super().__getitem__(name))
            return _to_np_array([g.es[eid][name] for eid in eids], dtype=dtype)
        elif not nonstring_container(edges):
            raise ValueError("Invalid `edges` entry: {}.".format(edges))

        # single edge
        eid = g.get_eid(*edges)

        if name is None:
            eprop = {}

            for k in self.keys():
                eprop[k] = g.es[eid][k]

            return eprop

        return g.es[eid][name]
Esempio n. 3
0
    def __getitem__(self, name):
        '''
        Return the attributes of an edge or a list of edges.
        '''
        eprop = {}
        graph = self.parent()

        if isinstance(name, slice):
            for k in self.keys():
                dtype = _np_dtype(super().__getitem__(k))
                eprop[k] = _to_np_array(self.prop[k], dtype)[name]

            return eprop
        elif nonstring_container(name):
            if nonstring_container(name[0]):
                eids = [graph.edge_id(e) for e in name]

                for k in self.keys():
                    dtype = _np_dtype(super().__getitem__(k))
                    eprop[k] = _to_np_array(self.prop[k], dtype=dtype)[eids]
            else:
                eid = graph.edge_id(name)

                for k in self.keys():
                    eprop[k] = self.prop[k][eid]

            return eprop

        dtype = _np_dtype(super().__getitem__(name))

        return _to_np_array(self.prop[name], dtype=dtype)
Esempio n. 4
0
    def __getitem__(self, name):
        dtype = super(_GtNProperty, self).__getitem__(name)

        g = self.parent()._graph

        if dtype == "string":
            return g.vertex_properties[name].get_2d_array([0])[0]
        elif dtype == "object":
            vprop = g.vertex_properties[name]
            return _to_np_array([vprop[i] for i in range(g.num_vertices())],
                                dtype)

        return _to_np_array(g.vertex_properties[name].a, dtype)
Esempio n. 5
0
    def new_attribute(self, name, value_type, values=None, val=None):
        dtype = object
        g = self.parent()._graph

        if val is None:
            if value_type in ("int", "integer"):
                val = int(0)
                dtype = int
            elif value_type in ("double", "float"):
                val = np.NaN
                dtype = float
            elif value_type == "string":
                val = ""
            else:
                val = None

        if values is None:
            values = _to_np_array(
                [deepcopy(val) for _ in range(g.num_vertices())], dtype)

        if len(values) != g.num_vertices():
            raise ValueError("A list or a np.array with one entry per "
                             "node in the graph is required, got "
                             "{} values vs {} nodes for '{}'.".format(
                                 len(values), g.num_vertices(), name))

        # store name and value type in the dict
        super(_GtNProperty, self).__setitem__(name, value_type)

        # store the real values in the attribute
        nprop = g.new_vertex_property(value_type, vals=values)
        g.vertex_properties[name] = nprop
        self._num_values_set[name] = len(values)
Esempio n. 6
0
    def new_attribute(self, name, value_type, values=None, val=None):
        g = self.parent()._graph

        num_edges = g.num_edges()

        if values is None and val is None:
            self._num_values_set[name] = num_edges

        if val is None:
            if value_type in ("int", "integer"):
                val = int(0)
            elif value_type in ("double", "float"):
                val = np.NaN
            elif value_type == "string":
                val = ""
            else:
                val = None

        if values is None:
            values = _to_np_array([deepcopy(val) for _ in range(num_edges)],
                                  value_type)

        if len(values) != num_edges:
            self._num_values_set[name] = 0
            raise ValueError("A list or a np.array with one entry per "
                             "edge in the graph is required")

        # store name and value type in the dict
        super(_GtEProperty, self).__setitem__(name, value_type)

        # store the real values in the attribute
        eprop = g.new_edge_property(value_type, vals=values)
        g.edge_properties[name] = eprop
        self._num_values_set[name] = len(values)
Esempio n. 7
0
    def new_attribute(self, name, value_type, values=None, val=None):
        dtype = object

        if val is None:
            if value_type in ("int", "integer"):
                val = int(0)
                dtype = int
            elif value_type in ("double", "float"):
                val = np.NaN
                dtype = float
            elif value_type == "string":
                val = ""
            else:
                val = None
                value_type = "object"

        if values is None:
            values = _to_np_array(
                [deepcopy(val) for _ in range(self.parent().node_nb())],
                value_type)

        if len(values) != self.parent().node_nb():
            raise ValueError("A list or a np.array with one entry per "
                             "node in the graph is required")

        # store name and value type in the dict
        super().__setitem__(name, value_type)

        # store the real values in the attribute
        self.prop[name] = list(values)
        self._num_values_set[name] = len(values)
Esempio n. 8
0
    def __getitem__(self, name):
        g = self.parent()._graph

        lst = [g.nodes[i][name] for i in range(g.number_of_nodes())]

        dtype = _np_dtype(super(_NxNProperty, self).__getitem__(name))

        return _to_np_array(lst, dtype=dtype)
Esempio n. 9
0
    def get_eattr(self, edges, name=None):
        g = self.parent()._graph

        Edge = g.edge

        if nonstring_container(edges[0]):
            # many edges
            if name is None:
                eprop = {}

                for k in self.keys():
                    tmp = g.edge_properties[k]

                    dtype = super().__getitem__(k)

                    eprop[k] = _to_np_array([tmp[Edge(*e)] for e in edges],
                                            dtype)

                return eprop

            tmp = g.edge_properties[name]

            dtype = super().__getitem__(name)

            return _to_np_array([tmp[Edge(*e)] for e in edges], dtype)

        if name is None:
            eprop = {}
            for k in self.keys():
                tmp = g.edge_properties[k]

                eprop[k] = tmp[Edge(*edges)]

            return eprop

        tmp = g.edge_properties[name]

        return tmp[Edge(*edges)]
Esempio n. 10
0
    def __getitem__(self, name):
        '''
        Return the attributes of an edge or a list of edges.
        '''
        g = self.parent()._graph

        Edge = g.edge

        dtype = super().__getitem__(name)

        if self._edges_deleted:
            eprop = g.edge_properties[name]
            edges = self.parent().edges_array

            return _to_np_array([eprop[Edge(*e)] for e in edges], dtype)

        if dtype == "string":
            return g.edge_properties[name].get_2d_array([0])[0]
        elif dtype == "object":
            tmp = g.edge_properties[name]

            return _to_np_array([tmp[Edge(*e)] for e in g.get_edges()], dtype)

        return _to_np_array(g.edge_properties[name].a, dtype)
Esempio n. 11
0
    def get_eattr(self, edges, name=None):
        g = self.parent()._graph

        if nonstring_container(edges[0]):
            # many edges
            name = self.keys() if name is None else [name]

            eprop = {k: [] for k in self.keys()}

            for edge in edges:
                data = g.get_edge_data(*edge)

                if data is None:
                    raise ValueError("Edge {} does not exist.".format(edge))

                [eprop[k].append(data[k]) for k in name]

            for k, v in eprop.items():
                dtype = _np_dtype(super().__getitem__(k))
                eprop[k] = _to_np_array(v, dtype)

            if len(name) == 1:
                return eprop[name[0]]

            return eprop

        # single edge
        data = deepcopy(g.get_edge_data(*edges))

        if not data:
            raise ValueError("Edge {} does not exist.".format(edges))

        if name is None:
            del data["eid"]

            return data

        return data[name]
Esempio n. 12
0
    def __getitem__(self, name):
        g = self.parent()._graph

        dtype = _np_dtype(super(_IgNProperty, self).__getitem__(name))

        return _to_np_array(g.vs[name], dtype=dtype)
Esempio n. 13
0
 def __getitem__(self, name):
     dtype = _np_dtype(super().__getitem__(name))
     return _to_np_array(self.prop[name], dtype=dtype)