File: test_order.py

package info (click to toggle)
scotchpy 1.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 1,476 kB
  • sloc: python: 4,882; ansic: 68; sh: 34; makefile: 32
file content (124 lines) | stat: -rw-r--r-- 4,219 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
## SPDX-License-Identifier: BSD-2-Clause
##
## Copyright 2020-2025 Inria & Université de Bordeaux
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
##
## 1. Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.
##
## 2. Redistributions in binary form must reproduce the above
## copyright notice, this list of conditions and the following
## disclaimer in the documentation and/or other materials provided
## with the distribution.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##

import tempfile
import scotchpy as SCOTCH
import os
import importlib.resources

_data_dir = importlib.resources.files('scotchpy').joinpath("data")

# taken from check/test_scotch_graph_order.c


def testOrder():
    for filename in (os.path.join(_data_dir, "bump.grf"),
                     os.path.join(_data_dir, "bump_b100000.grf")):
        try:
            graf = SCOTCH.Graph()
        except SCOTCH.LibraryError:
            assert False, "cannot initialize graph"
            raise

        with open(filename) as fp:
            try:
                graf.load(fp, -1, 0)
            except SCOTCH.LibraryError:
                assert False, "cannot load graph " + filename
                raise

        baseval, vertnbr, _, _, _, _, _, _, _ = graf.data()

        listnbr = (vertnbr + 1) // 2
        listtab = [0] * listnbr
        vertnum = baseval + (listnbr // 4)  # Initialize vertnum

        for listnum in range(listnbr):
            listtab[listnum] = vertnum
            vertnum += 1

        with tempfile.TemporaryFile() as fp:
            try:

                strat = SCOTCH.Strat(init=False)
                strat.init()
            except SCOTCH.LibraryError:
                assert False, "cannot initialize strategy"
                raise

            ordering = SCOTCH.Ordering()

            try:
                graf.order_init(ordering)
            except SCOTCH.LibraryError:
                assert False, "cannot initialize ordering (1)"
                raise

            # return # unexpected failure
            # pdb.set_trace()
            try:
                graf.order_compute(ordering, strat)
            except SCOTCH.LibraryError:
                assert False, "cannot order graph"
                raise
            try:
                graf.order_check(ordering)
            except SCOTCH.LibraryError:
                assert False, "invalid ordering (1)"
                raise

            graf.order_save(ordering, fp)
            graf.order_save_map(ordering, fp)
            graf.order_save_tree(ordering, fp)

            graf.order_exit(ordering)

            try:
                graf.order_init(ordering)
            except SCOTCH.LibraryError:
                assert False, "cannot initialize ordering (2)"
                raise

            try:
                graf.order_compute_list(ordering, listtab, strat)
            except SCOTCH.LibraryError:
                assert False, "cannot order induced graph"
                raise

            try:
                graf.order_check(ordering)
            except SCOTCH.LibraryError:
                assert False, "invalid ordering (2)"
                raise

            graf.order_save(ordering, fp)
            graf.order_save_map(ordering, fp)
            graf.order_save_tree(ordering, fp)