This Jupyter Notebook contains the supplemental material for the article "Issues with SZZ: An empirical assessment of the state of practice of defect prediction data collection" by Steffen Herbold, Alexander Trautsch, and Fabian Trautsch. The contents of this notebook enable the exact replication of the empirical study we conducted.
Together with this notebook, we provide two archives, which contain the data we collected, and one archive which contains the source code of the tools we used for data collection.
The archive smartshark-mongodb-rel1.tar.gz contains all data we collected stored in a MongoDB. The MongoDB contains all data for just-in-time defect prediction, as well es the replication of the section 5.3-5.8 of the article. A running instance of the MongoDB is the requirement for nearly all parts of this notebook. To use the database dump, you have to:
--dppath argument set to the pack where you unpacked the archive.The MongoDB should then be available on localhost an accessible without any creditials. The documentation of the schema we use for storage can be found online.
The archive release-level-data.tar.gz contains the release-level data we collected. For each release, the data contains three files:
<projectname>-<version>_aggregated.csv: a CSV file that can directly be used for defect prediction studies.<projectname>-<version>.json: a JSON file that contains the unaggregated metric data for each file, i.e., the values for each lower-level artifact, e.g., for all methods. <projectname>-<version>_bug_fixes.json: a JSON file that contains for each file which issues where linked to the file, including the revision has and date of bug fixing commit, as well as the identifier, severity, and date of the creation of the linked issue. The first column of the CSV file contains the name of the file, the next 4198 columns the features of the file, followed by the number of bugs in the file in the given release. After the number of bugs, there is one column for each bug that was assigned to the release. The names of these column follow the pattern <issueid>_<severity>_<fixdate> and have the value 1 if the file was affected by the issue and 0 otherwise.
The names of the features in the release level data follow patterns.
SM: The static metrics measured with the OpenStaticAnalyzer, including all aggregations of metrics on the class, method, interface, enum, attribute, and annotation level proposed in the publication F. Zhang, A. E. Hassan, S. McIntosh, Y. Zou: "The use of summation to aggregate software metrics hinders the performanceof defect prediction models", TSE 43(5):476-491, 2017. The names of the metrics follow the pattern SM_<abstractionlevel>_<metric>[_<aggregationscheme>, e.g., SM_file_lloc for the metric Logical Lines of Code (LLOC) of the file or SM_method_cc_shannon_entropy for the metric Cyclomatic Complexity (CC) of all methods in a file aggregated using the shannon entropy. Overall, there are 3624 of these features, for the descripion of the metrics we refer to the OpenStaticAnalyzer documentation and for aggregation schemes to the the publication by Zhang et al.:SM_annotation_ad_atkinson, SM_annotation_ad_avg, SM_annotation_ad_coefficient_of_variation, SM_annotation_ad_generalized_entropy, SM_annotation_ad_gini, SM_annotation_ad_hoover, SM_annotation_ad_max, SM_annotation_ad_median, SM_annotation_ad_min, SM_annotation_ad_shannon_entropy, SM_annotation_ad_stdev, SM_annotation_ad_sum, SM_annotation_ad_theil, SM_annotation_cbo_atkinson, SM_annotation_cbo_avg, SM_annotation_cbo_coefficient_of_variation, SM_annotation_cbo_generalized_entropy, SM_annotation_cbo_gini, SM_annotation_cbo_hoover, SM_annotation_cbo_max, SM_annotation_cbo_median, SM_annotation_cbo_min, SM_annotation_cbo_shannon_entropy, SM_annotation_cbo_stdev, SM_annotation_cbo_sum, SM_annotation_cbo_theil, SM_annotation_cboi_atkinson, SM_annotation_cboi_avg, SM_annotation_cboi_coefficient_of_variation, SM_annotation_cboi_generalized_entropy, SM_annotation_cboi_gini, SM_annotation_cboi_hoover, SM_annotation_cboi_max, SM_annotation_cboi_median, SM_annotation_cboi_min, SM_annotation_cboi_shannon_entropy, SM_annotation_cboi_stdev, SM_annotation_cboi_sum, SM_annotation_cboi_theil, SM_annotation_cc_atkinson, SM_annotation_cc_avg, SM_annotation_cc_coefficient_of_variation, SM_annotation_cc_generalized_entropy, SM_annotation_cc_gini, SM_annotation_cc_hoover, SM_annotation_cc_max, SM_annotation_cc_median, SM_annotation_cc_min, SM_annotation_cc_shannon_entropy, SM_annotation_cc_stdev, SM_annotation_cc_sum, SM_annotation_cc_theil, SM_annotation_ccl_atkinson, SM_annotation_ccl_avg, SM_annotation_ccl_coefficient_of_variation, SM_annotation_ccl_generalized_entropy, SM_annotation_ccl_gini, SM_annotation_ccl_hoover, SM_annotation_ccl_max, SM_annotation_ccl_median, SM_annotation_ccl_min, SM_annotation_ccl_shannon_entropy, SM_annotation_ccl_stdev, SM_annotation_ccl_sum, SM_annotation_ccl_theil, SM_annotation_cco_atkinson, SM_annotation_cco_avg, SM_annotation_cco_coefficient_of_variation, SM_annotation_cco_generalized_entropy, SM_annotation_cco_gini, SM_annotation_cco_hoover, SM_annotation_cco_max, SM_annotation_cco_median, SM_annotation_cco_min, SM_annotation_cco_shannon_entropy, SM_annotation_cco_stdev, SM_annotation_cco_sum, SM_annotation_cco_theil, SM_annotation_cd_atkinson, SM_annotation_cd_avg, SM_annotation_cd_coefficient_of_variation, SM_annotation_cd_generalized_entropy, SM_annotation_cd_gini, SM_annotation_cd_hoover, SM_annotation_cd_max, SM_annotation_cd_median, SM_annotation_cd_min, SM_annotation_cd_shannon_entropy, SM_annotation_cd_stdev, SM_annotation_cd_sum, SM_annotation_cd_theil, SM_annotation_ci_atkinson, SM_annotation_ci_avg, SM_annotation_ci_coefficient_of_variation, SM_annotation_ci_generalized_entropy, SM_annotation_ci_gini, SM_annotation_ci_hoover, SM_annotation_ci_max, SM_annotation_ci_median, SM_annotation_ci_min, SM_annotation_ci_shannon_entropy, SM_annotation_ci_stdev, SM_annotation_ci_sum, SM_annotation_ci_theil, SM_annotation_clc_atkinson, SM_annotation_clc_avg, SM_annotation_clc_coefficient_of_variation, SM_annotation_clc_generalized_entropy, SM_annotation_clc_gini, SM_annotation_clc_hoover, SM_annotation_clc_max, SM_annotation_clc_median, SM_annotation_clc_min, SM_annotation_clc_shannon_entropy, SM_annotation_clc_stdev, SM_annotation_clc_sum, SM_annotation_clc_theil, SM_annotation_cllc_atkinson, SM_annotation_cllc_avg, SM_annotation_cllc_coefficient_of_variation, SM_annotation_cllc_generalized_entropy, SM_annotation_cllc_gini, SM_annotation_cllc_hoover, SM_annotation_cllc_max, SM_annotation_cllc_median, SM_annotation_cllc_min, SM_annotation_cllc_shannon_entropy, SM_annotation_cllc_stdev, SM_annotation_cllc_sum, SM_annotation_cllc_theil, SM_annotation_cloc_atkinson, SM_annotation_cloc_avg, SM_annotation_cloc_coefficient_of_variation, SM_annotation_cloc_generalized_entropy, SM_annotation_cloc_gini, SM_annotation_cloc_hoover, SM_annotation_cloc_max, SM_annotation_cloc_median, SM_annotation_cloc_min, SM_annotation_cloc_shannon_entropy, SM_annotation_cloc_stdev, SM_annotation_cloc_sum, SM_annotation_cloc_theil, SM_annotation_dit_atkinson, SM_annotation_dit_avg, SM_annotation_dit_coefficient_of_variation, SM_annotation_dit_generalized_entropy, SM_annotation_dit_gini, SM_annotation_dit_hoover, SM_annotation_dit_max, SM_annotation_dit_median, SM_annotation_dit_min, SM_annotation_dit_shannon_entropy, SM_annotation_dit_stdev, SM_annotation_dit_sum, SM_annotation_dit_theil, SM_annotation_dloc_atkinson, SM_annotation_dloc_avg, SM_annotation_dloc_coefficient_of_variation, SM_annotation_dloc_generalized_entropy, SM_annotation_dloc_gini, SM_annotation_dloc_hoover, SM_annotation_dloc_max, SM_annotation_dloc_median, SM_annotation_dloc_min, SM_annotation_dloc_shannon_entropy, SM_annotation_dloc_stdev, SM_annotation_dloc_sum, SM_annotation_dloc_theil, SM_annotation_lcom5_atkinson, SM_annotation_lcom5_avg, SM_annotation_lcom5_coefficient_of_variation, SM_annotation_lcom5_generalized_entropy, SM_annotation_lcom5_gini, SM_annotation_lcom5_hoover, SM_annotation_lcom5_max, SM_annotation_lcom5_median, SM_annotation_lcom5_min, SM_annotation_lcom5_shannon_entropy, SM_annotation_lcom5_stdev, SM_annotation_lcom5_sum, SM_annotation_lcom5_theil, SM_annotation_ldc_atkinson, SM_annotation_ldc_avg, SM_annotation_ldc_coefficient_of_variation, SM_annotation_ldc_generalized_entropy, SM_annotation_ldc_gini, SM_annotation_ldc_hoover, SM_annotation_ldc_max, SM_annotation_ldc_median, SM_annotation_ldc_min, SM_annotation_ldc_shannon_entropy, SM_annotation_ldc_stdev, SM_annotation_ldc_sum, SM_annotation_ldc_theil, SM_annotation_lldc_atkinson, SM_annotation_lldc_avg, SM_annotation_lldc_coefficient_of_variation, SM_annotation_lldc_generalized_entropy, SM_annotation_lldc_gini, SM_annotation_lldc_hoover, SM_annotation_lldc_max, SM_annotation_lldc_median, SM_annotation_lldc_min, SM_annotation_lldc_shannon_entropy, SM_annotation_lldc_stdev, SM_annotation_lldc_sum, SM_annotation_lldc_theil, SM_annotation_lloc_atkinson, SM_annotation_lloc_avg, SM_annotation_lloc_coefficient_of_variation, SM_annotation_lloc_generalized_entropy, SM_annotation_lloc_gini, SM_annotation_lloc_hoover, SM_annotation_lloc_max, SM_annotation_lloc_median, SM_annotation_lloc_min, SM_annotation_lloc_shannon_entropy, SM_annotation_lloc_stdev, SM_annotation_lloc_sum, SM_annotation_lloc_theil, SM_annotation_loc_atkinson, SM_annotation_loc_avg, SM_annotation_loc_coefficient_of_variation, SM_annotation_loc_generalized_entropy, SM_annotation_loc_gini, SM_annotation_loc_hoover, SM_annotation_loc_max, SM_annotation_loc_median, SM_annotation_loc_min, SM_annotation_loc_shannon_entropy, SM_annotation_loc_stdev, SM_annotation_loc_sum, SM_annotation_loc_theil, SM_annotation_na_atkinson, SM_annotation_na_avg, SM_annotation_na_coefficient_of_variation, SM_annotation_na_generalized_entropy, SM_annotation_na_gini, SM_annotation_na_hoover, SM_annotation_na_max, SM_annotation_na_median, SM_annotation_na_min, SM_annotation_na_shannon_entropy, SM_annotation_na_stdev, SM_annotation_na_sum, SM_annotation_na_theil, SM_annotation_ng_atkinson, SM_annotation_ng_avg, SM_annotation_ng_coefficient_of_variation, SM_annotation_ng_generalized_entropy, SM_annotation_ng_gini, SM_annotation_ng_hoover, SM_annotation_ng_max, SM_annotation_ng_median, SM_annotation_ng_min, SM_annotation_ng_shannon_entropy, SM_annotation_ng_stdev, SM_annotation_ng_sum, SM_annotation_ng_theil, SM_annotation_nii_atkinson, SM_annotation_nii_avg, SM_annotation_nii_coefficient_of_variation, SM_annotation_nii_generalized_entropy, SM_annotation_nii_gini, SM_annotation_nii_hoover, SM_annotation_nii_max, SM_annotation_nii_median, SM_annotation_nii_min, SM_annotation_nii_shannon_entropy, SM_annotation_nii_stdev, SM_annotation_nii_sum, SM_annotation_nii_theil, SM_annotation_nl_atkinson, SM_annotation_nl_avg, SM_annotation_nl_coefficient_of_variation, SM_annotation_nl_generalized_entropy, SM_annotation_nl_gini, SM_annotation_nl_hoover, SM_annotation_nl_max, SM_annotation_nl_median, SM_annotation_nl_min, SM_annotation_nl_shannon_entropy, SM_annotation_nl_stdev, SM_annotation_nl_sum, SM_annotation_nl_theil, SM_annotation_nla_atkinson, SM_annotation_nla_avg, SM_annotation_nla_coefficient_of_variation, SM_annotation_nla_generalized_entropy, SM_annotation_nla_gini, SM_annotation_nla_hoover, SM_annotation_nla_max, SM_annotation_nla_median, SM_annotation_nla_min, SM_annotation_nla_shannon_entropy, SM_annotation_nla_stdev, SM_annotation_nla_sum, SM_annotation_nla_theil, SM_annotation_nle_atkinson, SM_annotation_nle_avg, SM_annotation_nle_coefficient_of_variation, SM_annotation_nle_generalized_entropy, SM_annotation_nle_gini, SM_annotation_nle_hoover, SM_annotation_nle_max, SM_annotation_nle_median, SM_annotation_nle_min, SM_annotation_nle_shannon_entropy, SM_annotation_nle_stdev, SM_annotation_nle_sum, SM_annotation_nle_theil, SM_annotation_nlg_atkinson, SM_annotation_nlg_avg, SM_annotation_nlg_coefficient_of_variation, SM_annotation_nlg_generalized_entropy, SM_annotation_nlg_gini, SM_annotation_nlg_hoover, SM_annotation_nlg_max, SM_annotation_nlg_median, SM_annotation_nlg_min, SM_annotation_nlg_shannon_entropy, SM_annotation_nlg_stdev, SM_annotation_nlg_sum, SM_annotation_nlg_theil, SM_annotation_nlm_atkinson, SM_annotation_nlm_avg, SM_annotation_nlm_coefficient_of_variation, SM_annotation_nlm_generalized_entropy, SM_annotation_nlm_gini, SM_annotation_nlm_hoover, SM_annotation_nlm_max, SM_annotation_nlm_median, SM_annotation_nlm_min, SM_annotation_nlm_shannon_entropy, SM_annotation_nlm_stdev, SM_annotation_nlm_sum, SM_annotation_nlm_theil, SM_annotation_nlpa_atkinson, SM_annotation_nlpa_avg, SM_annotation_nlpa_coefficient_of_variation, SM_annotation_nlpa_generalized_entropy, SM_annotation_nlpa_gini, SM_annotation_nlpa_hoover, SM_annotation_nlpa_max, SM_annotation_nlpa_median, SM_annotation_nlpa_min, SM_annotation_nlpa_shannon_entropy, SM_annotation_nlpa_stdev, SM_annotation_nlpa_sum, SM_annotation_nlpa_theil, SM_annotation_nlpm_atkinson, SM_annotation_nlpm_avg, SM_annotation_nlpm_coefficient_of_variation, SM_annotation_nlpm_generalized_entropy, SM_annotation_nlpm_gini, SM_annotation_nlpm_hoover, SM_annotation_nlpm_max, SM_annotation_nlpm_median, SM_annotation_nlpm_min, SM_annotation_nlpm_shannon_entropy, SM_annotation_nlpm_stdev, SM_annotation_nlpm_sum, SM_annotation_nlpm_theil, SM_annotation_nls_atkinson, SM_annotation_nls_avg, SM_annotation_nls_coefficient_of_variation, SM_annotation_nls_generalized_entropy, SM_annotation_nls_gini, SM_annotation_nls_hoover, SM_annotation_nls_max, SM_annotation_nls_median, SM_annotation_nls_min, SM_annotation_nls_shannon_entropy, SM_annotation_nls_stdev, SM_annotation_nls_sum, SM_annotation_nls_theil, SM_annotation_nm_atkinson, SM_annotation_nm_avg, SM_annotation_nm_coefficient_of_variation, SM_annotation_nm_generalized_entropy, SM_annotation_nm_gini, SM_annotation_nm_hoover, SM_annotation_nm_max, SM_annotation_nm_median, SM_annotation_nm_min, SM_annotation_nm_shannon_entropy, SM_annotation_nm_stdev, SM_annotation_nm_sum, SM_annotation_nm_theil, SM_annotation_noa_atkinson, SM_annotation_noa_avg, SM_annotation_noa_coefficient_of_variation, SM_annotation_noa_generalized_entropy, SM_annotation_noa_gini, SM_annotation_noa_hoover, SM_annotation_noa_max, SM_annotation_noa_median, SM_annotation_noa_min, SM_annotation_noa_shannon_entropy, SM_annotation_noa_stdev, SM_annotation_noa_sum, SM_annotation_noa_theil, SM_annotation_noc_atkinson, SM_annotation_noc_avg, SM_annotation_noc_coefficient_of_variation, SM_annotation_noc_generalized_entropy, SM_annotation_noc_gini, SM_annotation_noc_hoover, SM_annotation_noc_max, SM_annotation_noc_median, SM_annotation_noc_min, SM_annotation_noc_shannon_entropy, SM_annotation_noc_stdev, SM_annotation_noc_sum, SM_annotation_noc_theil, SM_annotation_nod_atkinson, SM_annotation_nod_avg, SM_annotation_nod_coefficient_of_variation, SM_annotation_nod_generalized_entropy, SM_annotation_nod_gini, SM_annotation_nod_hoover, SM_annotation_nod_max, SM_annotation_nod_median, SM_annotation_nod_min, SM_annotation_nod_shannon_entropy, SM_annotation_nod_stdev, SM_annotation_nod_sum, SM_annotation_nod_theil, SM_annotation_noi_atkinson, SM_annotation_noi_avg, SM_annotation_noi_coefficient_of_variation, SM_annotation_noi_generalized_entropy, SM_annotation_noi_gini, SM_annotation_noi_hoover, SM_annotation_noi_max, SM_annotation_noi_median, SM_annotation_noi_min, SM_annotation_noi_shannon_entropy, SM_annotation_noi_stdev, SM_annotation_noi_sum, SM_annotation_noi_theil, SM_annotation_nop_atkinson, SM_annotation_nop_avg, SM_annotation_nop_coefficient_of_variation, SM_annotation_nop_generalized_entropy, SM_annotation_nop_gini, SM_annotation_nop_hoover, SM_annotation_nop_max, SM_annotation_nop_median, SM_annotation_nop_min, SM_annotation_nop_shannon_entropy, SM_annotation_nop_stdev, SM_annotation_nop_sum, SM_annotation_nop_theil, SM_annotation_nos_atkinson, SM_annotation_nos_avg, SM_annotation_nos_coefficient_of_variation, SM_annotation_nos_generalized_entropy, SM_annotation_nos_gini, SM_annotation_nos_hoover, SM_annotation_nos_max, SM_annotation_nos_median, SM_annotation_nos_min, SM_annotation_nos_shannon_entropy, SM_annotation_nos_stdev, SM_annotation_nos_sum, SM_annotation_nos_theil, SM_annotation_npa_atkinson, SM_annotation_npa_avg, SM_annotation_npa_coefficient_of_variation, SM_annotation_npa_generalized_entropy, SM_annotation_npa_gini, SM_annotation_npa_hoover, SM_annotation_npa_max, SM_annotation_npa_median, SM_annotation_npa_min, SM_annotation_npa_shannon_entropy, SM_annotation_npa_stdev, SM_annotation_npa_sum, SM_annotation_npa_theil, SM_annotation_npm_atkinson, SM_annotation_npm_avg, SM_annotation_npm_coefficient_of_variation, SM_annotation_npm_generalized_entropy, SM_annotation_npm_gini, SM_annotation_npm_hoover, SM_annotation_npm_max, SM_annotation_npm_median, SM_annotation_npm_min, SM_annotation_npm_shannon_entropy, SM_annotation_npm_stdev, SM_annotation_npm_sum, SM_annotation_npm_theil, SM_annotation_ns_atkinson, SM_annotation_ns_avg, SM_annotation_ns_coefficient_of_variation, SM_annotation_ns_generalized_entropy, SM_annotation_ns_gini, SM_annotation_ns_hoover, SM_annotation_ns_max, SM_annotation_ns_median, SM_annotation_ns_min, SM_annotation_ns_shannon_entropy, SM_annotation_ns_stdev, SM_annotation_ns_sum, SM_annotation_ns_theil, SM_annotation_pda_atkinson, SM_annotation_pda_avg, SM_annotation_pda_coefficient_of_variation, SM_annotation_pda_generalized_entropy, SM_annotation_pda_gini, SM_annotation_pda_hoover, SM_annotation_pda_max, SM_annotation_pda_median, SM_annotation_pda_min, SM_annotation_pda_shannon_entropy, SM_annotation_pda_stdev, SM_annotation_pda_sum, SM_annotation_pda_theil, SM_annotation_pua_atkinson, SM_annotation_pua_avg, SM_annotation_pua_coefficient_of_variation, SM_annotation_pua_generalized_entropy, SM_annotation_pua_gini, SM_annotation_pua_hoover, SM_annotation_pua_max, SM_annotation_pua_median, SM_annotation_pua_min, SM_annotation_pua_shannon_entropy, SM_annotation_pua_stdev, SM_annotation_pua_sum, SM_annotation_pua_theil, SM_annotation_rfc_atkinson, SM_annotation_rfc_avg, SM_annotation_rfc_coefficient_of_variation, SM_annotation_rfc_generalized_entropy, SM_annotation_rfc_gini, SM_annotation_rfc_hoover, SM_annotation_rfc_max, SM_annotation_rfc_median, SM_annotation_rfc_min, SM_annotation_rfc_shannon_entropy, SM_annotation_rfc_stdev, SM_annotation_rfc_sum, SM_annotation_rfc_theil, SM_annotation_tcd_atkinson, SM_annotation_tcd_avg, SM_annotation_tcd_coefficient_of_variation, SM_annotation_tcd_generalized_entropy, SM_annotation_tcd_gini, SM_annotation_tcd_hoover, SM_annotation_tcd_max, SM_annotation_tcd_median, SM_annotation_tcd_min, SM_annotation_tcd_shannon_entropy, SM_annotation_tcd_stdev, SM_annotation_tcd_sum, SM_annotation_tcd_theil, SM_annotation_tcloc_atkinson, SM_annotation_tcloc_avg, SM_annotation_tcloc_coefficient_of_variation, SM_annotation_tcloc_generalized_entropy, SM_annotation_tcloc_gini, SM_annotation_tcloc_hoover, SM_annotation_tcloc_max, SM_annotation_tcloc_median, SM_annotation_tcloc_min, SM_annotation_tcloc_shannon_entropy, SM_annotation_tcloc_stdev, SM_annotation_tcloc_sum, SM_annotation_tcloc_theil, SM_annotation_tlloc_atkinson, SM_annotation_tlloc_avg, SM_annotation_tlloc_coefficient_of_variation, SM_annotation_tlloc_generalized_entropy, SM_annotation_tlloc_gini, SM_annotation_tlloc_hoover, SM_annotation_tlloc_max, SM_annotation_tlloc_median, SM_annotation_tlloc_min, SM_annotation_tlloc_shannon_entropy, SM_annotation_tlloc_stdev, SM_annotation_tlloc_sum, SM_annotation_tlloc_theil, SM_annotation_tloc_atkinson, SM_annotation_tloc_avg, SM_annotation_tloc_coefficient_of_variation, SM_annotation_tloc_generalized_entropy, SM_annotation_tloc_gini, SM_annotation_tloc_hoover, SM_annotation_tloc_max, SM_annotation_tloc_median, SM_annotation_tloc_min, SM_annotation_tloc_shannon_entropy, SM_annotation_tloc_stdev, SM_annotation_tloc_sum, SM_annotation_tloc_theil, SM_annotation_tna_atkinson, SM_annotation_tna_avg, SM_annotation_tna_coefficient_of_variation, SM_annotation_tna_generalized_entropy, SM_annotation_tna_gini, SM_annotation_tna_hoover, SM_annotation_tna_max, SM_annotation_tna_median, SM_annotation_tna_min, SM_annotation_tna_shannon_entropy, SM_annotation_tna_stdev, SM_annotation_tna_sum, SM_annotation_tna_theil, SM_annotation_tng_atkinson, SM_annotation_tng_avg, SM_annotation_tng_coefficient_of_variation, SM_annotation_tng_generalized_entropy, SM_annotation_tng_gini, SM_annotation_tng_hoover, SM_annotation_tng_max, SM_annotation_tng_median, SM_annotation_tng_min, SM_annotation_tng_shannon_entropy, SM_annotation_tng_stdev, SM_annotation_tng_sum, SM_annotation_tng_theil, SM_annotation_tnla_atkinson, SM_annotation_tnla_avg, SM_annotation_tnla_coefficient_of_variation, SM_annotation_tnla_generalized_entropy, SM_annotation_tnla_gini, SM_annotation_tnla_hoover, SM_annotation_tnla_max, SM_annotation_tnla_median, SM_annotation_tnla_min, SM_annotation_tnla_shannon_entropy, SM_annotation_tnla_stdev, SM_annotation_tnla_sum, SM_annotation_tnla_theil, SM_annotation_tnlg_atkinson, SM_annotation_tnlg_avg, SM_annotation_tnlg_coefficient_of_variation, SM_annotation_tnlg_generalized_entropy, SM_annotation_tnlg_gini, SM_annotation_tnlg_hoover, SM_annotation_tnlg_max, SM_annotation_tnlg_median, SM_annotation_tnlg_min, SM_annotation_tnlg_shannon_entropy, SM_annotation_tnlg_stdev, SM_annotation_tnlg_sum, SM_annotation_tnlg_theil, SM_annotation_tnlm_atkinson, SM_annotation_tnlm_avg, SM_annotation_tnlm_coefficient_of_variation, SM_annotation_tnlm_generalized_entropy, SM_annotation_tnlm_gini, SM_annotation_tnlm_hoover, SM_annotation_tnlm_max, SM_annotation_tnlm_median, SM_annotation_tnlm_min, SM_annotation_tnlm_shannon_entropy, SM_annotation_tnlm_stdev, SM_annotation_tnlm_sum, SM_annotation_tnlm_theil, SM_annotation_tnlpa_atkinson, SM_annotation_tnlpa_avg, SM_annotation_tnlpa_coefficient_of_variation, SM_annotation_tnlpa_generalized_entropy, SM_annotation_tnlpa_gini, SM_annotation_tnlpa_hoover, SM_annotation_tnlpa_max, SM_annotation_tnlpa_median, SM_annotation_tnlpa_min, SM_annotation_tnlpa_shannon_entropy, SM_annotation_tnlpa_stdev, SM_annotation_tnlpa_sum, SM_annotation_tnlpa_theil, SM_annotation_tnlpm_atkinson, SM_annotation_tnlpm_avg, SM_annotation_tnlpm_coefficient_of_variation, SM_annotation_tnlpm_generalized_entropy, SM_annotation_tnlpm_gini, SM_annotation_tnlpm_hoover, SM_annotation_tnlpm_max, SM_annotation_tnlpm_median, SM_annotation_tnlpm_min, SM_annotation_tnlpm_shannon_entropy, SM_annotation_tnlpm_stdev, SM_annotation_tnlpm_sum, SM_annotation_tnlpm_theil, SM_annotation_tnls_atkinson, SM_annotation_tnls_avg, SM_annotation_tnls_coefficient_of_variation, SM_annotation_tnls_generalized_entropy, SM_annotation_tnls_gini, SM_annotation_tnls_hoover, SM_annotation_tnls_max, SM_annotation_tnls_median, SM_annotation_tnls_min, SM_annotation_tnls_shannon_entropy, SM_annotation_tnls_stdev, SM_annotation_tnls_sum, SM_annotation_tnls_theil, SM_annotation_tnm_atkinson, SM_annotation_tnm_avg, SM_annotation_tnm_coefficient_of_variation, SM_annotation_tnm_generalized_entropy, SM_annotation_tnm_gini, SM_annotation_tnm_hoover, SM_annotation_tnm_max, SM_annotation_tnm_median, SM_annotation_tnm_min, SM_annotation_tnm_shannon_entropy, SM_annotation_tnm_stdev, SM_annotation_tnm_sum, SM_annotation_tnm_theil, SM_annotation_tnos_atkinson, SM_annotation_tnos_avg, SM_annotation_tnos_coefficient_of_variation, SM_annotation_tnos_generalized_entropy, SM_annotation_tnos_gini, SM_annotation_tnos_hoover, SM_annotation_tnos_max, SM_annotation_tnos_median, SM_annotation_tnos_min, SM_annotation_tnos_shannon_entropy, SM_annotation_tnos_stdev, SM_annotation_tnos_sum, SM_annotation_tnos_theil, SM_annotation_tnpa_atkinson, SM_annotation_tnpa_avg, SM_annotation_tnpa_coefficient_of_variation, SM_annotation_tnpa_generalized_entropy, SM_annotation_tnpa_gini, SM_annotation_tnpa_hoover, SM_annotation_tnpa_max, SM_annotation_tnpa_median, SM_annotation_tnpa_min, SM_annotation_tnpa_shannon_entropy, SM_annotation_tnpa_stdev, SM_annotation_tnpa_sum, SM_annotation_tnpa_theil, SM_annotation_tnpm_atkinson, SM_annotation_tnpm_avg, SM_annotation_tnpm_coefficient_of_variation, SM_annotation_tnpm_generalized_entropy, SM_annotation_tnpm_gini, SM_annotation_tnpm_hoover, SM_annotation_tnpm_max, SM_annotation_tnpm_median, SM_annotation_tnpm_min, SM_annotation_tnpm_shannon_entropy, SM_annotation_tnpm_stdev, SM_annotation_tnpm_sum, SM_annotation_tnpm_theil, SM_annotation_tns_atkinson, SM_annotation_tns_avg, SM_annotation_tns_coefficient_of_variation, SM_annotation_tns_generalized_entropy, SM_annotation_tns_gini, SM_annotation_tns_hoover, SM_annotation_tns_max, SM_annotation_tns_median, SM_annotation_tns_min, SM_annotation_tns_shannon_entropy, SM_annotation_tns_stdev, SM_annotation_tns_sum, SM_annotation_tns_theil, SM_annotation_wmc_atkinson, SM_annotation_wmc_avg, SM_annotation_wmc_coefficient_of_variation, SM_annotation_wmc_generalized_entropy, SM_annotation_wmc_gini, SM_annotation_wmc_hoover, SM_annotation_wmc_max, SM_annotation_wmc_median, SM_annotation_wmc_min, SM_annotation_wmc_shannon_entropy, SM_annotation_wmc_stdev, SM_annotation_wmc_sum, SM_annotation_wmc_theil, SM_class_ad_atkinson, SM_class_ad_avg, SM_class_ad_coefficient_of_variation, SM_class_ad_generalized_entropy, SM_class_ad_gini, SM_class_ad_hoover, SM_class_ad_max, SM_class_ad_median, SM_class_ad_min, SM_class_ad_shannon_entropy, SM_class_ad_stdev, SM_class_ad_sum, SM_class_ad_theil, SM_class_cbo_atkinson, SM_class_cbo_avg, SM_class_cbo_coefficient_of_variation, SM_class_cbo_generalized_entropy, SM_class_cbo_gini, SM_class_cbo_hoover, SM_class_cbo_max, SM_class_cbo_median, SM_class_cbo_min, SM_class_cbo_shannon_entropy, SM_class_cbo_stdev, SM_class_cbo_sum, SM_class_cbo_theil, SM_class_cboi_atkinson, SM_class_cboi_avg, SM_class_cboi_coefficient_of_variation, SM_class_cboi_generalized_entropy, SM_class_cboi_gini, SM_class_cboi_hoover, SM_class_cboi_max, SM_class_cboi_median, SM_class_cboi_min, SM_class_cboi_shannon_entropy, SM_class_cboi_stdev, SM_class_cboi_sum, SM_class_cboi_theil, SM_class_cc_atkinson, SM_class_cc_avg, SM_class_cc_coefficient_of_variation, SM_class_cc_generalized_entropy, SM_class_cc_gini, SM_class_cc_hoover, SM_class_cc_max, SM_class_cc_median, SM_class_cc_min, SM_class_cc_shannon_entropy, SM_class_cc_stdev, SM_class_cc_sum, SM_class_cc_theil, SM_class_ccl_atkinson, SM_class_ccl_avg, SM_class_ccl_coefficient_of_variation, SM_class_ccl_generalized_entropy, SM_class_ccl_gini, SM_class_ccl_hoover, SM_class_ccl_max, SM_class_ccl_median, SM_class_ccl_min, SM_class_ccl_shannon_entropy, SM_class_ccl_stdev, SM_class_ccl_sum, SM_class_ccl_theil, SM_class_cco_atkinson, SM_class_cco_avg, SM_class_cco_coefficient_of_variation, SM_class_cco_generalized_entropy, SM_class_cco_gini, SM_class_cco_hoover, SM_class_cco_max, SM_class_cco_median, SM_class_cco_min, SM_class_cco_shannon_entropy, SM_class_cco_stdev, SM_class_cco_sum, SM_class_cco_theil, SM_class_cd_atkinson, SM_class_cd_avg, SM_class_cd_coefficient_of_variation, SM_class_cd_generalized_entropy, SM_class_cd_gini, SM_class_cd_hoover, SM_class_cd_max, SM_class_cd_median, SM_class_cd_min, SM_class_cd_shannon_entropy, SM_class_cd_stdev, SM_class_cd_sum, SM_class_cd_theil, SM_class_ci_atkinson, SM_class_ci_avg, SM_class_ci_coefficient_of_variation, SM_class_ci_generalized_entropy, SM_class_ci_gini, SM_class_ci_hoover, SM_class_ci_max, SM_class_ci_median, SM_class_ci_min, SM_class_ci_shannon_entropy, SM_class_ci_stdev, SM_class_ci_sum, SM_class_ci_theil, SM_class_clc_atkinson, SM_class_clc_avg, SM_class_clc_coefficient_of_variation, SM_class_clc_generalized_entropy, SM_class_clc_gini, SM_class_clc_hoover, SM_class_clc_max, SM_class_clc_median, SM_class_clc_min, SM_class_clc_shannon_entropy, SM_class_clc_stdev, SM_class_clc_sum, SM_class_clc_theil, SM_class_cllc_atkinson, SM_class_cllc_avg, SM_class_cllc_coefficient_of_variation, SM_class_cllc_generalized_entropy, SM_class_cllc_gini, SM_class_cllc_hoover, SM_class_cllc_max, SM_class_cllc_median, SM_class_cllc_min, SM_class_cllc_shannon_entropy, SM_class_cllc_stdev, SM_class_cllc_sum, SM_class_cllc_theil, SM_class_cloc_atkinson, SM_class_cloc_avg, SM_class_cloc_coefficient_of_variation, SM_class_cloc_generalized_entropy, SM_class_cloc_gini, SM_class_cloc_hoover, SM_class_cloc_max, SM_class_cloc_median, SM_class_cloc_min, SM_class_cloc_shannon_entropy, SM_class_cloc_stdev, SM_class_cloc_sum, SM_class_cloc_theil, SM_class_dit_atkinson, SM_class_dit_avg, SM_class_dit_coefficient_of_variation, SM_class_dit_generalized_entropy, SM_class_dit_gini, SM_class_dit_hoover, SM_class_dit_max, SM_class_dit_median, SM_class_dit_min, SM_class_dit_shannon_entropy, SM_class_dit_stdev, SM_class_dit_sum, SM_class_dit_theil, SM_class_dloc_atkinson, SM_class_dloc_avg, SM_class_dloc_coefficient_of_variation, SM_class_dloc_generalized_entropy, SM_class_dloc_gini, SM_class_dloc_hoover, SM_class_dloc_max, SM_class_dloc_median, SM_class_dloc_min, SM_class_dloc_shannon_entropy, SM_class_dloc_stdev, SM_class_dloc_sum, SM_class_dloc_theil, SM_class_lcom5_atkinson, SM_class_lcom5_avg, SM_class_lcom5_coefficient_of_variation, SM_class_lcom5_generalized_entropy, SM_class_lcom5_gini, SM_class_lcom5_hoover, SM_class_lcom5_max, SM_class_lcom5_median, SM_class_lcom5_min, SM_class_lcom5_shannon_entropy, SM_class_lcom5_stdev, SM_class_lcom5_sum, SM_class_lcom5_theil, SM_class_ldc_atkinson, SM_class_ldc_avg, SM_class_ldc_coefficient_of_variation, SM_class_ldc_generalized_entropy, SM_class_ldc_gini, SM_class_ldc_hoover, SM_class_ldc_max, SM_class_ldc_median, SM_class_ldc_min, SM_class_ldc_shannon_entropy, SM_class_ldc_stdev, SM_class_ldc_sum, SM_class_ldc_theil, SM_class_lldc_atkinson, SM_class_lldc_avg, SM_class_lldc_coefficient_of_variation, SM_class_lldc_generalized_entropy, SM_class_lldc_gini, SM_class_lldc_hoover, SM_class_lldc_max, SM_class_lldc_median, SM_class_lldc_min, SM_class_lldc_shannon_entropy, SM_class_lldc_stdev, SM_class_lldc_sum, SM_class_lldc_theil, SM_class_lloc_atkinson, SM_class_lloc_avg, SM_class_lloc_coefficient_of_variation, SM_class_lloc_generalized_entropy, SM_class_lloc_gini, SM_class_lloc_hoover, SM_class_lloc_max, SM_class_lloc_median, SM_class_lloc_min, SM_class_lloc_shannon_entropy, SM_class_lloc_stdev, SM_class_lloc_sum, SM_class_lloc_theil, SM_class_loc_atkinson, SM_class_loc_avg, SM_class_loc_coefficient_of_variation, SM_class_loc_generalized_entropy, SM_class_loc_gini, SM_class_loc_hoover, SM_class_loc_max, SM_class_loc_median, SM_class_loc_min, SM_class_loc_shannon_entropy, SM_class_loc_stdev, SM_class_loc_sum, SM_class_loc_theil, SM_class_na_atkinson, SM_class_na_avg, SM_class_na_coefficient_of_variation, SM_class_na_generalized_entropy, SM_class_na_gini, SM_class_na_hoover, SM_class_na_max, SM_class_na_median, SM_class_na_min, SM_class_na_shannon_entropy, SM_class_na_stdev, SM_class_na_sum, SM_class_na_theil, SM_class_ng_atkinson, SM_class_ng_avg, SM_class_ng_coefficient_of_variation, SM_class_ng_generalized_entropy, SM_class_ng_gini, SM_class_ng_hoover, SM_class_ng_max, SM_class_ng_median, SM_class_ng_min, SM_class_ng_shannon_entropy, SM_class_ng_stdev, SM_class_ng_sum, SM_class_ng_theil, SM_class_nii_atkinson, SM_class_nii_avg, SM_class_nii_coefficient_of_variation, SM_class_nii_generalized_entropy, SM_class_nii_gini, SM_class_nii_hoover, SM_class_nii_max, SM_class_nii_median, SM_class_nii_min, SM_class_nii_shannon_entropy, SM_class_nii_stdev, SM_class_nii_sum, SM_class_nii_theil, SM_class_nl_atkinson, SM_class_nl_avg, SM_class_nl_coefficient_of_variation, SM_class_nl_generalized_entropy, SM_class_nl_gini, SM_class_nl_hoover, SM_class_nl_max, SM_class_nl_median, SM_class_nl_min, SM_class_nl_shannon_entropy, SM_class_nl_stdev, SM_class_nl_sum, SM_class_nl_theil, SM_class_nla_atkinson, SM_class_nla_avg, SM_class_nla_coefficient_of_variation, SM_class_nla_generalized_entropy, SM_class_nla_gini, SM_class_nla_hoover, SM_class_nla_max, SM_class_nla_median, SM_class_nla_min, SM_class_nla_shannon_entropy, SM_class_nla_stdev, SM_class_nla_sum, SM_class_nla_theil, SM_class_nle_atkinson, SM_class_nle_avg, SM_class_nle_coefficient_of_variation, SM_class_nle_generalized_entropy, SM_class_nle_gini, SM_class_nle_hoover, SM_class_nle_max, SM_class_nle_median, SM_class_nle_min, SM_class_nle_shannon_entropy, SM_class_nle_stdev, SM_class_nle_sum, SM_class_nle_theil, SM_class_nlg_atkinson, SM_class_nlg_avg, SM_class_nlg_coefficient_of_variation, SM_class_nlg_generalized_entropy, SM_class_nlg_gini, SM_class_nlg_hoover, SM_class_nlg_max, SM_class_nlg_median, SM_class_nlg_min, SM_class_nlg_shannon_entropy, SM_class_nlg_stdev, SM_class_nlg_sum, SM_class_nlg_theil, SM_class_nlm_atkinson, SM_class_nlm_avg, SM_class_nlm_coefficient_of_variation, SM_class_nlm_generalized_entropy, SM_class_nlm_gini, SM_class_nlm_hoover, SM_class_nlm_max, SM_class_nlm_median, SM_class_nlm_min, SM_class_nlm_shannon_entropy, SM_class_nlm_stdev, SM_class_nlm_sum, SM_class_nlm_theil, SM_class_nlpa_atkinson, SM_class_nlpa_avg, SM_class_nlpa_coefficient_of_variation, SM_class_nlpa_generalized_entropy, SM_class_nlpa_gini, SM_class_nlpa_hoover, SM_class_nlpa_max, SM_class_nlpa_median, SM_class_nlpa_min, SM_class_nlpa_shannon_entropy, SM_class_nlpa_stdev, SM_class_nlpa_sum, SM_class_nlpa_theil, SM_class_nlpm_atkinson, SM_class_nlpm_avg, SM_class_nlpm_coefficient_of_variation, SM_class_nlpm_generalized_entropy, SM_class_nlpm_gini, SM_class_nlpm_hoover, SM_class_nlpm_max, SM_class_nlpm_median, SM_class_nlpm_min, SM_class_nlpm_shannon_entropy, SM_class_nlpm_stdev, SM_class_nlpm_sum, SM_class_nlpm_theil, SM_class_nls_atkinson, SM_class_nls_avg, SM_class_nls_coefficient_of_variation, SM_class_nls_generalized_entropy, SM_class_nls_gini, SM_class_nls_hoover, SM_class_nls_max, SM_class_nls_median, SM_class_nls_min, SM_class_nls_shannon_entropy, SM_class_nls_stdev, SM_class_nls_sum, SM_class_nls_theil, SM_class_nm_atkinson, SM_class_nm_avg, SM_class_nm_coefficient_of_variation, SM_class_nm_generalized_entropy, SM_class_nm_gini, SM_class_nm_hoover, SM_class_nm_max, SM_class_nm_median, SM_class_nm_min, SM_class_nm_shannon_entropy, SM_class_nm_stdev, SM_class_nm_sum, SM_class_nm_theil, SM_class_noa_atkinson, SM_class_noa_avg, SM_class_noa_coefficient_of_variation, SM_class_noa_generalized_entropy, SM_class_noa_gini, SM_class_noa_hoover, SM_class_noa_max, SM_class_noa_median, SM_class_noa_min, SM_class_noa_shannon_entropy, SM_class_noa_stdev, SM_class_noa_sum, SM_class_noa_theil, SM_class_noc_atkinson, SM_class_noc_avg, SM_class_noc_coefficient_of_variation, SM_class_noc_generalized_entropy, SM_class_noc_gini, SM_class_noc_hoover, SM_class_noc_max, SM_class_noc_median, SM_class_noc_min, SM_class_noc_shannon_entropy, SM_class_noc_stdev, SM_class_noc_sum, SM_class_noc_theil, SM_class_nod_atkinson, SM_class_nod_avg, SM_class_nod_coefficient_of_variation, SM_class_nod_generalized_entropy, SM_class_nod_gini, SM_class_nod_hoover, SM_class_nod_max, SM_class_nod_median, SM_class_nod_min, SM_class_nod_shannon_entropy, SM_class_nod_stdev, SM_class_nod_sum, SM_class_nod_theil, SM_class_noi_atkinson, SM_class_noi_avg, SM_class_noi_coefficient_of_variation, SM_class_noi_generalized_entropy, SM_class_noi_gini, SM_class_noi_hoover, SM_class_noi_max, SM_class_noi_median, SM_class_noi_min, SM_class_noi_shannon_entropy, SM_class_noi_stdev, SM_class_noi_sum, SM_class_noi_theil, SM_class_nop_atkinson, SM_class_nop_avg, SM_class_nop_coefficient_of_variation, SM_class_nop_generalized_entropy, SM_class_nop_gini, SM_class_nop_hoover, SM_class_nop_max, SM_class_nop_median, SM_class_nop_min, SM_class_nop_shannon_entropy, SM_class_nop_stdev, SM_class_nop_sum, SM_class_nop_theil, SM_class_nos_atkinson, SM_class_nos_avg, SM_class_nos_coefficient_of_variation, SM_class_nos_generalized_entropy, SM_class_nos_gini, SM_class_nos_hoover, SM_class_nos_max, SM_class_nos_median, SM_class_nos_min, SM_class_nos_shannon_entropy, SM_class_nos_stdev, SM_class_nos_sum, SM_class_nos_theil, SM_class_npa_atkinson, SM_class_npa_avg, SM_class_npa_coefficient_of_variation, SM_class_npa_generalized_entropy, SM_class_npa_gini, SM_class_npa_hoover, SM_class_npa_max, SM_class_npa_median, SM_class_npa_min, SM_class_npa_shannon_entropy, SM_class_npa_stdev, SM_class_npa_sum, SM_class_npa_theil, SM_class_npm_atkinson, SM_class_npm_avg, SM_class_npm_coefficient_of_variation, SM_class_npm_generalized_entropy, SM_class_npm_gini, SM_class_npm_hoover, SM_class_npm_max, SM_class_npm_median, SM_class_npm_min, SM_class_npm_shannon_entropy, SM_class_npm_stdev, SM_class_npm_sum, SM_class_npm_theil, SM_class_ns_atkinson, SM_class_ns_avg, SM_class_ns_coefficient_of_variation, SM_class_ns_generalized_entropy, SM_class_ns_gini, SM_class_ns_hoover, SM_class_ns_max, SM_class_ns_median, SM_class_ns_min, SM_class_ns_shannon_entropy, SM_class_ns_stdev, SM_class_ns_sum, SM_class_ns_theil, SM_class_pda_atkinson, SM_class_pda_avg, SM_class_pda_coefficient_of_variation, SM_class_pda_generalized_entropy, SM_class_pda_gini, SM_class_pda_hoover, SM_class_pda_max, SM_class_pda_median, SM_class_pda_min, SM_class_pda_shannon_entropy, SM_class_pda_stdev, SM_class_pda_sum, SM_class_pda_theil, SM_class_pua_atkinson, SM_class_pua_avg, SM_class_pua_coefficient_of_variation, SM_class_pua_generalized_entropy, SM_class_pua_gini, SM_class_pua_hoover, SM_class_pua_max, SM_class_pua_median, SM_class_pua_min, SM_class_pua_shannon_entropy, SM_class_pua_stdev, SM_class_pua_sum, SM_class_pua_theil, SM_class_rfc_atkinson, SM_class_rfc_avg, SM_class_rfc_coefficient_of_variation, SM_class_rfc_generalized_entropy, SM_class_rfc_gini, SM_class_rfc_hoover, SM_class_rfc_max, SM_class_rfc_median, SM_class_rfc_min, SM_class_rfc_shannon_entropy, SM_class_rfc_stdev, SM_class_rfc_sum, SM_class_rfc_theil, SM_class_tcd_atkinson, SM_class_tcd_avg, SM_class_tcd_coefficient_of_variation, SM_class_tcd_generalized_entropy, SM_class_tcd_gini, SM_class_tcd_hoover, SM_class_tcd_max, SM_class_tcd_median, SM_class_tcd_min, SM_class_tcd_shannon_entropy, SM_class_tcd_stdev, SM_class_tcd_sum, SM_class_tcd_theil, SM_class_tcloc_atkinson, SM_class_tcloc_avg, SM_class_tcloc_coefficient_of_variation, SM_class_tcloc_generalized_entropy, SM_class_tcloc_gini, SM_class_tcloc_hoover, SM_class_tcloc_max, SM_class_tcloc_median, SM_class_tcloc_min, SM_class_tcloc_shannon_entropy, SM_class_tcloc_stdev, SM_class_tcloc_sum, SM_class_tcloc_theil, SM_class_tlloc_atkinson, SM_class_tlloc_avg, SM_class_tlloc_coefficient_of_variation, SM_class_tlloc_generalized_entropy, SM_class_tlloc_gini, SM_class_tlloc_hoover, SM_class_tlloc_max, SM_class_tlloc_median, SM_class_tlloc_min, SM_class_tlloc_shannon_entropy, SM_class_tlloc_stdev, SM_class_tlloc_sum, SM_class_tlloc_theil, SM_class_tloc_atkinson, SM_class_tloc_avg, SM_class_tloc_coefficient_of_variation, SM_class_tloc_generalized_entropy, SM_class_tloc_gini, SM_class_tloc_hoover, SM_class_tloc_max, SM_class_tloc_median, SM_class_tloc_min, SM_class_tloc_shannon_entropy, SM_class_tloc_stdev, SM_class_tloc_sum, SM_class_tloc_theil, SM_class_tna_atkinson, SM_class_tna_avg, SM_class_tna_coefficient_of_variation, SM_class_tna_generalized_entropy, SM_class_tna_gini, SM_class_tna_hoover, SM_class_tna_max, SM_class_tna_median, SM_class_tna_min, SM_class_tna_shannon_entropy, SM_class_tna_stdev, SM_class_tna_sum, SM_class_tna_theil, SM_class_tng_atkinson, SM_class_tng_avg, SM_class_tng_coefficient_of_variation, SM_class_tng_generalized_entropy, SM_class_tng_gini, SM_class_tng_hoover, SM_class_tng_max, SM_class_tng_median, SM_class_tng_min, SM_class_tng_shannon_entropy, SM_class_tng_stdev, SM_class_tng_sum, SM_class_tng_theil, SM_class_tnla_atkinson, SM_class_tnla_avg, SM_class_tnla_coefficient_of_variation, SM_class_tnla_generalized_entropy, SM_class_tnla_gini, SM_class_tnla_hoover, SM_class_tnla_max, SM_class_tnla_median, SM_class_tnla_min, SM_class_tnla_shannon_entropy, SM_class_tnla_stdev, SM_class_tnla_sum, SM_class_tnla_theil, SM_class_tnlg_atkinson, SM_class_tnlg_avg, SM_class_tnlg_coefficient_of_variation, SM_class_tnlg_generalized_entropy, SM_class_tnlg_gini, SM_class_tnlg_hoover, SM_class_tnlg_max, SM_class_tnlg_median, SM_class_tnlg_min, SM_class_tnlg_shannon_entropy, SM_class_tnlg_stdev, SM_class_tnlg_sum, SM_class_tnlg_theil, SM_class_tnlm_atkinson, SM_class_tnlm_avg, SM_class_tnlm_coefficient_of_variation, SM_class_tnlm_generalized_entropy, SM_class_tnlm_gini, SM_class_tnlm_hoover, SM_class_tnlm_max, SM_class_tnlm_median, SM_class_tnlm_min, SM_class_tnlm_shannon_entropy, SM_class_tnlm_stdev, SM_class_tnlm_sum, SM_class_tnlm_theil, SM_class_tnlpa_atkinson, SM_class_tnlpa_avg, SM_class_tnlpa_coefficient_of_variation, SM_class_tnlpa_generalized_entropy, SM_class_tnlpa_gini, SM_class_tnlpa_hoover, SM_class_tnlpa_max, SM_class_tnlpa_median, SM_class_tnlpa_min, SM_class_tnlpa_shannon_entropy, SM_class_tnlpa_stdev, SM_class_tnlpa_sum, SM_class_tnlpa_theil, SM_class_tnlpm_atkinson, SM_class_tnlpm_avg, SM_class_tnlpm_coefficient_of_variation, SM_class_tnlpm_generalized_entropy, SM_class_tnlpm_gini, SM_class_tnlpm_hoover, SM_class_tnlpm_max, SM_class_tnlpm_median, SM_class_tnlpm_min, SM_class_tnlpm_shannon_entropy, SM_class_tnlpm_stdev, SM_class_tnlpm_sum, SM_class_tnlpm_theil, SM_class_tnls_atkinson, SM_class_tnls_avg, SM_class_tnls_coefficient_of_variation, SM_class_tnls_generalized_entropy, SM_class_tnls_gini, SM_class_tnls_hoover, SM_class_tnls_max, SM_class_tnls_median, SM_class_tnls_min, SM_class_tnls_shannon_entropy, SM_class_tnls_stdev, SM_class_tnls_sum, SM_class_tnls_theil, SM_class_tnm_atkinson, SM_class_tnm_avg, SM_class_tnm_coefficient_of_variation, SM_class_tnm_generalized_entropy, SM_class_tnm_gini, SM_class_tnm_hoover, SM_class_tnm_max, SM_class_tnm_median, SM_class_tnm_min, SM_class_tnm_shannon_entropy, SM_class_tnm_stdev, SM_class_tnm_sum, SM_class_tnm_theil, SM_class_tnos_atkinson, SM_class_tnos_avg, SM_class_tnos_coefficient_of_variation, SM_class_tnos_generalized_entropy, SM_class_tnos_gini, SM_class_tnos_hoover, SM_class_tnos_max, SM_class_tnos_median, SM_class_tnos_min, SM_class_tnos_shannon_entropy, SM_class_tnos_stdev, SM_class_tnos_sum, SM_class_tnos_theil, SM_class_tnpa_atkinson, SM_class_tnpa_avg, SM_class_tnpa_coefficient_of_variation, SM_class_tnpa_generalized_entropy, SM_class_tnpa_gini, SM_class_tnpa_hoover, SM_class_tnpa_max, SM_class_tnpa_median, SM_class_tnpa_min, SM_class_tnpa_shannon_entropy, SM_class_tnpa_stdev, SM_class_tnpa_sum, SM_class_tnpa_theil, SM_class_tnpm_atkinson, SM_class_tnpm_avg, SM_class_tnpm_coefficient_of_variation, SM_class_tnpm_generalized_entropy, SM_class_tnpm_gini, SM_class_tnpm_hoover, SM_class_tnpm_max, SM_class_tnpm_median, SM_class_tnpm_min, SM_class_tnpm_shannon_entropy, SM_class_tnpm_stdev, SM_class_tnpm_sum, SM_class_tnpm_theil, SM_class_tns_atkinson, SM_class_tns_avg, SM_class_tns_coefficient_of_variation, SM_class_tns_generalized_entropy, SM_class_tns_gini, SM_class_tns_hoover, SM_class_tns_max, SM_class_tns_median, SM_class_tns_min, SM_class_tns_shannon_entropy, SM_class_tns_stdev, SM_class_tns_sum, SM_class_tns_theil, SM_class_wmc_atkinson, SM_class_wmc_avg, SM_class_wmc_coefficient_of_variation, SM_class_wmc_generalized_entropy, SM_class_wmc_gini, SM_class_wmc_hoover, SM_class_wmc_max, SM_class_wmc_median, SM_class_wmc_min, SM_class_wmc_shannon_entropy, SM_class_wmc_stdev, SM_class_wmc_sum, SM_class_wmc_theil, SM_component_cc, SM_component_ccl, SM_component_cee, SM_component_ceg, SM_component_ci, SM_component_clc, SM_component_cllc, SM_component_cr, SM_component_ldc, SM_component_lldc, SM_component_ncr, SM_component_tad, SM_component_tcd, SM_component_tcloc, SM_component_tlloc, SM_component_tloc, SM_component_tna, SM_component_tncl, SM_component_tndi, SM_component_tnen, SM_component_tnfi, SM_component_tng, SM_component_tnin, SM_component_tnm, SM_component_tnos, SM_component_tnpa, SM_component_tnpcl, SM_component_tnpen, SM_component_tnpin, SM_component_tnpkg, SM_component_tnpm, SM_component_tns, SM_component_tpda, SM_component_tpua, SM_enum_ad_atkinson, SM_enum_ad_avg, SM_enum_ad_coefficient_of_variation, SM_enum_ad_generalized_entropy, SM_enum_ad_gini, SM_enum_ad_hoover, SM_enum_ad_max, SM_enum_ad_median, SM_enum_ad_min, SM_enum_ad_shannon_entropy, SM_enum_ad_stdev, SM_enum_ad_sum, SM_enum_ad_theil, SM_enum_cbo_atkinson, SM_enum_cbo_avg, SM_enum_cbo_coefficient_of_variation, SM_enum_cbo_generalized_entropy, SM_enum_cbo_gini, SM_enum_cbo_hoover, SM_enum_cbo_max, SM_enum_cbo_median, SM_enum_cbo_min, SM_enum_cbo_shannon_entropy, SM_enum_cbo_stdev, SM_enum_cbo_sum, SM_enum_cbo_theil, SM_enum_cboi_atkinson, SM_enum_cboi_avg, SM_enum_cboi_coefficient_of_variation, SM_enum_cboi_generalized_entropy, SM_enum_cboi_gini, SM_enum_cboi_hoover, SM_enum_cboi_max, SM_enum_cboi_median, SM_enum_cboi_min, SM_enum_cboi_shannon_entropy, SM_enum_cboi_stdev, SM_enum_cboi_sum, SM_enum_cboi_theil, SM_enum_cc_atkinson, SM_enum_cc_avg, SM_enum_cc_coefficient_of_variation, SM_enum_cc_generalized_entropy, SM_enum_cc_gini, SM_enum_cc_hoover, SM_enum_cc_max, SM_enum_cc_median, SM_enum_cc_min, SM_enum_cc_shannon_entropy, SM_enum_cc_stdev, SM_enum_cc_sum, SM_enum_cc_theil, SM_enum_ccl_atkinson, SM_enum_ccl_avg, SM_enum_ccl_coefficient_of_variation, SM_enum_ccl_generalized_entropy, SM_enum_ccl_gini, SM_enum_ccl_hoover, SM_enum_ccl_max, SM_enum_ccl_median, SM_enum_ccl_min, SM_enum_ccl_shannon_entropy, SM_enum_ccl_stdev, SM_enum_ccl_sum, SM_enum_ccl_theil, SM_enum_cco_atkinson, SM_enum_cco_avg, SM_enum_cco_coefficient_of_variation, SM_enum_cco_generalized_entropy, SM_enum_cco_gini, SM_enum_cco_hoover, SM_enum_cco_max, SM_enum_cco_median, SM_enum_cco_min, SM_enum_cco_shannon_entropy, SM_enum_cco_stdev, SM_enum_cco_sum, SM_enum_cco_theil, SM_enum_cd_atkinson, SM_enum_cd_avg, SM_enum_cd_coefficient_of_variation, SM_enum_cd_generalized_entropy, SM_enum_cd_gini, SM_enum_cd_hoover, SM_enum_cd_max, SM_enum_cd_median, SM_enum_cd_min, SM_enum_cd_shannon_entropy, SM_enum_cd_stdev, SM_enum_cd_sum, SM_enum_cd_theil, SM_enum_ci_atkinson, SM_enum_ci_avg, SM_enum_ci_coefficient_of_variation, SM_enum_ci_generalized_entropy, SM_enum_ci_gini, SM_enum_ci_hoover, SM_enum_ci_max, SM_enum_ci_median, SM_enum_ci_min, SM_enum_ci_shannon_entropy, SM_enum_ci_stdev, SM_enum_ci_sum, SM_enum_ci_theil, SM_enum_clc_atkinson, SM_enum_clc_avg, SM_enum_clc_coefficient_of_variation, SM_enum_clc_generalized_entropy, SM_enum_clc_gini, SM_enum_clc_hoover, SM_enum_clc_max, SM_enum_clc_median, SM_enum_clc_min, SM_enum_clc_shannon_entropy, SM_enum_clc_stdev, SM_enum_clc_sum, SM_enum_clc_theil, SM_enum_cllc_atkinson, SM_enum_cllc_avg, SM_enum_cllc_coefficient_of_variation, SM_enum_cllc_generalized_entropy, SM_enum_cllc_gini, SM_enum_cllc_hoover, SM_enum_cllc_max, SM_enum_cllc_median, SM_enum_cllc_min, SM_enum_cllc_shannon_entropy, SM_enum_cllc_stdev, SM_enum_cllc_sum, SM_enum_cllc_theil, SM_enum_cloc_atkinson, SM_enum_cloc_avg, SM_enum_cloc_coefficient_of_variation, SM_enum_cloc_generalized_entropy, SM_enum_cloc_gini, SM_enum_cloc_hoover, SM_enum_cloc_max, SM_enum_cloc_median, SM_enum_cloc_min, SM_enum_cloc_shannon_entropy, SM_enum_cloc_stdev, SM_enum_cloc_sum, SM_enum_cloc_theil, SM_enum_dit_atkinson, SM_enum_dit_avg, SM_enum_dit_coefficient_of_variation, SM_enum_dit_generalized_entropy, SM_enum_dit_gini, SM_enum_dit_hoover, SM_enum_dit_max, SM_enum_dit_median, SM_enum_dit_min, SM_enum_dit_shannon_entropy, SM_enum_dit_stdev, SM_enum_dit_sum, SM_enum_dit_theil, SM_enum_dloc_atkinson, SM_enum_dloc_avg, SM_enum_dloc_coefficient_of_variation, SM_enum_dloc_generalized_entropy, SM_enum_dloc_gini, SM_enum_dloc_hoover, SM_enum_dloc_max, SM_enum_dloc_median, SM_enum_dloc_min, SM_enum_dloc_shannon_entropy, SM_enum_dloc_stdev, SM_enum_dloc_sum, SM_enum_dloc_theil, SM_enum_lcom5_atkinson, SM_enum_lcom5_avg, SM_enum_lcom5_coefficient_of_variation, SM_enum_lcom5_generalized_entropy, SM_enum_lcom5_gini, SM_enum_lcom5_hoover, SM_enum_lcom5_max, SM_enum_lcom5_median, SM_enum_lcom5_min, SM_enum_lcom5_shannon_entropy, SM_enum_lcom5_stdev, SM_enum_lcom5_sum, SM_enum_lcom5_theil, SM_enum_ldc_atkinson, SM_enum_ldc_avg, SM_enum_ldc_coefficient_of_variation, SM_enum_ldc_generalized_entropy, SM_enum_ldc_gini, SM_enum_ldc_hoover, SM_enum_ldc_max, SM_enum_ldc_median, SM_enum_ldc_min, SM_enum_ldc_shannon_entropy, SM_enum_ldc_stdev, SM_enum_ldc_sum, SM_enum_ldc_theil, SM_enum_lldc_atkinson, SM_enum_lldc_avg, SM_enum_lldc_coefficient_of_variation, SM_enum_lldc_generalized_entropy, SM_enum_lldc_gini, SM_enum_lldc_hoover, SM_enum_lldc_max, SM_enum_lldc_median, SM_enum_lldc_min, SM_enum_lldc_shannon_entropy, SM_enum_lldc_stdev, SM_enum_lldc_sum, SM_enum_lldc_theil, SM_enum_lloc_atkinson, SM_enum_lloc_avg, SM_enum_lloc_coefficient_of_variation, SM_enum_lloc_generalized_entropy, SM_enum_lloc_gini, SM_enum_lloc_hoover, SM_enum_lloc_max, SM_enum_lloc_median, SM_enum_lloc_min, SM_enum_lloc_shannon_entropy, SM_enum_lloc_stdev, SM_enum_lloc_sum, SM_enum_lloc_theil, SM_enum_loc_atkinson, SM_enum_loc_avg, SM_enum_loc_coefficient_of_variation, SM_enum_loc_generalized_entropy, SM_enum_loc_gini, SM_enum_loc_hoover, SM_enum_loc_max, SM_enum_loc_median, SM_enum_loc_min, SM_enum_loc_shannon_entropy, SM_enum_loc_stdev, SM_enum_loc_sum, SM_enum_loc_theil, SM_enum_na_atkinson, SM_enum_na_avg, SM_enum_na_coefficient_of_variation, SM_enum_na_generalized_entropy, SM_enum_na_gini, SM_enum_na_hoover, SM_enum_na_max, SM_enum_na_median, SM_enum_na_min, SM_enum_na_shannon_entropy, SM_enum_na_stdev, SM_enum_na_sum, SM_enum_na_theil, SM_enum_ng_atkinson, SM_enum_ng_avg, SM_enum_ng_coefficient_of_variation, SM_enum_ng_generalized_entropy, SM_enum_ng_gini, SM_enum_ng_hoover, SM_enum_ng_max, SM_enum_ng_median, SM_enum_ng_min, SM_enum_ng_shannon_entropy, SM_enum_ng_stdev, SM_enum_ng_sum, SM_enum_ng_theil, SM_enum_nii_atkinson, SM_enum_nii_avg, SM_enum_nii_coefficient_of_variation, SM_enum_nii_generalized_entropy, SM_enum_nii_gini, SM_enum_nii_hoover, SM_enum_nii_max, SM_enum_nii_median, SM_enum_nii_min, SM_enum_nii_shannon_entropy, SM_enum_nii_stdev, SM_enum_nii_sum, SM_enum_nii_theil, SM_enum_nl_atkinson, SM_enum_nl_avg, SM_enum_nl_coefficient_of_variation, SM_enum_nl_generalized_entropy, SM_enum_nl_gini, SM_enum_nl_hoover, SM_enum_nl_max, SM_enum_nl_median, SM_enum_nl_min, SM_enum_nl_shannon_entropy, SM_enum_nl_stdev, SM_enum_nl_sum, SM_enum_nl_theil, SM_enum_nla_atkinson, SM_enum_nla_avg, SM_enum_nla_coefficient_of_variation, SM_enum_nla_generalized_entropy, SM_enum_nla_gini, SM_enum_nla_hoover, SM_enum_nla_max, SM_enum_nla_median, SM_enum_nla_min, SM_enum_nla_shannon_entropy, SM_enum_nla_stdev, SM_enum_nla_sum, SM_enum_nla_theil, SM_enum_nle_atkinson, SM_enum_nle_avg, SM_enum_nle_coefficient_of_variation, SM_enum_nle_generalized_entropy, SM_enum_nle_gini, SM_enum_nle_hoover, SM_enum_nle_max, SM_enum_nle_median, SM_enum_nle_min, SM_enum_nle_shannon_entropy, SM_enum_nle_stdev, SM_enum_nle_sum, SM_enum_nle_theil, SM_enum_nlg_atkinson, SM_enum_nlg_avg, SM_enum_nlg_coefficient_of_variation, SM_enum_nlg_generalized_entropy, SM_enum_nlg_gini, SM_enum_nlg_hoover, SM_enum_nlg_max, SM_enum_nlg_median, SM_enum_nlg_min, SM_enum_nlg_shannon_entropy, SM_enum_nlg_stdev, SM_enum_nlg_sum, SM_enum_nlg_theil, SM_enum_nlm_atkinson, SM_enum_nlm_avg, SM_enum_nlm_coefficient_of_variation, SM_enum_nlm_generalized_entropy, SM_enum_nlm_gini, SM_enum_nlm_hoover, SM_enum_nlm_max, SM_enum_nlm_median, SM_enum_nlm_min, SM_enum_nlm_shannon_entropy, SM_enum_nlm_stdev, SM_enum_nlm_sum, SM_enum_nlm_theil, SM_enum_nlpa_atkinson, SM_enum_nlpa_avg, SM_enum_nlpa_coefficient_of_variation, SM_enum_nlpa_generalized_entropy, SM_enum_nlpa_gini, SM_enum_nlpa_hoover, SM_enum_nlpa_max, SM_enum_nlpa_median, SM_enum_nlpa_min, SM_enum_nlpa_shannon_entropy, SM_enum_nlpa_stdev, SM_enum_nlpa_sum, SM_enum_nlpa_theil, SM_enum_nlpm_atkinson, SM_enum_nlpm_avg, SM_enum_nlpm_coefficient_of_variation, SM_enum_nlpm_generalized_entropy, SM_enum_nlpm_gini, SM_enum_nlpm_hoover, SM_enum_nlpm_max, SM_enum_nlpm_median, SM_enum_nlpm_min, SM_enum_nlpm_shannon_entropy, SM_enum_nlpm_stdev, SM_enum_nlpm_sum, SM_enum_nlpm_theil, SM_enum_nls_atkinson, SM_enum_nls_avg, SM_enum_nls_coefficient_of_variation, SM_enum_nls_generalized_entropy, SM_enum_nls_gini, SM_enum_nls_hoover, SM_enum_nls_max, SM_enum_nls_median, SM_enum_nls_min, SM_enum_nls_shannon_entropy, SM_enum_nls_stdev, SM_enum_nls_sum, SM_enum_nls_theil, SM_enum_nm_atkinson, SM_enum_nm_avg, SM_enum_nm_coefficient_of_variation, SM_enum_nm_generalized_entropy, SM_enum_nm_gini, SM_enum_nm_hoover, SM_enum_nm_max, SM_enum_nm_median, SM_enum_nm_min, SM_enum_nm_shannon_entropy, SM_enum_nm_stdev, SM_enum_nm_sum, SM_enum_nm_theil, SM_enum_noa_atkinson, SM_enum_noa_avg, SM_enum_noa_coefficient_of_variation, SM_enum_noa_generalized_entropy, SM_enum_noa_gini, SM_enum_noa_hoover, SM_enum_noa_max, SM_enum_noa_median, SM_enum_noa_min, SM_enum_noa_shannon_entropy, SM_enum_noa_stdev, SM_enum_noa_sum, SM_enum_noa_theil, SM_enum_noc_atkinson, SM_enum_noc_avg, SM_enum_noc_coefficient_of_variation, SM_enum_noc_generalized_entropy, SM_enum_noc_gini, SM_enum_noc_hoover, SM_enum_noc_max, SM_enum_noc_median, SM_enum_noc_min, SM_enum_noc_shannon_entropy, SM_enum_noc_stdev, SM_enum_noc_sum, SM_enum_noc_theil, SM_enum_nod_atkinson, SM_enum_nod_avg, SM_enum_nod_coefficient_of_variation, SM_enum_nod_generalized_entropy, SM_enum_nod_gini, SM_enum_nod_hoover, SM_enum_nod_max, SM_enum_nod_median, SM_enum_nod_min, SM_enum_nod_shannon_entropy, SM_enum_nod_stdev, SM_enum_nod_sum, SM_enum_nod_theil, SM_enum_noi_atkinson, SM_enum_noi_avg, SM_enum_noi_coefficient_of_variation, SM_enum_noi_generalized_entropy, SM_enum_noi_gini, SM_enum_noi_hoover, SM_enum_noi_max, SM_enum_noi_median, SM_enum_noi_min, SM_enum_noi_shannon_entropy, SM_enum_noi_stdev, SM_enum_noi_sum, SM_enum_noi_theil, SM_enum_nop_atkinson, SM_enum_nop_avg, SM_enum_nop_coefficient_of_variation, SM_enum_nop_generalized_entropy, SM_enum_nop_gini, SM_enum_nop_hoover, SM_enum_nop_max, SM_enum_nop_median, SM_enum_nop_min, SM_enum_nop_shannon_entropy, SM_enum_nop_stdev, SM_enum_nop_sum, SM_enum_nop_theil, SM_enum_nos_atkinson, SM_enum_nos_avg, SM_enum_nos_coefficient_of_variation, SM_enum_nos_generalized_entropy, SM_enum_nos_gini, SM_enum_nos_hoover, SM_enum_nos_max, SM_enum_nos_median, SM_enum_nos_min, SM_enum_nos_shannon_entropy, SM_enum_nos_stdev, SM_enum_nos_sum, SM_enum_nos_theil, SM_enum_npa_atkinson, SM_enum_npa_avg, SM_enum_npa_coefficient_of_variation, SM_enum_npa_generalized_entropy, SM_enum_npa_gini, SM_enum_npa_hoover, SM_enum_npa_max, SM_enum_npa_median, SM_enum_npa_min, SM_enum_npa_shannon_entropy, SM_enum_npa_stdev, SM_enum_npa_sum, SM_enum_npa_theil, SM_enum_npm_atkinson, SM_enum_npm_avg, SM_enum_npm_coefficient_of_variation, SM_enum_npm_generalized_entropy, SM_enum_npm_gini, SM_enum_npm_hoover, SM_enum_npm_max, SM_enum_npm_median, SM_enum_npm_min, SM_enum_npm_shannon_entropy, SM_enum_npm_stdev, SM_enum_npm_sum, SM_enum_npm_theil, SM_enum_ns_atkinson, SM_enum_ns_avg, SM_enum_ns_coefficient_of_variation, SM_enum_ns_generalized_entropy, SM_enum_ns_gini, SM_enum_ns_hoover, SM_enum_ns_max, SM_enum_ns_median, SM_enum_ns_min, SM_enum_ns_shannon_entropy, SM_enum_ns_stdev, SM_enum_ns_sum, SM_enum_ns_theil, SM_enum_pda_atkinson, SM_enum_pda_avg, SM_enum_pda_coefficient_of_variation, SM_enum_pda_generalized_entropy, SM_enum_pda_gini, SM_enum_pda_hoover, SM_enum_pda_max, SM_enum_pda_median, SM_enum_pda_min, SM_enum_pda_shannon_entropy, SM_enum_pda_stdev, SM_enum_pda_sum, SM_enum_pda_theil, SM_enum_pua_atkinson, SM_enum_pua_avg, SM_enum_pua_coefficient_of_variation, SM_enum_pua_generalized_entropy, SM_enum_pua_gini, SM_enum_pua_hoover, SM_enum_pua_max, SM_enum_pua_median, SM_enum_pua_min, SM_enum_pua_shannon_entropy, SM_enum_pua_stdev, SM_enum_pua_sum, SM_enum_pua_theil, SM_enum_rfc_atkinson, SM_enum_rfc_avg, SM_enum_rfc_coefficient_of_variation, SM_enum_rfc_generalized_entropy, SM_enum_rfc_gini, SM_enum_rfc_hoover, SM_enum_rfc_max, SM_enum_rfc_median, SM_enum_rfc_min, SM_enum_rfc_shannon_entropy, SM_enum_rfc_stdev, SM_enum_rfc_sum, SM_enum_rfc_theil, SM_enum_tcd_atkinson, SM_enum_tcd_avg, SM_enum_tcd_coefficient_of_variation, SM_enum_tcd_generalized_entropy, SM_enum_tcd_gini, SM_enum_tcd_hoover, SM_enum_tcd_max, SM_enum_tcd_median, SM_enum_tcd_min, SM_enum_tcd_shannon_entropy, SM_enum_tcd_stdev, SM_enum_tcd_sum, SM_enum_tcd_theil, SM_enum_tcloc_atkinson, SM_enum_tcloc_avg, SM_enum_tcloc_coefficient_of_variation, SM_enum_tcloc_generalized_entropy, SM_enum_tcloc_gini, SM_enum_tcloc_hoover, SM_enum_tcloc_max, SM_enum_tcloc_median, SM_enum_tcloc_min, SM_enum_tcloc_shannon_entropy, SM_enum_tcloc_stdev, SM_enum_tcloc_sum, SM_enum_tcloc_theil, SM_enum_tlloc_atkinson, SM_enum_tlloc_avg, SM_enum_tlloc_coefficient_of_variation, SM_enum_tlloc_generalized_entropy, SM_enum_tlloc_gini, SM_enum_tlloc_hoover, SM_enum_tlloc_max, SM_enum_tlloc_median, SM_enum_tlloc_min, SM_enum_tlloc_shannon_entropy, SM_enum_tlloc_stdev, SM_enum_tlloc_sum, SM_enum_tlloc_theil, SM_enum_tloc_atkinson, SM_enum_tloc_avg, SM_enum_tloc_coefficient_of_variation, SM_enum_tloc_generalized_entropy, SM_enum_tloc_gini, SM_enum_tloc_hoover, SM_enum_tloc_max, SM_enum_tloc_median, SM_enum_tloc_min, SM_enum_tloc_shannon_entropy, SM_enum_tloc_stdev, SM_enum_tloc_sum, SM_enum_tloc_theil, SM_enum_tna_atkinson, SM_enum_tna_avg, SM_enum_tna_coefficient_of_variation, SM_enum_tna_generalized_entropy, SM_enum_tna_gini, SM_enum_tna_hoover, SM_enum_tna_max, SM_enum_tna_median, SM_enum_tna_min, SM_enum_tna_shannon_entropy, SM_enum_tna_stdev, SM_enum_tna_sum, SM_enum_tna_theil, SM_enum_tng_atkinson, SM_enum_tng_avg, SM_enum_tng_coefficient_of_variation, SM_enum_tng_generalized_entropy, SM_enum_tng_gini, SM_enum_tng_hoover, SM_enum_tng_max, SM_enum_tng_median, SM_enum_tng_min, SM_enum_tng_shannon_entropy, SM_enum_tng_stdev, SM_enum_tng_sum, SM_enum_tng_theil, SM_enum_tnla_atkinson, SM_enum_tnla_avg, SM_enum_tnla_coefficient_of_variation, SM_enum_tnla_generalized_entropy, SM_enum_tnla_gini, SM_enum_tnla_hoover, SM_enum_tnla_max, SM_enum_tnla_median, SM_enum_tnla_min, SM_enum_tnla_shannon_entropy, SM_enum_tnla_stdev, SM_enum_tnla_sum, SM_enum_tnla_theil, SM_enum_tnlg_atkinson, SM_enum_tnlg_avg, SM_enum_tnlg_coefficient_of_variation, SM_enum_tnlg_generalized_entropy, SM_enum_tnlg_gini, SM_enum_tnlg_hoover, SM_enum_tnlg_max, SM_enum_tnlg_median, SM_enum_tnlg_min, SM_enum_tnlg_shannon_entropy, SM_enum_tnlg_stdev, SM_enum_tnlg_sum, SM_enum_tnlg_theil, SM_enum_tnlm_atkinson, SM_enum_tnlm_avg, SM_enum_tnlm_coefficient_of_variation, SM_enum_tnlm_generalized_entropy, SM_enum_tnlm_gini, SM_enum_tnlm_hoover, SM_enum_tnlm_max, SM_enum_tnlm_median, SM_enum_tnlm_min, SM_enum_tnlm_shannon_entropy, SM_enum_tnlm_stdev, SM_enum_tnlm_sum, SM_enum_tnlm_theil, SM_enum_tnlpa_atkinson, SM_enum_tnlpa_avg, SM_enum_tnlpa_coefficient_of_variation, SM_enum_tnlpa_generalized_entropy, SM_enum_tnlpa_gini, SM_enum_tnlpa_hoover, SM_enum_tnlpa_max, SM_enum_tnlpa_median, SM_enum_tnlpa_min, SM_enum_tnlpa_shannon_entropy, SM_enum_tnlpa_stdev, SM_enum_tnlpa_sum, SM_enum_tnlpa_theil, SM_enum_tnlpm_atkinson, SM_enum_tnlpm_avg, SM_enum_tnlpm_coefficient_of_variation, SM_enum_tnlpm_generalized_entropy, SM_enum_tnlpm_gini, SM_enum_tnlpm_hoover, SM_enum_tnlpm_max, SM_enum_tnlpm_median, SM_enum_tnlpm_min, SM_enum_tnlpm_shannon_entropy, SM_enum_tnlpm_stdev, SM_enum_tnlpm_sum, SM_enum_tnlpm_theil, SM_enum_tnls_atkinson, SM_enum_tnls_avg, SM_enum_tnls_coefficient_of_variation, SM_enum_tnls_generalized_entropy, SM_enum_tnls_gini, SM_enum_tnls_hoover, SM_enum_tnls_max, SM_enum_tnls_median, SM_enum_tnls_min, SM_enum_tnls_shannon_entropy, SM_enum_tnls_stdev, SM_enum_tnls_sum, SM_enum_tnls_theil, SM_enum_tnm_atkinson, SM_enum_tnm_avg, SM_enum_tnm_coefficient_of_variation, SM_enum_tnm_generalized_entropy, SM_enum_tnm_gini, SM_enum_tnm_hoover, SM_enum_tnm_max, SM_enum_tnm_median, SM_enum_tnm_min, SM_enum_tnm_shannon_entropy, SM_enum_tnm_stdev, SM_enum_tnm_sum, SM_enum_tnm_theil, SM_enum_tnos_atkinson, SM_enum_tnos_avg, SM_enum_tnos_coefficient_of_variation, SM_enum_tnos_generalized_entropy, SM_enum_tnos_gini, SM_enum_tnos_hoover, SM_enum_tnos_max, SM_enum_tnos_median, SM_enum_tnos_min, SM_enum_tnos_shannon_entropy, SM_enum_tnos_stdev, SM_enum_tnos_sum, SM_enum_tnos_theil, SM_enum_tnpa_atkinson, SM_enum_tnpa_avg, SM_enum_tnpa_coefficient_of_variation, SM_enum_tnpa_generalized_entropy, SM_enum_tnpa_gini, SM_enum_tnpa_hoover, SM_enum_tnpa_max, SM_enum_tnpa_median, SM_enum_tnpa_min, SM_enum_tnpa_shannon_entropy, SM_enum_tnpa_stdev, SM_enum_tnpa_sum, SM_enum_tnpa_theil, SM_enum_tnpm_atkinson, SM_enum_tnpm_avg, SM_enum_tnpm_coefficient_of_variation, SM_enum_tnpm_generalized_entropy, SM_enum_tnpm_gini, SM_enum_tnpm_hoover, SM_enum_tnpm_max, SM_enum_tnpm_median, SM_enum_tnpm_min, SM_enum_tnpm_shannon_entropy, SM_enum_tnpm_stdev, SM_enum_tnpm_sum, SM_enum_tnpm_theil, SM_enum_tns_atkinson, SM_enum_tns_avg, SM_enum_tns_coefficient_of_variation, SM_enum_tns_generalized_entropy, SM_enum_tns_gini, SM_enum_tns_hoover, SM_enum_tns_max, SM_enum_tns_median, SM_enum_tns_min, SM_enum_tns_shannon_entropy, SM_enum_tns_stdev, SM_enum_tns_sum, SM_enum_tns_theil, SM_enum_wmc_atkinson, SM_enum_wmc_avg, SM_enum_wmc_coefficient_of_variation, SM_enum_wmc_generalized_entropy, SM_enum_wmc_gini, SM_enum_wmc_hoover, SM_enum_wmc_max, SM_enum_wmc_median, SM_enum_wmc_min, SM_enum_wmc_shannon_entropy, SM_enum_wmc_stdev, SM_enum_wmc_sum, SM_enum_wmc_theil, SM_file_cloc, SM_file_lloc, SM_file_loc, SM_file_mccc, SM_file_pda, SM_file_pua, SM_interface_ad_atkinson, SM_interface_ad_avg, SM_interface_ad_coefficient_of_variation, SM_interface_ad_generalized_entropy, SM_interface_ad_gini, SM_interface_ad_hoover, SM_interface_ad_max, SM_interface_ad_median, SM_interface_ad_min, SM_interface_ad_shannon_entropy, SM_interface_ad_stdev, SM_interface_ad_sum, SM_interface_ad_theil, SM_interface_cbo_atkinson, SM_interface_cbo_avg, SM_interface_cbo_coefficient_of_variation, SM_interface_cbo_generalized_entropy, SM_interface_cbo_gini, SM_interface_cbo_hoover, SM_interface_cbo_max, SM_interface_cbo_median, SM_interface_cbo_min, SM_interface_cbo_shannon_entropy, SM_interface_cbo_stdev, SM_interface_cbo_sum, SM_interface_cbo_theil, SM_interface_cboi_atkinson, SM_interface_cboi_avg, SM_interface_cboi_coefficient_of_variation, SM_interface_cboi_generalized_entropy, SM_interface_cboi_gini, SM_interface_cboi_hoover, SM_interface_cboi_max, SM_interface_cboi_median, SM_interface_cboi_min, SM_interface_cboi_shannon_entropy, SM_interface_cboi_stdev, SM_interface_cboi_sum, SM_interface_cboi_theil, SM_interface_cc_atkinson, SM_interface_cc_avg, SM_interface_cc_coefficient_of_variation, SM_interface_cc_generalized_entropy, SM_interface_cc_gini, SM_interface_cc_hoover, SM_interface_cc_max, SM_interface_cc_median, SM_interface_cc_min, SM_interface_cc_shannon_entropy, SM_interface_cc_stdev, SM_interface_cc_sum, SM_interface_cc_theil, SM_interface_ccl_atkinson, SM_interface_ccl_avg, SM_interface_ccl_coefficient_of_variation, SM_interface_ccl_generalized_entropy, SM_interface_ccl_gini, SM_interface_ccl_hoover, SM_interface_ccl_max, SM_interface_ccl_median, SM_interface_ccl_min, SM_interface_ccl_shannon_entropy, SM_interface_ccl_stdev, SM_interface_ccl_sum, SM_interface_ccl_theil, SM_interface_cco_atkinson, SM_interface_cco_avg, SM_interface_cco_coefficient_of_variation, SM_interface_cco_generalized_entropy, SM_interface_cco_gini, SM_interface_cco_hoover, SM_interface_cco_max, SM_interface_cco_median, SM_interface_cco_min, SM_interface_cco_shannon_entropy, SM_interface_cco_stdev, SM_interface_cco_sum, SM_interface_cco_theil, SM_interface_cd_atkinson, SM_interface_cd_avg, SM_interface_cd_coefficient_of_variation, SM_interface_cd_generalized_entropy, SM_interface_cd_gini, SM_interface_cd_hoover, SM_interface_cd_max, SM_interface_cd_median, SM_interface_cd_min, SM_interface_cd_shannon_entropy, SM_interface_cd_stdev, SM_interface_cd_sum, SM_interface_cd_theil, SM_interface_ci_atkinson, SM_interface_ci_avg, SM_interface_ci_coefficient_of_variation, SM_interface_ci_generalized_entropy, SM_interface_ci_gini, SM_interface_ci_hoover, SM_interface_ci_max, SM_interface_ci_median, SM_interface_ci_min, SM_interface_ci_shannon_entropy, SM_interface_ci_stdev, SM_interface_ci_sum, SM_interface_ci_theil, SM_interface_clc_atkinson, SM_interface_clc_avg, SM_interface_clc_coefficient_of_variation, SM_interface_clc_generalized_entropy, SM_interface_clc_gini, SM_interface_clc_hoover, SM_interface_clc_max, SM_interface_clc_median, SM_interface_clc_min, SM_interface_clc_shannon_entropy, SM_interface_clc_stdev, SM_interface_clc_sum, SM_interface_clc_theil, SM_interface_cllc_atkinson, SM_interface_cllc_avg, SM_interface_cllc_coefficient_of_variation, SM_interface_cllc_generalized_entropy, SM_interface_cllc_gini, SM_interface_cllc_hoover, SM_interface_cllc_max, SM_interface_cllc_median, SM_interface_cllc_min, SM_interface_cllc_shannon_entropy, SM_interface_cllc_stdev, SM_interface_cllc_sum, SM_interface_cllc_theil, SM_interface_cloc_atkinson, SM_interface_cloc_avg, SM_interface_cloc_coefficient_of_variation, SM_interface_cloc_generalized_entropy, SM_interface_cloc_gini, SM_interface_cloc_hoover, SM_interface_cloc_max, SM_interface_cloc_median, SM_interface_cloc_min, SM_interface_cloc_shannon_entropy, SM_interface_cloc_stdev, SM_interface_cloc_sum, SM_interface_cloc_theil, SM_interface_dit_atkinson, SM_interface_dit_avg, SM_interface_dit_coefficient_of_variation, SM_interface_dit_generalized_entropy, SM_interface_dit_gini, SM_interface_dit_hoover, SM_interface_dit_max, SM_interface_dit_median, SM_interface_dit_min, SM_interface_dit_shannon_entropy, SM_interface_dit_stdev, SM_interface_dit_sum, SM_interface_dit_theil, SM_interface_dloc_atkinson, SM_interface_dloc_avg, SM_interface_dloc_coefficient_of_variation, SM_interface_dloc_generalized_entropy, SM_interface_dloc_gini, SM_interface_dloc_hoover, SM_interface_dloc_max, SM_interface_dloc_median, SM_interface_dloc_min, SM_interface_dloc_shannon_entropy, SM_interface_dloc_stdev, SM_interface_dloc_sum, SM_interface_dloc_theil, SM_interface_lcom5_atkinson, SM_interface_lcom5_avg, SM_interface_lcom5_coefficient_of_variation, SM_interface_lcom5_generalized_entropy, SM_interface_lcom5_gini, SM_interface_lcom5_hoover, SM_interface_lcom5_max, SM_interface_lcom5_median, SM_interface_lcom5_min, SM_interface_lcom5_shannon_entropy, SM_interface_lcom5_stdev, SM_interface_lcom5_sum, SM_interface_lcom5_theil, SM_interface_ldc_atkinson, SM_interface_ldc_avg, SM_interface_ldc_coefficient_of_variation, SM_interface_ldc_generalized_entropy, SM_interface_ldc_gini, SM_interface_ldc_hoover, SM_interface_ldc_max, SM_interface_ldc_median, SM_interface_ldc_min, SM_interface_ldc_shannon_entropy, SM_interface_ldc_stdev, SM_interface_ldc_sum, SM_interface_ldc_theil, SM_interface_lldc_atkinson, SM_interface_lldc_avg, SM_interface_lldc_coefficient_of_variation, SM_interface_lldc_generalized_entropy, SM_interface_lldc_gini, SM_interface_lldc_hoover, SM_interface_lldc_max, SM_interface_lldc_median, SM_interface_lldc_min, SM_interface_lldc_shannon_entropy, SM_interface_lldc_stdev, SM_interface_lldc_sum, SM_interface_lldc_theil, SM_interface_lloc_atkinson, SM_interface_lloc_avg, SM_interface_lloc_coefficient_of_variation, SM_interface_lloc_generalized_entropy, SM_interface_lloc_gini, SM_interface_lloc_hoover, SM_interface_lloc_max, SM_interface_lloc_median, SM_interface_lloc_min, SM_interface_lloc_shannon_entropy, SM_interface_lloc_stdev, SM_interface_lloc_sum, SM_interface_lloc_theil, SM_interface_loc_atkinson, SM_interface_loc_avg, SM_interface_loc_coefficient_of_variation, SM_interface_loc_generalized_entropy, SM_interface_loc_gini, SM_interface_loc_hoover, SM_interface_loc_max, SM_interface_loc_median, SM_interface_loc_min, SM_interface_loc_shannon_entropy, SM_interface_loc_stdev, SM_interface_loc_sum, SM_interface_loc_theil, SM_interface_na_atkinson, SM_interface_na_avg, SM_interface_na_coefficient_of_variation, SM_interface_na_generalized_entropy, SM_interface_na_gini, SM_interface_na_hoover, SM_interface_na_max, SM_interface_na_median, SM_interface_na_min, SM_interface_na_shannon_entropy, SM_interface_na_stdev, SM_interface_na_sum, SM_interface_na_theil, SM_interface_ng_atkinson, SM_interface_ng_avg, SM_interface_ng_coefficient_of_variation, SM_interface_ng_generalized_entropy, SM_interface_ng_gini, SM_interface_ng_hoover, SM_interface_ng_max, SM_interface_ng_median, SM_interface_ng_min, SM_interface_ng_shannon_entropy, SM_interface_ng_stdev, SM_interface_ng_sum, SM_interface_ng_theil, SM_interface_nii_atkinson, SM_interface_nii_avg, SM_interface_nii_coefficient_of_variation, SM_interface_nii_generalized_entropy, SM_interface_nii_gini, SM_interface_nii_hoover, SM_interface_nii_max, SM_interface_nii_median, SM_interface_nii_min, SM_interface_nii_shannon_entropy, SM_interface_nii_stdev, SM_interface_nii_sum, SM_interface_nii_theil, SM_interface_nl_atkinson, SM_interface_nl_avg, SM_interface_nl_coefficient_of_variation, SM_interface_nl_generalized_entropy, SM_interface_nl_gini, SM_interface_nl_hoover, SM_interface_nl_max, SM_interface_nl_median, SM_interface_nl_min, SM_interface_nl_shannon_entropy, SM_interface_nl_stdev, SM_interface_nl_sum, SM_interface_nl_theil, SM_interface_nla_atkinson, SM_interface_nla_avg, SM_interface_nla_coefficient_of_variation, SM_interface_nla_generalized_entropy, SM_interface_nla_gini, SM_interface_nla_hoover, SM_interface_nla_max, SM_interface_nla_median, SM_interface_nla_min, SM_interface_nla_shannon_entropy, SM_interface_nla_stdev, SM_interface_nla_sum, SM_interface_nla_theil, SM_interface_nle_atkinson, SM_interface_nle_avg, SM_interface_nle_coefficient_of_variation, SM_interface_nle_generalized_entropy, SM_interface_nle_gini, SM_interface_nle_hoover, SM_interface_nle_max, SM_interface_nle_median, SM_interface_nle_min, SM_interface_nle_shannon_entropy, SM_interface_nle_stdev, SM_interface_nle_sum, SM_interface_nle_theil, SM_interface_nlg_atkinson, SM_interface_nlg_avg, SM_interface_nlg_coefficient_of_variation, SM_interface_nlg_generalized_entropy, SM_interface_nlg_gini, SM_interface_nlg_hoover, SM_interface_nlg_max, SM_interface_nlg_median, SM_interface_nlg_min, SM_interface_nlg_shannon_entropy, SM_interface_nlg_stdev, SM_interface_nlg_sum, SM_interface_nlg_theil, SM_interface_nlm_atkinson, SM_interface_nlm_avg, SM_interface_nlm_coefficient_of_variation, SM_interface_nlm_generalized_entropy, SM_interface_nlm_gini, SM_interface_nlm_hoover, SM_interface_nlm_max, SM_interface_nlm_median, SM_interface_nlm_min, SM_interface_nlm_shannon_entropy, SM_interface_nlm_stdev, SM_interface_nlm_sum, SM_interface_nlm_theil, SM_interface_nlpa_atkinson, SM_interface_nlpa_avg, SM_interface_nlpa_coefficient_of_variation, SM_interface_nlpa_generalized_entropy, SM_interface_nlpa_gini, SM_interface_nlpa_hoover, SM_interface_nlpa_max, SM_interface_nlpa_median, SM_interface_nlpa_min, SM_interface_nlpa_shannon_entropy, SM_interface_nlpa_stdev, SM_interface_nlpa_sum, SM_interface_nlpa_theil, SM_interface_nlpm_atkinson, SM_interface_nlpm_avg, SM_interface_nlpm_coefficient_of_variation, SM_interface_nlpm_generalized_entropy, SM_interface_nlpm_gini, SM_interface_nlpm_hoover, SM_interface_nlpm_max, SM_interface_nlpm_median, SM_interface_nlpm_min, SM_interface_nlpm_shannon_entropy, SM_interface_nlpm_stdev, SM_interface_nlpm_sum, SM_interface_nlpm_theil, SM_interface_nls_atkinson, SM_interface_nls_avg, SM_interface_nls_coefficient_of_variation, SM_interface_nls_generalized_entropy, SM_interface_nls_gini, SM_interface_nls_hoover, SM_interface_nls_max, SM_interface_nls_median, SM_interface_nls_min, SM_interface_nls_shannon_entropy, SM_interface_nls_stdev, SM_interface_nls_sum, SM_interface_nls_theil, SM_interface_nm_atkinson, SM_interface_nm_avg, SM_interface_nm_coefficient_of_variation, SM_interface_nm_generalized_entropy, SM_interface_nm_gini, SM_interface_nm_hoover, SM_interface_nm_max, SM_interface_nm_median, SM_interface_nm_min, SM_interface_nm_shannon_entropy, SM_interface_nm_stdev, SM_interface_nm_sum, SM_interface_nm_theil, SM_interface_noa_atkinson, SM_interface_noa_avg, SM_interface_noa_coefficient_of_variation, SM_interface_noa_generalized_entropy, SM_interface_noa_gini, SM_interface_noa_hoover, SM_interface_noa_max, SM_interface_noa_median, SM_interface_noa_min, SM_interface_noa_shannon_entropy, SM_interface_noa_stdev, SM_interface_noa_sum, SM_interface_noa_theil, SM_interface_noc_atkinson, SM_interface_noc_avg, SM_interface_noc_coefficient_of_variation, SM_interface_noc_generalized_entropy, SM_interface_noc_gini, SM_interface_noc_hoover, SM_interface_noc_max, SM_interface_noc_median, SM_interface_noc_min, SM_interface_noc_shannon_entropy, SM_interface_noc_stdev, SM_interface_noc_sum, SM_interface_noc_theil, SM_interface_nod_atkinson, SM_interface_nod_avg, SM_interface_nod_coefficient_of_variation, SM_interface_nod_generalized_entropy, SM_interface_nod_gini, SM_interface_nod_hoover, SM_interface_nod_max, SM_interface_nod_median, SM_interface_nod_min, SM_interface_nod_shannon_entropy, SM_interface_nod_stdev, SM_interface_nod_sum, SM_interface_nod_theil, SM_interface_noi_atkinson, SM_interface_noi_avg, SM_interface_noi_coefficient_of_variation, SM_interface_noi_generalized_entropy, SM_interface_noi_gini, SM_interface_noi_hoover, SM_interface_noi_max, SM_interface_noi_median, SM_interface_noi_min, SM_interface_noi_shannon_entropy, SM_interface_noi_stdev, SM_interface_noi_sum, SM_interface_noi_theil, SM_interface_nop_atkinson, SM_interface_nop_avg, SM_interface_nop_coefficient_of_variation, SM_interface_nop_generalized_entropy, SM_interface_nop_gini, SM_interface_nop_hoover, SM_interface_nop_max, SM_interface_nop_median, SM_interface_nop_min, SM_interface_nop_shannon_entropy, SM_interface_nop_stdev, SM_interface_nop_sum, SM_interface_nop_theil, SM_interface_nos_atkinson, SM_interface_nos_avg, SM_interface_nos_coefficient_of_variation, SM_interface_nos_generalized_entropy, SM_interface_nos_gini, SM_interface_nos_hoover, SM_interface_nos_max, SM_interface_nos_median, SM_interface_nos_min, SM_interface_nos_shannon_entropy, SM_interface_nos_stdev, SM_interface_nos_sum, SM_interface_nos_theil, SM_interface_npa_atkinson, SM_interface_npa_avg, SM_interface_npa_coefficient_of_variation, SM_interface_npa_generalized_entropy, SM_interface_npa_gini, SM_interface_npa_hoover, SM_interface_npa_max, SM_interface_npa_median, SM_interface_npa_min, SM_interface_npa_shannon_entropy, SM_interface_npa_stdev, SM_interface_npa_sum, SM_interface_npa_theil, SM_interface_npm_atkinson, SM_interface_npm_avg, SM_interface_npm_coefficient_of_variation, SM_interface_npm_generalized_entropy, SM_interface_npm_gini, SM_interface_npm_hoover, SM_interface_npm_max, SM_interface_npm_median, SM_interface_npm_min, SM_interface_npm_shannon_entropy, SM_interface_npm_stdev, SM_interface_npm_sum, SM_interface_npm_theil, SM_interface_ns_atkinson, SM_interface_ns_avg, SM_interface_ns_coefficient_of_variation, SM_interface_ns_generalized_entropy, SM_interface_ns_gini, SM_interface_ns_hoover, SM_interface_ns_max, SM_interface_ns_median, SM_interface_ns_min, SM_interface_ns_shannon_entropy, SM_interface_ns_stdev, SM_interface_ns_sum, SM_interface_ns_theil, SM_interface_pda_atkinson, SM_interface_pda_avg, SM_interface_pda_coefficient_of_variation, SM_interface_pda_generalized_entropy, SM_interface_pda_gini, SM_interface_pda_hoover, SM_interface_pda_max, SM_interface_pda_median, SM_interface_pda_min, SM_interface_pda_shannon_entropy, SM_interface_pda_stdev, SM_interface_pda_sum, SM_interface_pda_theil, SM_interface_pua_atkinson, SM_interface_pua_avg, SM_interface_pua_coefficient_of_variation, SM_interface_pua_generalized_entropy, SM_interface_pua_gini, SM_interface_pua_hoover, SM_interface_pua_max, SM_interface_pua_median, SM_interface_pua_min, SM_interface_pua_shannon_entropy, SM_interface_pua_stdev, SM_interface_pua_sum, SM_interface_pua_theil, SM_interface_rfc_atkinson, SM_interface_rfc_avg, SM_interface_rfc_coefficient_of_variation, SM_interface_rfc_generalized_entropy, SM_interface_rfc_gini, SM_interface_rfc_hoover, SM_interface_rfc_max, SM_interface_rfc_median, SM_interface_rfc_min, SM_interface_rfc_shannon_entropy, SM_interface_rfc_stdev, SM_interface_rfc_sum, SM_interface_rfc_theil, SM_interface_tcd_atkinson, SM_interface_tcd_avg, SM_interface_tcd_coefficient_of_variation, SM_interface_tcd_generalized_entropy, SM_interface_tcd_gini, SM_interface_tcd_hoover, SM_interface_tcd_max, SM_interface_tcd_median, SM_interface_tcd_min, SM_interface_tcd_shannon_entropy, SM_interface_tcd_stdev, SM_interface_tcd_sum, SM_interface_tcd_theil, SM_interface_tcloc_atkinson, SM_interface_tcloc_avg, SM_interface_tcloc_coefficient_of_variation, SM_interface_tcloc_generalized_entropy, SM_interface_tcloc_gini, SM_interface_tcloc_hoover, SM_interface_tcloc_max, SM_interface_tcloc_median, SM_interface_tcloc_min, SM_interface_tcloc_shannon_entropy, SM_interface_tcloc_stdev, SM_interface_tcloc_sum, SM_interface_tcloc_theil, SM_interface_tlloc_atkinson, SM_interface_tlloc_avg, SM_interface_tlloc_coefficient_of_variation, SM_interface_tlloc_generalized_entropy, SM_interface_tlloc_gini, SM_interface_tlloc_hoover, SM_interface_tlloc_max, SM_interface_tlloc_median, SM_interface_tlloc_min, SM_interface_tlloc_shannon_entropy, SM_interface_tlloc_stdev, SM_interface_tlloc_sum, SM_interface_tlloc_theil, SM_interface_tloc_atkinson, SM_interface_tloc_avg, SM_interface_tloc_coefficient_of_variation, SM_interface_tloc_generalized_entropy, SM_interface_tloc_gini, SM_interface_tloc_hoover, SM_interface_tloc_max, SM_interface_tloc_median, SM_interface_tloc_min, SM_interface_tloc_shannon_entropy, SM_interface_tloc_stdev, SM_interface_tloc_sum, SM_interface_tloc_theil, SM_interface_tna_atkinson, SM_interface_tna_avg, SM_interface_tna_coefficient_of_variation, SM_interface_tna_generalized_entropy, SM_interface_tna_gini, SM_interface_tna_hoover, SM_interface_tna_max, SM_interface_tna_median, SM_interface_tna_min, SM_interface_tna_shannon_entropy, SM_interface_tna_stdev, SM_interface_tna_sum, SM_interface_tna_theil, SM_interface_tng_atkinson, SM_interface_tng_avg, SM_interface_tng_coefficient_of_variation, SM_interface_tng_generalized_entropy, SM_interface_tng_gini, SM_interface_tng_hoover, SM_interface_tng_max, SM_interface_tng_median, SM_interface_tng_min, SM_interface_tng_shannon_entropy, SM_interface_tng_stdev, SM_interface_tng_sum, SM_interface_tng_theil, SM_interface_tnla_atkinson, SM_interface_tnla_avg, SM_interface_tnla_coefficient_of_variation, SM_interface_tnla_generalized_entropy, SM_interface_tnla_gini, SM_interface_tnla_hoover, SM_interface_tnla_max, SM_interface_tnla_median, SM_interface_tnla_min, SM_interface_tnla_shannon_entropy, SM_interface_tnla_stdev, SM_interface_tnla_sum, SM_interface_tnla_theil, SM_interface_tnlg_atkinson, SM_interface_tnlg_avg, SM_interface_tnlg_coefficient_of_variation, SM_interface_tnlg_generalized_entropy, SM_interface_tnlg_gini, SM_interface_tnlg_hoover, SM_interface_tnlg_max, SM_interface_tnlg_median, SM_interface_tnlg_min, SM_interface_tnlg_shannon_entropy, SM_interface_tnlg_stdev, SM_interface_tnlg_sum, SM_interface_tnlg_theil, SM_interface_tnlm_atkinson, SM_interface_tnlm_avg, SM_interface_tnlm_coefficient_of_variation, SM_interface_tnlm_generalized_entropy, SM_interface_tnlm_gini, SM_interface_tnlm_hoover, SM_interface_tnlm_max, SM_interface_tnlm_median, SM_interface_tnlm_min, SM_interface_tnlm_shannon_entropy, SM_interface_tnlm_stdev, SM_interface_tnlm_sum, SM_interface_tnlm_theil, SM_interface_tnlpa_atkinson, SM_interface_tnlpa_avg, SM_interface_tnlpa_coefficient_of_variation, SM_interface_tnlpa_generalized_entropy, SM_interface_tnlpa_gini, SM_interface_tnlpa_hoover, SM_interface_tnlpa_max, SM_interface_tnlpa_median, SM_interface_tnlpa_min, SM_interface_tnlpa_shannon_entropy, SM_interface_tnlpa_stdev, SM_interface_tnlpa_sum, SM_interface_tnlpa_theil, SM_interface_tnlpm_atkinson, SM_interface_tnlpm_avg, SM_interface_tnlpm_coefficient_of_variation, SM_interface_tnlpm_generalized_entropy, SM_interface_tnlpm_gini, SM_interface_tnlpm_hoover, SM_interface_tnlpm_max, SM_interface_tnlpm_median, SM_interface_tnlpm_min, SM_interface_tnlpm_shannon_entropy, SM_interface_tnlpm_stdev, SM_interface_tnlpm_sum, SM_interface_tnlpm_theil, SM_interface_tnls_atkinson, SM_interface_tnls_avg, SM_interface_tnls_coefficient_of_variation, SM_interface_tnls_generalized_entropy, SM_interface_tnls_gini, SM_interface_tnls_hoover, SM_interface_tnls_max, SM_interface_tnls_median, SM_interface_tnls_min, SM_interface_tnls_shannon_entropy, SM_interface_tnls_stdev, SM_interface_tnls_sum, SM_interface_tnls_theil, SM_interface_tnm_atkinson, SM_interface_tnm_avg, SM_interface_tnm_coefficient_of_variation, SM_interface_tnm_generalized_entropy, SM_interface_tnm_gini, SM_interface_tnm_hoover, SM_interface_tnm_max, SM_interface_tnm_median, SM_interface_tnm_min, SM_interface_tnm_shannon_entropy, SM_interface_tnm_stdev, SM_interface_tnm_sum, SM_interface_tnm_theil, SM_interface_tnos_atkinson, SM_interface_tnos_avg, SM_interface_tnos_coefficient_of_variation, SM_interface_tnos_generalized_entropy, SM_interface_tnos_gini, SM_interface_tnos_hoover, SM_interface_tnos_max, SM_interface_tnos_median, SM_interface_tnos_min, SM_interface_tnos_shannon_entropy, SM_interface_tnos_stdev, SM_interface_tnos_sum, SM_interface_tnos_theil, SM_interface_tnpa_atkinson, SM_interface_tnpa_avg, SM_interface_tnpa_coefficient_of_variation, SM_interface_tnpa_generalized_entropy, SM_interface_tnpa_gini, SM_interface_tnpa_hoover, SM_interface_tnpa_max, SM_interface_tnpa_median, SM_interface_tnpa_min, SM_interface_tnpa_shannon_entropy, SM_interface_tnpa_stdev, SM_interface_tnpa_sum, SM_interface_tnpa_theil, SM_interface_tnpm_atkinson, SM_interface_tnpm_avg, SM_interface_tnpm_coefficient_of_variation, SM_interface_tnpm_generalized_entropy, SM_interface_tnpm_gini, SM_interface_tnpm_hoover, SM_interface_tnpm_max, SM_interface_tnpm_median, SM_interface_tnpm_min, SM_interface_tnpm_shannon_entropy, SM_interface_tnpm_stdev, SM_interface_tnpm_sum, SM_interface_tnpm_theil, SM_interface_tns_atkinson, SM_interface_tns_avg, SM_interface_tns_coefficient_of_variation, SM_interface_tns_generalized_entropy, SM_interface_tns_gini, SM_interface_tns_hoover, SM_interface_tns_max, SM_interface_tns_median, SM_interface_tns_min, SM_interface_tns_shannon_entropy, SM_interface_tns_stdev, SM_interface_tns_sum, SM_interface_tns_theil, SM_interface_wmc_atkinson, SM_interface_wmc_avg, SM_interface_wmc_coefficient_of_variation, SM_interface_wmc_generalized_entropy, SM_interface_wmc_gini, SM_interface_wmc_hoover, SM_interface_wmc_max, SM_interface_wmc_median, SM_interface_wmc_min, SM_interface_wmc_shannon_entropy, SM_interface_wmc_stdev, SM_interface_wmc_sum, SM_interface_wmc_theil, SM_method_cc_atkinson, SM_method_cc_avg, SM_method_cc_coefficient_of_variation, SM_method_cc_generalized_entropy, SM_method_cc_gini, SM_method_cc_hoover, SM_method_cc_max, SM_method_cc_median, SM_method_cc_min, SM_method_cc_shannon_entropy, SM_method_cc_stdev, SM_method_cc_sum, SM_method_cc_theil, SM_method_ccl_atkinson, SM_method_ccl_avg, SM_method_ccl_coefficient_of_variation, SM_method_ccl_generalized_entropy, SM_method_ccl_gini, SM_method_ccl_hoover, SM_method_ccl_max, SM_method_ccl_median, SM_method_ccl_min, SM_method_ccl_shannon_entropy, SM_method_ccl_stdev, SM_method_ccl_sum, SM_method_ccl_theil, SM_method_cco_atkinson, SM_method_cco_avg, SM_method_cco_coefficient_of_variation, SM_method_cco_generalized_entropy, SM_method_cco_gini, SM_method_cco_hoover, SM_method_cco_max, SM_method_cco_median, SM_method_cco_min, SM_method_cco_shannon_entropy, SM_method_cco_stdev, SM_method_cco_sum, SM_method_cco_theil, SM_method_cd_atkinson, SM_method_cd_avg, SM_method_cd_coefficient_of_variation, SM_method_cd_generalized_entropy, SM_method_cd_gini, SM_method_cd_hoover, SM_method_cd_max, SM_method_cd_median, SM_method_cd_min, SM_method_cd_shannon_entropy, SM_method_cd_stdev, SM_method_cd_sum, SM_method_cd_theil, SM_method_ci_atkinson, SM_method_ci_avg, SM_method_ci_coefficient_of_variation, SM_method_ci_generalized_entropy, SM_method_ci_gini, SM_method_ci_hoover, SM_method_ci_max, SM_method_ci_median, SM_method_ci_min, SM_method_ci_shannon_entropy, SM_method_ci_stdev, SM_method_ci_sum, SM_method_ci_theil, SM_method_clc_atkinson, SM_method_clc_avg, SM_method_clc_coefficient_of_variation, SM_method_clc_generalized_entropy, SM_method_clc_gini, SM_method_clc_hoover, SM_method_clc_max, SM_method_clc_median, SM_method_clc_min, SM_method_clc_shannon_entropy, SM_method_clc_stdev, SM_method_clc_sum, SM_method_clc_theil, SM_method_cllc_atkinson, SM_method_cllc_avg, SM_method_cllc_coefficient_of_variation, SM_method_cllc_generalized_entropy, SM_method_cllc_gini, SM_method_cllc_hoover, SM_method_cllc_max, SM_method_cllc_median, SM_method_cllc_min, SM_method_cllc_shannon_entropy, SM_method_cllc_stdev, SM_method_cllc_sum, SM_method_cllc_theil, SM_method_cloc_atkinson, SM_method_cloc_avg, SM_method_cloc_coefficient_of_variation, SM_method_cloc_generalized_entropy, SM_method_cloc_gini, SM_method_cloc_hoover, SM_method_cloc_max, SM_method_cloc_median, SM_method_cloc_min, SM_method_cloc_shannon_entropy, SM_method_cloc_stdev, SM_method_cloc_sum, SM_method_cloc_theil, SM_method_dloc_atkinson, SM_method_dloc_avg, SM_method_dloc_coefficient_of_variation, SM_method_dloc_generalized_entropy, SM_method_dloc_gini, SM_method_dloc_hoover, SM_method_dloc_max, SM_method_dloc_median, SM_method_dloc_min, SM_method_dloc_shannon_entropy, SM_method_dloc_stdev, SM_method_dloc_sum, SM_method_dloc_theil, SM_method_hdif_atkinson, SM_method_hdif_avg, SM_method_hdif_coefficient_of_variation, SM_method_hdif_generalized_entropy, SM_method_hdif_gini, SM_method_hdif_hoover, SM_method_hdif_max, SM_method_hdif_median, SM_method_hdif_min, SM_method_hdif_shannon_entropy, SM_method_hdif_stdev, SM_method_hdif_sum, SM_method_hdif_theil, SM_method_hpl_atkinson, SM_method_hpl_avg, SM_method_hpl_coefficient_of_variation, SM_method_hpl_generalized_entropy, SM_method_hpl_gini, SM_method_hpl_hoover, SM_method_hpl_max, SM_method_hpl_median, SM_method_hpl_min, SM_method_hpl_shannon_entropy, SM_method_hpl_stdev, SM_method_hpl_sum, SM_method_hpl_theil, SM_method_hpv_atkinson, SM_method_hpv_avg, SM_method_hpv_coefficient_of_variation, SM_method_hpv_generalized_entropy, SM_method_hpv_gini, SM_method_hpv_hoover, SM_method_hpv_max, SM_method_hpv_median, SM_method_hpv_min, SM_method_hpv_shannon_entropy, SM_method_hpv_stdev, SM_method_hpv_sum, SM_method_hpv_theil, SM_method_ldc_atkinson, SM_method_ldc_avg, SM_method_ldc_coefficient_of_variation, SM_method_ldc_generalized_entropy, SM_method_ldc_gini, SM_method_ldc_hoover, SM_method_ldc_max, SM_method_ldc_median, SM_method_ldc_min, SM_method_ldc_shannon_entropy, SM_method_ldc_stdev, SM_method_ldc_sum, SM_method_ldc_theil, SM_method_lldc_atkinson, SM_method_lldc_avg, SM_method_lldc_coefficient_of_variation, SM_method_lldc_generalized_entropy, SM_method_lldc_gini, SM_method_lldc_hoover, SM_method_lldc_max, SM_method_lldc_median, SM_method_lldc_min, SM_method_lldc_shannon_entropy, SM_method_lldc_stdev, SM_method_lldc_sum, SM_method_lldc_theil, SM_method_lloc_atkinson, SM_method_lloc_avg, SM_method_lloc_coefficient_of_variation, SM_method_lloc_generalized_entropy, SM_method_lloc_gini, SM_method_lloc_hoover, SM_method_lloc_max, SM_method_lloc_median, SM_method_lloc_min, SM_method_lloc_shannon_entropy, SM_method_lloc_stdev, SM_method_lloc_sum, SM_method_lloc_theil, SM_method_loc_atkinson, SM_method_loc_avg, SM_method_loc_coefficient_of_variation, SM_method_loc_generalized_entropy, SM_method_loc_gini, SM_method_loc_hoover, SM_method_loc_max, SM_method_loc_median, SM_method_loc_min, SM_method_loc_shannon_entropy, SM_method_loc_stdev, SM_method_loc_sum, SM_method_loc_theil, SM_method_mccc_atkinson, SM_method_mccc_avg, SM_method_mccc_coefficient_of_variation, SM_method_mccc_generalized_entropy, SM_method_mccc_gini, SM_method_mccc_hoover, SM_method_mccc_max, SM_method_mccc_median, SM_method_mccc_min, SM_method_mccc_shannon_entropy, SM_method_mccc_stdev, SM_method_mccc_sum, SM_method_mccc_theil, SM_method_mi_atkinson, SM_method_mi_avg, SM_method_mi_coefficient_of_variation, SM_method_mi_generalized_entropy, SM_method_mi_gini, SM_method_mi_hoover, SM_method_mi_max, SM_method_mi_median, SM_method_mi_min, SM_method_mi_shannon_entropy, SM_method_mi_stdev, SM_method_mi_sum, SM_method_mi_theil, SM_method_mims_atkinson, SM_method_mims_avg, SM_method_mims_coefficient_of_variation, SM_method_mims_generalized_entropy, SM_method_mims_gini, SM_method_mims_hoover, SM_method_mims_max, SM_method_mims_median, SM_method_mims_min, SM_method_mims_shannon_entropy, SM_method_mims_stdev, SM_method_mims_sum, SM_method_mims_theil, SM_method_misei_atkinson, SM_method_misei_avg, SM_method_misei_coefficient_of_variation, SM_method_misei_generalized_entropy, SM_method_misei_gini, SM_method_misei_hoover, SM_method_misei_max, SM_method_misei_median, SM_method_misei_min, SM_method_misei_shannon_entropy, SM_method_misei_stdev, SM_method_misei_sum, SM_method_misei_theil, SM_method_mism_atkinson, SM_method_mism_avg, SM_method_mism_coefficient_of_variation, SM_method_mism_generalized_entropy, SM_method_mism_gini, SM_method_mism_hoover, SM_method_mism_max, SM_method_mism_median, SM_method_mism_min, SM_method_mism_shannon_entropy, SM_method_mism_stdev, SM_method_mism_sum, SM_method_mism_theil, SM_method_nii_atkinson, SM_method_nii_avg, SM_method_nii_coefficient_of_variation, SM_method_nii_generalized_entropy, SM_method_nii_gini, SM_method_nii_hoover, SM_method_nii_max, SM_method_nii_median, SM_method_nii_min, SM_method_nii_shannon_entropy, SM_method_nii_stdev, SM_method_nii_sum, SM_method_nii_theil, SM_method_nl_atkinson, SM_method_nl_avg, SM_method_nl_coefficient_of_variation, SM_method_nl_generalized_entropy, SM_method_nl_gini, SM_method_nl_hoover, SM_method_nl_max, SM_method_nl_median, SM_method_nl_min, SM_method_nl_shannon_entropy, SM_method_nl_stdev, SM_method_nl_sum, SM_method_nl_theil, SM_method_nle_atkinson, SM_method_nle_avg, SM_method_nle_coefficient_of_variation, SM_method_nle_generalized_entropy, SM_method_nle_gini, SM_method_nle_hoover, SM_method_nle_max, SM_method_nle_median, SM_method_nle_min, SM_method_nle_shannon_entropy, SM_method_nle_stdev, SM_method_nle_sum, SM_method_nle_theil, SM_method_noi_atkinson, SM_method_noi_avg, SM_method_noi_coefficient_of_variation, SM_method_noi_generalized_entropy, SM_method_noi_gini, SM_method_noi_hoover, SM_method_noi_max, SM_method_noi_median, SM_method_noi_min, SM_method_noi_shannon_entropy, SM_method_noi_stdev, SM_method_noi_sum, SM_method_noi_theil, SM_method_nos_atkinson, SM_method_nos_avg, SM_method_nos_coefficient_of_variation, SM_method_nos_generalized_entropy, SM_method_nos_gini, SM_method_nos_hoover, SM_method_nos_max, SM_method_nos_median, SM_method_nos_min, SM_method_nos_shannon_entropy, SM_method_nos_stdev, SM_method_nos_sum, SM_method_nos_theil, SM_method_numpar_atkinson, SM_method_numpar_avg, SM_method_numpar_coefficient_of_variation, SM_method_numpar_generalized_entropy, SM_method_numpar_gini, SM_method_numpar_hoover, SM_method_numpar_max, SM_method_numpar_median, SM_method_numpar_min, SM_method_numpar_shannon_entropy, SM_method_numpar_stdev, SM_method_numpar_sum, SM_method_numpar_theil, SM_method_tcd_atkinson, SM_method_tcd_avg, SM_method_tcd_coefficient_of_variation, SM_method_tcd_generalized_entropy, SM_method_tcd_gini, SM_method_tcd_hoover, SM_method_tcd_max, SM_method_tcd_median, SM_method_tcd_min, SM_method_tcd_shannon_entropy, SM_method_tcd_stdev, SM_method_tcd_sum, SM_method_tcd_theil, SM_method_tcloc_atkinson, SM_method_tcloc_avg, SM_method_tcloc_coefficient_of_variation, SM_method_tcloc_generalized_entropy, SM_method_tcloc_gini, SM_method_tcloc_hoover, SM_method_tcloc_max, SM_method_tcloc_median, SM_method_tcloc_min, SM_method_tcloc_shannon_entropy, SM_method_tcloc_stdev, SM_method_tcloc_sum, SM_method_tcloc_theil, SM_method_tlloc_atkinson, SM_method_tlloc_avg, SM_method_tlloc_coefficient_of_variation, SM_method_tlloc_generalized_entropy, SM_method_tlloc_gini, SM_method_tlloc_hoover, SM_method_tlloc_max, SM_method_tlloc_median, SM_method_tlloc_min, SM_method_tlloc_shannon_entropy, SM_method_tlloc_stdev, SM_method_tlloc_sum, SM_method_tlloc_theil, SM_method_tloc_atkinson, SM_method_tloc_avg, SM_method_tloc_coefficient_of_variation, SM_method_tloc_generalized_entropy, SM_method_tloc_gini, SM_method_tloc_hoover, SM_method_tloc_max, SM_method_tloc_median, SM_method_tloc_min, SM_method_tloc_shannon_entropy, SM_method_tloc_stdev, SM_method_tloc_sum, SM_method_tloc_theil, SM_method_tnos_atkinson, SM_method_tnos_avg, SM_method_tnos_coefficient_of_variation, SM_method_tnos_generalized_entropy, SM_method_tnos_gini, SM_method_tnos_hoover, SM_method_tnos_max, SM_method_tnos_median, SM_method_tnos_min, SM_method_tnos_shannon_entropy, SM_method_tnos_stdev, SM_method_tnos_sum, SM_method_tnos_theil, SM_package_ad, SM_package_cc, SM_package_ccl, SM_package_cco, SM_package_cd, SM_package_ci, SM_package_clc, SM_package_cllc, SM_package_cloc, SM_package_ldc, SM_package_lldc, SM_package_lloc, SM_package_loc, SM_package_na, SM_package_ncl, SM_package_nen, SM_package_ng, SM_package_nin, SM_package_nm, SM_package_npa, SM_package_npkg, SM_package_npm, SM_package_ns, SM_package_pda, SM_package_pua, SM_package_tad, SM_package_tcd, SM_package_tcloc, SM_package_tlloc, SM_package_tloc, SM_package_tna, SM_package_tncl, SM_package_tndi, SM_package_tnen, SM_package_tnfi, SM_package_tng, SM_package_tnin, SM_package_tnm, SM_package_tnos, SM_package_tnpa, SM_package_tnpcl, SM_package_tnpen, SM_package_tnpin, SM_package_tnpkg, SM_package_tnpm, SM_package_tns, SM_package_tpda, SM_package_tpuaMOSER: The change metrics proposed by in the publication R. Moser, W. Pedrycz, G. Succi: "A comparative analysis of the efficiency of change metrics and static code attributes", ICSE 2008. Overall, there are 17 of these metrics, for the description we refer to the publication by Moser et al.:MOSER_age, MOSER_authors, MOSER_avg_changeset, MOSER_avg_code_churn, MOSER_avg_lines_added, MOSER_avg_lines_deleted, MOSER_bugfix, MOSER_max_changeset, MOSER_max_code_churn, MOSER_max_lines_added, MOSER_max_lines_deleted, MOSER_refactorings, MOSER_revisions, MOSER_sum_code_churn, MOSER_sum_lines_added, MOSER_sum_lines_deleted, MOSER_weighted_ageHASSAN: The change metrics proposed in the publication A. E. Hassan: "Predicting faults using the complexity of code changes", ICSE 2009. Overall, there are five of these features, for the description we refer to the publication by Hassan:HASSAN_edhcm, HASSAN_hcm, HASSAN_ldhcm, HASSAN_lgdhcm, HASSAN_whcmDAMBROS: The change metrics proposed in the publication M. D'Ambros, M. Lanza, R. Robbes: "Evaluating defect prediction approaches: a benchmark and an extensive comparison", EMSE 17(4-5):531–577, 2012. The names of the metrics follow the pattern `DAMBROSDAMBROS_edhh_cbo, DAMBROS_edhh_dit, DAMBROS_edhh_lcom5, DAMBROS_edhh_nii, DAMBROS_edhh_noc, DAMBROS_edhh_noi, DAMBROS_edhh_rfc, DAMBROS_edhh_tloc, DAMBROS_edhh_tna, DAMBROS_edhh_tna-tnla, DAMBROS_edhh_tna-tnpa, DAMBROS_edhh_tnlpm, DAMBROS_edhh_tnm, DAMBROS_edhh_tnm-tnlm, DAMBROS_edhh_tnm-tnpm, DAMBROS_edhh_tnpa, DAMBROS_edhh_wmc, DAMBROS_edpchu_cbo, DAMBROS_edpchu_dit, DAMBROS_edpchu_lcom5, DAMBROS_edpchu_nii, DAMBROS_edpchu_noc, DAMBROS_edpchu_noi, DAMBROS_edpchu_rfc, DAMBROS_edpchu_tloc, DAMBROS_edpchu_tna, DAMBROS_edpchu_tna-tnla, DAMBROS_edpchu_tna-tnpa, DAMBROS_edpchu_tnlpm, DAMBROS_edpchu_tnm, DAMBROS_edpchu_tnm-tnlm, DAMBROS_edpchu_tnm-tnpm, DAMBROS_edpchu_tnpa, DAMBROS_edpchu_wmc, DAMBROS_hh_cbo, DAMBROS_hh_dit, DAMBROS_hh_lcom5, DAMBROS_hh_nii, DAMBROS_hh_noc, DAMBROS_hh_noi, DAMBROS_hh_rfc, DAMBROS_hh_tloc, DAMBROS_hh_tna, DAMBROS_hh_tna-tnla, DAMBROS_hh_tna-tnpa, DAMBROS_hh_tnlpm, DAMBROS_hh_tnm, DAMBROS_hh_tnm-tnlm, DAMBROS_hh_tnm-tnpm, DAMBROS_hh_tnpa, DAMBROS_hh_wmc, DAMBROS_hwh_cbo, DAMBROS_hwh_dit, DAMBROS_hwh_lcom5, DAMBROS_hwh_nii, DAMBROS_hwh_noc, DAMBROS_hwh_noi, DAMBROS_hwh_rfc, DAMBROS_hwh_tloc, DAMBROS_hwh_tna, DAMBROS_hwh_tna-tnla, DAMBROS_hwh_tna-tnpa, DAMBROS_hwh_tnlpm, DAMBROS_hwh_tnm, DAMBROS_hwh_tnm-tnlm, DAMBROS_hwh_tnm-tnpm, DAMBROS_hwh_tnpa, DAMBROS_hwh_wmc, DAMBROS_ldhh_cbo, DAMBROS_ldhh_dit, DAMBROS_ldhh_lcom5, DAMBROS_ldhh_nii, DAMBROS_ldhh_noc, DAMBROS_ldhh_noi, DAMBROS_ldhh_rfc, DAMBROS_ldhh_tloc, DAMBROS_ldhh_tna, DAMBROS_ldhh_tna-tnla, DAMBROS_ldhh_tna-tnpa, DAMBROS_ldhh_tnlpm, DAMBROS_ldhh_tnm, DAMBROS_ldhh_tnm-tnlm, DAMBROS_ldhh_tnm-tnpm, DAMBROS_ldhh_tnpa, DAMBROS_ldhh_wmc, DAMBROS_ldpchu_cbo, DAMBROS_ldpchu_dit, DAMBROS_ldpchu_lcom5, DAMBROS_ldpchu_nii, DAMBROS_ldpchu_noc, DAMBROS_ldpchu_noi, DAMBROS_ldpchu_rfc, DAMBROS_ldpchu_tloc, DAMBROS_ldpchu_tna, DAMBROS_ldpchu_tna-tnla, DAMBROS_ldpchu_tna-tnpa, DAMBROS_ldpchu_tnlpm, DAMBROS_ldpchu_tnm, DAMBROS_ldpchu_tnm-tnlm, DAMBROS_ldpchu_tnm-tnpm, DAMBROS_ldpchu_tnpa, DAMBROS_ldpchu_wmc, DAMBROS_lgdhh_cbo, DAMBROS_lgdhh_dit, DAMBROS_lgdhh_lcom5, DAMBROS_lgdhh_nii, DAMBROS_lgdhh_noc, DAMBROS_lgdhh_noi, DAMBROS_lgdhh_rfc, DAMBROS_lgdhh_tloc, DAMBROS_lgdhh_tna, DAMBROS_lgdhh_tna-tnla, DAMBROS_lgdhh_tna-tnpa, DAMBROS_lgdhh_tnlpm, DAMBROS_lgdhh_tnm, DAMBROS_lgdhh_tnm-tnlm, DAMBROS_lgdhh_tnm-tnpm, DAMBROS_lgdhh_tnpa, DAMBROS_lgdhh_wmc, DAMBROS_lgdpchu_cbo, DAMBROS_lgdpchu_dit, DAMBROS_lgdpchu_lcom5, DAMBROS_lgdpchu_nii, DAMBROS_lgdpchu_noc, DAMBROS_lgdpchu_noi, DAMBROS_lgdpchu_rfc, DAMBROS_lgdpchu_tloc, DAMBROS_lgdpchu_tna, DAMBROS_lgdpchu_tna-tnla, DAMBROS_lgdpchu_tna-tnpa, DAMBROS_lgdpchu_tnlpm, DAMBROS_lgdpchu_tnm, DAMBROS_lgdpchu_tnm-tnlm, DAMBROS_lgdpchu_tnm-tnpm, DAMBROS_lgdpchu_tnpa, DAMBROS_lgdpchu_wmc, DAMBROS_pchu_cbo, DAMBROS_pchu_dit, DAMBROS_pchu_lcom5, DAMBROS_pchu_nii, DAMBROS_pchu_noc, DAMBROS_pchu_noi, DAMBROS_pchu_rfc, DAMBROS_pchu_tloc, DAMBROS_pchu_tna, DAMBROS_pchu_tna-tnla, DAMBROS_pchu_tna-tnpa, DAMBROS_pchu_tnlpm, DAMBROS_pchu_tnm, DAMBROS_pchu_tnm-tnlm, DAMBROS_pchu_tnm-tnpm, DAMBROS_pchu_tnpa, DAMBROS_pchu_wmc, DAMBROS_wpchu_cbo, DAMBROS_wpchu_dit, DAMBROS_wpchu_lcom5, DAMBROS_wpchu_nii, DAMBROS_wpchu_noc, DAMBROS_wpchu_noi, DAMBROS_wpchu_rfc, DAMBROS_wpchu_tloc, DAMBROS_wpchu_tna, DAMBROS_wpchu_tna-tnla, DAMBROS_wpchu_tna-tnpa, DAMBROS_wpchu_tnlpm, DAMBROS_wpchu_tnm, DAMBROS_wpchu_tnm-tnlm, DAMBROS_wpchu_tnm-tnpm, DAMBROS_wpchu_tnpa, DAMBROS_wpchu_wmcISSUE: The counts for issues that were fixed in the files in the last six months before a release, e.g., ISSUE_blocker_bug for the issues of severity blocker and the type bug. Overall, there are 72 of these features:ISSUE_blocker_bug, ISSUE_blocker_documentation, ISSUE_blocker_improvement, ISSUE_blocker_improvment, ISSUE_blocker_none, ISSUE_blocker_other, ISSUE_blocker_task, ISSUE_blocker_test, ISSUE_critical_bug, ISSUE_critical_documentation, ISSUE_critical_improvement, ISSUE_critical_improvment, ISSUE_critical_none, ISSUE_critical_other, ISSUE_critical_task, ISSUE_critical_test, ISSUE_enhancement_bug, ISSUE_enhancement_documentation, ISSUE_enhancement_improvement, ISSUE_enhancement_improvment, ISSUE_enhancement_none, ISSUE_enhancement_other, ISSUE_enhancement_task, ISSUE_enhancement_test, ISSUE_major_bug, ISSUE_major_documentation, ISSUE_major_improvement, ISSUE_major_improvment, ISSUE_major_none, ISSUE_major_other, ISSUE_major_task, ISSUE_major_test, ISSUE_minor_bug, ISSUE_minor_documentation, ISSUE_minor_improvement, ISSUE_minor_improvment, ISSUE_minor_none, ISSUE_minor_other, ISSUE_minor_task, ISSUE_minor_test, ISSUE_none_bug, ISSUE_none_documentation, ISSUE_none_improvement, ISSUE_none_improvment, ISSUE_none_none, ISSUE_none_other, ISSUE_none_task, ISSUE_none_test, ISSUE_normal_bug, ISSUE_normal_documentation, ISSUE_normal_improvement, ISSUE_normal_improvment, ISSUE_normal_none, ISSUE_normal_other, ISSUE_normal_task, ISSUE_normal_test, ISSUE_regression_bug, ISSUE_regression_documentation, ISSUE_regression_improvement, ISSUE_regression_improvment, ISSUE_regression_none, ISSUE_regression_other, ISSUE_regression_task, ISSUE_regression_test, ISSUE_trivial_bug, ISSUE_trivial_documentation, ISSUE_trivial_improvement, ISSUE_trivial_improvment, ISSUE_trivial_none, ISSUE_trivial_other, ISSUE_trivial_task, ISSUE_trivial_testAST: The counts for the different types of nodes of the AST of the file, e.g., AST_import for the number of import statements or AST_methodinvocation for method calls. Overall, there are 77 of these features:AST_annotation, AST_annotationdeclaration, AST_annotationmethod, AST_arraycreator, AST_arrayinitializer, AST_arrayselector, AST_assertstatement, AST_assignment, AST_basictype, AST_binaryoperation, AST_blockstatement, AST_breakstatement, AST_cast, AST_catchclause, AST_catchclauseparameter, AST_classcreator, AST_classdeclaration, AST_classreference, AST_compilationunit, AST_constantdeclaration, AST_constructordeclaration, AST_continuestatement, AST_declaration, AST_documented, AST_dostatement, AST_elementarrayvalue, AST_elementvaluepair, AST_enhancedforcontrol, AST_enumbody, AST_enumconstantdeclaration, AST_enumdeclaration, AST_explicitconstructorinvocation, AST_expression, AST_fielddeclaration, AST_forcontrol, AST_formalparameter, AST_forstatement, AST_ifstatement, AST_import, AST_inferredformalparameter, AST_innerclasscreator, AST_interfacedeclaration, AST_invocation, AST_lambdaexpression, AST_literal, AST_localvariabledeclaration, AST_member, AST_memberreference, AST_methoddeclaration, AST_methodinvocation, AST_methodreference, AST_node_count, AST_packagedeclaration, AST_primary, AST_referencetype, AST_returnstatement, AST_statement, AST_statementexpression, AST_superconstructorinvocation, AST_supermemberreference, AST_supermethodinvocation, AST_switchstatement, AST_switchstatementcase, AST_synchronizedstatement, AST_ternaryexpression, AST_this, AST_throwstatement, AST_tryresource, AST_trystatement, AST_type, AST_typeargument, AST_typedeclaration, AST_typeparameter, AST_variabledeclaration, AST_variabledeclarator, AST_voidclassreference, AST_whilestatementCHANGE_TYPE: The number of changes of a change type in the last six months. The change types are classified using ChangeDistiller. Overall, there are 5 of these metrics:CHANGE_TYPE_computation, CHANGE_TYPE_data, CHANGE_TYPE_interface, CHANGE_TYPE_logic/control, CHANGE_TYPE_otherPMD: The count of the number of the rule violations found by PMD. Overall, there are 193 features for PMD rules, three features that count the number of rule violations per severity (critical, major, minor as per PMD) and 19 features for groups of rules:PMD_aaa, PMD_aal, PMD_abcwam, PMD_absalil, PMD_acf, PMD_acge, PMD_aci, PMD_acnpe, PMD_act, PMD_acwam, PMD_adl, PMD_adlibdc, PMD_ads, PMD_aes, PMD_afnmmn, PMD_afnmtn, PMD_aicicc, PMD_aio, PMD_aisd, PMD_alei, PMD_amuo, PMD_apfifc, PMD_apmifcne, PMD_apmp, PMD_apst, PMD_are, PMD_arp, PMD_asaml, PMD_asbf, PMD_atg, PMD_atnfs, PMD_atniose, PMD_atnpe, PMD_atret, PMD_auhcip, PMD_aunc, PMD_auov, PMD_bc, PMD_bgmn, PMD_bi, PMD_bii, PMD_bnc, PMD_casr, PMD_ccewta, PMD_ccom, PMD_cis, PMD_cla, PMD_clmmic, PMD_clr, PMD_cnc, PMD_crs, PMD_csr, PMD_ctcnse, PMD_cwopcsbf, PMD_dcl, PMD_dctr, PMD_di, PMD_dijl, PMD_dis, PMD_dlnliss, PMD_dncgce, PMD_dncse, PMD_dnejle, PMD_dnteif, PMD_dp, PMD_duftfli, PMD_eafc, PMD_ecb, PMD_ef, PMD_efb, PMD_eis, PMD_emiacsba, PMD_emsb, PMD_en, PMD_eo, PMD_esb, PMD_esi, PMD_esnil, PMD_ess, PMD_etb, PMD_ews, PMD_fdncsf, PMD_fdsbasoc, PMD_ffcbs, PMD_flmub, PMD_flsbwl, PMD_fo, PMD_focsf, PMD_fsbp, PMD_gdl, PMD_gls, PMD_glsju, PMD_gn, PMD_iesmub, PMD_if, PMD_ifsp, PMD_io, PMD_isb, PMD_ismub, PMD_itgc, PMD_ji, PMD_juasim, PMD_jus, PMD_juss, PMD_jutctma, PMD_jutsia, PMD_lhnc, PMD_li, PMD_linsf, PMD_lisnc, PMD_loc, PMD_mbis, PMD_mdbasbnc, PMD_menc, PMD_mnc, PMD_mria, PMD_msminic, PMD_msvuid, PMD_mtol, PMD_mwsnaec, PMD_ncliss, PMD_np, PMD_nsi, PMD_ntss, PMD_obeah, PMD_odpl, PMD_otac, PMD_pc, PMD_pci, PMD_pl, PMD_plfic, PMD_plficic, PMD_pst, PMD_reartn, PMD_rffb, PMD_rfi, PMD_rinc, PMD_rsinc, PMD_rule_type_basic rules, PMD_rule_type_brace rules, PMD_rule_type_clone implementation rules, PMD_rule_type_controversial rules, PMD_rule_type_design rules, PMD_rule_type_finalizer rules, PMD_rule_type_import statement rules, PMD_rule_type_j2ee rules, PMD_rule_type_jakarta commons logging rules, PMD_rule_type_java logging rules, PMD_rule_type_javabean rules, PMD_rule_type_junit rules, PMD_rule_type_naming rules, PMD_rule_type_optimization rules, PMD_rule_type_security code guideline rules, PMD_rule_type_strict exception rules, PMD_rule_type_string and stringbuffer rules, PMD_rule_type_type resolution rules, PMD_rule_type_unnecessary and unused code rules, PMD_sba, PMD_sbe, PMD_sbiwc, PMD_sbr, PMD_sc, PMD_scfn, PMD_scn, PMD_sdfnl, PMD_sejbfsbf, PMD_semn, PMD_severity_critical, PMD_severity_major, PMD_severity_minor, PMD_sf, PMD_shmn, PMD_sidte, PMD_smn, PMD_soe, PMD_sp, PMD_ssshd, PMD_sti, PMD_sts, PMD_tcwtc, PMD_tfbfass, PMD_tmsi, PMD_uaal, PMD_uaeioat, PMD_ualiov, PMD_uanioat, PMD_uasioat, PMD_uatioae, PMD_uba, PMD_uc, PMD_ucc, PMD_ucel, PMD_ucie, PMD_uct, PMD_uec, PMD_uem, PMD_uetcs, PMD_ufqn, PMD_uis, PMD_ulbr, PMD_ulv, PMD_ulwcc, PMD_unaion, PMD_uncie, PMD_uni, PMD_uom, PMD_uooi, PMD_upf, PMD_upm, PMD_usbfsa, PMD_usdf, PMD_uv, PMD_uwoc, PMD_vnc, PMD_wlmubREFACTOR: Number of refactorings in the last six months as determined by RefDiff. Overall, there are 13 of these features:REFACTOR_extract_method, REFACTOR_extract_superclass, REFACTOR_inline_method, REFACTOR_move_and_rename_class, REFACTOR_move_attribute, REFACTOR_move_class, REFACTOR_move_method, REFACTOR_pull_up_attribute, REFACTOR_pull_up_method, REFACTOR_push_down_attribute, REFACTOR_push_down_method, REFACTOR_rename_class, REFACTOR_rename_methodAll tools we created for the collection of this data are publicly available on GitHub in the SmartSHARK organization. Regardless, we provide copies of the source code for all tools in the collection-tools.tar.gz archive. Guidelines on how to use these tools can be found on the respective homepages of each tool on their GitHub pages. If you have problems, feel free to contact us.
In the following, you find the code for the replication of the empirical study in presented in Section 5 of the article. The Notebook has been fully executed prior to the publication and already shows the results, including additional details for each part of the study, e.g., the raw results per project/release. You must have a running MongoDB with the data we provided if you want to execute the code. You may have to adopt the credentials/host of the MongoDB, depending on where the MongoDB is running. The code for this is in the second cell. All cells should be executed in the order of the notebook, even though they are mostly independent of each other.
import sys
!{sys.executable} -m pip install pycoshark matplotlib pandas seaborn openpyxl sklearn xgboost scipy==1.3 autorank --user
import os
import re
import random
import warnings
import multiprocessing
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import networkx as nx
import openpyxl
%matplotlib inline
from mongoengine import connect, DoesNotExist
from pycoshark.mongomodels import Commit, FileAction, File, CodeEntityState, Project, VCSSystem, Hunk, Issue, Event, IssueSystem, Tag
from pycoshark.utils import create_mongodb_uri_string, jira_is_resolved_and_fixed, get_commit_graph, heuristic_renames, java_filename_filter, git_tag_filter, get_affected_versions
from datetime import datetime
from dateutil.relativedelta import relativedelta
from math import isnan,sqrt,floor
from mongoengine.base.datastructures import BaseDict
from IPython.display import display
from sklearn.model_selection import StratifiedKFold,RandomizedSearchCV
from sklearn.naive_bayes import GaussianNBfrom
from sklearn.metrics import roc_auc_score, f1_score, recall_score, precision_score
from statistics import mean
from scipy.stats import median_absolute_deviation, wilcoxon
from autorank import autorank, plot_stats, latex_table, create_report
# setup pandas to display complete data frames of results
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
# do not print warnings - we checked, there are no serious warnings and they just polute the output
warnings.filterwarnings("ignore")
def mad(df):
"""Helper function to make output for median absolute deviation same as for native pandas stats"""
res = pd.Series(index=df.columns)
for col in df.columns:
# apply column-wise, otherwise a single NaN will make all columns NaN
res[col] = median_absolute_deviation(df[col])
return res
def cliffs_delta(control, pilot):
"""delta calculation adopted from https://github.com/gousiosg/cliffs.d"""
delta = 0.0
for cnt in control:
result = 0
for plt in pilot:
if plt>cnt:
result -= 1
elif cnt>plt:
result += 1
delta += result/len(pilot)
delta = delta/len(control)
if abs(delta)<0.147:
eff_size = 'negligible'
elif abs(delta)<0.33:
eff_size = 'small'
elif abs(delta)<0.474:
eff_size = 'medium'
else:
eff_size = 'large'
return delta,eff_size
db_name = 'smartshark_rel1'
db_user = ''
db_password = ''
db_host = 'localhost'
db_port = 27017
db_authentication_db = ''
db_ssl = False
uri = create_mongodb_uri_string(db_user, db_password, db_host, db_port, db_authentication_db, db_ssl)
connect(db_name, host=uri, alias='default')
projects = ['ant-ivy', 'archiva', 'calcite', 'cayenne', 'commons-bcel', 'commons-beanutils',
'commons-codec', 'commons-collections', 'commons-compress', 'commons-configuration',
'commons-dbcp', 'commons-digester', 'commons-io', 'commons-jcs', 'commons-jexl',
'commons-lang', 'commons-math', 'commons-net', 'commons-scxml',
'commons-validator', 'commons-vfs', 'deltaspike', 'eagle', 'giraph', 'gora', 'jspwiki',
'knox', 'kylin', 'lens', 'mahout', 'manifoldcf','nutch','opennlp','parquet-mr',
'santuario-java', 'systemml', 'tika', 'wss4j']
homepages = {
'ant-ivy':'https://ant.apache.org/ivy/',
'archiva':'https://archiva.apache.org/',
'calcite':'https://calcite.apache.org/',
'cayenne':'https://cayenne.apache.org/',
'commons-bcel':'https://commons.apache.org/bcel/',
'commons-beanutils':'https://commons.apache.org/beanutils/',
'commons-codec':'https://commons.apache.org/codec/',
'commons-collections':'https://commons.apache.org/collections/',
'commons-compress':'https://commons.apache.org/compress/',
'commons-configuration':'https://commons.apache.org/configuration/',
'commons-dbcp':'https://commons.apache.org/dbcp/',
'commons-digester':'https://commons.apache.org/digester/',
'commons-io':'https://commons.apache.org/io/',
'commons-jcs':'https://commons.apache.org/jcs/',
'commons-jexl':'https://commons.apache.org/jexl/',
'commons-lang':'https://commons.apache.org/lang/',
'commons-math':'https://commons.apache.org/math/',
'commons-net':'https://commons.apache.org/net/',
'commons-scxml':'https://commons.apache.org/scxml/',
'commons-validator':'https://commons.apache.org/validator/',
'commons-vfs':'https://commons.apache.org/vfs/',
'deltaspike':'https://deltaspike.apache.org/',
'eagle':'https://eagle.apache.org/',
'giraph':'https://giraph.apache.org/',
'gora':'https://gora.apache.org/',
'jspwiki':'https://jspwiki.apache.org/',
'knox':'https://knox.apache.org/',
'kylin':'http://kylin.apache.org/',
'lens':'https://lens.apache.org/',
'mahout':'https://mahout.apache.org/',
'manifoldcf':'https://manifoldcf.apache.org/',
'nutch':'https://nutch.apache.org/',
'opennlp':'https://opennlp.apache.org/',
'parquet-mr':'https://parquet.apache.org/',
'santuario-java':'https://santuario.apache.org/',
'systemml':'https://systemml.apache.org/',
'tika':'https://tika.apache.org/',
'wss4j':'https://ws.apache.org/wss4j/'
}
releases = {
'ant-ivy': [{
'version': '1.4.1',
'tag': '1.4.1',
'revision_hash': 'bfc4a460c2c0730023f3cc0a5e59bb965a94cfe4',
'corrected_revision': '2e90690057aed8157df0451556709fa4f7bbd6f0'
},
{
'version': '2.0.0',
'tag': '2.0.0',
'revision_hash': 'd7c9277d38524c5c971a5ac3e2d23b7bc0d1221c'
},
{
'version': '2.1.0',
'tag': '2.1.0',
'revision_hash': '14fa21b35d069eb498a2aff784d59b18679d8ee3'
},
{
'version': '2.2.0',
'tag': '2.2.0',
'revision_hash': 'd27f2b35ccb22dd242795c787a7010c2feef13b0'
},
{
'version': '2.3.0',
'tag': '2.3.0',
'revision_hash': 'a0ad1bfa81c615443b4916e654fa7087c504cd40'
},
{
'version': '2.4.0',
'tag': '2.4.0',
'revision_hash': '0b9db35ee7a94a719e538b04122b86cb997f3a17'
}],
'archiva': [{
'version': '1.0',
'tag': 'archiva-1.0',
'revision_hash': '34fb315ea16071c903a6a428706f179e478413d3',
'corrected_revision': '9ca7fd21ad15fa130d9e1e569da1deba3a1bc23d'
},{
'version': '1.1',
'tag': 'archiva-1.1',
'revision_hash': 'b3e2ecd39c190116624010587d78de9071008516'
},{
'version': '1.2',
'tag': 'archiva-1.2',
'revision_hash': 'b27c14eae1314e088ff6872c34bb4b6d40b1df1f'
},{
'version': '1.3',
'tag': 'archiva-1.3',
'revision_hash': 'c1cfcfc5d39cb1087a6d345732512718e6741ff9'
},{
'version': '2.0.0',
'tag': 'archiva-2.0.0',
'revision_hash': 'e33eddc47b2ab5096ed2e7f285a9d745d33d86b0'
},{
'version': '2.1.0',
'tag': 'archiva-2.1.0',
'revision_hash': '93eafa089c11117a1f8a1fdd5752b67386d30b76'
},{
'version': '2.2.0',
'tag': 'archiva-2.2.0',
'revision_hash': 'e5500cce83acba6a3a756b38620c510f3d00263e'
}],
'calcite': [{
'version': '1.0.0',
'tag': 'calcite-1.0.0-incubating',
'revision_hash': '2dd83f21784c4366df84a3aaa62a8b7b0e36d443'
},{
'version': '1.1.0',
'tag': 'calcite-1.1.0-incubating',
'revision_hash': 'f10ea367ff1cc25497f50f149ef0c91b3ae03031'
},{
'version': '1.2.0',
'tag': 'calcite-1.2.0-incubating',
'revision_hash': 'd60f2aa3aa9ce7cda7c4f6986af5729d50a28679'
},{
'version': '1.3.0',
'tag': 'calcite-1.3.0-incubating',
'revision_hash': '495f1859f84b41ae70b2099c3d15c696a49a5100'
},{
'version': '1.4.0',
'tag': 'calcite-1.4.0-incubating',
'revision_hash': '0c0c203daec56c05b6c75fa3896c8af19844df68'
},{
'version': '1.5.0',
'tag': 'calcite-1.5.0',
'revision_hash': 'ba6e43c6983ca92d8ce32a693776dbe73f19e0dc'
},{
'version': '1.6.0',
'tag': 'calcite-1.6.0',
'revision_hash': 'c4d346b0a413a1a62e028dd3be40071523203a58'
},{
'version': '1.7.0',
'tag': 'calcite-1.7.0',
'revision_hash': '8eebfc6d169421509e5d4792a18917fcb6c44efb'
},{
'version': '1.8.0',
'tag': 'calcite-avatica-1.8.0',
'revision_hash': 'ddfaf079a8a18be63f042069dd56c50dec4d2066'
},{
'version': '1.9.0',
'tag': 'calcite-1.9.0',
'revision_hash': '08c56b158ffcfcf205a919cc9fff77a692e649f6'
},{
'version': '1.10.0',
'tag': 'calcite-1.10.0',
'revision_hash': '448dd85832819b4d22682ffe7908d8058da7c778'
},{
'version': '1.11.0',
'tag': 'calcite-1.11.0',
'revision_hash': 'f8ba670de4e283d1532f288de53fdb67fa4dea67'
},{
'version': '1.12.0',
'tag': 'calcite-1.12.0',
'revision_hash': 'ea7ace18cdc26027be690b00f1fcc191aaa87e45'
},{
'version': '1.13.0',
'tag': 'calcite-1.13.0',
'revision_hash': '54b9823e7ca313bf195c19b7d98f1a06b342cf12'
},{
'version': '1.14.0',
'tag': 'calcite-1.14.0',
'revision_hash': '7426eef84e7b2ca38cfbf0d47ba53a8abd4d9e38'
},{
'version': '1.15.0',
'tag': 'calcite-1.15.0',
'revision_hash': 'a2aa00e5b276a30e301ecbf0953e2cbf3a51b605'
}],
'cayenne': [{
'version': '3.0.0',
'tag': '3.0-final',
'revision_hash': 'fe8710bdc1316f59fdfde66ea82706995316f725'
},{
'version': '3.1.0',
'tag': 'cayenne-parent-3.1',
'revision_hash': '63cbf3c98f6e4be000542aa7788875da0939da13'
}],
'commons-bcel': [{
'version': '5.0',
'tag': 'BCEL_5_0',
'revision_hash': '4f2b59597e8463d85bad90b48c8d876815291f4f',
'corrected_revision': '35dc5fc1d4ac353d4c40fef826f8534ba2d1974f'
},{
'version': '5.1',
'tag': 'BCEL_5_1',
'revision_hash': '0fa7513ef6a2ecdd7e14701fed33f8dcdaed0077',
'corrected_revision': 'a55dd020f08ed55cbb28834d586e81a13e2db7c0'
},{
'version': '5.2',
'tag': 'BCEL_5_2',
'revision_hash': 'b546dfdaaaee9eec23c4d0bbe1454a2d6edcaca2',
'corrected_revision': '1aa7e878e3e3c38a03e154a42cc77f00658c9742'
},{
'version': '6.0',
'tag': 'BCEL_6_0',
'revision_hash': '647c723ba1262e1ffce520524692b366a7fde45a'
},{
'version': '6.1',
'tag': 'BCEL_6_1',
'revision_hash': 'f70742fde892c2fac4f0862f8f0b00e121f7d16e'
},{
'version': '6.2',
'tag': 'BCEL_6_2',
'revision_hash': '893d9bbcdbd5ce764db1a38eccd73af150e5d34d'
}],
'commons-beanutils': [{
'version': '1.0',
'tag': 'BEANUTILS_1_0',
'revision_hash': '41f492e7eaed0a9d3f32ee02ca8aa284472d526a',
'corrected_revision': 'd783d4d1c95895cd1e556180c53c88ab14f8af7a'
},{
'version': '1.1',
'tag': 'BEANUTILS_1_1',
'revision_hash': 'f4dd0a42d9d642dfc231c1290044fafd281c3fa3',
'corrected_revision': '68557b16b23bbdd6d13d28b966953efbf1cb77c1'
},{
'version': '1.2',
'tag': 'BEANUTILS_1_2',
'revision_hash': 'a55d81e2b2b47d73c8dbf5e1de7f0394322290bd',
'corrected_revision': 'e9fb55e779563377644672db318ef4dc79995cbd'
},{
'version': '1.3',
'tag': 'BEANUTILS_1_3',
'revision_hash': '227e5d2d4dd00ebbdf49004447e016431648d735',
'corrected_revision': '297bfe3879a06e63096041e9fd59408b831270e6'
},{
'version': '1.4',
'tag': 'BEANUTILS_1_4',
'revision_hash': 'dc0f63ae7af19f7897e03d746038882c92d63c4a',
'corrected_revision': '61b3a30c12c3c734f5fe3cf3a75a7924a860d123'
},{
'version': '1.5',
'tag': 'BEANUTILS_1_5',
'revision_hash': 'b72aa9e97b85714aad2951b9ff4e2be90a2940a7',
'corrected_revision': '90f514fc48dfd7e84f7ab38edbe30a581703533b'
},{
'version': '1.6',
'tag': 'BEANUTILS_1_6',
'revision_hash': '2bc65c91d0c8ac5fac03c41625d10ddee6af7f27',
'corrected_revision': '5a2d26622b9322a84d59bb48fbcfbb4e0f8b93ca'
},{
'version': '1.7.0',
'tag': 'BEANUTILS_1_7_0',
'revision_hash': 'cbdadd2011983734383a785466cdc16c06f99fe9',
'corrected_revision': 'fd5bf514ca3ce36e75a5d9595252fc1a45fc52d8'
},{
'version': '1.8.0',
'tag': 'BEANUTILS_1_8_0',
'revision_hash': '8fb2285efd72d72a359d9012216260a75bec09b7'
},{
'version': '1.9.0',
'tag': 'BEANUTILS_1_9_0',
'revision_hash': '9c047b74f426e40b28f497c39572abcf48263650'
}],
'commons-codec':[{
'version': '1.1',
'tag': 'CODEC_1_1',
'revision_hash': 'b4e4eee0644a211c209c21a2056b6227bfee8ccc',
'corrected_revision': '42d9bf996a0b86b54764c48a2b7859ae77f80dd2'
},{
'version': '1.2',
'tag': 'CODEC_1_2',
'revision_hash': '2c0905a09d5d04db7e572172bf2ead04293477a2',
'corrected_revision': 'dea4d55afaa6d6afd4d01b192106148bf20b3f8b'
},{
'version': '1.3',
'tag': 'CODEC_1_3',
'revision_hash': '1af8f98c3bd96501d558bbe980a2a9f7eb188367',
'corrected_revision': 'dfad8deb12895a12dd5967dbd99e49707fc3d261'
},{
'version': '1.4',
'tag': 'CODEC_1_4',
'revision_hash': 'f375d169f8e030169d63d9da00bb14ae2da2ac34'
},{
'version': '1.5',
'tag': 'commons-codec-1.5',
'revision_hash': '2ce6791741d501bb2e332f6c23ed319d9cf69368'
},{
'version': '1.6',
'tag': '1_6',
'revision_hash': '23f2aa4fb66aa5b026184ed17b6ad070da183794'
},{
'version': '1.7',
'tag': '1.7',
'revision_hash': '183aa006e80e5c5a4c8c215d104be39cd77f3336'
},{
'version': '1.8',
'tag': '1.8',
'revision_hash': 'aa988a92ce3317077abd4e8414ef501b382d7fc0'
},{
'version': '1.9',
'tag': '1.9',
'revision_hash': '52cfc73491e417366c77c226a7b01b40f7677f9a'
},{
'version': '1.10',
'tag': '1.10',
'revision_hash': 'e9da3d16ae67f2940a0bbdf982ecec19a0481981'
},{
'version': '1.11',
'tag': 'commons-codec-1.11',
'revision_hash': '9ceef2231549e95f7868266f38b0c7e1a0a40ed4'
}],
'commons-collections':[{
'version': '1.0',
'tag': 'collections-1.0',
'revision_hash': '5e62ebe3c43f62ca5b58d9deac70154991ce0924',
'corrected_revision': '5a75bf8e7abd6428e1e88bd9f794bf39519c605e'
},{
'version': '2.0',
'tag': 'collections-2.0',
'revision_hash': '658dea9545701b813d9bebee1171c508392e472c',
'corrected_revision': '80c60d68df58af5744b1a521cd68777e62d12312'
},{
'version': '2.1',
'tag': 'collections-2.1',
'revision_hash': '88186e85e517ff14f5f77b92f03a4f0b01939e36',
'corrected_revision': '7c223490bc5d82a058973a95f02ac3631ac7d1fa'
},{
'version': '3.0',
'tag': 'collections-3.0',
'revision_hash': 'ebdf7649e49d164d33c98cc6be4fbfacbbfc4220',
'corrected_revision': 'b730495d6748604b5a10ab8f6bf4302ff710e1f1'
},{
'version': '3.1',
'tag': 'collections-3.1',
'revision_hash': '326a1c172f5857709299bc77bd73402352214bbf',
'corrected_revision': 'a472b7f2bd9f185fb386f9fe33170f2c5de87543'
},{
'version': '3.2',
'tag': 'collections-3.2',
'revision_hash': '8792072a213366605161b2f6e315024711da7eee',
'corrected_revision': '4b6411235e6953ad65b4cb0e16ff6ad09581247d'
},{
'version': '3.3',
'tag': 'collections-3.3',
'revision_hash': '1d0b9abb31faf211192c9866e3ec5dfe86c41e1d'
},{
'version': '4.0',
'tag': 'collections-4.0',
'revision_hash': 'db189926f7415b9866e76cd8123e40c09c1cc67e'
},{
'version': '4.1',
'tag': 'collections-4.1',
'revision_hash': 'cb157163d7543f942a1391f3ef752ebea1e1b349'
}],
'commons-compress': [{
'version': '1.0',
'tag': '1.0',
'revision_hash': '4b5962d0fc3082e456a7dd249fc25e5aa7b1d350'
},{
'version': '1.1',
'tag': 'commons-compress-1.1',
'revision_hash': '9ee24a3d6a84c7e09abb5a9b4940bc91e2ab23d6'
},{
'version': '1.2',
'tag': 'COMPRESS_1.2',
'revision_hash': 'dc733d1ec84c72d68d8cbedc8d4d301eaf975cbf'
},{
'version': '1.3',
'tag': 'COMPRESS_1.3',
'revision_hash': '0874320927ef9427cf5da5973935a1d17201cdf7'
},{
'version': '1.4',
'tag': 'COMPRESS_1.4',
'revision_hash': '6e63432a2a15c8b9b7327edb5cd141661890e0e9'
},{
'version': '1.5',
'tag': '1.5',
'revision_hash': '163c4eee17c041cb7c1ccfedd983816038cc1eca'
},{
'version': '1.6',
'tag': '1.6',
'revision_hash': 'c49e865f4eabd47e264063499e27e12eb549feb1'
},{
'version': '1.7',
'tag': '1.7',
'revision_hash': '4a4ba6bfdadc792c59a67935b6c4fe6ee8bfd325'
},{
'version': '1.8',
'tag': '1.8',
'revision_hash': '5048d93858a3a7d976ace35f83868215ce5dfe2c'
},{
'version': '1.9',
'tag': '1.9',
'revision_hash': '3a5c8403d892ff1bc245f5ccc6a00bbc860529eb'
},{
'version': '1.10',
'tag': '1.10',
'revision_hash': '121b7e00017b95d1498c4f511ceb4dd21811257a'
},{
'version': '1.11',
'tag': '1.11',
'revision_hash': 'ff38bf57378c7cae8617b3c8df692a5ffbe7b83f'
},{
'version': '1.12',
'tag': '1.12',
'revision_hash': '3623ee7dad07c74722baeeffcec6770015f915cf'
},{
'version': '1.13',
'tag': '1.13',
'revision_hash': '45438471726fc5005a41cefecbf62d4d26eb15b2'
},{
'version': '1.14',
'tag': '1.14',
'revision_hash': 'dd7c7702bf51886aa8bd88b24d98619f310fbeda'
},{
'version': '1.15',
'tag': '1.15',
'revision_hash': '01b06d5ef5c5ac3bd651bedcfec7433231cea371'
},{
'version': '1.16',
'tag': '1.16',
'revision_hash': 'c6e38999260bfa486b3213208b809bd543ce18bf'
}],
'commons-configuration': [{
'version': '1.0',
'tag': 'CONFIGURATION_1_0',
'revision_hash': '6c460662af216ac3777b03b9d641451486bc238d',
'corrected_revision': 'a59c5f1b1ee33ddaa2dd719f6fd1a756549f7aca'
},{
'version': '1.1',
'tag': 'CONFIGURATION_1_1',
'revision_hash': '3480ec5dd93416d3cd804a9d9463aba93e118af0',
'corrected_revision': 'f50bb53f44c0ac757e1c47258f7c09bf2101b4c9'
},{
'version': '1.2',
'tag': 'CONFIGURATION_1_2',
'revision_hash': '4c9cc64655258b6af313a593f981de4c94ccc28e',
'corrected_revision': 'e51302b158a0337e8728d5b94ea02933065c0ffa'
},{
'version': '1.3',
'tag': 'CONFIGURATION_1_3',
'revision_hash': '663be0ea1296075b919b41c7e3af4c10054c84aa',
'corrected_revision': '290009d56e2e5abec4e872726fe2b64cfc2d36fa'
},{
'version': '1.4',
'tag': 'CONFIGURATION_1_4',
'revision_hash': '2ca32d357e00554c999837c52319e8122fcb26d9',
'corrected_revision': '9724d33bb06a15cf2fc2152d13f9a457b2b07758'
},{
'version': '1.5',
'tag': 'CONFIGURATION_1_5',
'revision_hash': '6925324fa47ea463e8e7f7833dd2acc4c57ff170'
},{
'version': '1.6',
'tag': 'CONFIGURATION_1_6',
'revision_hash': '46a1e1cf462d7f3cb89015287cb5cbe67a1ce22b'
},{
'version': '1.7',
'tag': 'CONFIGURATION_1_7',
'revision_hash': '3bbf2a42b3db2878651a0968574ec375658f8590'
},{
'version': '1.8',
'tag': 'CONFIGURATION_1_8',
'revision_hash': 'fa910376536ea5a906d3a49a9d87603b11cf5133'
},{
'version': '1.9',
'tag': 'CONFIGURATION_1_9',
'revision_hash': '93f43a4a6dcc7352888a4853e2178871c3c18523'
},{
'version': '1.10',
'tag': 'CONFIGURATION_1_10',
'revision_hash': '3c212681e410097cf38ee376540da585a8938923'
},{
'version': '2.0',
'tag': 'CONFIGURATION_2_0',
'revision_hash': '25c16206e0452a3b68abf4158c4d8f2ea38305da'
},{
'version': '2.1',
'tag': 'CONFIGURATION_2_1',
'revision_hash': 'e814fe00bb51256386dd78f3f926aa30d8de6a7c'
},{
'version': '2.2',
'tag': 'CONFIGURATION_2_2',
'revision_hash': '137997974e0ebd3acd047243f46ddf3b90fa0160'
}],
'commons-dbcp': [{
'version': '1.0',
'tag': 'DBCP_1_0',
'revision_hash': '68948e66e5b230a256cfb20d1775f7d0d02ac888',
'corrected_revision': 'ce2d4f6f15b2009f42ec9f66c356edaebc7ad3a2'
},{
'version': '1.1',
'tag': 'DBCP_1_1',
'revision_hash': '5d76261591d40987acdad7f35b8397e2f63c7916',
'corrected_revision': '3f7aedad5c09ae61a47c397b50055d935482addf'
},{
'version': '1.2',
'tag': 'DBCP_1_2',
'revision_hash': '22e7e052373ef9f687064aa307b26aa6ffd46c48',
'corrected_revision': 'f3bc5838c5e6f173f7665edf00ab7a60b430fa21'
},{
'version': '1.3',
'tag': 'DBCP_1_3',
'revision_hash': '8162457b6f482d17b73e92710e2fa19b536f1c13',
'corrected_revision': '306023633625bb8b0d3150ab1d82979f91dca4f9'
},{
'version': '1.4',
'tag': 'DBCP_1_4',
'revision_hash': 'c08260fd38cc220a8e9c70fd105902f2b5b043b9',
'corrected_revision': 'ada08866e9390138eb40ebb1a36f4e7fd9bacff9'
},{
'version': '2.0',
'tag': 'DBCP_2_0',
'revision_hash': '583aaf88451485e75d34c7417a96318e27720e74'
},{
'version': '2.1',
'tag': 'DBCP_2_1',
'revision_hash': 'd8aa6baa6f1c2ab5281f7097fd11d0d840c4c217'
},{
'version': '2.2.0',
'tag': 'DBCP_2_2_0',
'revision_hash': 'c5b86d834a53b4891487e62671873d054a6f38d8'
},{
'version': '2.3.0',
'tag': 'DBCP_2_3_0',
'revision_hash': '6040b67b78d96d05c282a75bb250fa6ea31623dc'
},{
'version': '2.4.0',
'tag': 'commons-dbcp-2.4.0',
'revision_hash': 'd7aa662fbbb99e536ae28c47d0c4e1d51e39d5b9'
},{
'version': '2.5.0',
'tag': 'commons-dbcp-2.5.0',
'revision_hash': '334784e3043cadaeaa626f792c3f62ac7b697927'
}],
'commons-digester': [{
'version': '1.0',
'tag': 'DIGESTER_1_0',
'revision_hash': '522f50e75b344ebd22343d9b5442f70249e8cabf',
'corrected_revision': '79fecb6e7fcdac7f854332c07f7898e7a3f56d62'
},{
'version': '1.1',
'tag': 'DIGESTER_1_1',
'revision_hash': '48bf1c84c58429c545f00446a31d938f1f6b3f48',
'corrected_revision': '2b782a5a4a11ad4c3ddccf1018a8f2185877c514'
},{
'version': '1.2',
'tag': 'DIGESTER_1_2',
'revision_hash': 'e70e9c320edcb261f535493f358aa04e8c46c769',
'corrected_revision': '21255e428189e5c54205d1623077fae3916db9c7'
},{
'version': '1.3',
'tag': 'DIGESTER_1_3',
'revision_hash': '7533ab004572c33ed076c1137839779c6a00d9ad',
'corrected_revision': 'db04a200c7cfdd181907c9d4647ecc4536fb3ff7'
},{
'version': '1.4',
'tag': 'DIGESTER_1_4',
'revision_hash': 'b8f283f82988e616047fcb0b64700f14f7eae3d7',
'corrected_revision': '4fb91de8c37facd77af6cb80aca4c0e6b99e7884'
},{
'version': '1.5',
'tag': 'DIGESTER_1_5',
'revision_hash': '4b778ef1af3ebb8ced1687fd904d2bcf33fcca7e',
'corrected_revision': '05702b56930b9844daa3dea4c2ce56c8341a7000'
},{
'version': '1.6',
'tag': 'DIGESTER_1_6',
'revision_hash': '619c9da5b28984d736b5d1d12828d17e5c164cab',
'corrected_revision': 'a9599becb81fb374b48584794cb5890adcf4dc18'
},{
'version': '1.7',
'tag': 'DIGESTER_1_7',
'revision_hash': '6b775f843092d51f84dc33233ff72d9220ebe3d5',
'corrected_revision': 'd6e524a56af373dabea5d048d756086a0bf8f255'
},{
'version': '1.8',
'tag': 'DIGESTER_1_8',
'revision_hash': '8ff0834cbed4fb97f9cf1426993b50342983adeb',
'corrected_revision': '85ada11c674ef4cb13bf39c10c44a41845055407'
},{
'version': '2.0',
'tag': 'DIGESTER_2_0',
'revision_hash': '9fb541b5c5f9daa2fa6677914727cc3953515488'
},{
'version': '2.1',
'tag': 'DIGESTER_2_1',
'revision_hash': 'e2a59fe9a72cf9a2119157cd6859b09230835ba9'
},{
'version': '3.0',
'tag': 'DIGESTER3_3_0',
'revision_hash': 'ea9f1e1e3bc9c934e70557e8423b2b2c77b4bbfe'
},{
'version': '3.1',
'tag': 'DIGESTER3_3_1',
'revision_hash': 'fad107b8d66556f915e75b4d0f704dad409b054a'
},{
'version': '3.2',
'tag': 'DIGESTER3_3_2',
'revision_hash': 'ec75748096c8639be7b4998d99c37bb2e3a9c206'
}],
'commons-io': [{
'version': '1.0',
'tag': 'IO_1_0',
'revision_hash': 'c2970b4a557e45a1f6e3cf85b5d163a5de9f80dd',
'corrected_revision': '5e49391360f799bb42274ce42266c17a484b8f6f'
},{
'version': '1.1',
'tag': 'IO_1_1',
'revision_hash': '8d911c48d70c93190c8007d915162040a05d89fe',
'corrected_revision': '1069e5bf6ec3e40f7a9440613615c422da3eb9ac'
},{
'version': '1.2',
'tag': 'IO_1_2',
'revision_hash': 'd65ff7fec954c84deb0c3b22731b0ee8f395805e',
'corrected_revision': '1d107c54c400bc76540dd5fcb14207ae56cbf9ad'
},{
'version': '1.3',
'tag': 'IO_1_3',
'revision_hash': '5a6f8945b08bcb6a4c47cc148a8cbb2f42271880',
'corrected_revision': 'fb9954d8812defef2ade48bff7003677167e0626'
},{
'version': '1.4',
'tag': 'commons-io-1.4',
'revision_hash': '6923a01ae1edf0510dd257f72867c282224ee23f'
},{
'version': '2.0',
'tag': 'commons-io-2.0',
'revision_hash': '27add961ae6f94fa20124d24486a6e5fb47587c9'
},{
'version': '2.1',
'tag': 'commons-io-2.1',
'revision_hash': '0e68a33a9b8f27e592f79a563a5c9a9644c8b21d'
},{
'version': '2.2',
'tag': '2.2',
'revision_hash': '5d4d09928e154d083f396a1555da72dfe9d877d1'
},{
'version': '2.3',
'tag': '2.3',
'revision_hash': 'c07589baa429c2ab306466643cef3dec31d1788b'
},{
'version': '2.4',
'tag': '2.4',
'revision_hash': 'e36d53170875d26d59ca94bd376bf40bc5690ee6'
},{
'version': '2.5',
'tag': 'commons-io-2.5',
'revision_hash': '4077158829de92987367d3149e4ba71356bb5390'
}],
'commons-jcs': [{
'version': '1.0',
'tag': 'JCS_1_0',
'revision_hash': 'e2349a328c0d17ac6add6e28ea56a16cb640f27a',
'corrected_revision': '574d315df38c45aefd638c5d22a9d7442635a7d6'
},{
'version': '1.1',
'tag': 'jcs_1_1_dev',
'revision_hash': '219dece048757b3f04e8d972f40c2c1273b3c54d',
'corrected_revision': 'f9d4511f36c00fdbe8bde20f5fb6a2805ddf985a'
},{
'version': '1.3',
'tag': 'JCS_1_3',
'revision_hash': '851ec7399ea430c9be9ec4c8914d839efdd92b10',
'corrected_revision': '2b4f84253690f2e23337a09be520a76248252418'
},{
'version': '2.0',
'tag': 'commons-jcs-2.0',
'revision_hash': '8a3cab728832eb739a9697d3a5d2e0184d511511'
},{
'version': '2.1',
'tag': 'commons-jcs-2.1',
'revision_hash': 'efe68fda0c1c4ef57171e76ef10ca118b96e191a'
},{
'version': '2.2',
'tag': 'commons-jcs-2.2',
'revision_hash': '5a9246493fb9c60eb81ba4eab7636172e438d46c'
}],
'commons-jexl': [{
'version': '1.0',
'tag': 'COMMONS_JEXL-1_0',
'revision_hash': 'd4e5fb3c1e1d09641e7d7fc5418cde5e863a56e8',
'corrected_revision': 'f3ec15c50f25fcbbb6248c18217d9fe76d1a5f61'
},{
'version': '1.1',
'tag': 'COMMONS_JEXL-1_1',
'revision_hash': 'b9feb29d0d3abbe0d441685f04014036b71e9106',
'corrected_revision': '6160d320c4219fd25b2ffd7bb136a1c4a1c53e6c'
},{
'version': '2.0',
'tag': 'COMMONS_JEXL_2_0',
'revision_hash': '1abdc102c66da73706b2aef331cb57e08f595c04',
'corrected_revision': 'b9dc71c16461ce497e7ba4b2439983c4d756f0af'
},{
'version': '2.1',
'tag': 'commons-jexl-2.1',
'revision_hash': '9c630b1b469c6d3badb43c12846d341362994eca'
},{
'version': '3.0',
'tag': 'COMMONS_JEXL_3_0',
'revision_hash': 'de6c4f3b00af4430f535fcb7833c480d9093fd35'
},{
'version': '3.1',
'tag': 'COMMONS_JEXL_3_1',
'revision_hash': 'af298b37d30f8cd1e776b23db9bb85c353b002ee'
}],
'commons-lang': [{
'version': '1.0',
'tag': 'LANG_1_0',
'revision_hash': '2d274d7cedc148ee3fa8cf4f48904dfd82172bda',
'corrected_revision': '5091f3b04fbacadc0bcff6aaa808615a2c1f05a3'
},{
'version': '2.0',
'tag': 'LANG_2_0',
'revision_hash': 'da5d64110a8b7182d04359958f40fadfbe1ed6ff',
'corrected_revision': '70e09f61dff742883b6b7c6aecb7023cfdabe0bf'
},{
'version': '2.1',
'tag': 'LANG_2_1',
'revision_hash': '81f1077a922523a1f6a76376215a1b3de1e49b67',
'corrected_revision': '27d3960eb1d30bc7e4faf03c26b65f788142cc90'
},{
'version': '2.2',
'tag': 'LANG_2_2',
'revision_hash': 'bdf2ede50ed073d91389be55ec3a9cff565c58a5',
'corrected_revision': 'f4637c05715359d24979e7eedb3c18dd4b31b599'
},{
'version': '2.3',
'tag': 'LANG_2_3',
'revision_hash': '4e55808486a0227a72c70350a76d33660cc94af8',
'corrected_revision': '1363d79e631183ad6c8be6dbe95e895236173d85'
},{
'version': '2.4',
'tag': 'LANG_2_4',
'revision_hash': 'aa9727e15966bac899aa18733ef85c4aded19f0c'
},{
'version': '2.5',
'tag': 'LANG_2_5',
'revision_hash': '7c4386cb877d99d733b531f4fba2a328a3951767'
},{
'version': '2.6',
'tag': 'LANG_2_6',
'revision_hash': '0fe6a434f20b45c027badd89bd393dd4085cf1f2'
},{
'version': '3.0',
'tag': 'LANG_3_0',
'revision_hash': 'c21484b730221bc87ca26553155350292aa30f0d'
},{
'version': '3.1',
'tag': 'LANG_3_1',
'revision_hash': '915946c9dcc80a6a16745b86540b82b2ddba1720'
},{
'version': '3.2',
'tag': 'LANG_3_2',
'revision_hash': '0c14a39be2b8a8e9461921994033310fd567e8cb'
},{
'version': '3.3',
'tag': 'LANG_3_3',
'revision_hash': '37f8fe84d934a92fe784c62e706b7aacf6fa4f97'
},{
'version': '3.4',
'tag': 'LANG_3_4',
'revision_hash': '4777c3a5e4291af2420db57d008152c70c4a8f24'
},{
'version': '3.5',
'tag': 'LANG_3_5',
'revision_hash': '36f98d87b24c2f542b02abbf6ec1ee742f1b158b'
},{
'version': '3.6',
'tag': 'LANG_3_6',
'revision_hash': '09043bfa6f1f9ebb946c7b159735c83259e3a89f'
},{
'version': '3.7',
'tag': 'LANG_3_7',
'revision_hash': '425d8085cfcaab5a78bf0632f9ae77b7e9127cf8'
}],
'commons-math': [{
'version': '1.0',
'tag': 'MATH_1_0',
'revision_hash': '96691abe5ed4a0f67b253cd2f6f789e868a77b22',
'corrected_revision': '746ced5ff5d23885fbaff6664d33616941328488'
},{
'version': '1.1',
'tag': 'MATH_1_1',
'revision_hash': 'bb50284d69ce651dc12e7acea2fe6e2db792874a',
'corrected_revision': '2e4407d19cef6d91aac716d5d08f5140b13590f7'
},{
'version': '1.2',
'tag': 'MATH_1_2',
'revision_hash': '0c602508d1591e212c55912a9066baa45e126957'
},{
'version': '2.0',
'tag': 'MATH_2_0',
'revision_hash': '9f26e58bf9a73e1375b17dfdc2c5f395e4ffbdb6'
},{
'version': '2.1',
'tag': 'MATH_2_1',
'revision_hash': '7d588288e35b38dd55e7bedb767d1b0d80096294'
},{
'version': '2.2',
'tag': 'MATH_2_2',
'revision_hash': '98ebcc6bb298e62e35f895d59fca51b8c4c2d443'
},{
'version': '3.0',
'tag': 'MATH_3_0',
'revision_hash': '174f17d5d4b8251c4ed2600947e69b736ace5877'
},{
'version': '3.1',
'tag': 'MATH_3_1',
'revision_hash': 'b090abb2cf03cf4d0afc6fbadc7cff62c35077cd'
},{
'version': '3.2',
'tag': 'MATH_3_2',
'revision_hash': '7ec508828f62c2a3df31cde2a2f3aa32c5135fdb'
},{
'version': '3.3',
'tag': 'MATH_3_3',
'revision_hash': '38a48e20867f4cd91b7540be4bbba1e9dc7a8b02'
},{
'version': '3.4',
'tag': 'MATH_3_4',
'revision_hash': 'befd8ebd96b8ef5a06b59dccb22bd55064e31c34'
},{
'version': '3.5',
'tag': 'MATH_3_5',
'revision_hash': 'b3c5dae8f253fcb4484e5cd3cc5662587803efc2'
},{
'version': '3.6',
'tag': 'MATH_3_6',
'revision_hash': '95a9d35e77f70ffc9bd5143880c236a760b42005'
}],
'commons-net': [{
'version': '1.0.0',
'tag': 'NET_1_0_0',
'revision_hash': 'edb0c4426ab7dc930c29a5eafd3f7ac76c4cd9bf',
'corrected_revision': '581fad6c1f9bddfe6a61e4fdb2dbc0b6a2709351'
},{
'version': '1.1.0',
'tag': 'NET_1_1_0',
'revision_hash': 'ce903621374d97ab641ca6e0f07d236236a50970',
'corrected_revision': 'ace3e9bdc698e2c9c95e7c9103fabb32904896b2'
},{
'version': '1.2.0',
'tag': 'NET_1_2_0',
'revision_hash': '505a39a18df1507ad63af7a636eaa25b3b793721',
'corrected_revision': 'c87a7c22668257b4d6073197f53dbd4f08eff631'
},{
'version': '1.3.0',
'tag': 'NET_1_3_0',
'revision_hash': '4f8f123cda3bebdf22095e80826cf4af5781ceb9',
'corrected_revision': 'f1481c0e35daf8e45d73698a6f6f4c6651e8dddc'
},{
'version': '1.4.0',
'tag': 'NET_1_4_0',
'revision_hash': '380f6f7a3bca6819b88656daa4c37f770958d2ac',
'corrected_revision': '9189ef3ccc6a8c3d6a09c2c25379f98fd315aa7f'
},{
'version': '2.0',
'tag': 'NET_2_0',
'revision_hash': '32c972d4a86302c8df0be318d9380e8989ea6972'
},{
'version': '2.1',
'tag': 'commons-net-2.1',
'revision_hash': '5b81ff5f9a6ed63b0e0d67bea7a1d9c909184bdd'
},{
'version': '2.2',
'tag': 'NET_2_2',
'revision_hash': '51829d33e280cd335b0d48db9e290a82ae574496'
},{
'version': '3.0',
'tag': 'NET_3_0',
'revision_hash': '7b6def4cb8da5ddef57efdce7f415f7aee1b49e7'
},{
'version': '3.1',
'tag': 'NET_3_1',
'revision_hash': 'e2fa6168cdbe958e56d54456e7aa1ecc4b13e4df'
},{
'version': '3.2',
'tag': 'NET_3_2',
'revision_hash': '9f139947e62438f408eb45fcbf8543eaf0d2b922'
},{
'version': '3.3',
'tag': 'NET_3_3',
'revision_hash': 'f8c2dabb0e8cb62c86912dc61fe2f68106d8b917'
},{
'version': '3.4',
'tag': 'NET_3_4',
'revision_hash': '74a2282b7e4c6905581f4f1b5a2ec412310cd5e7'
},{
'version': '3.5',
'tag': 'NET_3_5',
'revision_hash': '943a587727079179b1c42af26b788f1cb5d76643'
},{
'version': '3.6',
'tag': 'NET_3_6',
'revision_hash': '163fe46c019f5184016207c247cdff30ee740ecc'
}],
'commons-scxml': [{
'version': '0.5',
'tag': 'SCXML_0_5',
'revision_hash': 'c5425058630297b6fa8873586b601389e2b80c4b',
'corrected_revision': 'dcd981be25857db62bd18f43a640c51dedbae65c'
},{
'version': '0.6',
'tag': 'SCXML_0_6',
'revision_hash': '9407377dad722a129ff7688cce553e103a434212',
'corrected_revision': '47c4d6f18410985c82bf343fdc50803aa0258f0e'
},{
'version': '0.7',
'tag': 'SCXML_0_7',
'revision_hash': '439d8722769e199e0475a2e400178594f8b980dc'
},{
'version': '0.8',
'tag': 'SCXML_0_8',
'revision_hash': '54a019f81af349cb5279c2109bb69f17bdd4de3e'
},{
'version': '0.9',
'tag': 'SCXML_0_9',
'revision_hash': '836783c31f5546982558584e6395ae26a882534b'
}],
'commons-validator': [{
'version': '1.0',
'tag': 'VALIDATOR_1_0',
'revision_hash': '28de1292f039a972cd0fd465e157be34d55d0ac6',
'corrected_revision': '2909c6197eb48ebe389812dd1d26b59174297e1f'
},{
'version': '1.1.0',
'tag': 'VALIDATOR_1_1_0',
'revision_hash': '82fb3df34d2c01ff6e6482fd9f84b1363aab6e76',
'corrected_revision': '11e0d011760e4d72fe5a089e73144efc05eba2ef'
},{
'version': '1.2.0',
'tag': 'VALIDATOR_1_2_0',
'revision_hash': 'b1833e64d1a5d68ea49db446bf2cce5f4cbc1549',
'corrected_revision': '1a748629137600611781cbcfde47267763f718da'
},{
'version': '1.3.0',
'tag': 'VALIDATOR_1_3_0',
'revision_hash': 'de4028bee2c0629aef3fefa42e5128d077ce12f3',
'corrected_revision': 'b748c1060fc5052e12831c4c174a6ab109bcace7'
},{
'version': '1.4.0',
'tag': 'VALIDATOR_1_4_0',
'revision_hash': '5eea84edbe4e2f3eeaa9d351bbacb148f5b09373'
},{
'version': '1.5.0',
'tag': 'VALIDATOR_1_5_0',
'revision_hash': 'ff5b4b45dbea1522510e50dbab2aae65cf47c6d1'
},{
'version': '1.6.0',
'tag': 'VALIDATOR_1_6',
'revision_hash': 'c4b93a7275b1172f69e53cd8cec7fc27c954a5be'
}],
'commons-vfs': [{
'version': '1.0',
'tag': 'vfs-1.0',
'revision_hash': 'ff7dd9697fac9856c8acae2ab06031f83f70e33c',
'corrected_revision': '8e23674676e3ab8df88513d0051fba6457ccc0c9'
},{
'version': '2.0',
'tag': 'commons-vfs2-project-2.0',
'revision_hash': '9508889ae6ae432704df3b923d12a6162ba6c89d'
},{
'version': '2.1',
'tag': 'commons-vfs2-project-2.1',
'revision_hash': 'f159bd4781b5ea91ae8872c2cd729d12511703e9'
},{
'version': '2.2',
'tag': 'commons-vfs2-project-2.2',
'revision_hash': 'ef1e6d59e29f3658b6d84b540644f4d4b27d0c67'
}],
'deltaspike': [{
'version': '0.1',
'tag': 'deltaspike-project-0.1-incubating',
'revision_hash': '6048874eecc016e8d8073fad086382ab2f08312c'
},{
'version': '0.2',
'tag': 'deltaspike-project-0.2-incubating',
'revision_hash': '5e4a7eb4de01004206f24ae22b9850e643bffe54'
},{
'version': '0.3',
'tag': 'deltaspike-project-0.3-incubating',
'revision_hash': 'b880838313302a396543f432a91ee005d71a70da'
},{
'version': '0.4',
'tag': 'deltaspike-project-0.4',
'revision_hash': '3d8af1b1e6726cca4ecd7d087ec79eb1ff943aff'
},{
'version': '0.5',
'tag': 'deltaspike-project-0.5',
'revision_hash': 'dffe4faa12ef455d5eec4ee29cdec839e041914e'
},{
'version': '0.6',
'tag': 'deltaspike-project-0.6',
'revision_hash': 'f6a3ad36b974661ca7802986527fdbd95fe113c5'
},{
'version': '0.7',
'tag': 'deltaspike-project-0.7',
'revision_hash': 'c62a2df8210fa0c18c5fe5a1b907a439c11ae959'
},{
'version': '1.0.0',
'tag': 'deltaspike-project-1.0.0',
'revision_hash': '015dbba89afeb9bc763da72302587695d41af7e7'
},{
'version': '1.1.0',
'tag': 'deltaspike-project-1.1.0',
'revision_hash': '6dbd9404fd0c19a030b374322734a78954b5fa93'
},{
'version': '1.2.0',
'tag': 'deltaspike-project-1.2.0',
'revision_hash': '330cbd1c25824585caad87dc717e74f85c1dcc7b'
},{
'version': '1.3.0',
'tag': 'deltaspike-root-1.3.0',
'revision_hash': '31c714237829f7e7f07f9d1dc43776f984c78b27'
},{
'version': '1.4.0',
'tag': 'deltaspike-1.4.0',
'revision_hash': 'af1ed18cfb27e471342c901a496d6ec477a1427d'
},{
'version': '1.5.0',
'tag': 'deltaspike-1.5.0',
'revision_hash': 'd4caf739411b7ce89eb4ef8f1385c0c346498eb4'
},{
'version': '1.6.0',
'tag': 'deltaspike-1.6.0',
'revision_hash': '2d55237aebfeda8287d53fa5b6d3e370846f8ab3'
},{
'version': '1.7.0',
'tag': 'deltaspike-1.7.0',
'revision_hash': '5658d4959c58535b04615ac5ac66bb95a5246e93'
},{
'version': '1.8.0',
'tag': 'deltaspike-1.8.0',
'revision_hash': '2d4e4099852ffbd6aec1aca73dda331cf5329d91'
}],
'eagle': [{
'version': '0.3.0',
'tag': 'eagle-0.3.0-incubating',
'revision_hash': '8183edad341bdec80a7d2acd56a5b5e24f28681c'
},{
'version': '0.4.0',
'tag': 'v0.4.0-incubating',
'revision_hash': 'eac0f27958f2ed8c6842938dad0a995a87fd0715'
},{
'version': '0.5.0',
'tag': 'v0.5.0',
'revision_hash': '0b9c91b8788e166ff203e342baf1940d4bd3247c'
}],
'giraph': [{
'version': '0.1.0',
'tag': 'release-0.1.0',
'revision_hash': '2adab50db10fbffd94e70dfa8fdb1045c3b9ac8b',
'corrected_revision': '65c1a337c1de1262ade8b02dc7e868c30f157589'
},{
'version': '1.0.0',
'tag': 'release-1.0.0-RC3',
'revision_hash': '2537201724b54de25efe144996af0cd762ac6018'
},{
'version': '1.1.0',
'tag': 'release-1.1.0',
'revision_hash': '0466bccf96ef4c92df4c20a6a4bad62cdf7624c1'
}],
'gora': [{
'version': '0.1',
'tag': '0.1-incubating',
'revision_hash': 'a49c0b80c851cb0208c5dc03ab7420e995aec67d',
'corrected_revision': 'faabec642fa692fadecabc6f345fbd1404e609f8'
},{
'version': '0.2',
'tag': 'gora-0.2',
'revision_hash': '424a10884ceacf25878b72e9804c6cc6c2ed44e2'
},{
'version': '0.3',
'tag': 'apache-gora-0.3',
'revision_hash': 'dd6c7a4a20533fba8a9a8aac9ed1e90e0b0633cf'
},{
'version': '0.4',
'tag': 'apache-gora-0.4',
'revision_hash': '685f26c7db062b28aefae9e2d328fecece295cba'
},{
'version': '0.5',
'tag': 'apache-gora-0.5',
'revision_hash': 'c2d58dd1440b4e2c66c1f40a4b6d4169d79bb6d3'
},{
'version': '0.6',
'tag': 'apache-gora-0.6',
'revision_hash': '68ce474b6813e9e5e8b021e3d255f90ddd7a3eb3'
},{
'version': '0.7',
'tag': 'apache-gora-0.7',
'revision_hash': '3b48688f51d6cf618c760b24a341874f12e160d2'
},{
'version': '0.8',
'tag': 'apache-gora-0.8',
'revision_hash': 'd173382084f73f4b2779fcb9131498f11f010371'
}],
'jspwiki': [{
'version': '1.4.0',
'tag': 'jspwiki_1_4_0',
'revision_hash': '22c1139ea1c48950f54cff5db8ad4636db91d59a',
'corrected_revision': '52d64cff1939e8f080b275a5504dcddf4c601c82'
},{
'version': '1.5.0',
'tag': 'jspwiki_1_5_0',
'revision_hash': 'b0eabb7ea312c776a727ef6c63245b2b5d64405f',
'corrected_revision': '15ef5645e96d38779d850dce8150016f8bd45e83'
},{
'version': '1.6.0',
'tag': 'jspwiki_1_6_0',
'revision_hash': 'f9eae56bb2002461fa2499a445845bf132b462fb',
'corrected_revision': '63caf8f3f30ab8432f2807fa459a66c6038759c8'
},{
'version': '1.7.0',
'tag': 'jspwiki_1_7_0',
'revision_hash': 'c784eef937df2cf318e1a8c06426fac324b60303',
'corrected_revision': '196dab3ce4fb0ef3a58d6a35aeab7f51219a7577'
},{
'version': '1.8.0',
'tag': 'jspwiki_1_8_0',
'revision_hash': '96b60a83f3b0b03aa4f5da11ea70261d0af54e6b',
'corrected_revision': 'cdc5345ff16e70350ac30fe43b1d0da4a71b3a14'
},{
'version': '2.0.36',
'tag': 'jspwiki_2_0_36',
'revision_hash': '5c46f2772e69315b5aae215dbaf3bea73b17f9eb',
'corrected_revision': '14d5a0542f4c22d03e697b233c02aaa2f7c3891b'
},{
'version': '2.2.19',
'tag': 'jspwiki_2_2_19',
'revision_hash': '99a009637d47c0f57bd50932a65e8d92a572dcc2',
'corrected_revision': '3af8a6b81158db4a1d39cfa7965e4dd08156635a'
},{
'version': '2.4.56',
'tag': 'jspwiki_2_4_56',
'revision_hash': '6bc63555b9eaf04878e2ce832b8bdf57fa820358',
'corrected_revision': '7da437345960f35936dacddd4398d49628b41067'
},{
'version': '2.6.0',
'tag': 'jspwiki_2_6_0',
'revision_hash': '7f8c385f794a404b24bd412f2823e811948086fa',
'corrected_revision': 'd2e78bf3403cadda7b66a1caa71ff9c949c8a580'
},{
'version': '2.8.0',
'tag': 'jspwiki_2_8_0',
'revision_hash': '3e85477ac133e31b85c5713cbcc6c3aaaf4d814e',
'corrected_revision': 'e3246df9966adc64bf507206f90e3b324e47d982'
},{
'version': '2.9.0',
'tag': 'jspwiki_2_9_0_incubating',
'revision_hash': '7eaed006f8585a3be13508ccc66e316687194f8d',
'corrected_revision': 'b52ef69fd517494a3f7856d8cdffd34d5247ba39'
},{
'version': '2.10.0',
'tag': 'jspwiki_2_10_0',
'revision_hash': 'ec0350a26858f25702c59dfaf5828142428b7929'
}],
'knox': [{
'version': '0.3.0',
'tag': 'v0.3.0-final',
'revision_hash': 'd806123b3fda3f7149ad0b69b921f078a8360b37'
},{
'version': '0.4.0',
'tag': 'v0.4.0-release',
'revision_hash': '614c54d9b236bac81e3685b475264115d5e26b77'
},{
'version': '0.5.0',
'tag': 'v05.0-release',
'revision_hash': 'f29d530df008901e86317a9135f3e57de74166b3'
},{
'version': '0.6.0',
'tag': 'v0.6.0-release',
'revision_hash': 'fd88b115502f4b9fc9f3efae4b3c54d6e64246aa'
},{
'version': '0.7.0',
'tag': 'v0.7.0-release',
'revision_hash': '4f86a8e6b5a581ff46f6188693dd3cf5f4755e7b'
},{
'version': '0.8.0',
'tag': 'v0.8.0-release',
'revision_hash': '1473284f692ea14360bf790b4859d207df060e02'
},{
'version': '0.9.0',
'tag': 'v0.9.0-release',
'revision_hash': 'a1db6ee4028274f7959c626b73934cb79bb2493a'
},{
'version': '0.10.0',
'tag': 'v0.10.0-release',
'revision_hash': '905b1f247ce9682ae2af92468c514d41fcd8d059'
},{
'version': '0.11.0',
'tag': 'v0.11.0-release',
'revision_hash': '074c110cd84995b55141ece46fa44c689968a041'
},{
'version': '0.12.0',
'tag': 'v0.12.0-release',
'revision_hash': 'ee4b1473aa7570092f80d84b224f773111602835'
},{
'version': '0.13.0',
'tag': 'v0.13.0-release',
'revision_hash': '15f73ca81382b3c9edf31245bd525d9efdaf8997'
},{
'version': '0.14.0',
'tag': 'v0.14.0-release',
'revision_hash': 'e32ca83569a4d811cc7c16616e5cda837078fd08'
},{
'version': '1.0.0',
'tag': 'v1.0.0-release',
'revision_hash': '3c3f23a866d55de563c6574353019858590367d8'
}],
'kylin': [{
'version': '0.6.1',
'tag': 'v0.6.1',
'revision_hash': '72138e235a307ac71061421d31b802969263e4ab'
},{
'version': '0.7.1',
'tag': 'kylin-0.7.1-incubating',
'revision_hash': 'a6e24b91717bc2e4e01873e1ce062c67a7710115'
},{
'version': '1.0',
'tag': 'kylin-1.0-incubating',
'revision_hash': 'f8a3320a85f6e26d85f3bffed73c0d38313c611c'
},{
'version': '1.1',
'tag': 'kylin-1.1-incubating',
'revision_hash': 'e8f226f2e8127dabef79a36420dc8724d0852688'
},{
'version': '1.2',
'tag': 'kylin-1.2',
'revision_hash': '0fc9be513ccc1d62f647b70d1b310d4013d1e0b0'
},{
'version': '1.3',
'tag': 'kylin-1.3',
'revision_hash': '75355046859dbb63df3e176fc63759f829a19769'
},{
'version': '1.5.0',
'tag': 'kylin-1.5.0',
'revision_hash': 'e1e732c0aa233123dc6a9d864e72b10aee0fd86e'
},{
'version': '1.6.0',
'tag': 'kylin-1.6.0',
'revision_hash': 'ed6982c8b3baaad08b7e4956001339979724d9a7'
},{
'version': '2.0.0',
'tag': 'kylin-2.0.0',
'revision_hash': '375fd807c281d8c5deff0620747c806be2019782'
},{
'version': '2.1.0',
'tag': 'kylin-2.1.0',
'revision_hash': '562dd173aaf6b398be8e053f896755b3afe8137f'
},{
'version': '2.2.0',
'tag': 'kylin-2.2.0',
'revision_hash': '850c0a6a3b9296d26121f9986701bb191921b1bf'
}],
'lens': [{
'version': '2.6.0',
'tag': 'apache-lens-2.6.0',
'revision_hash': '925094f44923b33767a9d1d4bc9ea6b2bb3fe229'
},{
'version': '2.7.0',
'tag': 'apache-lens-2.7.0',
'revision_hash': 'd2b49929dd2af6a401a8ea6fa2d357c270a6890e'
}],
'mahout': [{
'version': '0.1',
'tag': 'mahout-0.1',
'revision_hash': 'bee952edafdfb517191d3013d8d29a7d574c6a51',
'corrected_revision': '56840d66ec7e29033395f8440f509d469e1d59a3'
},{
'version': '0.2',
'tag': 'mahout-0.2',
'revision_hash': '7a786023136ab3c6443f6aca4556a71e093b5ff2',
'corrected_revision': '205296876dd21ef387d92843b3052c54bdeef972'
},{
'version': '0.3',
'tag': 'mahout-0.3',
'revision_hash': 'f73d4002aec1844622829f2c2822ea4765ec73b9',
'corrected_revision': '514cb7c8deb753f9fb36c70f9dc8302a04cb67a8'
},{
'version': '0.4',
'tag': 'mahout-0.4',
'revision_hash': 'ce337a9c20c48c52c1680a4d1074a943c57c2107'
},{
'version': '0.5',
'tag': 'mahout-0.5',
'revision_hash': 'e597fcdb0465cb3f23ebc30266bc16993205c5d3'
},{
'version': '0.6',
'tag': 'mahout-0.6',
'revision_hash': '17a286d0403eed3e8c3c8cb2aaa815d0bce0bbe9'
},{
'version': '0.7',
'tag': 'mahout-0.7',
'revision_hash': '9d847e0357a2138687808ee257e53455ae4786c3'
},{
'version': '0.8',
'tag': 'mahout-0.8',
'revision_hash': '86573002086f6f0381c4aa927efac76608cd7f0a'
},{
'version': '0.9',
'tag': 'mahout-0.9',
'revision_hash': 'a41d378df344330192c88ea9d63e248bd8182f5c'
},{
'version': '0.10.0',
'tag': 'mahout-0.10.0',
'revision_hash': '832b08c40752b58a98e1a89891a1e0ff54094910'
},{
'version': '0.11.0',
'tag': 'mahout-0.11.0',
'revision_hash': 'b3a44a4ab274266a0a0808f8c401e80059db48ac'
},{
'version': '0.12.0',
'tag': 'mahout-0.12.0',
'revision_hash': '75c382f2129544a26d35889df7c15ab9d5ee9104'
},{
'version': '0.13.0',
'tag': 'mahout-0.13.0',
'revision_hash': 'cca62c5a600703b99a6291440193dd233103d4e4'
}],
'manifoldcf': [{
'version': '0.1',
'tag': 'release-0.1-incubating',
'revision_hash': '61f1b3abaaa5a15527957f83d0b6d759704b2f56',
'corrected_revision': '59eef781b5cdae0d057e03c301ad296e7e2a0310'
},{
'version': '0.2',
'tag': 'release-0.2-incubating',
'revision_hash': 'd87df29245c3ddbe06b3d53341a9194d6ce72183',
'corrected_revision': 'eac4057fffd591c7987acb8e440f5f91edf74865'
},{
'version': '0.3',
'tag': 'release-0.3-incubating',
'revision_hash': 'da5a3251bd43613782296497279d9c6c4fd30018',
'corrected_revision': 'fd3df0934f7d2f342090cf57edf90b0cf88216f1'
},{
'version': '0.4',
'tag': 'release-0.4-incubating',
'revision_hash': '29edf34ddfe813f2b7a4a48e76a2d2aa696c232b',
'corrected_revision': 'efc76d2e36ee6aa12339193972ffbd9524c7db8b'
},{
'version': '0.5',
'tag': 'release-0.5-incubating',
'revision_hash': '588465f8b9c0cf47c5eb9d42bea8833f80c6bfc9',
'corrected_revision': 'aa2caf8111305d1a06c93ecfee27b3133e49b266'
},{
'version': '0.6',
'tag': 'release-0.6',
'revision_hash': 'c8c76f505940e722788aa64522887a797df6c7e1'
},{
'version': '1.0',
'tag': 'release-1.0',
'revision_hash': '4d9ec8e51e136ca3619463f56948456882b5f6e1'
},{
'version': '1.1',
'tag': 'release-1.1',
'revision_hash': 'd270aeb0619d179b9c2a79104a07c1693d902163'
},{
'version': '1.2',
'tag': 'release-1.2',
'revision_hash': 'f1251713c5dd9eefebb4ccad80958bf3ec807458'
},{
'version': '1.3',
'tag': 'release-1.3',
'revision_hash': '0ab44af1e19de90a4660b115554729fb1f3bc0e9'
},{
'version': '1.4',
'tag': 'release-1.4',
'revision_hash': '1ef189ad890c01fdf42b7bd9acf5dca3d0a02acf'
},{
'version': '1.5',
'tag': 'release-1.5',
'revision_hash': 'ca4abe5982c4187098abfd32f6ed6eb4d3f07404'
},{
'version': '1.6',
'tag': 'release-1.6',
'revision_hash': 'da4f8d10a7b17ead1b68160b14064eced7ad242f'
},{
'version': '1.7',
'tag': 'release-1.7',
'revision_hash': '9d1bdfd510307f011ce03c48ae11e3527755c59a'
},{
'version': '1.8',
'tag': 'release-1.8',
'revision_hash': 'ccbafe553777f5c54f7efebf6e1821e18e9c321d'
},{
'version': '1.9',
'tag': 'release-1.9',
'revision_hash': 'ea504faaf95fcb0a2077b5d761a2520756d4df9c'
},{
'version': '1.10',
'tag': 'release-1.10',
'revision_hash': '14d42d2668bd4314dc65b1fe3a40f6b8b551eb28'
},{
'version': '2.0',
'tag': 'release-2.0',
'revision_hash': '9565b0ddcfa09baff2cfbfefe870aad4015df290'
},{
'version': '2.1',
'tag': 'release-2.1',
'revision_hash': '9cd4fe99ec8eb1ce7818cc0539524e9daac3143d'
},{
'version': '2.2',
'tag': 'release-2.2',
'revision_hash': '925f56d102ae25ae2e1c88a1d00208cada999dc0'
},{
'version': '2.3',
'tag': 'release-2.3',
'revision_hash': 'e701989191c61b0551eceb3c7e576cb7e062d2bf'
},{
'version': '2.4',
'tag': 'release-2.4-RC0',
'revision_hash': 'ca2e2454253e2d7b711f3ac8ce2b171a16e1e9ca'
},{
'version': '2.5',
'tag': 'release-2.5',
'revision_hash': '25f015a7a1e2b92a10f3f89df0462b9aaf7f1a94'
},{
'version': '2.6',
'tag': 'release-2.6',
'revision_hash': '46841cb51a195e5a1c12ee94e074c17436941382'
},{
'version': '2.7',
'tag': 'release-2.7',
'revision_hash': '19396df543b59c7c9dbf9bcc8e8dc8ba6a53351c'
},{
'version': '2.8',
'tag': 'release-2.8',
'revision_hash': '115d85b056a832c9f6a89156ecaae87fb006be44'
},{
'version': '2.9',
'tag': 'release-2.9',
'revision_hash': 'b5ce53b8f1fdf6dade99b9b6f7191f6042edeeda'
},{
'version': '2.10',
'tag': 'release-2.10',
'revision_hash': '46e349207d275410276cbb2540de77aa8ad3aab3'
}],
'nutch': [{
'version': '0.7',
'tag': 'release-0.7',
'revision_hash': 'c089c9aa676d373fd6469d277b92b3438d263544',
'corrected_revision': 'e3ad07e5a6de78d1088f0ed459edf0da5d519a45'
},{
'version': '0.8',
'tag': 'release-0.8',
'revision_hash': '616425eacb1ba37652e64a180ad8ae4dd2e618c0',
'corrected_revision': '5ec47e73a47d7d9f963335ec327ceca7ec403fc9'
},{
'version': '0.9',
'tag': 'release-0.9',
'revision_hash': '1742e5a8eee6e30faad250c29be4f1ae138e741c',
'corrected_revision': '3988e7cf047fb862264c670979eb52d99c83fbed'
},{
'version': '1.0',
'tag': 'release-1.0',
'revision_hash': '4f62826994129225e6f8999763677c0e4e29d67e',
'corrected_revision': '4dd40032ae99fa8c0c36958064a66eae5c2f0606'
},{
'version': '1.1',
'tag': '1.1',
'revision_hash': 'eae9058af45f3b79dd108e326da2ab915f7b3284',
},{
'version': '1.2',
'tag': 'release-1.2',
'revision_hash': '5c39b8d4106202f06f7b5782452493f77314ddb8',
},{
'version': '1.3',
'tag': 'release-1.3',
'revision_hash': '8859cb5d63da7196fa72887e6022ba6d1d69bf82',
},{
'version': '1.4',
'tag': 'release-1.4',
'revision_hash': 'f4c7f5f6e77fa3a6737c13b5d32278cfe52155d5',
},{
'version': '1.5',
'tag': 'release-1.5',
'revision_hash': '087b12586cced83f42a8b31c9c596448b9b1f756',
},{
'version': '1.6',
'tag': 'release-1.6',
'revision_hash': 'd25863a32517fbcb090d2a6944b4e5560369010c',
},{
'version': '1.7',
'tag': 'release-1.7',
'revision_hash': '0b9c368d86824c20cfb7fe34d1ad5a30210a9abc',
},{
'version': '1.8',
'tag': 'release-1.8',
'revision_hash': '290a9ae2727bcce0a153657c80f22e2e26287cc2',
},{
'version': '1.9',
'tag': 'release-1.9',
'revision_hash': '1a865fcd43f15782fe599b941cd2e1785df4bfc7',
},{
'version': '1.10',
'tag': 'release-1.10',
'revision_hash': 'a03415029f68cfe844ade42d1d3f0e604b13675c',
},{
'version': '1.11',
'tag': 'release-1.11-rc2',
'revision_hash': '7d0a9855b3c4686382c60df6e39ca01dc3210690',
},{
'version': '1.12',
'tag': 'release-1.12',
'revision_hash': '7956daee8ac91180070f92949ecf99deae9b5ef0',
},{
'version': '1.13',
'tag': 'release-1.13',
'revision_hash': 'bd0da3569aa14105799ed39204d4f0a31c77b42c',
},{
'version': '1.14',
'tag': 'release-1.14',
'revision_hash': 'a8e60bdfb79b368612f068ed5aeeb690e29b448d',
},{
'version': '2.0',
'tag': 'release-2.0',
'revision_hash': '7d8b5e5b5d930e0f31ce28c725d53a275d971e22',
},{
'version': '2.1',
'tag': 'release-2.1',
'revision_hash': 'f3d1202d3932c5cb92485c799ef8d591b8abf8cb',
},{
'version': '2.2',
'tag': 'release-2.2',
'revision_hash': 'b8b1cdf17e41e88c292cf3afc67fdd4e820170f7',
},{
'version': '2.3',
'tag': 'release-2.3',
'revision_hash': '2578f9f219b3ecbef52873f7f25bd56b4818c343',
}],
'opennlp': [{
'version': '1.7.0',
'tag': 'opennlp-1.7.0',
'revision_hash': '2083525415df4f5268abe265688d6ad173b54daf',
},{
'version': '1.8.0',
'tag': 'opennlp-1.8.0',
'revision_hash': '73c8e5b9d8e055fefb53f7f3c2487d05c9788c6a',
}],
'parquet-mr': [{
'version': '1.0.0',
'tag': 'parquet-1.0.0',
'revision_hash': '6eec81d8abab0644e8c2df00544f73828ee0e219',
},{
'version': '1.1.0',
'tag': 'parquet-1.1.0',
'revision_hash': 'bee8378a90bee9657526cd872c9173309b0bafc2',
},{
'version': '1.2.0',
'tag': 'parquet-1.2.0',
'revision_hash': '4170539b9a9bca97e4f3159113606855a41c3b0f',
},{
'version': '1.3.0',
'tag': 'parquet-1.3.0',
'revision_hash': '87864cbd1f0ce52d4e357c02ca522f5309061caa',
},{
'version': '1.4.0',
'tag': 'parquet-1.4.0',
'revision_hash': '73d66174032ebba5274a7faa172542b4d70b093a',
},{
'version': '1.5.0',
'tag': 'parquet-1.5.0',
'revision_hash': '79977453b8cd65e6244f16316fac3a510aa87aa8',
},{
'version': '1.6.0',
'tag': 'apache-parquet-mr-1.6.0-incubating',
'revision_hash': '4f660778f89d4164c72676f6b15bbc74c0d09373',
},{
'version': '1.7.0',
'tag': 'apache-parquet-1.7.0',
'revision_hash': '32c46643845ea8a705c35d4ec8fc654cc8ff816d',
},{
'version': '1.8.0',
'tag': 'apache-parquet-1.8.0',
'revision_hash': '0fda28af84b9746396014ad6a415b90592a98b3b',
},{
'version': '1.9.0',
'tag': 'apache-parquet-1.9.0',
'revision_hash': '38262e2c80015d0935dad20f8e18f2d6f9fbd03c',
}],
'santuario-java': [{
'version': '1.0.0',
'tag': 'v1_0_0',
'revision_hash': 'a0ac8137fe49b96edff2011da786ae579891fa75',
'corrected_revision': '3aad6d8bcdcacb67bf129379f6417bf6199c461f'
},{
'version': '1.2',
'tag': 'v1_2j',
'revision_hash': 'a0ac8137fe49b96edff2011da786ae579891fa75',
'corrected_revision': '3aad6d8bcdcacb67bf129379f6417bf6199c461f'
},{
'version': '1.4.5',
'tag': '1.4.5',
'revision_hash': '8d1b69a2901b241d913e4d2b12028f0ee5351ceb',
},{
'version': '1.5.9',
'tag': '1.5.0',
'revision_hash': '2d64c5b24af718f184e0a352480d6e85a36bb71a',
},{
'version': '2.0.0',
'tag': 'xmlsec-2.0.0',
'revision_hash': 'bddfc74628be4412711cc4a930468df7ef373597',
},{
'version': '2.1.0',
'tag': 'xmlsec-2.1.0',
'revision_hash': '74ebb633b441487707ec27ed60ab33803869c3f9',
}],
'systemml': [{
'version': '0.9',
'tag': None,
'revision_hash': None,
'corrected_revision': '630fa2ea845c5af1d765c7f65477e7e1ab582dc6',
},{
'version': '0.10',
'tag': None,
'revision_hash': None,
'corrected_revision': '3d5f9b11741f6d6ecc6af7cbaa1069cde32be838',
},{
'version': '0.11',
'tag': None,
'revision_hash': None,
'corrected_revision': 'c2e1670c2745863195d4789f1f77ed01ec11af5e',
},{
'version': '0.12',
'tag': None,
'revision_hash': None,
'corrected_revision': 'a83ae1f7fbe9551da674450eedce08aaf7d19d07',
},{
'version': '0.13',
'tag': None,
'revision_hash': None,
'corrected_revision': 'ff3e741694e507f64a6b52ee71638bddecabe7af',
},{
'version': '0.14',
'tag': None,
'revision_hash': None,
'corrected_revision': '8bdcf106ca9bd04c0f68924ad5827eb7d7d54952',
},{
'version': '0.15',
'tag': None,
'revision_hash': None,
'corrected_revision': 'ccaaa18769ae045fd31068dead2565844b4cee47',
},{
'version': '1.0.0',
'tag': None,
'revision_hash': None,
'corrected_revision': '6519f3383f8fd43af93ecba8742ae4b2b28d4b35',
},{
'version': '1.1.0',
'tag': None,
'revision_hash': None,
'corrected_revision': 'deddaee1fd3f8e87ff3a4403edf06cdb022ba949',
},{
'version': '1.2.0',
'tag': None,
'revision_hash': None,
'corrected_revision': 'a1a05e29f6ee78f3c33fea355f62c78ce21766ee',
}],
'tika': [{
'version': '0.1',
'tag': '0.1-incubating',
'revision_hash': 'fe7399ebe5f1d2cca553252577d0925815072b21',
'corrected_revision': '2ca661e4cf4f5a21a53feec0074bf376fa17a93e'
},{
'version': '0.2',
'tag': '0.2',
'revision_hash': '938e8f87779351e071a6d24106af116d24bac07d',
'corrected_revision': 'f03c0cae77843869abad37b0e5bf6f0efbbf60f7'
},{
'version': '0.3',
'tag': '0.3',
'revision_hash': 'b76f7f8836a744bfd1590c046f293c04f1cad2f4',
'corrected_revision': '9ae0addd0de3a6f9042529705e5410bfbf1e7552'
},{
'version': '0.4',
'tag': '0.4',
'revision_hash': '02070084a054a7a1e325a2f54a145439c44e2df0',
'corrected_revision': '163b0a4928cd9c9585406deac353d5f40306bd29'
},{
'version': '0.5',
'tag': '0.5',
'revision_hash': '450ffaca1c8beba7c1fc6cef047c89e5dfe6c5b0',
'corrected_revision': 'c05a953cc692ccca7f0909efb8a2aaf19b9b806a'
},{
'version': '0.6',
'tag': '0.6',
'revision_hash': '9567efeb7087151074abcd2b6fbf6a72a8d2feee',
'corrected_revision': '4912160b80b9771d1176f5132564d3fd5c71957a'
},{
'version': '0.7',
'tag': '0.7',
'revision_hash': '69772569d54dd208d0a07585f406baab76874c92',
'corrected_revision': '6009758401347098a2660505c74b4bb74f2302c4'
},{
'version': '0.8',
'tag': '0.8',
'revision_hash': '107c4ef06420b27caa099f052aa3852e00ff3aa0'
},{
'version': '0.9',
'tag': '0.9',
'revision_hash': 'eb1cd6a1665a9034195b30172c0199a6143bcd45'
},{
'version': '0.10',
'tag': '0.10',
'revision_hash': '2138e990ec9cc7690ad54f574d623f48dcd72ae1'
},{
'version': '1.0',
'tag': '1.0',
'revision_hash': '6d7139b7f9bc73ee3797bb43145cf87264fc49cd'
},{
'version': '1.1',
'tag': '1.1',
'revision_hash': '0f8a1292c2f243442030161fecf9fa04aae89727'
},{
'version': '1.2',
'tag': '1.2',
'revision_hash': 'de47325be3c9a7aff20075fa4354a9be221afffd'
},{
'version': '1.3',
'tag': '1.3',
'revision_hash': 'f0027f53493d4cada75b48e38faa5d32675b7034'
},{
'version': '1.4',
'tag': '1.4',
'revision_hash': '540d4166a963ae9f7a0c1a18c7b1cfa21c245e10'
},{
'version': '1.5',
'tag': '1.5',
'revision_hash': 'a79ed8f00d6329ac9aaa94747923f36af654b129'
},{
'version': '1.6',
'tag': '1.6',
'revision_hash': '5ee61497debd6c5e731c871c4f75f79cfbd37b14'
},{
'version': '1.7',
'tag': '1.7',
'revision_hash': 'f9003a1fe1a1883008b62e78d01a582be6c06a8c'
},{
'version': '1.8',
'tag': '1.8',
'revision_hash': 'c57e805ee506123afc208eae5fd97fb4c4d1b8f7'
},{
'version': '1.9',
'tag': '1.9-rc2',
'revision_hash': '49757b678139ab8501a1585154cc004bfe080606'
},{
'version': '1.10',
'tag': '1.10',
'revision_hash': '3701de89d12cb9d6342887521aec5b1f1b141e84'
},{
'version': '1.11',
'tag': '1.11-rc1',
'revision_hash': '3610d7db1ec6b75ca1927c49b97452333a236a0f'
},{
'version': '1.12',
'tag': '1.12-rc1',
'revision_hash': 'c0d2b4fc5a8b06d3939253853e0fed005fd7771a'
},{
'version': '1.13',
'tag': '1.13',
'revision_hash': '386b68b5ae87beafacfb63f33e0a9888dedb9c30'
},{
'version': '1.14',
'tag': '1.14-rc1',
'revision_hash': 'dbb6baad77937db89d5ac05d4dea0b246fb73a6d'
},{
'version': '1.15',
'tag': '1.15',
'revision_hash': 'd831efbea89457300dbbd452caeb9790d4f47a65'
},{
'version': '1.16',
'tag': '1.16',
'revision_hash': 'b99f344f6d462f1ef5cfd0e864703a2d42f8752e'
},{
'version': '1.17',
'tag': '1.17',
'revision_hash': 'b054df2be2f43c4944ff66f7d9fd2ceb1655d9c0'
}],
'wss4j': [{
'version': '1.5.0',
'tag': '1_5_0',
'revision_hash': '1076b70d62584310a22636532fcf4af68fe96554'
},{
'version': '1.6.0',
'tag': '1_6_0',
'revision_hash': '3db427f29876d4920faf77a613e488113e59e0f2'
},{
'version': '2.0.0',
'tag': 'wss4j-2.0.0',
'revision_hash': '181d94d615489e3dbe59be38dd465f0b9e8af007'
},{
'version': '2.1.0',
'tag': 'wss4j-2.1.0',
'revision_hash': '2a2d11a10260fac80995e3da10657de8b8347516'
},{
'version': '2.2.0',
'tag': 'wss4j-2.2.0',
'revision_hash': '1df91ee6048ffd7d7e3afee78122a6aa22ebe9e9'
}]
}
all_releases = []
for project in projects:
for release in releases[project]:
all_releases.append(project+'-'+release['version'])
project_data = pd.DataFrame(index=projects, columns=['Releases', 'Commits', 'Issues', 'Bugs', 'Linked Bugs', 'Homepage', 'VCS System', 'Issue System'])
release_data = pd.DataFrame(index=all_releases, columns=['Release Date', '#Files Total', '#Files Production'])
for project in projects:
cur_releases = []
for release in releases[project]:
cur_releases.append(release['version'])
if 'corrected_revision' in release:
revision_hash = release['corrected_revision']
else:
revision_hash = release['revision_hash']
release_commit = Commit.objects(revision_hash=revision_hash).get()
files_total = 0
files_production = 0
for ces in CodeEntityState.objects(id__in=release_commit.code_entity_states, ce_type='file').only('long_name'):
files_total += 1
if java_filename_filter(ces.long_name):
files_production += 1
release_data.at[project+'-'+release['version'],'Release Date'] = release_commit.committer_date
release_data.at[project+'-'+release['version'],'#Files Total'] = files_total
release_data.at[project+'-'+release['version'],'#Files Production'] = files_production
releases_str = str(cur_releases)
releases_str = releases_str.replace('[','')
releases_str = releases_str.replace(']','')
releases_str = releases_str.replace("'",'')
project_id = Project.objects(name=project).get().id
vcs_system = VCSSystem.objects(project_id=project_id).get()
its_system = IssueSystem.objects(project_id=project_id).get()
num_commits = Commit.objects(vcs_system_id=vcs_system.id).count()
num_issues = Issue.objects(issue_system_id=its_system.id).count()
num_bugs = 0
num_linked_bugs = 0
for issue in Issue.objects(issue_system_id=its_system.id,issue_type__iexact='bug'):
if jira_is_resolved_and_fixed(issue):
num_bugs += 1
if Commit.objects(linked_issue_ids=issue.id).count()>0:
num_linked_bugs += 1
project_data.at[project,'Releases'] = releases_str
project_data.at[project,'Commits'] = num_commits
project_data.at[project,'Issues'] = num_issues
project_data.at[project,'Bugs'] = num_bugs
project_data.at[project,'Linked Bugs'] = num_linked_bugs
project_data.at[project,'Homepage'] = homepages[project]
project_data.at[project,'VCS System'] = vcs_system.url
project_data.at[project,'Issue System'] = its_system.url
print('Number of Projects:'.ljust(25), len(project_data))
print('Number of Releases:'.ljust(25), len(release_data))
print('Total commits:'.ljust(25), project_data['Commits'].sum())
print('Total issues:'.ljust(25), project_data['Issues'].sum())
print('Total bugs:'.ljust(25), project_data['Bugs'].sum())
print('Total linked bugs:'.ljust(25), project_data['Linked Bugs'].sum())
display(project_data)
display(release_data)
linkdata = pd.DataFrame(index=projects, columns=['total_commits_any','total_links_validated','total_commits_validated',
'total_links_szz','correct_links_szz','missed_links_szz','additional_links_szz',
'total_links_jira','correct_links_jira','missed_links_jira','additional_links_jira',
'total_commits_szz','correct_commits_szz','wrong_commits_szz',
'total_commits_jira','correct_commits_jira','wrong_commits_jira',
'missed_commits_szz', 'missed_commits_jira',
'links_validated_heuristic'])
linkdata.fillna(0, inplace=True)
direct_link_jira = re.compile('(?P<ID>[A-Z][A-Z0-9_]+-[0-9]+)', re.M)
for project in projects:
project_id = Project.objects(name=project).get().id
vcs_system_id = VCSSystem.objects(project_id=project_id).get().id
for commit in Commit.objects(vcs_system_id=vcs_system_id).only('linked_issue_ids', 'message', 'labels','szz_issue_ids','fixed_issue_ids'):
total_commits_any = 0
total_links_szz = 0
total_links_jira = 0
total_links_validated = 0
total_commits_szz = 0
total_commits_jira = 0
total_commits_validated = 0
correct_links_szz = 0
correct_links_jira = 0
missed_links_szz = 0
missed_links_jira = 0
correct_commits_szz = 0
correct_commits_jira = 0
missed_commits_szz = 0
missed_commits_jira = 0
links_validated_heurisitic = 0
if commit.szz_issue_ids:
total_links_szz = len(commit.szz_issue_ids)
if commit.linked_issue_ids:
for issue in Issue.objects(id__in=commit.linked_issue_ids):
if issue.issue_type and issue.issue_type.lower()=="bug" and jira_is_resolved_and_fixed(issue):
total_links_jira += 1
if len(commit.linked_issue_ids)==1:
issue = Issue.objects(id=commit.linked_issue_ids[0]).get()
id_number_issue = int(issue.external_id.split("-")[1])
id_number_commit = None
# find match to JIRA pattern and determine if it is at the beginning of the commit
for m in direct_link_jira.finditer(commit.message.strip()):
if m.start()<=1:
match_in_commit = m.group('ID').upper()
id_number_commit = int(match_in_commit.split("-")[1])
# if there is a JIRA pattern at the beginning of the commit, check if the linked number matches the issue
# check only for numbers instead of whole external id takes care of typos
if id_number_commit is not None and id_number_issue==id_number_commit:
# if this is the case, heursitic found a match
if issue.issue_type and issue.issue_type.lower()=="bug" and jira_is_resolved_and_fixed(issue):
commit.fixed_issue_ids = [issue.id]
links_validated_heurisitic += 1
if commit.fixed_issue_ids:
for issue in Issue.objects(id__in=commit.fixed_issue_ids):
if issue.issue_type and issue.issue_type.lower()=="bug" and jira_is_resolved_and_fixed(issue):
total_links_validated += 1
if commit.szz_issue_ids and issue.id in commit.szz_issue_ids:
correct_links_szz += 1
else:
missed_links_szz += 1
if commit.linked_issue_ids and issue.id in commit.linked_issue_ids:
correct_links_jira += 1
else:
missed_links_jira += 1
if total_links_szz>0:
total_commits_szz += 1
if total_links_jira>0:
total_commits_jira += 1
if total_links_validated>0:
total_commits_validated += 1
if total_links_szz>0 or total_links_jira>0 or total_links_validated>0:
total_commits_any += 1
if correct_links_jira>0 or correct_links_jira>0:
if total_links_szz>0:
correct_commits_szz += 1
else:
missed_commits_szz += 1
if total_links_jira>0:
correct_commits_jira += 1
else:
missed_commits_jira += 1
linkdata.loc[project,'total_commits_any'] += total_commits_any
linkdata.loc[project,'total_links_validated'] += total_links_validated
linkdata.loc[project,'total_commits_validated'] += total_commits_validated
linkdata.loc[project,'total_links_szz'] += total_links_szz
linkdata.loc[project,'total_links_jira'] += total_links_jira
linkdata.loc[project,'total_commits_szz'] += total_commits_szz
linkdata.loc[project,'total_commits_jira'] += total_commits_jira
linkdata.loc[project,'correct_links_szz'] += correct_links_szz
linkdata.loc[project,'correct_links_jira'] += correct_links_jira
linkdata.loc[project,'missed_links_szz'] += missed_links_szz
linkdata.loc[project,'missed_links_jira'] += missed_links_jira
linkdata.loc[project,'additional_links_szz'] += total_links_szz-correct_links_szz
linkdata.loc[project,'additional_links_jira'] += total_links_jira-correct_links_jira
linkdata.loc[project,'correct_commits_szz'] += correct_commits_szz
linkdata.loc[project,'correct_commits_jira'] += correct_commits_jira
linkdata.loc[project,'wrong_commits_szz'] += total_commits_szz-correct_commits_szz
linkdata.loc[project,'wrong_commits_jira'] += total_commits_jira-correct_commits_jira
linkdata.loc[project,'missed_commits_szz'] += missed_commits_szz
linkdata.loc[project,'missed_commits_jira'] += missed_commits_jira
linkdata.loc[project,'links_validated_heuristic'] += links_validated_heurisitic
linkdata['percent_link_correct_szz'] = linkdata['correct_links_szz']/linkdata['total_links_validated']
linkdata['percent_link_correct_jira'] = linkdata['correct_links_jira']/linkdata['total_links_validated']
linkdata['percent_link_missed_szz'] = linkdata['missed_links_szz']/linkdata['total_links_validated']
linkdata['percent_link_missed_jira'] = linkdata['missed_links_jira']/linkdata['total_links_validated']
linkdata['percent_link_additional_szz'] = linkdata['additional_links_szz']/linkdata['total_links_validated']
linkdata['percent_link_additional_jira'] = linkdata['additional_links_jira']/linkdata['total_links_validated']
display(linkdata)
df = linkdata[['percent_link_correct_szz','percent_link_correct_jira',
'percent_link_additional_szz','percent_link_additional_jira']]
print('mean values:')
print(df.mean().to_string())
print()
print('std values: ')
print(df.std().to_string())
print()
print('median values:')
print(df.median().to_string())
print()
print('MAD values:')
print(mad(df).to_string())
df.columns = ['SZZ','JL',
'SZZ','JL']
f, axes = plt.subplots(2, 1, figsize=(6,2))
sns.boxplot(data=df.iloc[:,0:2], orient='h', color='lightgray', ax=axes[0])
sns.swarmplot(data=df.iloc[:,0:2], orient='h', color='gray', ax=axes[0])
axes[0].set_xlabel('Percentage of actual links that were identified')
axes[0].set_xlim(0,1)
sns.boxplot(data=df.iloc[:,2:4], orient='h', color='lightgray', ax=axes[1])
sns.swarmplot(data=df.iloc[:,2:4], orient='h', color='gray', ax=axes[1])
axes[1].set_xlabel('Additional links found in relation to actual links')
axes[1].set_xlim(0,1)
plt.subplots_adjust(left=None, bottom=-0.4, right=None, top=None, wspace=None, hspace=0.5)
#plt.savefig("links-correct.pdf", bbox_inches='tight')
plt.show()
sample_size = 1000
commits_without_validation = []
for commit in Commit.objects(validations__exists=False).only('id', 'linked_issue_ids', 'szz_issue_ids'):
no_jl = commit.linked_issue_ids is None or len(commit.linked_issue_ids)==0
no_szz = commit.szz_issue_ids is None or len(commit.szz_issue_ids)==0
if no_jl and no_szz:
commits_without_validation.append(commit.id)
continue
commits_heuristicly_validated = []
direct_link_jira = re.compile('(?P<ID>[A-Z][A-Z0-9_]+-[0-9]+)', re.M)
for commit in Commit.objects().only('id', 'revision_hash', 'vcs_system_id','linked_issue_ids', 'message', 'labels','szz_issue_ids'):
# heuristic only applies to commits that have a single issue link
if commit.linked_issue_ids and len(commit.linked_issue_ids)==1:
issue = Issue.objects(id=commit.linked_issue_ids[0]).get()
# we only look at links to fixed bugs
if issue.issue_type and issue.issue_type.lower()=="bug" and jira_is_resolved_and_fixed(issue):
id_number_issue = int(issue.external_id.split("-")[1])
id_number_commit = None
# find match to JIRA pattern and determine if it is at the beginning of the commit
for m in direct_link_jira.finditer(commit.message.strip()):
if m.start()<=1:
match_in_commit = m.group('ID').upper()
id_number_commit = int(match_in_commit.split("-")[1])
# if there is a JIRA pattern at the beginning of the commit, check if the linked number matches the issue
# check only for numbers instead of whole external id takes care of typos
if id_number_commit is not None and id_number_issue==id_number_commit:
# if this is the case, heursitic found a match
commits_heuristicly_validated.append(commit.id)
vcs_system_map = {}
for vcs_system in VCSSystem.objects():
vcs_system_map[vcs_system.id] = Project.objects(id=vcs_system.project_id).get().name
sampled_commits_without_validation = pd.DataFrame(columns=['project','revision_hash', 'message','num_links','reason'])
random.seed("sampled_commits_without_validation")
sampled_commits = random.sample(commits_without_validation, k=sample_size)
for commit_id in sampled_commits:
commit = Commit.objects(id=commit_id).only('message','revision_hash','vcs_system_id').get()
sampled_commits_without_validation.loc[len(sampled_commits_without_validation)] = [vcs_system_map[commit.vcs_system_id], commit.revision_hash, commit.message, None, None]
sampled_commits_without_validation.to_excel("sampled_commits_without_validation.xlsx")
sampled_commits_heuristicly_validated = pd.DataFrame(columns=['project','revision_hash', 'message','linked_issue','correct','reason'])
random.seed("sampled_commits_heuristicly_validated")
sampled_commits = random.sample(commits_heuristicly_validated, k=sample_size)
for commit_id in sampled_commits:
commit = Commit.objects(id=commit_id).only('message','revision_hash','vcs_system_id','linked_issue_ids').get()
issue = Issue.objects(id=commit.linked_issue_ids[0]).only('external_id').get()
sampled_commits_heuristicly_validated.loc[len(sampled_commits_heuristicly_validated)] = [vcs_system_map[commit.vcs_system_id], commit.revision_hash, commit.message, issue.external_id, None, None]
sampled_commits_heuristicly_validated.to_excel("sampled_commits_heuristicly_validated.xlsx")
issuedata = pd.DataFrame(index=projects, columns=['num_bugs','actual_bug',
'actual_impr','actual_test',
'actual_doc','actual_other'])
issuedata.fillna(0, inplace=True)
for project in projects:
project_id = Project.objects(name=project).get().id
its_id = IssueSystem.objects(project_id=project_id).get().id
num_linked_bugs = 0
for issue in Issue.objects(issue_system_id=its_id,issue_type__iexact='bug'):
if jira_is_resolved_and_fixed(issue):
if Commit.objects(linked_issue_ids=issue.id).count()>0:
num_linked_bugs += 1
issuedata.at[project,'num_bugs'] += 1
if issue.issue_type_verified:
if issue.issue_type_verified=="bug":
issuedata.at[project,'actual_bug'] += 1
if issue.issue_type_verified=="improvement":
issuedata.at[project,'actual_impr'] += 1
if issue.issue_type_verified=="test":
issuedata.at[project,'actual_test'] += 1
if issue.issue_type_verified=="documentation":
issuedata.at[project,'actual_doc'] += 1
if issue.issue_type_verified=="other":
issuedata.at[project,'actual_other'] += 1
issuedata['percent_bug'] = issuedata['actual_bug']/issuedata['num_bugs']
issuedata['percent_impr'] = issuedata['actual_impr']/issuedata['num_bugs']
issuedata['percent_test'] = issuedata['actual_test']/issuedata['num_bugs']
issuedata['percent_doc'] = issuedata['actual_doc']/issuedata['num_bugs']
issuedata['percent_other'] = issuedata['actual_other']/issuedata['num_bugs']
display(issuedata)
df = issuedata[['percent_bug', 'percent_impr', 'percent_test', 'percent_doc', 'percent_other']]
df.columns = ['BUG', 'IMPROVEMENT', 'TEST', 'DOC', 'OTHER']
print("mean values")
print(df.mean().to_string())
print()
print("sd values")
print(df.std().to_string())
print()
print("median values")
print(df.median().to_string())
print()
print("MAD values")
print(mad(df).to_string())
ax = sns.boxplot(data=df, orient='h', color='lightgray')
ax = sns.swarmplot(data=df, orient='h', color='gray')
ax.set_xlabel('Percentage of Closed Linked Bug Issues')
ax.set_xlim(0,1)
plt.show()
#plt.savefig("issue-type-validation.png", bbox_inches='tight')
bugfixdata = pd.DataFrame(index=projects, columns=['num_commits',
'SZZ_tp','SZZ_fn','SZZ_fp',
'JL_tp','JL_fn','JL_fp',
'JLM_tp','JLM_fn','JLM_fp',
'JLMIV'])
bugfixdata.fillna(0, inplace=True)
for project in projects:
project_id = Project.objects(name=project).get().id
vcs_system_id = VCSSystem.objects(project_id=project_id).get().id
for commit in Commit.objects(vcs_system_id=vcs_system_id).only('labels','fixed_issue_ids','id'):
bugfixdata.at[project,'num_commits'] += 1
is_jlmiv = commit.labels and "validated_bugfix" in commit.labels and commit.labels["validated_bugfix"]
is_szz = commit.labels and "adjustedszz_bugfix" in commit.labels and commit.labels["adjustedszz_bugfix"]
is_jl = commit.labels and "issueonly_bugfix" in commit.labels and commit.labels["issueonly_bugfix"]
is_jlm = False
if commit.fixed_issue_ids and len(commit.fixed_issue_ids):
for issue in Issue.objects(id__in=commit.fixed_issue_ids):
is_jlm |= bool(issue.issue_type and issue.issue_type.lower()=="bug" and jira_is_resolved_and_fixed(issue))
if issue.parent_issue_id:
parent_issue = Issue.objects(id=issue.parent_issue_id).get()
is_jlm |= parent_issue.issue_type.lower()=="bug" and jira_is_resolved_and_fixed(parent_issue)
if is_jlmiv:
bugfixdata.at[project,'JLMIV'] += 1
if is_szz:
bugfixdata.at[project,'SZZ_tp'] += 1
else:
bugfixdata.at[project,'SZZ_fn'] += 1
if is_jl:
bugfixdata.at[project,'JL_tp'] += 1
else:
bugfixdata.at[project,'JL_fn'] += 1
if is_jlm:
bugfixdata.at[project,'JLM_tp'] += 1
else:
bugfixdata.at[project,'JLM_fn'] += 1
else:
if is_szz:
bugfixdata.at[project,'SZZ_fp'] += 1
if is_jl:
bugfixdata.at[project,'JL_fp'] += 1
if is_jlm:
bugfixdata.at[project,'JLM_fp'] += 1
bugfixdata['percent_szz_tp'] = bugfixdata['SZZ_tp']/bugfixdata['JLMIV']
bugfixdata['percent_szz_fn'] = bugfixdata['SZZ_fn']/bugfixdata['JLMIV']
bugfixdata['percent_szz_fp'] = bugfixdata['SZZ_fp']/bugfixdata['JLMIV']
bugfixdata['percent_jl_tp'] = bugfixdata['JL_tp']/bugfixdata['JLMIV']
bugfixdata['percent_jl_fn'] = bugfixdata['JL_fn']/bugfixdata['JLMIV']
bugfixdata['percent_jl_fp'] = bugfixdata['JL_fp']/bugfixdata['JLMIV']
bugfixdata['percent_jlm_tp'] = bugfixdata['JLM_tp']/bugfixdata['JLMIV']
bugfixdata['percent_jlm_fn'] = bugfixdata['JLM_fn']/bugfixdata['JLMIV']
bugfixdata['percent_jlm_fp'] = bugfixdata['JLM_fp']/bugfixdata['JLMIV']
bugfixdata['percent_szz_total'] = (bugfixdata['SZZ_tp']+bugfixdata['SZZ_fp'])/bugfixdata['num_commits']
bugfixdata['percent_jl_total'] = (bugfixdata['JL_tp']+bugfixdata['JL_fp'])/bugfixdata['num_commits']
bugfixdata['percent_jlm_total'] = (bugfixdata['JLM_tp']+bugfixdata['JLM_fp'])/bugfixdata['num_commits']
bugfixdata['percent_jlmiv_total'] = bugfixdata['JLMIV']/bugfixdata['num_commits']
display(bugfixdata)
df = bugfixdata[['percent_szz_total', 'percent_jl_total', 'percent_jlm_total', 'percent_jlmiv_total']]
df.columns = ['SZZ', 'JL', 'JLM', 'JLMIV']
print("percentage of total commits that is detected as bugfixing")
print("mean values")
print(df.mean().to_string())
print()
print("std values")
print(df.std().to_string())
print()
print("median values")
print(df.median().to_string())
print()
print("MAD values")
print(mad(df).to_string())
ax = sns.boxplot(data=df, orient='h', color='lightgray')
ax = sns.swarmplot(data=df, orient='h', color='gray')
ax.set_xlabel('Percentage of total commits that are labelled as bug fixing.')
plt.show()
#plt.savefig("bugfix-percentage.pdf", bbox_inches='tight')
df = bugfixdata[['percent_szz_tp', 'percent_jl_tp', 'percent_jlm_tp',
'percent_szz_fn', 'percent_jl_fn', 'percent_jlm_fn',
'percent_szz_fp', 'percent_jl_fp', 'percent_jlm_fp']]
print("percentage of correctely labelled bug fixing commits")
print("mean values")
print(df.mean().to_string())
print()
print("std values")
print(df.std().to_string())
print()
print("median values")
print(df.median().to_string())
print()
print("MAD values")
print(mad(df).to_string())
df.columns = ['SZZ', 'JL', 'JLM', 'SZZ', 'JL', 'JLM', 'SZZ', 'JL', 'JLM']
f, axes = plt.subplots(2, 1, figsize=(6,2))
sns.boxplot(data=df.iloc[:,0:3], orient='h', color='lightgray', ax=axes[0])
sns.swarmplot(data=df.iloc[:,0:3], orient='h', color='gray', ax=axes[0])
axes[0].set_xlabel('Percentage of actual bug fixing commits that were identified (true positives)')
sns.boxplot(data=df.iloc[:,6:9], orient='h', color='lightgray', ax=axes[1])
sns.swarmplot(data=df.iloc[:,6:9], orient='h', color='gray', ax=axes[1])
axes[1].set_xlabel('Percentage of additionally detected bug fixing commits (false positives)')
plt.subplots_adjust(left=None, bottom=-0.4, right=None, top=None, wspace=None, hspace=0.5)
plt.show()
#plt.savefig("bugfix-details.pdf", bbox_inches='tight')
project_id = Project.objects(name="mahout").get().id
vcs_id = VCSSystem.objects(project_id=project_id).get().id
its_id = IssueSystem.objects(project_id=project_id).get().id
# This data is taken from the replication kit of Mills et al. work on file actions actually involved in a fix.
# These are only for thirteen issue that we have identified as actual bugs (incl. manual validation) in our data.
# The other issues are discarded.
# We only consider the data on file level, because that is the level of abstraction we are working on.
# Changes to the original data:
# MAHOUT-1319
# integration.src.test.java.org.apache.mahout.text.TestSequenceFilesFromDirectory
# True -> False
# Reason: This is a test file, i.e. we believe this is mislabeled in the original data.
# TIKA-1110
# tika-parsers.src.main.java.org.apache.tika.parser.chm.CHM2XHTML
# True -> False
# Deletion of unused source code, i.e., does not affect the logic of the application
mills_data = [{
'issue': 'MAHOUT-1410',
'expected_true': ['core/src/main/java/org/apache/mahout/clustering/classify/ClusterClassificationDriver',
'core/src/main/java/org/apache/mahout/clustering/classify/ClusterClassificationMapper'],
'expected_false': ['core/src/main/java/org/apache/mahout/clustering/classify/ClusterClassificationDriverTest']
},{
'issue': 'MAHOUT-1409',
'expected_true': ['math/src/main/java/org/apache/mahout/math/MatrixVectorView'],
'expected_false': ['math/src/main/java/org/apache/mahout/math/MatrixVectorViewTest']
},{
'issue': 'MAHOUT-1389',
'expected_true': ['core/src/main/java/org/apache/mahout/classifier/naivebayes/training/TrainNaiveBayesJob'],
'expected_false': ['core/src/main/java/org/apache/mahout/classifier/naivebayes/test/TestNaiveBayesDriver']
},{
'issue': 'MAHOUT-1378',
'expected_true': ['src/main/java/org/apache/mahout/classifier/df/data/Dataset'],
'expected_false': ['core/src/test/java/org/apache/mahout/classifier/df/data/DatasetTest']
},{
'issue': 'MAHOUT-1371',
'expected_true': ['integration/src/main/java/org/apache/mahout/utils/vectors/arff/ARFFVectorIterable',
'integration/src/main/java/org/apache/mahout/utils/vectors/arff/ARFFIterator'],
'expected_false': ['integration/src/test/java/org/apache/mahout/utils/vectors/arff/ARFFVectorIterableTest']
},{
'issue': 'MAHOUT-1367',
'expected_true': ['integration/src/main/java/org/apache/mahout/text/wikipedia/WikipediaXmlSplitter'],
'expected_false': []
},{
'issue': 'MAHOUT-1358',
'expected_true': ['core/src/main/java/org/apache/mahout/clustering/streaming/mapreduce/StreamingKMeansThread'],
'expected_false': []
},{
'issue': 'MAHOUT-1349',
'expected_true': ['integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper'],
'expected_false': ['integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest']
},{
'issue': 'MAHOUT-1319',
'expected_true': ['integration/src/main/java/org/apache/mahout/text/SequenceFilesFromDirectory',
'integration/src/main/java/org/apache/mahout/text/WholeFileRecordReader',
'core/src/main/java/org/apache/mahout/common/HadoopUtil'],
'expected_false': ['integration/src/test/java/org/apache/mahout/text/TestSequenceFilesFromDirectory',
'integration/src/test/java/org/apache/mahout/text/TestPathFilter']
},{
'issue': 'MAHOUT-1314',
'expected_true': ['core/src/main/java/org/apache/mahout/clustering/streaming/mapreduce/StreamingKMeansReducer'],
'expected_false': []
},{
'issue': 'MAHOUT-1285',
'expected_true': ['integration/src/main/java/org/apache/mahout/utils/vectors/arff/ARFFVectorIterable',
'integration/src/main/java/org/apache/mahout/utils/vectors/arff/MapBackedARFFModel'],
'expected_false': ['org/apache/mahout/utils/vectors/arff/MapBackedARFFModelTest/MapBackedARFFModelTest']
},{
'issue': 'MAHOUT-1284',
'expected_true': [],
'expected_false': ['core/src/test/java/org/apache/mahout/common/DummyRecordWriter',
'core/src/test/java/org/apache/mahout/common/DummyRecordWriterTest']
},{
'issue': 'MAHOUT-1261',
'expected_true': ['core/src/main/java/org/apache/mahout/cf/taste/hadoop/TasteHadoopUtils'],
'expected_false': ['core/src/test/java/org/apache/mahout/cf/taste/hadoop/TasteHadoopUtilsTest']
},{
'issue': 'TIKA-1211',
'expected_true': ['tika-core/src/main/java/org/apache/tika/sax/XHTMLContentHandler'],
'expected_false': []
},{
'issue': 'TIKA-1192',
'expected_true': ['tika-parsers/src/main/java/org/apache/tika/parser/rtf/TextExtractor'],
'expected_false': ['tika-parsers/src/test/java/org/apache/tika/parser/rtf/RTFParserTest']
},{
'issue': 'TIKA-1152',
'expected_true': ['tika-parsers/src/main/java/org/apache/tika/parser/chm/lzx/ChmLzxBlock'],
'expected_false': []
},{
'issue': 'TIKA-1124',
'expected_true': ['tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDF2XHTML',
'tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser'],
'expected_false': ['tika-parsers/src/test/java/org/apache/tika/parser/pdf/PDFParserTest']
},{
'issue': 'TIKA-1110',
'expected_true': ['tika-parsers/src/main/java/org/apache/tika/parser/chm/ChmParser'],
'expected_false': ['tika-parsers/src/test/java/org/apache/tika/parser/AutoDetectParserTest',
'tika-parsers/src/main/java/org/apache/tika/parser/chm/CHM2XHTML']
},{
'issue': 'TIKA-1109',
'expected_true': ['tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator',
'tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory'],
'expected_false': ['tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest']
},{
'issue': 'TIKA-1078',
'expected_true': ['tika-app/src/main/java/org/apache/tika/cli/TikaCLI'],
'expected_false': ['tika-core/src/test/java/org/apache/tika/io/FilenameUtilsTest',
'tika-core/src/main/java/org/apache/tika/io/FilenameUtils']
},{
'issue': 'TIKA-1070',
'expected_true': ['tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest'],
'expected_false': []
},{
'issue': 'TIKA-961',
'expected_true': ['tika-parsers/src/main/java/org/apache/tika/parser/html/BoilerpipeContentHandler'],
'expected_false': ['tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest']
},{
'issue': 'TIKA-820',
'expected_true': [],
'expected_false': ['tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest',
'tika-core/src/main/java/org/apache/tika/sax/TextContentHandler']
}]
verbose = False
for data in mills_data:
external_id = data['issue']
print(external_id)
if external_id.startswith("MAHOUT"):
project_id = Project.objects(name="mahout").get().id
elif external_id.startswith("TIKA"):
project_id = Project.objects(name="tika").get().id
else:
print("Unknown project, skipping")
vcs_id = VCSSystem.objects(project_id=project_id).get().id
its_id = IssueSystem.objects(project_id=project_id).get().id
issue = Issue.objects(issue_system_id=its_id,external_id=external_id).get()
print('EXPECTED (true):')
for expected in data['expected_true']:
print(expected)
print()
print('EXPECTED (false):')
for expected in data['expected_false']:
print(expected)
print()
changed_files = set()
inducing_files = set()
for commit in Commit.objects(vcs_system_id=vcs_id,fixed_issue_ids=issue.id):
if verbose:
if external_id.startswith("MAHOUT"):
print("https://github.com/apache/mahout/commit/%s" % commit.revision_hash)
elif external_id.startswith("TIKA"):
print("https://github.com/apache/tika/commit/%s" % commit.revision_hash)
else:
"Unknown project, cannot generate GitHub link."
print("CHANGED FILES:")
for file_action in FileAction.objects(commit_id=commit.id):
file = File.objects(id=file_action.file_id).get()
num_inducing = FileAction.objects(induces__match={'change_file_action_id': file_action.id, 'label': 'JLMIV+'}).count()
changed_files.add(file.path)
if num_inducing>0:
inducing_files.add(file.path)
if verbose:
print(file.path)
print("Inducing Changes:", num_inducing)
if verbose:
print()
print('FOUND (True):')
for found in inducing_files:
print(found)
print()
print('FOUND (False):')
for found in changed_files-inducing_files:
print(found)
print()
print("------------------------")
# list of commits determined by inspecting bug fixing commits with false positive linked_issue_ids
fixes_with_induces = ['58c898e2c03bb4351fbca616','5b34a9c9e586ab679033d402','5b34a9d3e586ab678933d948',
'5b34a9dde586ab678833e12a','5b437aa16d2aba304d4ab17c','5b45f7352123a77a30258a24',
'5b4769a00f9db94b6f26f54f','5b4854933463875e6415d34c','5b4854bc3463875e6515e64e',
'5b7adf00df629e0ae5f1fa25','5b7adf04df629e0ae5f1fb7e','5b7adf45df629e0aeaf20560',
'5b7adf64df629e0ae0f21fcb','5b8910c4a1f4f33b5c67f0fd','5bdb4fb512300b167cc6dff5',
'5bf51c56d2f8190d93f3bd20','5bf51c6bd2f8190d9df3bddf','5bf51ca6d2f8190d93f3c47d',
'5bf51ca8d2f8190dadf3c508','5bf29f3a29526541678147f8','5c5016b236dcc75e45a32388']
# for TIKA-2483 the inducing commit is not the latest commit on TIKA-2311.
# This is for the manual correction to the actual inducing commit
candidate_correction = {'6930ff0251e9e93ee969a9f1287c902d31045b59':'3aab15f8f277614e3c5783c4862e25d63b737425'}
fixinducingdata = pd.DataFrame(columns=['fixed_issue','inducing_issue',
'fix_commit','latest_inducing_issue_commit','latest_inducing_jlmivpp_commit',
'fix_date','latest_inducing_issue_date','latest_inducing_jlmivpp_date',
'affected_versions'])
verbose = False
current_index = 0
for commit in Commit.objects(id__in=fixes_with_induces).only('id','linked_issue_ids','fixed_issue_ids','committer_date','message','revision_hash'):
changed_production_file = False
for file_action in FileAction.objects(commit_id=commit.id):
file = File.objects(id=file_action.file_id).get()
changed_production_file |= java_filename_filter(file.path)
if not changed_production_file:
if verbose:
print("No change to production code for commit", commit.revision_hash)
print("skipping")
print("----")
continue
fixed_issue = Issue.objects(id=commit.fixed_issue_ids[0]).get()
inducing_issue = Issue.objects(id=list(set(commit.linked_issue_ids)-set(commit.fixed_issue_ids))[0]).get()
inducing_commit_issue = None
for inducing_candidate in Commit.objects(id__ne=commit.id,linked_issue_ids=inducing_issue.id).only('message','committer_date','revision_hash','fixed_issue_ids'):
if inducing_candidate.fixed_issue_ids and fixed_issue.id in inducing_candidate.fixed_issue_ids:
continue
changed_production_file = False
for file_action in FileAction.objects(commit_id=inducing_candidate.id):
file = File.objects(id=file_action.file_id).get()
changed_production_file |= java_filename_filter(file.path)
if not changed_production_file:
# cannot be inducing, no change to production code
continue
if inducing_commit_issue is None:
inducing_commit_issue = inducing_candidate
elif inducing_candidate.committer_date>inducing_commit_issue.committer_date:
inducing_commit_issue = inducing_candidate
if inducing_commit_issue.revision_hash in candidate_correction:
inducing_commit_issue = Commit.objects(id__ne=commit.id,linked_issue_ids=inducing_issue.id,revision_hash=candidate_correction[inducing_candidate.revision_hash]).only('message','committer_date','revision_hash','fixed_issue_ids').get()
inducing_commit_jlmivpp = None
for file_action in FileAction.objects(commit_id=commit.id):
for inducing_action in FileAction.objects(induces__change_file_action_id=file_action.id, induces__label='JLMIV+R'):
inducing_candidate = Commit.objects(id=inducing_action.commit_id).only('message','committer_date','revision_hash').get()
if inducing_commit_jlmivpp is None:
inducing_commit_jlmivpp = inducing_candidate
elif inducing_candidate.committer_date>inducing_commit_jlmivpp.committer_date:
inducing_commit_jlmivpp = inducing_candidate
affected_versions = str(fixed_issue.affects_versions)
if verbose:
print("FIXING COMMIT")
print("Date:", commit.committer_date)
print("Affected Versions:", affected_versions)
print("Message:")
print(commit.message)
print()
if verbose:
print("INDUCING COMMIT ISSUE")
if inducing_commit_issue:
if verbose:
print("Date:", inducing_commit_issue.committer_date)
print("Message:")
print(inducing_commit_issue.message)
print()
inducing_issue_revision_hash = inducing_commit_issue.revision_hash
inducing_issue_date = inducing_commit_issue.committer_date
else:
if verbose:
print("No inducing changes found")
inducing_issue_revision_hash = None
inducing_issue_date = None
if verbose:
print("INDUCING COMMIT JLMIV++")
if inducing_commit_jlmivpp:
if verbose:
print("Date:", inducing_commit_jlmivpp.committer_date)
print("Message:")
print(inducing_commit_jlmivpp.message)
jlmivpp_revision_hash = inducing_commit_jlmivpp.revision_hash
jlmivpp_date = inducing_commit_jlmivpp.committer_date
else:
if verbose:
print("No inducing changes found")
jlmivpp_revision_hash = None
jlmivpp_date = None
if verbose:
print("----")
fixinducingdata.loc[current_index] = [fixed_issue.external_id, inducing_issue.external_id,
commit.revision_hash, inducing_issue_revision_hash, jlmivpp_revision_hash,
commit.committer_date, inducing_issue_date, jlmivpp_date,
str(fixed_issue.affects_versions)]
current_index += 1
fixinducingdata
inducingdata = pd.DataFrame(index=projects, columns=['fileactions_total',
'fileactions_productive',
'fileactions_szz',
'fileactions_szz_tp',
'fileactions_szz_fp',
'fileactions_jl+r',
'fileactions_jl+r_tp',
'fileactions_jl+r_fp',
'fileactions_jlmiv',
'fileactions_jlmiv_total',
'fileactions_jlmiv+',
'fileactions_jlmiv+r',
'fileactions_jlmiv+av',
'commits_total',
'commits_java',
'commits_productive',
'commits_szz',
'commits_szz_tp',
'commits_szz_fp',
'commits_jl+r',
'commits_jl+r_tp',
'commits_jl+r_fp',
'commits_jlmiv',
'commits_jlmiv_total',
'commits_jlmiv+',
'commits_jlmiv+r',
'commits_jlmiv+av',])
inducingdata.fillna(0, inplace=True)
for project in projects:
project_id = Project.objects(name=project).get().id
vcs_system_id = VCSSystem.objects(project_id=project_id).get().id
for commit in Commit.objects(vcs_system_id=vcs_system_id).only('id','linked_issue_ids', 'message', 'labels','szz_issue_ids','fixed_issue_ids'):
fileactions_java_total = 0
fileactions_java_productive = 0
fileactions_szz_tp = 0
fileactions_szz_fp = 0
fileactions_jlr_tp = 0
fileactions_jlr_fp = 0
fileactions_jlmiv = 0
fileactions_jlmiv_total = 0
fileactions_jlmivp = 0
fileactions_jlmivpr = 0
fileactions_jlmivpav = 0
for fileaction in FileAction.objects(commit_id=commit.id):
file = File.objects(id=fileaction.file_id).get()
is_szz = False
is_jlr = False
is_jlmiv = False
is_jlmivp = False
is_jlmivpr = False
is_jlmivpav = False
if java_filename_filter(file.path):
if fileaction.induces:
for induces in fileaction.induces:
if induces['szz_type']!='hard_suspect':
is_szz |= induces['label']=='SZZ'
is_jlr |= induces['label']=='JL+R'
is_jlmiv |= induces['label']=='JLMIV'
is_jlmivp |= induces['label']=='JLMIV+'
is_jlmivpr |= induces['label']=='JLMIV+R'
is_jlmivpav |= induces['label']=='JLMIV+RAV'
fileactions_java_productive += 1
if is_szz:
if is_jlmivpr:
fileactions_szz_tp += 1
else:
fileactions_szz_fp += 1
if is_jlr:
if is_jlmivpr:
fileactions_jlr_tp += 1
else:
fileactions_jlr_fp += 1
if is_jlmiv:
fileactions_jlmiv += 1
if is_jlmivp:
fileactions_jlmivp += 1
if is_jlmivpr:
fileactions_jlmivpr += 1
if is_jlmivpav:
fileactions_jlmivpav += 1
if java_filename_filter(file.path, production_only=False):
fileactions_java_total += 1
if is_jlmiv:
fileactions_jlmiv_total += 1
inducingdata.loc[project,'fileactions_total'] += fileactions_java_total
inducingdata.loc[project,'fileactions_productive'] += fileactions_java_productive
inducingdata.loc[project,'fileactions_szz'] += fileactions_szz_tp+fileactions_szz_fp
inducingdata.loc[project,'fileactions_szz_tp'] += fileactions_szz_tp
inducingdata.loc[project,'fileactions_szz_fp'] += fileactions_szz_fp
inducingdata.loc[project,'fileactions_jl+r'] += fileactions_jlr_tp+fileactions_jlr_fp
inducingdata.loc[project,'fileactions_jl+r_tp'] += fileactions_jlr_tp
inducingdata.loc[project,'fileactions_jl+r_fp'] += fileactions_jlr_fp
inducingdata.loc[project,'fileactions_jlmiv'] += fileactions_jlmiv
inducingdata.loc[project,'fileactions_jlmiv_total'] += fileactions_jlmiv_total
inducingdata.loc[project,'fileactions_jlmiv+'] += fileactions_jlmivp
inducingdata.loc[project,'fileactions_jlmiv+r'] += fileactions_jlmivpr
inducingdata.loc[project,'fileactions_jlmiv+av'] += fileactions_jlmivpav
inducingdata.loc[project,'commits_total'] += 1
inducingdata.loc[project,'commits_java'] += bool(fileactions_java_total)
inducingdata.loc[project,'commits_productive'] += bool(fileactions_java_productive)
inducingdata.loc[project,'commits_szz'] += bool(fileactions_szz_tp+fileactions_szz_fp)
inducingdata.loc[project,'commits_szz_tp'] += bool(fileactions_szz_tp)
inducingdata.loc[project,'commits_szz_fp'] += bool(fileactions_szz_fp)
inducingdata.loc[project,'commits_jl+r'] += bool(fileactions_jlr_tp+fileactions_jlr_fp)
inducingdata.loc[project,'commits_jl+r_tp'] += bool(fileactions_jlr_tp)
inducingdata.loc[project,'commits_jl+r_fp'] += bool(fileactions_jlr_fp)
inducingdata.loc[project,'commits_jlmiv'] += bool(fileactions_jlmiv)
inducingdata.loc[project,'commits_jlmiv_total'] += bool(fileactions_jlmiv_total)
inducingdata.loc[project,'commits_jlmiv+'] += bool(fileactions_jlmivp)
inducingdata.loc[project,'commits_jlmiv+r'] += bool(fileactions_jlmivpr)
inducingdata.loc[project,'commits_jlmiv+av'] += bool(fileactions_jlmivpav)
inducingdata['percent_fileactions_productive_jlmiv+'] = inducingdata['fileactions_jlmiv+']/inducingdata['fileactions_productive']
inducingdata['percent_fileactions_productive_jlmiv+r'] = inducingdata['fileactions_jlmiv+r']/inducingdata['fileactions_productive']
inducingdata['percent_fileactions_total_jlmiv+'] = inducingdata['fileactions_jlmiv+']/inducingdata['fileactions_total']
inducingdata['percent_fileactions_total_jlmiv+r'] = inducingdata['fileactions_jlmiv+r']/inducingdata['fileactions_total']
inducingdata['percent_commits_jlmiv+_total'] = inducingdata['commits_jlmiv+']/inducingdata['commits_total']
inducingdata['percent_commits_jlmiv+_java'] = inducingdata['commits_jlmiv+']/inducingdata['commits_java']
inducingdata['percent_commits_jlmiv+r_total'] = inducingdata['commits_jlmiv+r']/inducingdata['commits_total']
inducingdata['percent_commits_jlmiv+r_java'] = inducingdata['commits_jlmiv+r']/inducingdata['commits_java']
inducingdata['percent_fileactions_szz_tp'] = inducingdata['fileactions_szz_tp']/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_fileactions_szz_fp'] = inducingdata['fileactions_szz_fp']/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_fileactions_jl+r_tp'] = inducingdata['fileactions_jl+r_tp']/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_fileactions_jl+r_fp'] = inducingdata['fileactions_jl+r_fp']/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_fileactions_jlmiv_fp'] = (inducingdata['fileactions_jlmiv']-inducingdata['fileactions_jlmiv+r'])/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_fileactions_jlmiv_fp_total'] = (inducingdata['fileactions_jlmiv_total']-inducingdata['fileactions_jlmiv+r'])/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_fileactions_jlmiv+_fp'] = (inducingdata['fileactions_jlmiv+']-inducingdata['fileactions_jlmiv+r'])/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_fileactions_jlmiv+_fp_total'] = (inducingdata['fileactions_jlmiv_total']-inducingdata['fileactions_jlmiv+'])/inducingdata['fileactions_jlmiv+']
inducingdata['percent_fileactions_jlmivp_av_dev'] = (inducingdata['fileactions_jlmiv+r']-inducingdata['fileactions_jlmiv+av'])/inducingdata['fileactions_jlmiv+r']
inducingdata['percent_commits_szz_tp'] = inducingdata['commits_szz_tp']/inducingdata['commits_jlmiv+r']
inducingdata['percent_commits_szz_fp'] = inducingdata['commits_szz_fp']/inducingdata['commits_jlmiv+r']
inducingdata['percent_commits_jl+r_tp'] = inducingdata['commits_jl+r_tp']/inducingdata['commits_jlmiv+r']
inducingdata['percent_commits_jl+r_fp'] = inducingdata['commits_jl+r_fp']/inducingdata['commits_jlmiv+r']
inducingdata['percent_commits_jlmiv_fp'] = (inducingdata['commits_jlmiv']-inducingdata['commits_jlmiv+r'])/inducingdata['commits_jlmiv+r']
inducingdata['percent_commits_jlmiv+_fp'] = (inducingdata['commits_jlmiv+']-inducingdata['commits_jlmiv+r'])/inducingdata['commits_jlmiv+r']
inducingdata['percent_commits_jlmivp_av_dev'] = (inducingdata['commits_jlmiv+r']-inducingdata['commits_jlmiv+av'])/inducingdata['commits_jlmiv+r']
display(inducingdata)
cols = ['percent_fileactions_total_jlmiv+r','percent_fileactions_productive_jlmiv+r',
'percent_commits_jlmiv+r_total','percent_commits_jlmiv+r_java',
'percent_fileactions_total_jlmiv+','percent_fileactions_productive_jlmiv+',
'percent_commits_jlmiv+_total','percent_commits_jlmiv+_java',
'percent_fileactions_szz_tp','percent_fileactions_szz_fp',
'percent_fileactions_jl+r_tp','percent_fileactions_jl+r_fp',
'percent_fileactions_jlmiv_fp',
'percent_fileactions_jlmiv+_fp',
'percent_fileactions_jlmivp_av_dev',
'percent_commits_szz_tp','percent_commits_szz_fp',
'percent_commits_jl+r_tp','percent_commits_jl+r_fp',
'percent_commits_jlmiv_fp',
'percent_commits_jlmiv+_fp',
'percent_commits_jlmivp_av_dev',
'percent_fileactions_jlmiv_fp_total']
print('mean values:')
print(inducingdata[cols].mean().to_string())
print()
print('std values:')
print(inducingdata[cols].std().to_string())
print()
print('median values: ')
print(inducingdata[cols].median().to_string())
print()
print('MAD values:')
print(mad(inducingdata[cols]).to_string())
f, axes = plt.subplots(3, 2, gridspec_kw={'height_ratios': [2, 2, 4]}, figsize=(6,3))
df = inducingdata[['percent_commits_jlmiv+r_total',
'percent_commits_jlmiv+r_java',
'percent_fileactions_total_jlmiv+r',
'percent_fileactions_productive_jlmiv+r']]
df.columns = ['Total', 'Production', 'Total', 'Production']
sns.boxplot(data=df.iloc[:,0:2], orient='h', color='lightgray', ax=axes[0,0])
sns.swarmplot(data=df.iloc[:,0:2], orient='h', color='gray',ax=axes[0,0])
axes[0,0].set_xlabel('Percentage of commits that\nare bug inducing found by JLMIV+R')
sns.boxplot(data=df.iloc[:,2:4], orient='h', color='lightgray', ax=axes[0,1])
sns.swarmplot(data=df.iloc[:,2:4], orient='h', color='gray',ax=axes[0,1])
axes[0,1].set_xlabel('Percentage of file actions that\nare bug inducing found by JLMIV+R')
df = inducingdata[['percent_commits_szz_tp',
'percent_commits_jl+r_tp',
'percent_fileactions_szz_tp',
'percent_fileactions_jl+r_tp',]]
df.columns = ['SZZ','JL+R','SZZ','JL+R']
sns.boxplot(data=df.iloc[:,0:2], orient='h', color='lightgray', ax=axes[1,0])
sns.swarmplot(data=df.iloc[:,0:2], orient='h', color='gray',ax=axes[1,0])
axes[1,0].set_xlabel('Percentage of actual bug inducing\ncommits identified (true positives)')
sns.boxplot(data=df.iloc[:,2:4], orient='h', color='lightgray', ax=axes[1,1])
sns.swarmplot(data=df.iloc[:,2:4], orient='h', color='gray',ax=axes[1,1])
axes[1,1].set_xlabel('Percentage of actual bug inducing\nfile actions identified (true positives)')
df = inducingdata[['percent_commits_szz_fp',
'percent_commits_jl+r_fp',
'percent_commits_jlmiv_fp',
'percent_commits_jlmiv+_fp',
'percent_fileactions_szz_fp',
'percent_fileactions_jl+r_fp',
'percent_fileactions_jlmiv_fp',
'percent_fileactions_jlmiv+_fp']]
df.columns = ['SZZ', 'JL+R', 'JLMIV', 'JLMIV+', 'SZZ', 'JL+R', 'JLMIV', 'JLMIV+']
sns.boxplot(data=df.iloc[:,0:4], orient='h', color='lightgray', ax=axes[2,0])
sns.swarmplot(data=df.iloc[:,0:4], orient='h', color='gray',ax=axes[2,0])
axes[2,0].set_xlabel('Percentage of additional bug inducing\ncommits (false positives)')
sns.boxplot(data=df.iloc[:,4:8], orient='h', color='lightgray', ax=axes[2,1])
sns.swarmplot(data=df.iloc[:,4:8], orient='h', color='gray',ax=axes[2,1])
axes[2,1].set_xlabel('Percentage of additional bug inducing\nfile actions (false positives)')
plt.subplots_adjust(left=None, bottom=-0.6, right=None, top=None, wspace=0.8, hspace=0.6)
plt.show()
#plt.savefig("inducingdata.pdf", bbox_inches='tight')
def calc_current_files(commit, release_commit, commit_graph, undirected_graph, rename_cache, jlr_mode = False):
"""determines the java files changed by a commit and returns them as a set"""
current_files = set()
path_valid = False
current_files_start = set()
if not jlr_mode:
for fileaction in FileAction.objects(commit_id=commit.id):
file = File.objects(id=fileaction.file_id).get()
if file.path not in current_files and java_filename_filter(file.path):
current_files_start.add(file.path)
else:
for fileaction in FileAction.objects(commit_id=commit.id, mode='M'):
if FileAction.objects(induces__match={'change_file_action_id': fileaction.id, 'label': 'JL+R'}).count() > 0:
file = File.objects(id=fileaction.file_id).get()
if file.path not in current_files and java_filename_filter(file.path):
current_files_start.add(file.path)
try:
shortest_paths = list(nx.all_shortest_paths(undirected_graph, release_commit.revision_hash, commit.revision_hash))
except nx.NetworkXNoPath:
shortest_paths = []
for path in shortest_paths:
# path = nx.shortest_path(undirected_graph, release_commit.revision_hash, commit.revision_hash)
current_files = current_files_start.copy()
path_valid = True
had_backward_edge = False
for i in range(len(path)-1, 0, -1): # going backwards
if path[i-1] in commit_graph.pred[path[i]]:
if had_backward_edge:
# invalid change of direction
path_valid = False
break
if path[i] in rename_cache:
renames = rename_cache[path[i]]
else:
renames = heuristic_renames(vcs_system_id, path[i])
rename_cache[path[i]] = renames
if renames is not None:
for rename in renames[0]:
if rename[1] in current_files:
current_files.remove(rename[1])
current_files.add(rename[0])
for deletion in renames[1]:
current_files.discard(deletion)
elif path[i-1] in commit_graph.succ[path[i]]:
had_backward_edge = True
if path[i-1] in rename_cache:
renames = rename_cache[path[i-1]]
else:
renames = heuristic_renames(vcs_system_id, path[i-1])
rename_cache[path[i-1]] = renames
if renames is not None:
for rename in renames[0]:
if rename[0] in current_files:
current_files.remove(rename[0])
current_files.add(rename[1])
if path_valid:
break
return current_files, path_valid
def get_commit_graph(vcs_system_id, silent=True):
"""Load NetworkX digraph structure from commits of this VCS.
:param vcs_system_id id of the vcs system for which the graph is created
:param silent determines whether there is an output to stdout in case of a missing parent commit
"""
g = nx.DiGraph()
# first we add all nodes to the graph
for c in Commit.objects(vcs_system_id=vcs_system_id).only('id', 'revision_hash').timeout(False):
g.add_node(c.revision_hash)
# after that we draw all edges
for c in Commit.objects(vcs_system_id=vcs_system_id).only('id', 'parents', 'revision_hash').timeout(False):
for p in c.parents:
try:
p1 = Commit.objects(vcs_system_id=vcs_system_id,revision_hash=p).only('id', 'revision_hash').get()
g.add_edge(p1.revision_hash, c.revision_hash)
except Commit.DoesNotExist:
if not silent:
print("parent of a commit is missing (commit id: {} - revision_hash: {})".format(c.id, p))
return g
index = []
for project in projects:
for release in releases[project]:
index.append(project+'-'+release['version'])
releasedata = pd.DataFrame(index=index, columns=['issues_szz_six_months_tp',
'issues_szz_six_months_fp',
'issues_jlr_six_months_tp',
'issues_jlr_six_months_fp',
'issues_jlmiv_six_months_tp',
'issues_jlmiv_six_months_fp',
'issues_jlmiv_affected_version_tp',
'issues_jlmiv_affected_version_fp',
'issues_jlmiv_inducing',
'files_szz_six_months_tp',
'files_szz_six_months_fp',
'files_jlr_six_months_tp',
'files_jlr_six_months_fp',
'files_jlmiv_six_months_tp',
'files_jlmiv_six_months_fp',
'files_jlmiv_affected_version_tp',
'files_jlmiv_affected_version_fp',
'files_jlmiv_inducing',
'num_java_files',
'overlap_6mav',
'overlap_6min',
'overlap_avin'
])
releasedata.fillna(0, inplace=True)
for project in projects:
project_id = Project.objects(name=project).get().id
vcs_system_id = VCSSystem.objects(project_id=project_id).get().id
commit_graph = get_commit_graph(vcs_system_id)
undirected_graph = commit_graph.to_undirected(as_view=True)
rename_cache = {}
delete_cache = {}
its = IssueSystem.objects(project_id=project_id).get()
if 'jira' in its.url:
jira_key = its.url.split('=')[-1]
else:
jira_key = ''
for release in releases[project]:
current_index = project+'-'+release['version']
assigned_issues_szz_six_months = set()
assigned_issues_jlr_six_months = set()
assigned_issues_jlmiv_six_months = set()
assigned_issues_jlmiv_affected_version = set()
assigned_issues_jlmivp_inducing = set()
affected_files_szz_six_months = set()
affected_files_jlr_six_months = set()
affected_files_jlmiv_six_months = set()
affected_files_jlmiv_affected_version = set()
affected_files_jlmivp_inducing = set()
files_release = set()
if 'corrected_revision' in release:
release_commit = Commit.objects(revision_hash=release['corrected_revision']).get()
else:
tag = Tag.objects(vcs_system_id=vcs_system_id,name=release['tag']).get()
release_commit = Commit.objects(id=tag.commit_id).get()
six_month_timeframe = release_commit.committer_date+relativedelta(months=6)
semver_version = tuple(release['version'].split('.'))
for file in CodeEntityState.objects(id__in=release_commit.code_entity_states, ce_type='file'):
if java_filename_filter(file.long_name):
files_release.add(file.long_name)
all_fixed_issues = set()
for commit in Commit.objects(vcs_system_id=vcs_system_id, committer_date__gt=release_commit.committer_date).only('committer_date','labels','fixed_issue_ids','revision_hash','szz_issue_ids', 'linked_issue_ids').timeout(False):
current_files = None
# data for 6 month labeling
#if commit.committer_date<=six_month_timeframe:
if commit.committer_date<six_month_timeframe:
if commit.labels and "adjustedszz_bugfix" in commit.labels and commit.labels["adjustedszz_bugfix"]:
if current_files is None:
current_files, path_valid = calc_current_files(commit, release_commit, commit_graph, undirected_graph, rename_cache)
if path_valid and len(current_files.intersection(files_release))>0:
has_issue = False
for issue in Issue.objects(id__in=commit.szz_issue_ids):
if issue.issue_type.lower() == "bug" and jira_is_resolved_and_fixed(issue):
assigned_issues_szz_six_months.add(issue.id)
has_issue = True
if has_issue:
affected_files_szz_six_months.update(current_files)
if commit.labels and "issueonly_bugfix" in commit.labels and commit.labels["issueonly_bugfix"]:
current_files_jlr, path_valid_jlr = calc_current_files(commit, release_commit, commit_graph, undirected_graph, rename_cache, jlr_mode=True)
if path_valid_jlr and len(current_files_jlr.intersection(files_release))>0:
for issue in Issue.objects(id__in=commit.linked_issue_ids):
if issue.issue_type and issue.issue_type.lower() == "bug" and jira_is_resolved_and_fixed(issue):
assigned_issues_jlr_six_months.add(issue.id)
affected_files_jlr_six_months.update(current_files_jlr)
if commit.labels and "validated_bugfix" in commit.labels and commit.labels["validated_bugfix"]:
if current_files is None:
current_files, path_valid = calc_current_files(commit, release_commit, commit_graph, undirected_graph, rename_cache)
if path_valid and len(current_files.intersection(files_release))>0:
for issue_id in commit.fixed_issue_ids:
assigned_issues_jlmiv_six_months.add(issue_id)
affected_files_jlmiv_six_months.update(current_files)
if commit.labels and "validated_bugfix" in commit.labels and commit.labels["validated_bugfix"]:
# data for affected version labeling
for issue in Issue.objects(id__in=commit.fixed_issue_ids):
if issue.issue_type_verified and issue.issue_type_verified.lower()=="bug" and jira_is_resolved_and_fixed(issue):
if issue.affects_versions and semver_version:
affected_versions = get_affected_versions(issue, project, jira_key)
is_version_match = False
is_tag_match = False
for affected_version in affected_versions:
is_version_match |= all(tv == av for tv, av in zip(semver_version, affected_version))
for av in issue.affects_versions:
is_tag_match |= release['tag'] is not None and av.lower()==release['tag'].lower()
if is_version_match or is_tag_match:
if current_files is None:
current_files, path_valid = calc_current_files(commit, release_commit, commit_graph, undirected_graph, rename_cache)
if path_valid and len(current_files.intersection(files_release))>0:
for issue_id in commit.fixed_issue_ids:
assigned_issues_jlmiv_affected_version.add(issue_id)
affected_files_jlmiv_affected_version.update(current_files)
break
for issue in Issue.objects(id__in=commit.fixed_issue_ids):
if issue.issue_type_verified and issue.issue_type_verified.lower()=="bug" and jira_is_resolved_and_fixed(issue):
all_fixed_issues.add(issue)
for issue in all_fixed_issues:
all_inducing_have_path = True
blame_file_cache = set()
for commit in Commit.objects(fixed_issue_ids=issue.id, vcs_system_id=vcs_system_id, committer_date__gt=release_commit.committer_date).only('committer_date','labels','fixed_issue_ids','revision_hash','szz_issue_ids'):
#if nx.has_path(commit_graph, commit, release_commit.revision_hash):
# continue # commit before release
# data for inducing-based labeling
for fa in FileAction.objects(commit_id=commit.id, mode='M'):
for ifa in FileAction.objects(induces__match={'change_file_action_id': fa.id, 'label': 'JLMIV+R'}):
hard_suspect = True
for ind in ifa.induces:
if ind['change_file_action_id'] == fa.id and ind['label'] == 'JLMIV+' and ind['szz_type'] != 'hard_suspect':
hard_suspect = False
break
if hard_suspect:
# skip, only hard suspects
continue
bc = Commit.objects(id=ifa.commit_id).only('revision_hash','fixed_issue_ids').get()
blame_commit = bc.revision_hash
if not nx.has_path(commit_graph, blame_commit, release_commit.revision_hash):
if bc.fixed_issue_ids is None or issue.id not in bc.fixed_issue_ids:
all_inducing_have_path = False
else:
file_deleted = False
blame_file = File.objects(id=ifa.file_id).get().path
path = nx.shortest_path(commit_graph, blame_commit, release_commit.revision_hash)
for i in range(1,len(path)):
if path[i] in rename_cache:
renames = rename_cache[path[i]]
else:
renames = heuristic_renames(vcs_system_id, path[i])
rename_cache[path[i]] = renames
if renames is not None:
for rename in renames[0]:
if blame_file==rename[0]:
blame_file = rename[1]
if blame_file in renames[1]:
file_deleted = True
break
if path[i] not in delete_cache:
delete_cache[path[i]] = set()
path_commit_id = Commit.objects(vcs_system_id=vcs_system_id, revision_hash=path[i]).only('revision_hash').get().id
for dfa in FileAction.objects(commit_id=path_commit_id,mode='D'):
deleted_file = File.objects(id=dfa.file_id).get().path
delete_cache[path[i]].add(deleted_file)
if blame_file in delete_cache[path[i]]:
file_deleted = True
break
if not file_deleted:
if not java_filename_filter(blame_file):
continue
blame_file_cache.add(blame_file)
if len(blame_file_cache)>0 and all_inducing_have_path:
assigned_issues_jlmivp_inducing.add(issue.id)
affected_files_jlmivp_inducing.update(blame_file_cache)
affected_files_szz_six_months_in_release = affected_files_szz_six_months.intersection(files_release)
affected_files_jlr_six_months_in_release = affected_files_jlr_six_months.intersection(files_release)
affected_files_jlmiv_six_months_in_release = affected_files_jlmiv_six_months.intersection(files_release)
affected_files_jlmiv_affected_version_in_release = affected_files_jlmiv_affected_version.intersection(files_release)
affected_files_jlmiv_inducing_in_release = affected_files_jlmivp_inducing.intersection(files_release)
releasedata.at[current_index, 'issues_szz_six_months_tp'] = len(assigned_issues_szz_six_months.intersection(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_szz_six_months_fp'] = len(assigned_issues_szz_six_months.difference(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_jlr_six_months_tp'] = len(assigned_issues_jlr_six_months.intersection(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_jlr_six_months_fp'] = len(assigned_issues_jlr_six_months.difference(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_jlmiv_six_months_tp'] = len(assigned_issues_jlmiv_six_months.intersection(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_jlmiv_six_months_fp'] = len(assigned_issues_jlmiv_six_months.difference(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_jlmiv_affected_version_tp'] = len(assigned_issues_jlmiv_affected_version.intersection(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_jlmiv_affected_version_fp'] = len(assigned_issues_jlmiv_affected_version.difference(assigned_issues_jlmivp_inducing))
releasedata.at[current_index, 'issues_jlmiv_inducing'] = len(assigned_issues_jlmivp_inducing)
releasedata.at[current_index, 'files_szz_six_months_tp'] = len(affected_files_szz_six_months_in_release.intersection(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_szz_six_months_fp'] = len(affected_files_szz_six_months_in_release.difference(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_jlr_six_months_tp'] = len(affected_files_jlr_six_months_in_release.intersection(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_jlr_six_months_fp'] = len(affected_files_jlr_six_months_in_release.difference(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_jlmiv_six_months_tp'] = len(affected_files_jlmiv_six_months_in_release.intersection(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_jlmiv_six_months_fp'] = len(affected_files_jlmiv_six_months_in_release.difference(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_jlmiv_affected_version_tp'] = len(affected_files_jlmiv_affected_version_in_release.intersection(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_jlmiv_affected_version_fp'] = len(affected_files_jlmiv_affected_version_in_release.difference(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'files_jlmiv_inducing'] = len(affected_files_jlmiv_inducing_in_release)
releasedata.at[current_index, 'num_java_files'] = len(files_release)
releasedata.at[current_index, 'overlap_6mav'] = len(affected_files_jlmiv_six_months_in_release.intersection(affected_files_jlmiv_affected_version_in_release))
releasedata.at[current_index, 'overlap_6min'] = len(affected_files_jlmiv_six_months_in_release.intersection(affected_files_jlmiv_inducing_in_release))
releasedata.at[current_index, 'overlap_avin'] = len(affected_files_jlmiv_affected_version_in_release.intersection(affected_files_jlmiv_inducing_in_release))
releasedata['percent_files_jlmiv_ind_total'] = releasedata['files_jlmiv_inducing']/releasedata['num_java_files']
releasedata['percent_issues_szz_six_months_tp'] = releasedata['issues_szz_six_months_tp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_issues_szz_six_months_fp'] = releasedata['issues_szz_six_months_fp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_issues_jlr_six_months_tp'] = releasedata['issues_jlr_six_months_tp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_issues_jlr_six_months_fp'] = releasedata['issues_jlr_six_months_fp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_issues_jlmiv_six_months_tp'] = releasedata['issues_jlmiv_six_months_tp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_issues_jlmiv_six_months_fp'] = releasedata['issues_jlmiv_six_months_fp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_issues_jlmiv_affected_version_tp'] = releasedata['issues_jlmiv_affected_version_tp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_issues_jlmiv_affected_version_fp'] = releasedata['issues_jlmiv_affected_version_fp']/releasedata['issues_jlmiv_inducing']
releasedata['percent_files_szz_six_months_tp'] = releasedata['files_szz_six_months_tp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_szz_six_months_fp'] = releasedata['files_szz_six_months_fp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_jlr_six_months_tp'] = releasedata['files_jlr_six_months_tp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_jlr_six_months_fp'] = releasedata['files_jlr_six_months_fp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_jlmiv_six_months_tp'] = releasedata['files_jlmiv_six_months_tp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_jlmiv_six_months_fp'] = releasedata['files_jlmiv_six_months_fp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_jlmiv_affected_version_tp'] = releasedata['files_jlmiv_affected_version_tp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_jlmiv_affected_version_fp'] = releasedata['files_jlmiv_affected_version_fp']/releasedata['files_jlmiv_inducing']
releasedata['percent_files_correct_szz_6m'] = releasedata['files_szz_six_months_tp']/(releasedata['files_szz_six_months_tp']+releasedata['files_szz_six_months_fp'])
releasedata['percent_files_correct_jlr_6m'] = releasedata['files_jlr_six_months_tp']/(releasedata['files_jlr_six_months_tp']+releasedata['files_jlr_six_months_fp'])
releasedata['percent_files_correct_jlmiv_6m'] = releasedata['files_jlmiv_six_months_tp']/(releasedata['files_jlmiv_six_months_tp']+releasedata['files_jlmiv_six_months_fp'])
releasedata['percent_files_correct_jlmiv_av'] = releasedata['files_jlmiv_affected_version_tp']/(releasedata['files_jlmiv_affected_version_tp']+releasedata['files_jlmiv_affected_version_fp'])
display(releasedata)
print("statistics with all data")
df = releasedata
print("mean values")
print(df.mean().to_string())
print()
print("sd values")
print(df.std().to_string())
print()
print("median values")
print(df.median().to_string())
print()
print("MAD values")
print(mad(df).to_string())
print()
print("statistics without the", sum(releasedata['issues_jlmiv_inducing']==0), "releases without any assigned issue")
df = releasedata[releasedata['issues_jlmiv_inducing']>0]
print("mean values")
print(df.mean().to_string())
print()
print("sd values")
print(df.std().to_string())
print()
print("median values")
print(df.median().to_string())
print()
print("MAD values")
print(mad(df).to_string())
f, axes = plt.subplots(3, 2, gridspec_kw={'height_ratios': [1, 4, 4]}, figsize=(9,3))
df = releasedata[['issues_jlmiv_inducing']]
df.columns = ['Issues']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[0,0])
ax = sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=axes[0,0])
axes[0,0].set_xlabel('Number of issues assigned to releases.')
df = releasedata[['percent_files_jlmiv_ind_total']]
df.columns = ['Files']
sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[0,1])
sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=axes[0,1])
axes[0,1].set_xlabel('Percentage of filess labeled\nas defective per release.')
df = releasedata[['percent_issues_szz_six_months_tp', 'percent_issues_jlr_six_months_tp', 'percent_issues_jlmiv_six_months_tp','percent_issues_jlmiv_affected_version_tp']]
df.columns = ['6M-SZZ', '6M-JL+R', '6M-JLMIV', 'AV-JLMIV']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[1,0])
ax = sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=axes[1,0])
axes[1,0].set_xlabel('Percentage of correctly assigned issues.')
df = releasedata[['percent_issues_szz_six_months_fp', 'percent_issues_jlr_six_months_fp', 'percent_issues_jlmiv_six_months_fp','percent_issues_jlmiv_affected_version_fp']]
df.columns = ['6M-SZZ', '6M-JL+R', '6M-JLMIV', 'AV-JLMIV']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[1,1])
ax = sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=axes[1,1])
axes[1,1].set_xlabel('Percentage of additionally assigned issues.')
ax.set_xscale('log')
df = releasedata[['percent_files_szz_six_months_tp', 'percent_files_jlr_six_months_tp', 'percent_files_jlmiv_six_months_tp','percent_files_jlmiv_affected_version_tp']]
df.columns = ['6M-SZZ', '6M-JL+R', '6M-JLMIV', 'AV-JLMIV']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[2,0])
ax = sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=axes[2,0])
axes[2,0].set_xlabel('Percentage of correctly labeled files.')
df = releasedata[['percent_files_szz_six_months_fp', 'percent_files_jlr_six_months_fp', 'percent_files_jlmiv_six_months_fp','percent_files_jlmiv_affected_version_fp']]
df.columns = ['6M-SZZ', '6M-JL+R', '6M-JLMIV', 'AV-JLMIV']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[2,1])
ax = sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=axes[2,1])
axes[2,1].set_xlabel('Percentage of additionally labelled files.')
axes[2,1].set_xscale('log')
plt.subplots_adjust(left=None, bottom=-0.6, right=None, top=None, wspace=0.5, hspace=0.6)
#plt.savefig("releasedata.pdf", bbox_inches='tight')
plt.show()
for project in projects:
for release in releases[project]:
release_name = project+'-'+release['version']
if 'corrected_revision' in release:
revision_hash = release['corrected_revision']
else:
revision_hash = release['revision_hash']
print("starting mynbou for release: ", release_name)
print("\t...with IND-JLMIV+R")
if os.path.isfile('./release-level-data/'+release_name+'.json'):
print("skipping")
else:
%run ../mynbou/smartshark_plugin.py -H $db_host -p $db_port -DB $db_name --project-name $project --release-name release-level-data/$release_name --release-commit $revision_hash --log-level INFO --generate-json False
print("\t... with 6M-SZZ")
if os.path.isfile('./DO_NOT_USE_release-level-data/'+release_name+'_SZZ.json'):
print("skipping")
else:
%run ../mynbou/smartshark_plugin.py -H $db_host -p $db_port -DB $db_name --project-name $project --release-name DO_NOT_USE_release-level-data/$release_name --release-commit $revision_hash --log-level INFO --generate-json False --type=SZZ
import numpy as np
def lower_bound(bug_matrix, efforts, predictions):
bug_matrix = bug_matrix.loc[:,bug_matrix.sum()>0]
effort_true = efforts[predictions].sum()
bugs_found = bug_matrix.sum().eq(bug_matrix[predictions].sum()).sum()
return effort_true/bugs_found
def upper_bound(bug_matrix, efforts, predictions):
bug_matrix = bug_matrix.loc[:,bug_matrix.sum()>0]
effort_false = efforts[~predictions].sum()
bugs_missed = len(bug_matrix.columns)-bug_matrix.sum().eq(bug_matrix[predictions].sum()).sum()
return effort_false/bugs_missed
def load_data(version_name, variant=''):
if len(variant):
file = 'DO_NOT_USE_release-level-data/%s_%s_aggregated.csv' % (version_name, variant)
else:
file = 'release-level-data/%s_aggregated.csv' % version_name
data = pd.read_csv(file,sep=';', index_col='file')
data = data.drop('imports', axis='columns')
features_all = data.iloc[:,:data.columns.get_loc('BUGFIX_count')]
features_all = features_all.reindex(sorted(features_all.columns), axis=1)
static_metrics = []
for col_name in data.columns:
if (col_name.startswith('SM_class') and col_name.endswith('sum')) or col_name.startswith('SM_file'):
static_metrics.append(col_name)
features_static = data[static_metrics]
labels = data['BUGFIX_count']>0
bug_matrix = data.iloc[:, data.columns.get_loc('BUGFIX_count')+1:]
efforts = data['SM_file_lloc']
return features_all, features_static, labels, bug_matrix, efforts
def load_all_data():
datasets = {}
filtered_jlmiv = set()
filtered_szz = set()
for project in projects:
for release in releases[project]:
version_name = project+'-'+release['version']
features_all, features_static, labels_jlmiv, bug_matrix_jlmiv, efforts = load_data(version_name)
_, _, labels_szz, bug_matrix_szz, _ = load_data(version_name, 'SZZ')
_, _, labels_jlr, bug_matrix_jlr, _ = load_data(version_name, 'SZZ') # TODO TODO
positive_mask = features_all>=0
features_all[positive_mask] = np.log1p(features_all[positive_mask])
features_all[~positive_mask] = -1*np.log(-1*features_all[~positive_mask]) # use log1p
positive_mask = features_static>=0
features_static[positive_mask] = np.log1p(features_static[positive_mask])
features_static[~positive_mask] = -1*np.log1p(-1*features_static[~positive_mask])
is_filtered = False
if sum(labels_jlmiv)<6 or len(labels_jlmiv)<100:
filtered_jlmiv.add(version_name)
is_filtered = True
if sum(labels_szz)<6 or len(labels_jlmiv)<100:
filtered_szz.add(version_name)
is_filtered = True
if is_filtered:
print("filtered %s: %i instances, %i bugs jlmiv, %i bugs szz, %i bugs jl+r, %i" % (version_name, len(labels_jlmiv), sum(labels_jlmiv), sum(labels_szz), sum(labels_jlr), len(bug_matrix_szz.columns)))
continue
else:
print("adding %s: %i instances, %i bugs jlmiv, %i bugs szz, %i bugs jl+r, %i" % (version_name, len(labels_jlmiv), sum(labels_jlmiv), sum(labels_szz), sum(labels_jlr), len(bug_matrix_szz.columns)))
datasets[version_name] = {'features_all': features_all, 'features_static': features_static,
'labels_jlmiv': labels_jlmiv, 'bug_matrix_jlmiv': bug_matrix_jlmiv,
'labels_szz': labels_szz, 'bug_matrix_szz': bug_matrix_szz,
'efforts': efforts}
return datasets, filtered_jlmiv, filtered_szz
def get_training_data(project, projects, releases, datasets):
features_all_dfs = []
features_static_dfs = []
labels_jlmiv_dfs = []
labels_szz_dfs = []
for project_cur in projects:
if project_cur == project:
continue
for release_cur in releases[project_cur]:
version_name_cur = project_cur+'-'+release_cur['version']
if version_name_cur not in datasets:
continue
features_all_dfs.append(datasets[version_name_cur]['features_all'])
features_static_dfs.append(datasets[version_name_cur]['features_static'])
labels_jlmiv_dfs.append(datasets[version_name_cur]['labels_jlmiv'])
labels_szz_dfs.append(datasets[version_name_cur]['labels_szz'])
features_all = pd.concat(features_all_dfs)
features_static = pd.concat(features_static_dfs)
labels_jlmiv = pd.concat(labels_jlmiv_dfs)
labels_szz = pd.concat(labels_szz_dfs)
return features_all, features_static, labels_jlmiv, labels_szz
datasets, filtered_jlmiv, filtered_szz = load_all_data()
prediction_scores = pd.DataFrame(columns=['f1_all_jlmiv',
'precision_all_jlmiv',
'recall_all_jlmiv',
'clower_all_jlmiv',
'cupper_all_jlmiv',
'f1_static_jlmiv',
'precision_static_jlmiv',
'recall_static_jlmiv',
'clower_static_jlmiv',
'cupper_static_jlmiv',
'f1_all_szz',
'precision_all_szz',
'recall_all_szz',
'clower_all_szz',
'cupper_all_szz',
'f1_all_szz_szz',
'precision_all_szz_szz',
'recall_all_szz_szz',
'clower_all_szz_szz',
'cupper_all_szz_szz',
'f1_static_szz',
'precision_static_szz',
'recall_static_szz',
'clower_static_szz',
'cupper_static_szz',
'f1_static_szz_szz',
'precision_static_szz_szz',
'recall_static_szz_szz',
'clower_static_szz_szz',
'cupper_static_szz_szz',])
for project in projects:
for release in releases[project]:
version_name_test = project+'-'+release['version']
if version_name_test in prediction_scores.index:
print(version_name_test, "already available, skipping")
continue
if version_name_test not in datasets:
continue # skipping because not loaded
features_all_test = datasets[version_name_test]['features_all']
features_static_test = datasets[version_name_test]['features_static']
labels_jlmiv_test = datasets[version_name_test]['labels_jlmiv']
bug_matrix_jlmiv_test = datasets[version_name_test]['bug_matrix_jlmiv']
labels_szz_test = datasets[version_name_test]['labels_szz']
bug_matrix_szz_test = datasets[version_name_test]['bug_matrix_szz']
efforts_test = datasets[version_name_test]['efforts']
print("starting %s: %i" % (version_name_test, sum(labels_jlmiv_test)))
print("\tcreate training data")
features_all_train, features_static_train, labels_jlmiv_train, labels_szz_train = get_training_data(project, projects, releases, datasets)
features_all_train = features_all_train + features_all_train.median() - features_all_test.median()
features_static_train = features_static_train + features_static_train.median() - features_static_test.median()
clf = GaussianNB()
#clf = XGBClassifier(random_state=42)
# JLMIV
clf.fit(features_all_train, labels_jlmiv_train)
pred = clf.predict(features_all_test)
scores = []
scores.append(f1_score(labels_jlmiv_test, pred))
scores.append(recall_score(labels_jlmiv_test, pred))
scores.append(precision_score(labels_jlmiv_test, pred))
scores.append(lower_bound(bug_matrix_jlmiv_test, efforts_test, pred))
scores.append(upper_bound(bug_matrix_jlmiv_test, efforts_test, pred))
clf.fit(features_static_train, labels_jlmiv_train)
pred = clf.predict(features_static_test)
pred_proba = clf.predict(features_static_test)
scores.append(f1_score(labels_jlmiv_test, pred))
scores.append(recall_score(labels_jlmiv_test, pred))
scores.append(precision_score(labels_jlmiv_test, pred))
scores.append(lower_bound(bug_matrix_jlmiv_test, efforts_test, pred))
scores.append(upper_bound(bug_matrix_jlmiv_test, efforts_test, pred))
# SZZ
clf.fit(features_all_train, labels_szz_train)
pred = clf.predict(features_all_test)
scores.append(f1_score(labels_jlmiv_test, pred))
scores.append(recall_score(labels_jlmiv_test, pred))
scores.append(precision_score(labels_jlmiv_test, pred))
scores.append(lower_bound(bug_matrix_jlmiv_test, efforts_test, pred))
scores.append(upper_bound(bug_matrix_jlmiv_test, efforts_test, pred))
# eval on SZZ labels
scores.append(f1_score(labels_jlmiv_test, pred))
scores.append(recall_score(labels_szz_test, pred))
scores.append(precision_score(labels_szz_test, pred))
scores.append(lower_bound(bug_matrix_szz_test, efforts_test, pred))
scores.append(upper_bound(bug_matrix_szz_test, efforts_test, pred))
clf.fit(features_static_train, labels_szz_train)
pred = clf.predict(features_static_test)
pred_proba = clf.predict(features_static_test)
scores.append(f1_score(labels_jlmiv_test, pred))
scores.append(recall_score(labels_jlmiv_test, pred))
scores.append(precision_score(labels_jlmiv_test, pred))
scores.append(lower_bound(bug_matrix_jlmiv_test, efforts_test, pred))
scores.append(upper_bound(bug_matrix_jlmiv_test, efforts_test, pred))
# eval on SZZ labels
scores.append(f1_score(labels_jlmiv_test, pred))
scores.append(recall_score(labels_szz_test, pred))
scores.append(precision_score(labels_szz_test, pred))
scores.append(lower_bound(bug_matrix_szz_test, efforts_test, pred))
scores.append(upper_bound(bug_matrix_szz_test, efforts_test, pred))
prediction_scores.loc[version_name_test,:] = scores
scores_copy = prediction_scores.copy(deep=True).astype('float64')
scores_copy['clower_all_jlmiv'].replace(np.inf, 100000, inplace=True)
scores_copy['cupper_all_jlmiv'].replace(np.inf, 100000, inplace=True)
scores_copy['clower_static_jlmiv'].replace(np.inf, 100000, inplace=True)
scores_copy['cupper_static_jlmiv'].replace(np.inf, 100000, inplace=True)
scores_copy['clower_all_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['cupper_all_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['clower_static_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['cupper_static_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['clower_all_szz_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['cupper_all_szz_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['clower_static_szz_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['cupper_static_szz_szz'].replace(np.inf, 100000, inplace=True)
scores_copy['c_all_jlmiv_errbar_range'] = abs((scores_copy['cupper_all_jlmiv']-scores_copy['clower_all_jlmiv'])/2)
scores_copy['c_all_jlmiv_errbar_midpoint'] = (scores_copy['cupper_all_jlmiv']+prediction_scores['clower_all_jlmiv'])/2
scores_copy['c_all_jlmiv_errbar_costsaving'] = scores_copy['cupper_all_jlmiv']-scores_copy['clower_all_jlmiv']>0
scores_copy['c_static_jlmiv_errbar_range'] = abs((scores_copy['cupper_static_jlmiv']-scores_copy['clower_static_jlmiv'])/2)
scores_copy['c_static_jlmiv_errbar_midpoint'] = (scores_copy['cupper_static_jlmiv']+prediction_scores['clower_static_jlmiv'])/2
scores_copy['c_static_jlmiv_errbar_costsaving'] = scores_copy['cupper_static_jlmiv']-scores_copy['clower_static_jlmiv']>0
scores_copy['c_all_szz_errbar_range'] = abs((scores_copy['cupper_all_szz']-scores_copy['clower_all_szz'])/2)
scores_copy['c_all_szz_errbar_midpoint'] = (scores_copy['cupper_all_szz']+prediction_scores['clower_all_szz'])/2
scores_copy['c_all_szz_errbar_costsaving'] = scores_copy['cupper_all_szz']-scores_copy['clower_all_szz']>0
scores_copy['c_static_szz_errbar_range'] = abs((scores_copy['cupper_static_szz']-scores_copy['clower_static_szz'])/2)
scores_copy['c_static_szz_errbar_midpoint'] = (scores_copy['cupper_static_szz']+prediction_scores['clower_static_szz'])/2
scores_copy['c_static_szz_errbar_costsaving'] = scores_copy['cupper_static_szz']-scores_copy['clower_static_szz']>0
scores_copy['c_all_szz_szz_errbar_range'] = abs((scores_copy['cupper_all_szz_szz']-scores_copy['clower_all_szz_szz'])/2)
scores_copy['c_all_szz_szz_errbar_midpoint'] = (scores_copy['cupper_all_szz_szz']+prediction_scores['clower_all_szz_szz'])/2
scores_copy['c_all_szz_szz_errbar_costsaving'] = scores_copy['cupper_all_szz_szz']-scores_copy['clower_all_szz_szz']>0
scores_copy['c_static_szz_szz_errbar_range'] = abs((scores_copy['cupper_static_szz_szz']-scores_copy['clower_static_szz_szz'])/2)
scores_copy['c_static_szz_szz_errbar_midpoint'] = (scores_copy['cupper_static_szz_szz']+prediction_scores['clower_static_szz_szz'])/2
scores_copy['c_static_szz_szz_errbar_costsaving'] = scores_copy['cupper_static_szz_szz']-scores_copy['clower_static_szz_szz']>0
f, axes = plt.subplots(2, 2, figsize=(9,4))
alpha = 0.05
df = scores_copy[['clower_all_jlmiv', 'clower_static_jlmiv', 'clower_all_szz', 'clower_static_szz', 'clower_all_szz_szz', 'clower_static_szz_szz']]
df.columns = ['IND-JLMIV+R-ALL', 'IND-JLMIV+R-SM', '6M-SZZ-ALL', '6M-SZZ-SM', '6M-ALL-SZZ-SZZ', '6M-SM-SZZ-SZZ']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[0,0])
ax.set_xscale('log')
ax.set_title('Lower boundary on cost ratio $C$')
sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=ax)
res = autorank(df, alpha=alpha, order='ascending')
print(res.pvalue)
latex_table(res, decimal_places=10)
ax = plot_stats(res, ax=axes[1,0])
df = scores_copy[['cupper_all_jlmiv', 'cupper_static_jlmiv', 'cupper_all_szz', 'clower_static_szz', 'cupper_all_szz_szz', 'cupper_static_szz_szz']]
df.columns = ['IND-JLMIV+R-ALL', 'IND-JLMIV+R-SM', '6M-SZZ-ALL', '6M-SZZ-SM', '6M-ALL-SZZ-SZZ', '6M-SM-SZZ-SZZ']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[0,1])
ax.set_xscale('log')
sns.swarmplot(data=df, orient='h', color='gray',alpha=0.2, ax=ax)
ax.set_title('Upper boundary on cost ratio $C$')
res = autorank(df, alpha=alpha)
create_report(res)
print(res.pvalue)
latex_table(res, decimal_places=10)
ax = plot_stats(res, ax=axes[1,1])
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.8, hspace=None)
plt.savefig("cddiagram.pdf", bbox_inches='tight')
f, axes = plt.subplots(2, 2, figsize=(9,4))
alpha = 0.05
df = scores_copy[['recall_all_jlmiv', 'recall_static_jlmiv', 'recall_all_szz', 'recall_static_szz', 'recall_all_szz_szz', 'recall_static_szz_szz']]
df.columns = ['IND-JLMIV+R-ALL', 'IND-JLMIV+R-SM', '6M-SZZ-ALL', '6M-SZZ-SM', '6M-ALL-SZZ-SZZ', '6M-SM-SZZ-SZZ']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[0,0])
ax.set_xscale('log')
ax.set_title('Recall')
sns.swarmplot(data=df, orient='h', color='gray', alpha=0.2, ax=ax)
res = autorank(df, alpha=alpha)
latex_table(res, decimal_places=10)
ax = plot_stats(res, ax=axes[1,0])
df = scores_copy[['precision_all_jlmiv', 'precision_static_jlmiv', 'precision_all_szz', 'precision_static_szz', 'precision_all_szz_szz', 'precision_static_szz_szz']]
df.columns = ['IND-JLMIV+R-ALL', 'IND-JLMIV+R-SM', '6M-SZZ-ALL', '6M-SZZ-SM', '6M-ALL-SZZ-SZZ', '6M-SM-SZZ-SZZ']
ax = sns.boxplot(data=df, orient='h', color='lightgray', ax=axes[0,1])
ax.set_xscale('log')
sns.swarmplot(data=df, orient='h', color='gray',alpha=0.2, ax=ax)
ax.set_title('Precision')
res = autorank(df, alpha=alpha)
latex_table(res, decimal_places=10)
ax = plot_stats(res, ax=axes[1,1])
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.8, hspace=None)
plt.savefig("cddiagram.pdf", bbox_inches='tight')