File: basicigraph.xxml

package info (click to toggle)
igraph 1.0.1%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 22,436 kB
  • sloc: ansic: 155,759; cpp: 32,544; xml: 2,960; python: 411; makefile: 168; javascript: 20; sh: 9
file content (241 lines) | stat: -rw-r--r-- 9,216 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
<?xml version="1.0"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
               "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
<!ENTITY igraph "igraph">
]>

<chapter id="igraph-Basic">
<title>Basic data types and interface</title>

<section id="igraph-data-model"><title>The &igraph; data model</title>
<para>
The &igraph; library can handle directed and
undirected graphs. The &igraph; graphs are multisets
of ordered (if directed) or unordered (if undirected) labeled pairs.
The labels of the pairs plus the number of vertices always starts with
zero and ends with the number of edges minus one. In addition to that,
a table of metadata is also attached to every graph, its most
important entries being the number of vertices in the graph and whether
the graph is directed or undirected.
</para>

<para>
Like the edges, the &igraph; vertices are also
labeled by numbers between zero and the number of vertices minus one.
So, to summarize, a directed graph can be imagined like this:
<informalexample>
<programlisting>
  ( vertices: 6,
    directed: yes,
    {
     (0,2),
     (2,2),
     (3,2),
     (3,3),
     (3,4),
     (3,4),
     (4,3),
     (4,1)
    }
  )
</programlisting>
</informalexample>
Here the edges are ordered pairs or vertex ids, and the graph is a multiset
of edges plus some metadata.
</para>

<para>
An undirected graph is like this:
<informalexample>
<programlisting>
  ( vertices: 6,
    directed: no,
    {
     (0,2),
     (2,2),
     (2,3),
     (3,3),
     (3,4),
     (3,4),
     (3,4),
     (1,4)
    }
  )
</programlisting>
</informalexample>
Here, an edge is an unordered pair of two vertex IDs. A graph is a multiset
of edges plus metadata, just like in the directed case.
</para>

<para>It is possible to convert between directed and undirected graphs,
see the <link linkend="igraph_to_directed">
<function>igraph_to_directed()</function></link>
and <link linkend="igraph_to_undirected">
<function>igraph_to_undirected()</function></link> functions.
</para>

<para>&igraph; aims to robustly support multigraphs, i.e. graphs which
have more than one edge between some pairs of vertices, as well as
graphs with self-loops. Most functions which do not support such graphs
will check their input and issue an error if it is not valid. Those
rare functions which do not perform this check clearly indicate this
in their documentation. To eliminate multiple edges from a graph, you can use
<link linkend="igraph_simplify">
  <function>igraph_simplify()</function></link>.
</para>
</section>

<section id="igraph-functions"><title>General conventions of &igraph; functions</title>
<para>
&igraph; has a simple and consistent interface. Most functions check
their input for validity and display an informative error message
when something goes wrong. In order to support this, the majority of functions
return an error code. In basic usage, this code can be ignored, as the
default behaviour is to abort the program immediately upon error. See
<link linkend="igraph-Error">the section on error handling</link> for
more information on this topic.
</para>

<para>
Results are typically returned through <emphasis>output arguments</emphasis>,
i.e. pointers to a data structure into which the result will be written.
In almost all cases, this data structure is expected to be pre-initialized.
A few simple functions communicate their result directly through their return
value—these functions can never encounter an error.
</para>
</section>

<section id="basic-data-types"><title>Atomic data types</title>

<indexterm><primary>igraph_int_t</primary></indexterm>

<para>
&igraph; introduces a few aliases to standard C data types that are then used
throughout the library. The most important of these types is
<type>igraph_int_t</type>, which is an alias to either a 32-bit or a 64-bit
<emphasis>signed</emphasis> integer, depending on whether &igraph; was compiled
in 32-bit or 64-bit mode. The size of <type>igraph_int_t</type> also
influences the maximum number of vertices that an &igraph; graph can represent
as the number of vertices is stored in a variable of type
<type>igraph_int_t</type>.
</para>

<para>
Before igraph 1.0, <type>igraph_int_t</type> was called <type>igraph_integer_t</type>.
This is still available as an alias to <type>igraph_int_t</type> and will remain
accessible until at least version 2.0 of the library.
</para>

<para>Since the size of a variable of type <type>igraph_int_t</type> may
change depending on how &igraph; is compiled, you cannot simply use
<code>%d</code> or <code>%ld</code> as a placeholder for &igraph; integers in
<code>printf</code> format strings. &igraph; provides the
<code>IGRAPH_PRId</code> macro, which maps to <code>d</code>, <code>ld</code>
or <code>lld</code> depending on the size of <type>igraph_int_t</type>, and
you must use this macro in <code>printf</code> format strings to avoid compiler
warnings.
</para>

<indexterm><primary>igraph_uint_t</primary></indexterm>

<para>Similarly to how <type>igraph_int_t</type> maps to the standard size
signed integer in the library, <type>igraph_uint_t</type> maps to a 32-bit or
a 64-bit <emphasis>unsigned</emphasis> integer. It is guaranteed that the size of
<type>igraph_int_t</type> is the same as the size of <type>igraph_uint_t</type>.
&igraph; provides <code>IGRAPH_PRIu</code> as a format string placeholder for
variables of type <type>igraph_uint_t</type>.
</para>

<indexterm><primary>igraph_real_t</primary></indexterm>

<para>Real numbers (i.e. quantities that can potentially be fractional or
infinite) are represented with a type named <type>igraph_real_t</type>. Currently
<type>igraph_real_t</type> is always aliased to <type>double</type>, but it is
still good practice to use <type>igraph_real_t</type> in your own code for sake
of consistency.</para>

<indexterm><primary>igraph_bool_t</primary></indexterm>

<para>Boolean values are represented with a type named <type>igraph_bool_t</type>.
It tries to be as small as possible since it only needs to represent a truth
value. For printing purposes, you can treat it as an integer and use
<code>%d</code> in format strings as a placeholder for an <type>igraph_bool_t</type>.
</para>

<indexterm><primary>IGRAPH_INTEGER_MAX</primary></indexterm>
<indexterm><primary>IGRAPH_INTEGER_MIN</primary></indexterm>
<indexterm><primary>IGRAPH_UINT_MAX</primary></indexterm>
<indexterm><primary>IGRAPH_UINT_MIN</primary></indexterm>
<para>
Upper and lower limits of <type>igraph_int_t</type> and
<type>igraph_uint_t</type> are provided by the constants named
<constant>IGRAPH_INTEGER_MIN</constant>, <constant>IGRAPH_INTEGER_MAX</constant>,
<constant>IGRAPH_UINT_MIN</constant> and <constant>IGRAPH_UINT_MAX</constant>.
</para>

</section>

<section><title>Setup and initialization</title>
<para>
Certain parts of &igraph; must be initialized before first use, which can be
accomplished using the setup functions below. As of igraph 1.0, most functions
will work correctly even if setup is not performed, as currently the only setup
action is seeding the random number generator. That said, it is strongly
recommended to call
<link linkend="igraph_setup"><function>igraph_setup()</function></link>
before using any other function, as future &igraph; versions may add critical
initialization steps.
</para>

<!-- doxrox-include igraph_setup -->
</section>

<section id="basic-interface"><title>The basic interface</title>
<!-- doxrox-include about_basic_interface -->

<section id="graph-constructors-and-destructors"><title>Graph constructors and destructors</title>
<!-- doxrox-include igraph_empty -->
<!-- doxrox-include igraph_empty_attrs -->
<!-- doxrox-include igraph_copy -->
<!-- doxrox-include igraph_destroy -->
</section>

<section id="basic-query-operations"><title>Basic query operations</title>
<!-- doxrox-include igraph_vcount -->
<!-- doxrox-include igraph_ecount -->
<!-- doxrox-include igraph_is_directed -->
<!-- doxrox-include igraph_edge -->
<!-- doxrox-include igraph_edges -->
<!-- doxrox-include IGRAPH_FROM -->
<!-- doxrox-include IGRAPH_TO -->
<!-- doxrox-include IGRAPH_OTHER -->
<!-- doxrox-include igraph_get_eid -->
<!-- doxrox-include igraph_get_eids -->
<!-- doxrox-include igraph_get_all_eids_between -->
<!-- doxrox-include igraph_neighbors -->
<!-- doxrox-include igraph_incident -->
<!-- doxrox-include igraph_degree -->
<!-- doxrox-include igraph_degree_1 -->
</section>

<section id="adding-and-deleting-vertices-and-edges"><title>Adding and deleting vertices and edges</title>
<!-- doxrox-include igraph_add_edge -->
<!-- doxrox-include igraph_add_edges -->
<!-- doxrox-include igraph_add_vertices -->
<!-- doxrox-include igraph_delete_edges -->
<!-- doxrox-include igraph_delete_vertices -->
<!-- doxrox-include igraph_delete_vertices_map -->
</section>

</section>

<section id="misc-helper-functions"><title>Miscellaneous macros and helper functions</title>
<!-- doxrox-include IGRAPH_VCOUNT_MAX -->
<!-- doxrox-include IGRAPH_ECOUNT_MAX -->
<!-- doxrox-include IGRAPH_UNLIMITED -->
<!-- doxrox-include igraph_expand_path_to_pairs -->
<!-- doxrox-include igraph_invalidate_cache -->
<!-- doxrox-include igraph_is_same_graph -->
</section>

</chapter>