annoviko/pyclustering

[C++ pyclustering] Human-readable errors to Python

オープン

#591 opened on 2020/02/18

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

Repository metrics

Stars
 (1,215 個のスター)
PR merge metrics
 (PR metrics pending)

説明

Introduction The current problem is following: in case of incorrect input data or due to some other reason (even unexpected) - C++ code throws exception that is not captured by anyone. As a result the client (python code) receives error code that is not readable. Here is an example of an error:

[WinError -529697949] Windows Error 0xe06d7363

The idea is to capture each exception in pyclustering interface and report about the problem to the client of the library, in this case - python pyclustering library.

Description C++ pyclustering interface ccore/include/interface/ and ccore/src/interface/.

The idea is to capture all exception, for example, there is a function:

pyclustering_package * agglomerative_algorithm(const pyclustering_package * const p_sample, const size_t p_number_clusters, const size_t p_link) {
    pyclustering::clst::agglomerative algorithm(p_number_clusters, (pyclustering::clst::agglomerative::type_link) p_link);

    /* ... ... ... */

    return package;
}

Wrap it by try catch block:

pyclustering_package * agglomerative_algorithm(const pyclustering_package * const p_sample, const size_t p_number_clusters, const size_t p_link) try {
    pyclustering::clst::agglomerative algorithm(p_number_clusters, (pyclustering::clst::agglomerative::type_link) p_link);

    pyclustering::dataset data;
    p_sample->extract(data);

    pyclustering::clst::agglomerative_data result;
    algorithm.process(data, result);

    pyclustering_package * package = create_package(&result.clusters());

    return package;
} 
catch (std::exception & p_error) {
    return pyclustering_pachage_from_exception(p_error);
}

Useful links

Functionality to cover All exported functions that return pyclustering_package:

  • agglomerative_interface.cpp
  • bsas_interface.cpp
  • clique_interface.cpp
  • cure_interface.cpp
  • dbscan_interface.cpp
  • elbow_interface.cpp
  • fcm_interface.cpp
  • gmeans_interface.cpp
  • hhn_interface.cpp
  • hsyncnet_interface.cpp
  • kmeans_interface.cpp
  • kmedoids_interface.cpp
  • legion_interface.cpp
  • mbsas_interface.cpp
  • metric_interface.cpp
  • optics_interface.cpp
  • pcnn_interface.cpp
  • rock_interface.cpp
  • silhouette_interface.cpp
  • som_interface.cpp
  • sync_interface.cpp
  • syncnet_interface.cpp
  • syncpr_interface.cpp
  • ttsas_interface.cpp
  • xmeans_interface.cpp

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