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
|