File: simple_map.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 (77 lines) | stat: -rw-r--r-- 2,634 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
## 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 math
import numpy as np
import scotchpy
from scotchpy.common import proper_int as scotchpy_int
import os
import importlib.resources

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

# Allocate a graph
graf = scotchpy.Graph()

# Load a graph from file
graf.load(os.path.join(data_dir, 'm4x4.grf'))
vertnbr, _ = graf.size(as_dict=False)
xdimsiz = int(math.sqrt(vertnbr))
assert vertnbr == xdimsiz*xdimsiz

# Initialize a strategy
strat = scotchpy.Strat()
strat.graph_map_build(scotchpy.STRATDEFAULT,  4, .05)

# Build a complete architechure (i.e., plain partitioning)
arch = scotchpy.Arch()
arch.cmplt(5)

# Initialize mapping...
oneMap = scotchpy.Mapping()
parttab = np.full(vertnbr, 0, scotchpy_int)
graf.map_init(oneMap, arch, parttab)

# ...and compute it
graf.map_compute(oneMap, strat)
graf.map_exit(oneMap)

# Export to dot format
if scotchpy.graph._nx_found:
    import networkx as nx
    graf_nx = graf.tonx()
    color = { 0:"red" , 1:"green", 2:"blue", 3:"yellow", 4:"magenta"}
    for i in graf_nx.nodes:
         graf_nx.nodes[i]["color"] = color[parttab[i]]
    try:
        nx.nx_pydot.to_pydot(graf_nx).write_dot("m4x4_5map.dot")
    except ModuleNotFoundError:
         pass