lemongraph 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +8 -0
  3. data/LICENSE +674 -0
  4. data/README.md +6 -0
  5. data/ext/lemon-1.3.1/AUTHORS +26 -0
  6. data/ext/lemon-1.3.1/CMakeLists.txt +371 -0
  7. data/ext/lemon-1.3.1/INSTALL +167 -0
  8. data/ext/lemon-1.3.1/LICENSE +32 -0
  9. data/ext/lemon-1.3.1/NEWS +337 -0
  10. data/ext/lemon-1.3.1/README +50 -0
  11. data/ext/lemon-1.3.1/cmake/FindCOIN.cmake +110 -0
  12. data/ext/lemon-1.3.1/cmake/FindGLPK.cmake +55 -0
  13. data/ext/lemon-1.3.1/cmake/FindGhostscript.cmake +10 -0
  14. data/ext/lemon-1.3.1/cmake/FindILOG.cmake +102 -0
  15. data/ext/lemon-1.3.1/cmake/FindSOPLEX.cmake +23 -0
  16. data/ext/lemon-1.3.1/cmake/LEMONConfig.cmake.in +13 -0
  17. data/ext/lemon-1.3.1/cmake/nsis/lemon.ico +0 -0
  18. data/ext/lemon-1.3.1/cmake/nsis/uninstall.ico +0 -0
  19. data/ext/lemon-1.3.1/cmake/version.cmake +1 -0
  20. data/ext/lemon-1.3.1/cmake/version.cmake.in +1 -0
  21. data/ext/lemon-1.3.1/contrib/CMakeLists.txt +19 -0
  22. data/ext/lemon-1.3.1/lemon/CMakeLists.txt +91 -0
  23. data/ext/lemon-1.3.1/lemon/adaptors.h +3638 -0
  24. data/ext/lemon-1.3.1/lemon/arg_parser.cc +474 -0
  25. data/ext/lemon-1.3.1/lemon/arg_parser.h +440 -0
  26. data/ext/lemon-1.3.1/lemon/assert.h +214 -0
  27. data/ext/lemon-1.3.1/lemon/base.cc +37 -0
  28. data/ext/lemon-1.3.1/lemon/bellman_ford.h +1116 -0
  29. data/ext/lemon-1.3.1/lemon/bfs.h +1754 -0
  30. data/ext/lemon-1.3.1/lemon/bin_heap.h +347 -0
  31. data/ext/lemon-1.3.1/lemon/binomial_heap.h +445 -0
  32. data/ext/lemon-1.3.1/lemon/bits/alteration_notifier.h +472 -0
  33. data/ext/lemon-1.3.1/lemon/bits/array_map.h +351 -0
  34. data/ext/lemon-1.3.1/lemon/bits/bezier.h +174 -0
  35. data/ext/lemon-1.3.1/lemon/bits/default_map.h +182 -0
  36. data/ext/lemon-1.3.1/lemon/bits/edge_set_extender.h +627 -0
  37. data/ext/lemon-1.3.1/lemon/bits/enable_if.h +131 -0
  38. data/ext/lemon-1.3.1/lemon/bits/graph_adaptor_extender.h +401 -0
  39. data/ext/lemon-1.3.1/lemon/bits/graph_extender.h +1332 -0
  40. data/ext/lemon-1.3.1/lemon/bits/lock.h +65 -0
  41. data/ext/lemon-1.3.1/lemon/bits/map_extender.h +332 -0
  42. data/ext/lemon-1.3.1/lemon/bits/path_dump.h +177 -0
  43. data/ext/lemon-1.3.1/lemon/bits/solver_bits.h +194 -0
  44. data/ext/lemon-1.3.1/lemon/bits/traits.h +388 -0
  45. data/ext/lemon-1.3.1/lemon/bits/variant.h +494 -0
  46. data/ext/lemon-1.3.1/lemon/bits/vector_map.h +244 -0
  47. data/ext/lemon-1.3.1/lemon/bits/windows.cc +166 -0
  48. data/ext/lemon-1.3.1/lemon/bits/windows.h +44 -0
  49. data/ext/lemon-1.3.1/lemon/bucket_heap.h +594 -0
  50. data/ext/lemon-1.3.1/lemon/capacity_scaling.h +1014 -0
  51. data/ext/lemon-1.3.1/lemon/cbc.cc +460 -0
  52. data/ext/lemon-1.3.1/lemon/cbc.h +129 -0
  53. data/ext/lemon-1.3.1/lemon/christofides_tsp.h +254 -0
  54. data/ext/lemon-1.3.1/lemon/circulation.h +807 -0
  55. data/ext/lemon-1.3.1/lemon/clp.cc +464 -0
  56. data/ext/lemon-1.3.1/lemon/clp.h +164 -0
  57. data/ext/lemon-1.3.1/lemon/color.cc +44 -0
  58. data/ext/lemon-1.3.1/lemon/color.h +204 -0
  59. data/ext/lemon-1.3.1/lemon/concept_check.h +77 -0
  60. data/ext/lemon-1.3.1/lemon/concepts/bpgraph.h +1029 -0
  61. data/ext/lemon-1.3.1/lemon/concepts/digraph.h +491 -0
  62. data/ext/lemon-1.3.1/lemon/concepts/graph.h +788 -0
  63. data/ext/lemon-1.3.1/lemon/concepts/graph_components.h +2134 -0
  64. data/ext/lemon-1.3.1/lemon/concepts/heap.h +324 -0
  65. data/ext/lemon-1.3.1/lemon/concepts/maps.h +223 -0
  66. data/ext/lemon-1.3.1/lemon/concepts/path.h +312 -0
  67. data/ext/lemon-1.3.1/lemon/config.h.in +22 -0
  68. data/ext/lemon-1.3.1/lemon/connectivity.h +1688 -0
  69. data/ext/lemon-1.3.1/lemon/core.h +2506 -0
  70. data/ext/lemon-1.3.1/lemon/cost_scaling.h +1607 -0
  71. data/ext/lemon-1.3.1/lemon/counter.h +249 -0
  72. data/ext/lemon-1.3.1/lemon/cplex.cc +994 -0
  73. data/ext/lemon-1.3.1/lemon/cplex.h +292 -0
  74. data/ext/lemon-1.3.1/lemon/cycle_canceling.h +1230 -0
  75. data/ext/lemon-1.3.1/lemon/dfs.h +1637 -0
  76. data/ext/lemon-1.3.1/lemon/dheap.h +352 -0
  77. data/ext/lemon-1.3.1/lemon/dijkstra.h +1303 -0
  78. data/ext/lemon-1.3.1/lemon/dim2.h +726 -0
  79. data/ext/lemon-1.3.1/lemon/dimacs.h +448 -0
  80. data/ext/lemon-1.3.1/lemon/edge_set.h +1420 -0
  81. data/ext/lemon-1.3.1/lemon/edmonds_karp.h +556 -0
  82. data/ext/lemon-1.3.1/lemon/elevator.h +982 -0
  83. data/ext/lemon-1.3.1/lemon/error.h +276 -0
  84. data/ext/lemon-1.3.1/lemon/euler.h +287 -0
  85. data/ext/lemon-1.3.1/lemon/fib_heap.h +475 -0
  86. data/ext/lemon-1.3.1/lemon/fractional_matching.h +2139 -0
  87. data/ext/lemon-1.3.1/lemon/full_graph.h +1082 -0
  88. data/ext/lemon-1.3.1/lemon/glpk.cc +1012 -0
  89. data/ext/lemon-1.3.1/lemon/glpk.h +263 -0
  90. data/ext/lemon-1.3.1/lemon/gomory_hu.h +568 -0
  91. data/ext/lemon-1.3.1/lemon/graph_to_eps.h +1186 -0
  92. data/ext/lemon-1.3.1/lemon/greedy_tsp.h +251 -0
  93. data/ext/lemon-1.3.1/lemon/grid_graph.h +699 -0
  94. data/ext/lemon-1.3.1/lemon/grosso_locatelli_pullan_mc.h +840 -0
  95. data/ext/lemon-1.3.1/lemon/hao_orlin.h +1015 -0
  96. data/ext/lemon-1.3.1/lemon/hartmann_orlin_mmc.h +654 -0
  97. data/ext/lemon-1.3.1/lemon/howard_mmc.h +651 -0
  98. data/ext/lemon-1.3.1/lemon/hypercube_graph.h +459 -0
  99. data/ext/lemon-1.3.1/lemon/insertion_tsp.h +533 -0
  100. data/ext/lemon-1.3.1/lemon/karp_mmc.h +590 -0
  101. data/ext/lemon-1.3.1/lemon/kruskal.h +324 -0
  102. data/ext/lemon-1.3.1/lemon/lemon.pc.in +10 -0
  103. data/ext/lemon-1.3.1/lemon/lgf_reader.h +3854 -0
  104. data/ext/lemon-1.3.1/lemon/lgf_writer.h +2687 -0
  105. data/ext/lemon-1.3.1/lemon/list_graph.h +2510 -0
  106. data/ext/lemon-1.3.1/lemon/lp.h +95 -0
  107. data/ext/lemon-1.3.1/lemon/lp_base.cc +30 -0
  108. data/ext/lemon-1.3.1/lemon/lp_base.h +2147 -0
  109. data/ext/lemon-1.3.1/lemon/lp_skeleton.cc +143 -0
  110. data/ext/lemon-1.3.1/lemon/lp_skeleton.h +234 -0
  111. data/ext/lemon-1.3.1/lemon/maps.h +4057 -0
  112. data/ext/lemon-1.3.1/lemon/matching.h +3505 -0
  113. data/ext/lemon-1.3.1/lemon/math.h +77 -0
  114. data/ext/lemon-1.3.1/lemon/max_cardinality_search.h +794 -0
  115. data/ext/lemon-1.3.1/lemon/min_cost_arborescence.h +808 -0
  116. data/ext/lemon-1.3.1/lemon/nagamochi_ibaraki.h +702 -0
  117. data/ext/lemon-1.3.1/lemon/nauty_reader.h +113 -0
  118. data/ext/lemon-1.3.1/lemon/nearest_neighbor_tsp.h +238 -0
  119. data/ext/lemon-1.3.1/lemon/network_simplex.h +1659 -0
  120. data/ext/lemon-1.3.1/lemon/opt2_tsp.h +367 -0
  121. data/ext/lemon-1.3.1/lemon/pairing_heap.h +474 -0
  122. data/ext/lemon-1.3.1/lemon/path.h +1164 -0
  123. data/ext/lemon-1.3.1/lemon/planarity.h +2754 -0
  124. data/ext/lemon-1.3.1/lemon/preflow.h +985 -0
  125. data/ext/lemon-1.3.1/lemon/quad_heap.h +343 -0
  126. data/ext/lemon-1.3.1/lemon/radix_heap.h +438 -0
  127. data/ext/lemon-1.3.1/lemon/radix_sort.h +487 -0
  128. data/ext/lemon-1.3.1/lemon/random.cc +29 -0
  129. data/ext/lemon-1.3.1/lemon/random.h +1005 -0
  130. data/ext/lemon-1.3.1/lemon/smart_graph.h +1344 -0
  131. data/ext/lemon-1.3.1/lemon/soplex.cc +465 -0
  132. data/ext/lemon-1.3.1/lemon/soplex.h +158 -0
  133. data/ext/lemon-1.3.1/lemon/static_graph.h +476 -0
  134. data/ext/lemon-1.3.1/lemon/suurballe.h +776 -0
  135. data/ext/lemon-1.3.1/lemon/time_measure.h +610 -0
  136. data/ext/lemon-1.3.1/lemon/tolerance.h +242 -0
  137. data/ext/lemon-1.3.1/lemon/unionfind.h +1824 -0
  138. data/ext/lemon-1.3.1/scripts/unify-sources.sh +390 -0
  139. data/ext/lemon-1.3.1/scripts/valgrind-wrapper.sh +22 -0
  140. data/ext/lemongraph/arc_map.cc +1007 -0
  141. data/ext/lemongraph/digraph.cc +282 -0
  142. data/ext/lemongraph/digraph_arc.cc +153 -0
  143. data/ext/lemongraph/digraph_node.cc +277 -0
  144. data/ext/lemongraph/edge_map.cc +770 -0
  145. data/ext/lemongraph/extconf.rb +53 -0
  146. data/ext/lemongraph/graph.cc +351 -0
  147. data/ext/lemongraph/graph_arc.cc +95 -0
  148. data/ext/lemongraph/graph_edge.cc +153 -0
  149. data/ext/lemongraph/graph_item.cc +76 -0
  150. data/ext/lemongraph/graph_node.cc +321 -0
  151. data/ext/lemongraph/lemongraph.cc +260 -0
  152. data/ext/lemongraph/lemongraph.hh +295 -0
  153. data/ext/lemongraph/lemongraph.map +6 -0
  154. data/ext/lemongraph/lemongraph_export.hh +31 -0
  155. data/ext/lemongraph/node_map.cc +1011 -0
  156. data/lemongraph.gemspec +176 -0
  157. data/lib/lemongraph/graphviz.rb +240 -0
  158. data/lib/lemongraph/version.rb +4 -0
  159. data/lib/lemongraph.rb +21 -0
  160. data/samples/lemondeps.rb +38 -0
  161. metadata +202 -0
@@ -0,0 +1,242 @@
1
+ /* -*- mode: C++; indent-tabs-mode: nil; -*-
2
+ *
3
+ * This file is a part of LEMON, a generic C++ optimization library.
4
+ *
5
+ * Copyright (C) 2003-2009
6
+ * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7
+ * (Egervary Research Group on Combinatorial Optimization, EGRES).
8
+ *
9
+ * Permission to use, modify and distribute this software is granted
10
+ * provided that this copyright notice appears in all copies. For
11
+ * precise terms see the accompanying LICENSE file.
12
+ *
13
+ * This software is provided "AS IS" with no warranty of any kind,
14
+ * express or implied, and with no claim as to its suitability for any
15
+ * purpose.
16
+ *
17
+ */
18
+
19
+ #ifndef LEMON_TOLERANCE_H
20
+ #define LEMON_TOLERANCE_H
21
+
22
+ ///\ingroup misc
23
+ ///\file
24
+ ///\brief A basic tool to handle the anomalies of calculation with
25
+ ///floating point numbers.
26
+ ///
27
+
28
+ namespace lemon {
29
+
30
+ /// \addtogroup misc
31
+ /// @{
32
+
33
+ ///\brief A class to provide a basic way to
34
+ ///handle the comparison of numbers that are obtained
35
+ ///as a result of a probably inexact computation.
36
+ ///
37
+ ///\ref Tolerance is a class to provide a basic way to
38
+ ///handle the comparison of numbers that are obtained
39
+ ///as a result of a probably inexact computation.
40
+ ///
41
+ ///The general implementation is suitable only if the data type is exact,
42
+ ///like the integer types, otherwise a specialized version must be
43
+ ///implemented. These specialized classes like
44
+ ///Tolerance<double> may offer additional tuning parameters.
45
+ ///
46
+ ///\sa Tolerance<float>
47
+ ///\sa Tolerance<double>
48
+ ///\sa Tolerance<long double>
49
+
50
+ template<class T>
51
+ class Tolerance
52
+ {
53
+ public:
54
+ typedef T Value;
55
+
56
+ ///\name Comparisons
57
+ ///The concept is that these bool functions return \c true only if
58
+ ///the related comparisons hold even if some numerical error appeared
59
+ ///during the computations.
60
+
61
+ ///@{
62
+
63
+ ///Returns \c true if \c a is \e surely strictly less than \c b
64
+ static bool less(Value a,Value b) {return a<b;}
65
+ ///Returns \c true if \c a is \e surely different from \c b
66
+ static bool different(Value a,Value b) {return a!=b;}
67
+ ///Returns \c true if \c a is \e surely positive
68
+ static bool positive(Value a) {return static_cast<Value>(0) < a;}
69
+ ///Returns \c true if \c a is \e surely negative
70
+ static bool negative(Value a) {return a < static_cast<Value>(0);}
71
+ ///Returns \c true if \c a is \e surely non-zero
72
+ static bool nonZero(Value a) {return a != static_cast<Value>(0);}
73
+
74
+ ///@}
75
+
76
+ ///Returns the zero value.
77
+ static Value zero() {return static_cast<Value>(0);}
78
+
79
+ // static bool finite(Value a) {}
80
+ // static Value big() {}
81
+ // static Value negativeBig() {}
82
+ };
83
+
84
+
85
+ ///Float specialization of Tolerance.
86
+
87
+ ///Float specialization of Tolerance.
88
+ ///\sa Tolerance
89
+ ///\relates Tolerance
90
+ template<>
91
+ class Tolerance<float>
92
+ {
93
+ static float def_epsilon;
94
+ float _epsilon;
95
+ public:
96
+ ///\e
97
+ typedef float Value;
98
+
99
+ ///Constructor setting the epsilon tolerance to the default value.
100
+ Tolerance() : _epsilon(def_epsilon) {}
101
+ ///Constructor setting the epsilon tolerance to the given value.
102
+ Tolerance(float e) : _epsilon(e) {}
103
+
104
+ ///Returns the epsilon value.
105
+ Value epsilon() const {return _epsilon;}
106
+ ///Sets the epsilon value.
107
+ void epsilon(Value e) {_epsilon=e;}
108
+
109
+ ///Returns the default epsilon value.
110
+ static Value defaultEpsilon() {return def_epsilon;}
111
+ ///Sets the default epsilon value.
112
+ static void defaultEpsilon(Value e) {def_epsilon=e;}
113
+
114
+ ///\name Comparisons
115
+ ///See \ref lemon::Tolerance "Tolerance" for more details.
116
+
117
+ ///@{
118
+
119
+ ///Returns \c true if \c a is \e surely strictly less than \c b
120
+ bool less(Value a,Value b) const {return a+_epsilon<b;}
121
+ ///Returns \c true if \c a is \e surely different from \c b
122
+ bool different(Value a,Value b) const { return less(a,b)||less(b,a); }
123
+ ///Returns \c true if \c a is \e surely positive
124
+ bool positive(Value a) const { return _epsilon<a; }
125
+ ///Returns \c true if \c a is \e surely negative
126
+ bool negative(Value a) const { return -_epsilon>a; }
127
+ ///Returns \c true if \c a is \e surely non-zero
128
+ bool nonZero(Value a) const { return positive(a)||negative(a); }
129
+
130
+ ///@}
131
+
132
+ ///Returns zero
133
+ static Value zero() {return 0;}
134
+ };
135
+
136
+ ///Double specialization of Tolerance.
137
+
138
+ ///Double specialization of Tolerance.
139
+ ///\sa Tolerance
140
+ ///\relates Tolerance
141
+ template<>
142
+ class Tolerance<double>
143
+ {
144
+ static double def_epsilon;
145
+ double _epsilon;
146
+ public:
147
+ ///\e
148
+ typedef double Value;
149
+
150
+ ///Constructor setting the epsilon tolerance to the default value.
151
+ Tolerance() : _epsilon(def_epsilon) {}
152
+ ///Constructor setting the epsilon tolerance to the given value.
153
+ Tolerance(double e) : _epsilon(e) {}
154
+
155
+ ///Returns the epsilon value.
156
+ Value epsilon() const {return _epsilon;}
157
+ ///Sets the epsilon value.
158
+ void epsilon(Value e) {_epsilon=e;}
159
+
160
+ ///Returns the default epsilon value.
161
+ static Value defaultEpsilon() {return def_epsilon;}
162
+ ///Sets the default epsilon value.
163
+ static void defaultEpsilon(Value e) {def_epsilon=e;}
164
+
165
+ ///\name Comparisons
166
+ ///See \ref lemon::Tolerance "Tolerance" for more details.
167
+
168
+ ///@{
169
+
170
+ ///Returns \c true if \c a is \e surely strictly less than \c b
171
+ bool less(Value a,Value b) const {return a+_epsilon<b;}
172
+ ///Returns \c true if \c a is \e surely different from \c b
173
+ bool different(Value a,Value b) const { return less(a,b)||less(b,a); }
174
+ ///Returns \c true if \c a is \e surely positive
175
+ bool positive(Value a) const { return _epsilon<a; }
176
+ ///Returns \c true if \c a is \e surely negative
177
+ bool negative(Value a) const { return -_epsilon>a; }
178
+ ///Returns \c true if \c a is \e surely non-zero
179
+ bool nonZero(Value a) const { return positive(a)||negative(a); }
180
+
181
+ ///@}
182
+
183
+ ///Returns zero
184
+ static Value zero() {return 0;}
185
+ };
186
+
187
+ ///Long double specialization of Tolerance.
188
+
189
+ ///Long double specialization of Tolerance.
190
+ ///\sa Tolerance
191
+ ///\relates Tolerance
192
+ template<>
193
+ class Tolerance<long double>
194
+ {
195
+ static long double def_epsilon;
196
+ long double _epsilon;
197
+ public:
198
+ ///\e
199
+ typedef long double Value;
200
+
201
+ ///Constructor setting the epsilon tolerance to the default value.
202
+ Tolerance() : _epsilon(def_epsilon) {}
203
+ ///Constructor setting the epsilon tolerance to the given value.
204
+ Tolerance(long double e) : _epsilon(e) {}
205
+
206
+ ///Returns the epsilon value.
207
+ Value epsilon() const {return _epsilon;}
208
+ ///Sets the epsilon value.
209
+ void epsilon(Value e) {_epsilon=e;}
210
+
211
+ ///Returns the default epsilon value.
212
+ static Value defaultEpsilon() {return def_epsilon;}
213
+ ///Sets the default epsilon value.
214
+ static void defaultEpsilon(Value e) {def_epsilon=e;}
215
+
216
+ ///\name Comparisons
217
+ ///See \ref lemon::Tolerance "Tolerance" for more details.
218
+
219
+ ///@{
220
+
221
+ ///Returns \c true if \c a is \e surely strictly less than \c b
222
+ bool less(Value a,Value b) const {return a+_epsilon<b;}
223
+ ///Returns \c true if \c a is \e surely different from \c b
224
+ bool different(Value a,Value b) const { return less(a,b)||less(b,a); }
225
+ ///Returns \c true if \c a is \e surely positive
226
+ bool positive(Value a) const { return _epsilon<a; }
227
+ ///Returns \c true if \c a is \e surely negative
228
+ bool negative(Value a) const { return -_epsilon>a; }
229
+ ///Returns \c true if \c a is \e surely non-zero
230
+ bool nonZero(Value a) const { return positive(a)||negative(a); }
231
+
232
+ ///@}
233
+
234
+ ///Returns zero
235
+ static Value zero() {return 0;}
236
+ };
237
+
238
+ /// @}
239
+
240
+ } //namespace lemon
241
+
242
+ #endif //LEMON_TOLERANCE_H