annoviko/pyclustering

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

Aperta

#591 aperta il 18 feb 2020

 (0 commenti) (0 reazioni) (0 assegnatari)Python (263 fork)auto 404
EnhancementGood First Issue

Metriche repository

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

Descrizione

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

Guida contributor