Skip to content

Commit

Permalink
testing
Browse files Browse the repository at this point in the history
  • Loading branch information
juanbc committed Nov 17, 2023
1 parent 370e1df commit 3be0cf3
Show file tree
Hide file tree
Showing 2 changed files with 180 additions and 0 deletions.
7 changes: 7 additions & 0 deletions docs/source/api/extend.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
``skcriteria.extend`` module
==============================

.. automodule:: skcriteria.extend
:members:
:undoc-members:
:show-inheritance:
173 changes: 173 additions & 0 deletions tests/test_extend.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# License: BSD-3 (https://tldrlegal.com/license/bsd-3-clause-license-(revised))
# Copyright (c) 2016-2021, Cabral, Juan; Luczywo, Nadia
# Copyright (c) 2022, 2023, QuatroPe
# All rights reserved.

# =============================================================================
# DOCS
# =============================================================================

"""test for skcriteria.extend
"""


# =============================================================================
# IMPORTS
# =============================================================================

import numpy as np

import pytest

from skcriteria import extend as ext, pipeline


# =============================================================================
# RANDOM TEST
# =============================================================================


def test_mkagg(decision_matrix):
dm = decision_matrix(seed=42, min_alternatives=10)
values = np.arange(len(dm)) + 1
np.random.shuffle(values)

@ext.mkagg
def MyAgg(**kwargs):
return values, {}

dec = MyAgg()

assert repr(dec) == "<MyAgg []>"

rank = dec.evaluate(dm)

assert rank.method == "MyAgg"
np.testing.assert_array_equal(rank.alternatives, dm.alternatives)
np.testing.assert_array_equal(rank.values, values)
assert rank.extra_ == {}


def test_mktransformer(decision_matrix):
dm = decision_matrix(seed=42, min_alternatives=10)

@ext.mktransformer
def MyTransformer(matrix, weights, hparams, **kwargs):
kwargs.update(matrix=matrix + 1, weights=weights + 1)
return kwargs

dec = MyTransformer()

assert repr(dec) == "<MyTransformer []>"

dmt = dec.transform(dm)

np.testing.assert_array_equal(dmt.matrix, dm.matrix + 1)
np.testing.assert_array_equal(dmt.weights, dm.weights + 1)


def test_mkagg_CapWords():
with pytest.warns(ext.NonStandardNameWarning):

@ext.mkagg
def agg(**kwargs):
pass


def test_mktransformer_CapWords():
with pytest.warns(ext.NonStandardNameWarning):

@ext.mktransformer
def transformer(**kwargs):
pass


def test_mkagg_invalid_parameter():
with pytest.raises(TypeError):

@ext.mkagg
def Agg(foo):
pass


def test_mktransformer_invalid_parameter():
with pytest.raises(TypeError):

@ext.mktransformer
def Transformer(foo):
pass


def test_mkagg_missing_parameter():
with pytest.raises(TypeError):

@ext.mkagg
def Agg(matrix, objectives, weights, dtypes, criteria):
pass


def test_mktransformer_missing_parameter():
with pytest.raises(TypeError):

@ext.mktransformer
def Transformer(matrix, objectives, weights, dtypes, criteria):
pass


def test_mkagg_invalid_argument():
@ext.mkagg
def Agg(**kwargs):
pass

with pytest.raises(TypeError):
Agg(x=1)


def test_mktransformer_invalid_argument():
@ext.mktransformer
def Transformer(**kwargs):
pass

with pytest.raises(TypeError):
Transformer(x=1)


def test_mkagg_in_pipeline(decision_matrix):
dm = decision_matrix(seed=42, min_alternatives=10)

# TRANSFORMER =============================================================

@ext.mktransformer
def MyTransformer(matrix, weights, hparams, **kwargs):
kwargs.update(matrix=matrix + 1, weights=weights + 1)
return kwargs

# AGG =====================================================================
values = np.arange(len(dm)) + 1
np.random.shuffle(values)

@ext.mkagg
def MyAgg(**kwargs):
return values, {}

# PIPE ====================================================================
pipe = pipeline.mkpipe(MyTransformer(), MyAgg())

assert repr(pipe) == (
"<SKCPipeline "
"[steps=[('mytransformer', <MyTransformer []>), "
"('myagg', <MyAgg []>)]]>"
)

rank = pipe.evaluate(dm)
assert rank.method == "MyAgg"
np.testing.assert_array_equal(rank.alternatives, dm.alternatives)
np.testing.assert_array_equal(rank.values, values)
assert rank.extra_ == {}

dmt = pipe.transform(dm)
np.testing.assert_array_equal(dmt.matrix, dm.matrix + 1)
np.testing.assert_array_equal(dmt.weights, dm.weights + 1)

0 comments on commit 3be0cf3

Please sign in to comment.