## 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 numpy as np
import scotchpy
from scotchpy.common import proper_int as scotch_num

try:
    graf = scotchpy.Graph()
except scotchpy.LibraryError:
    self.fail("cannot initialize graph")
    raise

# Example from Scotch user's manual, page 59
graf.build(baseval=1,
           vertnbr=7,
           edgenbr = 24,
           verttab = np.array([1,4,10,13,16,19,22,25], dtype=scotch_num),
           edgetab = np.array([3,2,6,3,4,1,7,6,5,1,2,4,2,7,3,7,2,6,2,1,5,5,2,4], dtype=scotch_num),
           edlotab = np.array([1,1,1,2,2,1,2,3,3,1,2,2,2,1,2,1,3,3,3,1,3,1,2,1], dtype=scotch_num))

if scotchpy.graph._nx_found  and scotchpy.graph._matplotlib_found:
    parttab = np.zeros(graf.vertnbr, dtype=scotch_num)
    graf.part(partnbr = 2, parttab = parttab)
    try:
        graf.draw(node_color = parttab, labels=dict(zip(range(1,8), [f'{i}' for i in range(1,8)])))
    except ModuleNotFoundError:
        pass
