pgraph-python 0.6.2__py3-none-any.whl → 0.6.3__py3-none-any.whl

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.
tests/test_graph.py DELETED
@@ -1,737 +0,0 @@
1
-
2
- import unittest
3
- import numpy as np
4
- import numpy.testing as nt
5
-
6
- from pgraph import *
7
-
8
- class TestUGraph(unittest.TestCase):
9
-
10
- def test_constructor(self):
11
-
12
- g = UGraph()
13
-
14
- v1 = g.add_vertex()
15
- v2 = g.add_vertex()
16
- self.assertEqual(g.n, 2)
17
- self.assertIsInstance(v1, UVertex)
18
- self.assertIsInstance(v2, UVertex)
19
-
20
- def test_constructor2(self):
21
-
22
- g = UGraph()
23
-
24
- v = g.add_vertex([1,2,3])
25
- self.assertIsInstance(v, UVertex)
26
- self.assertEqual(v.x, 1)
27
- self.assertEqual(v.y, 2)
28
- self.assertEqual(v.z, 3)
29
-
30
- def test_str(self):
31
- g = UGraph()
32
-
33
- v0 = g.add_vertex([1,2,3])
34
- v1 = g.add_vertex([1,2,3])
35
- v0.connect(v1)
36
-
37
- self.assertEqual(str(g), "UGraph: 2 vertices, 1 edge, 1 component")
38
-
39
- g = DGraph()
40
-
41
- v0 = g.add_vertex([1,2,3])
42
- v1 = g.add_vertex([1,2,3])
43
- v0.connect(v1)
44
-
45
- self.assertEqual(str(g), "DGraph: 2 vertices, 1 edge, 1 component")
46
-
47
-
48
- s = repr(g)
49
- self.assertIsInstance(s, str)
50
- self.assertEqual(len(s.split('\n')), 2)
51
-
52
- def test_attr(self):
53
-
54
- g = UGraph()
55
-
56
- v1 = g.add_vertex(name='v1')
57
- self.assertEqual(v1.name, 'v1')
58
-
59
- v1 = g.add_vertex(coord=[1,2,3])
60
- self.assertIsInstance(v1.coord, np.ndarray)
61
- self.assertEqual(v1.coord.shape, (3,))
62
- self.assertEqual(list(v1.coord), [1,2,3])
63
-
64
- def test_constructor3(self):
65
-
66
- g = UGraph()
67
- v1 = g.add_vertex()
68
- v2 = g.add_vertex()
69
- v3 = g.add_vertex()
70
-
71
- self.assertIs(g[0], v1)
72
- self.assertIs(g[0], v1)
73
- self.assertIs(g[0], v1)
74
-
75
- class MyNode(UVertex):
76
- def __init__(self, a):
77
- super().__init__()
78
- self.a = a
79
-
80
- v1 = g.add_vertex(MyNode(1))
81
- v2 = g.add_vertex(MyNode(2))
82
-
83
- self.assertIsInstance(v1, MyNode)
84
- v1.connect(v2)
85
- self.assertEqual(v1.neighbours()[0].a, 2)
86
-
87
- def test_neighbours(self):
88
- g = UGraph()
89
- v1 = g.add_vertex(name='v1')
90
- v2 = g.add_vertex(name='v2')
91
- v3 = g.add_vertex(name='v3')
92
- v4 = g.add_vertex(name='v4')
93
- v1.connect(v2)
94
- v1.connect(v3)
95
-
96
- n = v1.neighbours()
97
- self.assertTrue(len(n) == 2)
98
- self.assertTrue(v2 in n)
99
- self.assertTrue(v3 in n)
100
- self.assertFalse(v1 in n)
101
- self.assertFalse(v4 in n)
102
-
103
- n = v2.neighbours()
104
- self.assertTrue(len(n) == 1)
105
- self.assertTrue(v1 in n)
106
- self.assertFalse(v2 in n)
107
- self.assertFalse(v3 in n)
108
- self.assertFalse(v4 in n)
109
-
110
-
111
- g = UGraph()
112
- v1 = g.add_vertex(name='v1')
113
- v2 = g.add_vertex(name='v2')
114
- v3 = g.add_vertex(name='v3')
115
- v1.connect(v2)
116
-
117
- self.assertTrue(v1.isneighbour(v2))
118
- self.assertTrue(v2.isneighbour(v1))
119
- self.assertFalse(v1.isneighbour(v3))
120
- self.assertFalse(v3.isneighbour(v1))
121
-
122
- g = DGraph()
123
- v1 = g.add_vertex(name='v1')
124
- v2 = g.add_vertex(name='v2')
125
- v3 = g.add_vertex(name='v3')
126
- v4 = g.add_vertex(name='v4')
127
- v1.connect(v2)
128
- v1.connect(v3)
129
-
130
- n = v1.neighbours()
131
- self.assertTrue(len(n) == 2)
132
- self.assertTrue(v2 in n)
133
- self.assertTrue(v3 in n)
134
- self.assertFalse(v1 in n)
135
- self.assertFalse(v4 in n)
136
-
137
- n = v2.neighbours()
138
- self.assertTrue(len(n) == 0)
139
- self.assertFalse(v1 in n)
140
- self.assertFalse(v2 in n)
141
- self.assertFalse(v3 in n)
142
- self.assertFalse(v4 in n)
143
-
144
- g = DGraph()
145
- v1 = g.add_vertex(name='v1')
146
- v2 = g.add_vertex(name='v2')
147
- v3 = g.add_vertex(name='v3')
148
- v1.connect(v2)
149
- self.assertTrue(v1.isneighbour(v2))
150
- self.assertFalse(v2.isneighbour(v1))
151
- self.assertFalse(v1.isneighbour(v3))
152
- self.assertFalse(v3.isneighbour(v1))
153
-
154
- def test_getitem(self):
155
- g = UGraph()
156
- v1 = g.add_vertex(name='v1')
157
- v2 = g.add_vertex(name='v2')
158
- v3 = g.add_vertex(name='v3')
159
-
160
- self.assertIs(g[0], v1)
161
- self.assertIs(g[1], v2)
162
- self.assertIs(g[2], v3)
163
-
164
- self.assertIs(g['v1'], v1)
165
- self.assertIs(g['v2'], v2)
166
- self.assertIs(g['v3'], v3)
167
-
168
- self.assertIs(g[v1], v1)
169
- self.assertIs(g[v2], v2)
170
- self.assertIs(g[v3], v3)
171
-
172
- v = [v for v in g]
173
- self.assertEqual(len(v), 3)
174
- self.assertEqual(v, [v1, v2, v3])
175
-
176
- def test_connect(self):
177
-
178
- g = UGraph()
179
- v1 = g.add_vertex()
180
- v2 = g.add_vertex()
181
- v3 = g.add_vertex()
182
- e12 = v1.connect(v2)
183
- e13 = v1.connect(v3)
184
-
185
- self.assertEqual(g.n, 3)
186
- self.assertEqual(g.ne, 2)
187
-
188
- self.assertIsInstance(e12, Edge)
189
- self.assertIsInstance(e12, Edge)
190
-
191
- self.assertTrue(e12 in v1.edges())
192
- self.assertTrue(e12 in v2.edges())
193
- self.assertFalse(e12 in v3.edges())
194
-
195
- self.assertTrue(e13 in v1.edges())
196
- self.assertTrue(e13 in v3.edges())
197
- self.assertFalse(e13 in v2.edges())
198
-
199
-
200
- def test_remove_node(self):
201
-
202
- g = UGraph()
203
- v1 = g.add_vertex()
204
- v2 = g.add_vertex()
205
- v3 = g.add_vertex()
206
- e12 = v1.connect(v2)
207
- e13 = v1.connect(v3)
208
-
209
- g.remove(v1)
210
- self.assertEqual(g.n, 2)
211
- self.assertEqual(g.ne, 0)
212
- self.assertEqual(g.nc, 2)
213
-
214
- self.assertFalse(e12 in v2.edges())
215
- self.assertFalse(e12 in v3.edges())
216
-
217
- self.assertFalse(e13 in v3.edges())
218
- self.assertFalse(e13 in v2.edges())
219
-
220
- def test_remove_edge(self):
221
-
222
- g = UGraph()
223
- v1 = g.add_vertex()
224
- v2 = g.add_vertex()
225
- v3 = g.add_vertex()
226
- e12 = v1.connect(v2)
227
- e13 = v1.connect(v3)
228
-
229
- g.remove(e12)
230
- self.assertEqual(g.n, 3)
231
- self.assertEqual(g.ne, 1)
232
- self.assertEqual(g.nc, 2)
233
-
234
- self.assertFalse(e12 in v1.edges())
235
- self.assertFalse(e12 in v2.edges())
236
-
237
- self.assertTrue(e13 in v1.edges())
238
- self.assertTrue(e13 in v3.edges())
239
-
240
- def test_edge1(self):
241
-
242
- g = UGraph()
243
- v1 = g.add_vertex()
244
- v2 = g.add_vertex()
245
- v3 = g.add_vertex()
246
- v4 = g.add_vertex()
247
- v1.connect(v2)
248
- v1.connect(v3)
249
-
250
- self.assertEqual(len(v1.edges()), 2)
251
- self.assertEqual(len(v2.edges()), 1)
252
- self.assertEqual(len(v3.edges()), 1)
253
-
254
- self.assertEqual(len(v1.neighbours()), 2)
255
- self.assertEqual(len(v2.neighbours()), 1)
256
- self.assertEqual(len(v3.neighbours()), 1)
257
-
258
- self.assertTrue(v2 in v1.neighbours())
259
- self.assertTrue(v3 in v1.neighbours())
260
- self.assertFalse(v4 in v1.neighbours())
261
-
262
- def test_edge2(self):
263
-
264
- g = UGraph()
265
- v1 = g.add_vertex(name='n1')
266
- v2 = g.add_vertex(name='n2')
267
- v3 = g.add_vertex(name='n3')
268
- v4 = g.add_vertex(name='n4')
269
-
270
- g.add_edge('n1', 'n2')
271
- g.add_edge('n1', 'n3')
272
-
273
- self.assertEqual(len(v1.edges()), 2)
274
- self.assertEqual(len(v2.edges()), 1)
275
- self.assertEqual(len(v3.edges()), 1)
276
-
277
- self.assertEqual(len(v1.neighbours()), 2)
278
- self.assertEqual(len(v2.neighbours()), 1)
279
- self.assertEqual(len(v3.neighbours()), 1)
280
-
281
- self.assertTrue(v2 in v1.neighbours())
282
- self.assertTrue(v3 in v1.neighbours())
283
- self.assertFalse(v4 in v1.neighbours())
284
-
285
- def test_edge3(self):
286
-
287
- g = UGraph()
288
- v1 = g.add_vertex(name='n1')
289
- v2 = g.add_vertex(name='n2')
290
- v3 = g.add_vertex(name='n3')
291
- v4 = g.add_vertex(name='n4')
292
-
293
- g.add_edge(v1, v2)
294
- g.add_edge(v1, v3)
295
-
296
- self.assertEqual(len(v1.edges()), 2)
297
- self.assertEqual(len(v2.edges()), 1)
298
- self.assertEqual(len(v3.edges()), 1)
299
-
300
- self.assertEqual(len(v1.neighbours()), 2)
301
- self.assertEqual(len(v2.neighbours()), 1)
302
- self.assertEqual(len(v3.neighbours()), 1)
303
-
304
- self.assertTrue(v2 in v1.neighbours())
305
- self.assertTrue(v3 in v1.neighbours())
306
- self.assertFalse(v4 in v1.neighbours())
307
-
308
-
309
- def test_edgeto(self):
310
-
311
- g = UGraph()
312
- v1 = g.add_vertex()
313
- v2 = g.add_vertex()
314
- v3 = g.add_vertex()
315
- e12 = v1.connect(v2)
316
- e13 = v1.connect(v3)
317
-
318
- self.assertIsInstance(v1.edgeto(v2), Edge)
319
- self.assertIs(v1.edgeto(v2), e12)
320
- self.assertIs(v1.edgeto(v2), e12)
321
-
322
- def test_add_vertex(self):
323
-
324
- g = UGraph()
325
-
326
- v = UVertex()
327
-
328
- g.add_vertex(v)
329
- self.assertEqual(v.name, '#0')
330
- self.assertTrue(v in g)
331
- self.assertTrue(v._graph, g)
332
-
333
- def test_properties(self):
334
-
335
- g = UGraph()
336
- v1 = g.add_vertex()
337
- v2 = g.add_vertex()
338
- v3 = g.add_vertex()
339
- v4 = g.add_vertex()
340
- e12 = v1.connect(v2)
341
- e13 = v1.connect(v3)
342
-
343
- self.assertEqual(g.n, 4)
344
- self.assertEqual(g.ne, 2)
345
- self.assertEqual(g.average_degree(), 1.0)
346
-
347
- g = DGraph()
348
- v1 = g.add_vertex()
349
- v2 = g.add_vertex()
350
- v3 = g.add_vertex()
351
- v4 = g.add_vertex()
352
- e12 = v1.connect(v2)
353
- e13 = v1.connect(v3)
354
-
355
- self.assertEqual(g.n, 4)
356
- self.assertEqual(g.ne, 2)
357
- self.assertEqual(g.average_degree(), 0.5)
358
-
359
- def test_contains(self):
360
-
361
- g = UGraph()
362
- v1 = g.add_vertex()
363
- v2 = g.add_vertex()
364
-
365
- self.assertTrue('#0' in g)
366
- self.assertFalse('#2' in g)
367
-
368
- self.assertTrue(v1 in g)
369
- g2 = UGraph()
370
- self.assertFalse(v1 in g2)
371
-
372
- def test_Dict(self):
373
-
374
- v1 = UVertex(name='v1')
375
- v2 = UVertex(name='v2')
376
- v3 = UVertex(name='v3')
377
- v4 = UVertex(name='v4')
378
-
379
- parent = {}
380
- parent[v2] = v1
381
- parent[v3] = v1
382
- parent[v4] = v3
383
-
384
- g = UGraph.Dict(parent)
385
-
386
- self.assertIsInstance(g, UGraph)
387
- self.assertEqual(g.n, 4)
388
- self.assertEqual(g.ne, 3)
389
- self.assertTrue('v1' in g)
390
- self.assertTrue('v2' in g)
391
- self.assertTrue('v3' in g)
392
- self.assertTrue('v4' in g)
393
-
394
- self.assertTrue(g['v2'] in g['v1'].neighbours())
395
- self.assertTrue(g['v3'] in g['v1'].neighbours())
396
- self.assertTrue(g['v4'] in g['v3'].neighbours())
397
-
398
- def test_Adjacency(self):
399
- A = np.zeros((5, 5))
400
- A[1,2] = 5 # 1 <--> 2
401
- A[3,4] = 2 # 3 <--> 4
402
-
403
- coords = np.random.rand(5, 3)
404
- names = "zero one two three four".split(" ")
405
-
406
- g = UGraph.Adjacency(A, coords, names)
407
- self.assertIsInstance(g, UGraph)
408
- self.assertEqual(g.n, 5)
409
- self.assertEqual(g.ne, 2)
410
- self.assertTrue(g['two'] in g['one'].neighbours())
411
- self.assertTrue(g['three'] in g['four'].neighbours())
412
- e = g['two'].edgeto(g['one'])
413
- self.assertEqual(e.cost, 5)
414
- e = g['three'].edgeto(g['four'])
415
- self.assertEqual(e.cost, 2)
416
- nt.assert_almost_equal(g['two'].coord, coords[2,:])
417
-
418
- A = np.zeros((5, 5))
419
- A[1,2] = 5 # 1 --> 2
420
- A[3,4] = 2 # 3 --> 4
421
-
422
- coords = np.random.rand(5, 3)
423
- names = "zero one two three four".split(" ")
424
-
425
- g = DGraph.Adjacency(A, coords, names)
426
- self.assertIsInstance(g, DGraph)
427
- self.assertEqual(g.n, 5)
428
- self.assertEqual(g.ne, 2)
429
- self.assertTrue(g['two'] in g['one'].neighbours())
430
- self.assertTrue(g['four'] in g['three'].neighbours())
431
- e = g['one'].edgeto(g['two'])
432
- self.assertEqual(e.cost, 5)
433
- e = g['three'].edgeto(g['four'])
434
- self.assertEqual(e.cost, 2)
435
- nt.assert_almost_equal(g['two'].coord, coords[2,:])
436
-
437
-
438
- # def test_remove_edge(self):
439
-
440
- # g = UGraph()
441
- # v1 = g.add_vertex()
442
- # v2 = g.add_vertex()
443
- # v3 = g.add_vertex()
444
- # e12 = v1.connect(v2)
445
- # e13 = v1.connect(v3)
446
-
447
- # self.assertEqual(g.nc, 1)
448
- # e12.remove()
449
-
450
- # self.assertEqual(g.nc, 2)
451
-
452
- # self.assertEqual(len(v1.edges()), 1)
453
- # self.assertEqual(len(v2.edges()), 0)
454
- # self.assertEqual(len(v3.edges()), 1)
455
-
456
- # self.assertEqual(len(v1.neighbours()), 1)
457
- # self.assertEqual(len(v2.neighbours()), 0)
458
- # self.assertEqual(len(v3.neighbours()), 1)
459
-
460
- # def test_remove_vertex(self):
461
-
462
- # g = UGraph()
463
- # v1 = g.add_vertex()
464
- # v2 = g.add_vertex()
465
- # v3 = g.add_vertex()
466
- # e12 = v1.connect(v2)
467
- # e13 = v1.connect(v3)
468
-
469
- # self.assertEqual(g.n, 3)
470
- # self.assertEqual(g.nc, 1)
471
- # g.remove(v1)
472
-
473
- # self.assertEqual(g.n, 2)
474
- # self.assertEqual(g.nc, 2)
475
-
476
- # self.assertEqual(len(v1.edges()), 0)
477
- # self.assertEqual(len(v2.edges()), 0)
478
- # self.assertEqual(len(v3.edges()), 0)
479
-
480
- # self.assertEqual(len(v1.neighbours()), 0)
481
- # self.assertEqual(len(v2.neighbours()), 0)
482
- # self.assertEqual(len(v3.neighbours()), 0)
483
-
484
- def test_components(self):
485
-
486
- g = UGraph()
487
- v1 = g.add_vertex()
488
- v2 = g.add_vertex()
489
- v3 = g.add_vertex()
490
-
491
- self.assertEqual(g.nc, 3)
492
- v1.connect(v2)
493
- self.assertEqual(g.nc, 2)
494
- v1.connect(v3)
495
- self.assertEqual(g.nc, 1)
496
-
497
- def test_matrices(self):
498
- g = UGraph()
499
- v1 = g.add_vertex()
500
- v2 = g.add_vertex()
501
- v3 = g.add_vertex()
502
- v4 = g.add_vertex()
503
- e12 = v1.connect(v2)
504
- e13 = v1.connect(v3)
505
-
506
- A = g.adjacency()
507
- self.assertIsInstance(A, np.ndarray)
508
- self.assertEqual(A.shape, (g.n, g.n))
509
-
510
- A = g.Laplacian()
511
- self.assertIsInstance(A, np.ndarray)
512
- self.assertEqual(A.shape, (g.n, g.n))
513
-
514
- A = g.incidence()
515
- self.assertIsInstance(A, np.ndarray)
516
- self.assertEqual(A.shape, (g.n, g.ne))
517
-
518
- A = g.distance()
519
- self.assertIsInstance(A, np.ndarray)
520
- self.assertEqual(A.shape, (g.n, g.n))
521
-
522
- def test_metric(self):
523
- g = UGraph()
524
- v1 = g.add_vertex([1,2,3])
525
- p = [7,6,6]
526
- self.assertAlmostEqual(v1.distance(p), np.sqrt(61))
527
-
528
- g = UGraph(metric='L2')
529
- v1 = g.add_vertex([1,2,3])
530
- p = [7,6,6]
531
- self.assertAlmostEqual(v1.distance(p), np.sqrt(61))
532
-
533
- g = UGraph(metric='L1')
534
- v1 = g.add_vertex([1,2,3])
535
- p = [7,6,6]
536
- self.assertEqual(v1.distance(p), 13)
537
-
538
- g = UGraph(metric='SE2')
539
- v1 = g.add_vertex([1,2,0])
540
- p = [7,6,0]
541
- self.assertAlmostEqual(v1.distance(p), np.sqrt(52))
542
- p = [7,6,2*np.pi]
543
- self.assertAlmostEqual(v1.distance(p), np.sqrt(52))
544
- p = [7,6,-2*np.pi]
545
- self.assertAlmostEqual(v1.distance(p), np.sqrt(52))
546
- p = [7,6,4*np.pi]
547
- self.assertAlmostEqual(v1.distance(p), np.sqrt(52))
548
- p = [7,6,-4*np.pi]
549
- self.assertAlmostEqual(v1.distance(p), np.sqrt(52))
550
-
551
- p = [7,6,np.pi]
552
- self.assertAlmostEqual(v1.distance(p), np.sqrt(52+np.pi**2))
553
-
554
- v2 = g.add_vertex([1,2,np.pi/2])
555
- p = [7,6,np.pi/2]
556
- self.assertAlmostEqual(v2.distance(p), np.sqrt(52))
557
- p = [7,6,-np.pi/2]
558
- self.assertAlmostEqual(v2.distance(p), np.sqrt(52+np.pi**2))
559
-
560
- def test_heuristic(self):
561
- g = UGraph()
562
- p = [2, 3, 4]
563
- self.assertAlmostEqual(g.heuristic(p), np.sqrt(29))
564
-
565
- g = UGraph(heuristic='L2')
566
- p = [2, 3, 4]
567
- self.assertAlmostEqual(g.heuristic(p), np.sqrt(29))
568
-
569
- g = UGraph(heuristic='L1')
570
- p = [2, 3, 4]
571
- self.assertAlmostEqual(g.heuristic(p), 9)
572
-
573
-
574
- def test_closest(self):
575
- g = UGraph()
576
- v1 = g.add_vertex([1,2,3])
577
- v2 = g.add_vertex([4,5,6])
578
- v, d = g.closest([4, 5, 7])
579
- self.assertIs(v, v2)
580
- self.assertEqual(d, 1)
581
-
582
- def test_BFS(self):
583
- g = UGraph()
584
- v1 = g.add_vertex(coord=[0,0], name='v1')
585
- v2 = g.add_vertex(coord=[1,1], name='v2')
586
- v3 = g.add_vertex(coord=[2,2], name='v3')
587
- v4 = g.add_vertex(coord=[1,3], name='v4')
588
- v5 = g.add_vertex(coord=[0,4], name='v5')
589
- v6 = g.add_vertex(coord=[-5,2], name='v6')
590
- v7 = g.add_vertex(coord=[0,6], name='v7')
591
-
592
- v1.connect(v2)
593
- v2.connect(v3)
594
- v3.connect(v4)
595
- v4.connect(v5)
596
- v1.connect(v6)
597
- e = v6.connect(v5)
598
-
599
- p = g.path_UCS(v1, v7)
600
- self.assertIsNone(p)
601
-
602
- p, length = g.path_BFS(v1, v5, verbose=True, summary=True)
603
- self.assertIsInstance(p, list)
604
- self.assertEqual(len(p), 3)
605
- self.assertEqual(p, [v1, v6, v5])
606
-
607
- def test_UCS(self):
608
- g = UGraph()
609
- v1 = g.add_vertex(coord=[0,0], name='v1')
610
- v2 = g.add_vertex(coord=[1,1], name='v2')
611
- v3 = g.add_vertex(coord=[2,2], name='v3')
612
- v4 = g.add_vertex(coord=[1,3], name='v4')
613
- v5 = g.add_vertex(coord=[0,4], name='v5')
614
- v6 = g.add_vertex(coord=[-5,2], name='v6')
615
- v7 = g.add_vertex(coord=[0,6], name='v7')
616
-
617
- v1.connect(v2)
618
- v2.connect(v3)
619
- v3.connect(v4)
620
- v4.connect(v5)
621
- v1.connect(v6)
622
- e = v6.connect(v5)
623
-
624
- p = g.path_UCS(v1, v7)
625
- self.assertIsNone(p)
626
-
627
- p, length, parent = g.path_UCS(v1, v5, verbose=True, summary=True)
628
- self.assertIsInstance(p, list)
629
- self.assertEqual(len(p), 5)
630
- self.assertEqual(p, [v1, v2, v3, v4, v5])
631
- self.assertIsInstance(length, float)
632
- self.assertAlmostEqual(length, 5.656854249492381)
633
- self.assertIsInstance(parent, dict)
634
- self.assertEqual(parent[v2.name], v1.name)
635
- self.assertEqual(parent[v3.name], v2.name)
636
- self.assertEqual(parent[v4.name], v3.name)
637
- self.assertEqual(parent[v5.name], v4.name)
638
-
639
- def test_Astar(self):
640
- g = UGraph()
641
- v1 = g.add_vertex(coord=[0,0], name='v1')
642
- v2 = g.add_vertex(coord=[1,1], name='v2')
643
- v3 = g.add_vertex(coord=[2,2], name='v3')
644
- v4 = g.add_vertex(coord=[1,3], name='v4')
645
- v5 = g.add_vertex(coord=[0,4], name='v5')
646
- v6 = g.add_vertex(coord=[-5,2], name='v6')
647
- v7 = g.add_vertex(coord=[0,6], name='v7')
648
-
649
- v1.connect(v2)
650
- v2.connect(v3)
651
- v3.connect(v4)
652
- v4.connect(v5)
653
- v1.connect(v6)
654
- e = v6.connect(v5)
655
-
656
- p = g.path_Astar(v1, v7)
657
- self.assertIsNone(p)
658
-
659
- p, length, parent = g.path_Astar(v1, v5, verbose=True, summary=True)
660
- self.assertIsInstance(p, list)
661
- self.assertEqual(len(p), 5)
662
- self.assertEqual(p, [v1, v2, v3, v4, v5])
663
- self.assertIsInstance(length, float)
664
- self.assertAlmostEqual(length, 5.656854249492381)
665
-
666
- self.assertIsInstance(parent, dict)
667
- self.assertEqual(parent[v2.name], v1.name)
668
- self.assertEqual(parent[v3.name], v2.name)
669
- self.assertEqual(parent[v4.name], v3.name)
670
- self.assertEqual(parent[v5.name], v4.name)
671
-
672
- def test_plot(self):
673
-
674
- g = UGraph()
675
- v1 = g.add_vertex(coord=[0,0], name='v1')
676
- v2 = g.add_vertex(coord=[1,1], name='v2')
677
- v3 = g.add_vertex(coord=[2,2], name='v3')
678
- v4 = g.add_vertex(coord=[1,3], name='v4')
679
- v5 = g.add_vertex(coord=[0,4], name='v5')
680
- v6 = g.add_vertex(coord=[-5,2], name='v6')
681
- v7 = g.add_vertex(coord=[0,6], name='v7')
682
-
683
- v1.connect(v2)
684
- v2.connect(v3)
685
- v3.connect(v4)
686
- v4.connect(v5)
687
- v1.connect(v6)
688
- e = v6.connect(v5)
689
-
690
- g.plot()
691
-
692
- p, length, parent = g.path_Astar(v1, v5, verbose=True, summary=True)
693
- g.highlight_path(p)
694
-
695
- def test_dotfile(self):
696
- import pathlib
697
-
698
- g = UGraph()
699
- v1 = g.add_vertex(coord=[0,0], name='v1')
700
- v2 = g.add_vertex(coord=[1,1], name='v2')
701
- v3 = g.add_vertex(coord=[2,2], name='v3')
702
- v4 = g.add_vertex(coord=[1,3], name='v4')
703
- v5 = g.add_vertex(coord=[0,4], name='v5')
704
- v6 = g.add_vertex(coord=[-5,2], name='v6')
705
- v7 = g.add_vertex(coord=[0,6], name='v7')
706
-
707
- path = pathlib.Path('./dotfile.dot')
708
- g.dotfile(str(path))
709
- self.assertTrue(path.is_file())
710
-
711
- g.showgraph()
712
-
713
- class TestDGraph(unittest.TestCase):
714
-
715
- def test_constructor(self):
716
-
717
- g = DGraph()
718
-
719
- v1 = g.add_vertex()
720
- v2 = g.add_vertex()
721
- self.assertEqual(g.n, 2)
722
- self.assertIsInstance(v1, DVertex)
723
- self.assertIsInstance(v2, DVertex)
724
-
725
- class TestGraph(unittest.TestCase):
726
-
727
- def test_print(self):
728
- pass
729
-
730
- def test_plot(self):
731
- pass
732
-
733
-
734
- # ========================================================================== #
735
-
736
- if __name__ == "__main__":
737
- unittest.main()