annoviko/pyclustering

[pyclustering.core.metric_wrapper] Callback failure for user-defined function

Aperta

#422 aperta il 25 apr 2018

 (1 commento) (0 reazioni) (1 assegnatario)Python (263 fork)auto 404
BugGood First Issue

Metriche repository

Star
 (1215 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

Introduction In case of user-defined metric, algorithms doesn't use core to avoid crash on some platforms.

Description Investigation is required. See test: 'testUserDefinedMetric'. Test location: pyclustering/utils/tests/integration/it_metric.py

Ran 6 tests in 0.016s

FAILED (errors=1)

Error
Traceback (most recent call last):
  File "D:\Miniconda3\envs\test-environment\lib\unittest\case.py", line 58, in testPartExecutor
    yield
  File "D:\Miniconda3\envs\test-environment\lib\unittest\case.py", line 580, in run
    testMethod()
  File "D:\workspace\pyclustering\pyclustering\utils\tests\integration\it_metric.py", line 71, in testUserDefinedMetric
    assertion.eq(2.0, metric_instance([0.0, 0.0], [2.0, 0.0]));
  File "D:\workspace\pyclustering\pyclustering\core\metric_wrapper.py", line 65, in __call__
    return ccore.metric_calculate(self.__pointer, point_package1, point_package2);
OSError: [WinError -1073741795] Windows Error 0xc000001d

Technical details Crash occurs in pyclustering core, interface file: pyclustering/ccore/src/interface/metric_interface.cpp.

            auto functor_wrapper = [p_solver](const point & p1, const point & p2) {
                pyclustering_package * point1 = create_package(&p1);
                pyclustering_package * point2 = create_package(&p2);

                const double distance = p_solver(point1, point2); <--- crash here.

                delete point1;
                delete point2;

                return distance;
            };

Guida contributor