annoviko/pyclustering

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

オープン

#422 opened on 2018/04/25

 (1 件のコメント) (0 件のリアクション) (1 人の担当者)Python (263 件のフォーク)auto 404
BugGood First Issue

Repository metrics

Stars
 (1,215 個のスター)
PR merge metrics
 (30d に merged PR はありません)

説明

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;
            };

コントリビューターガイド