sicopr 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sicopr-1.2.1/CHANGELOG.md +479 -0
- sicopr-1.2.1/CITATION.cff +43 -0
- sicopr-1.2.1/CODE_OF_CONDUCT.md +53 -0
- sicopr-1.2.1/CONTRIBUTING.md +374 -0
- sicopr-1.2.1/LICENSE +58 -0
- sicopr-1.2.1/MANIFEST.in +27 -0
- sicopr-1.2.1/MATLAB_Correlation_Review.md +574 -0
- sicopr-1.2.1/NOTICE +161 -0
- sicopr-1.2.1/PKG-INFO +396 -0
- sicopr-1.2.1/R/com_analysis.R +830 -0
- sicopr-1.2.1/R/corpus_report.R +289 -0
- sicopr-1.2.1/R/correlation_report.R +254 -0
- sicopr-1.2.1/R/run_com_analysis.R +28 -0
- sicopr-1.2.1/R/sweep_compare.R +342 -0
- sicopr-1.2.1/README.md +362 -0
- sicopr-1.2.1/SECURITY.md +60 -0
- sicopr-1.2.1/VERSION.json +55 -0
- sicopr-1.2.1/assemble_sicopr.py +601 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/README.md +59 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/cases_com_octave.csv +209 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/channels.csv +165 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case1.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case1_sweep_TxFFE.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case2.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case2_sweep_TxFFE.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGB_06_2_2025__Case3.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGB_06_2_2025__Case3_sweep_TxFFE.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGB_06_2_2025__Case4.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGB_06_2_2025__Case4_sweep_TxFFE.xlsx +0 -0
- sicopr-1.2.1/benchmark/208_case_4p17p0/README.md +67 -0
- sicopr-1.2.1/benchmark/208_case_4p17p0/cases_com_octave.csv +209 -0
- sicopr-1.2.1/com_functions/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Apply_EQ/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Apply_EQ/py_impl.py +103 -0
- sicopr-1.2.1/com_functions/fn/Apply_EQ/test_verify.py +386 -0
- sicopr-1.2.1/com_functions/fn/Bathtub_Contribution_Wrapper/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/Bathtub_Contribution_Wrapper/py_impl.py +131 -0
- sicopr-1.2.1/com_functions/fn/Bathtub_Contribution_Wrapper/test_verify.py +197 -0
- sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/matlab_source.m +8 -0
- sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/py_impl.py +40 -0
- sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/test_verify.py +124 -0
- sicopr-1.2.1/com_functions/fn/Bread_Crumb_Chdata_Reduction/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Bread_Crumb_Chdata_Reduction/py_impl.py +37 -0
- sicopr-1.2.1/com_functions/fn/Bread_Crumb_Chdata_Reduction/test_verify.py +137 -0
- sicopr-1.2.1/com_functions/fn/Burst_Probability_Calc/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Burst_Probability_Calc/py_impl.py +125 -0
- sicopr-1.2.1/com_functions/fn/Burst_Probability_Calc/test_verify.py +156 -0
- sicopr-1.2.1/com_functions/fn/Butterworth_Filter/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Butterworth_Filter/matlab_source.m +6 -0
- sicopr-1.2.1/com_functions/fn/Butterworth_Filter/py_impl.py +38 -0
- sicopr-1.2.1/com_functions/fn/Butterworth_Filter/test_verify.py +148 -0
- sicopr-1.2.1/com_functions/fn/CDF_ev/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/CDF_ev/matlab_source.m +3 -0
- sicopr-1.2.1/com_functions/fn/CDF_ev/py_impl.py +46 -0
- sicopr-1.2.1/com_functions/fn/CDF_ev/test_verify.py +114 -0
- sicopr-1.2.1/com_functions/fn/CDF_inv_ev/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/CDF_inv_ev/matlab_source.m +7 -0
- sicopr-1.2.1/com_functions/fn/CDF_inv_ev/py_impl.py +28 -0
- sicopr-1.2.1/com_functions/fn/CDF_inv_ev/test_verify.py +113 -0
- sicopr-1.2.1/com_functions/fn/COM_CommandLine_Parse/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/COM_CommandLine_Parse/py_impl.py +121 -0
- sicopr-1.2.1/com_functions/fn/COM_CommandLine_Parse/test_verify.py +192 -0
- sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/matlab_source.m +161 -0
- sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/py_impl.py +288 -0
- sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/test_verify.py +553 -0
- sicopr-1.2.1/com_functions/fn/COM_eye_width/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/COM_eye_width/py_impl.py +447 -0
- sicopr-1.2.1/com_functions/fn/COM_eye_width/test_verify.py +445 -0
- sicopr-1.2.1/com_functions/fn/Create_Noise_PDF/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Create_Noise_PDF/py_impl.py +276 -0
- sicopr-1.2.1/com_functions/fn/Create_Noise_PDF/test_verify.py +302 -0
- sicopr-1.2.1/com_functions/fn/FD_CTLE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/FD_CTLE/matlab_source.m +2 -0
- sicopr-1.2.1/com_functions/fn/FD_CTLE/py_impl.py +18 -0
- sicopr-1.2.1/com_functions/fn/FD_CTLE/test_verify.py +135 -0
- sicopr-1.2.1/com_functions/fn/FD_Processing/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/FD_Processing/py_impl.py +334 -0
- sicopr-1.2.1/com_functions/fn/FD_Processing/test_verify.py +627 -0
- sicopr-1.2.1/com_functions/fn/FFE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/FFE/matlab_source.m +17 -0
- sicopr-1.2.1/com_functions/fn/FFE/py_impl.py +51 -0
- sicopr-1.2.1/com_functions/fn/FFE/test_verify.py +129 -0
- sicopr-1.2.1/com_functions/fn/FFE_Fast/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/FFE_Fast/matlab_source.m +14 -0
- sicopr-1.2.1/com_functions/fn/FFE_Fast/py_impl.py +30 -0
- sicopr-1.2.1/com_functions/fn/FFE_Fast/test_verify.py +113 -0
- sicopr-1.2.1/com_functions/fn/FOM_rxffe_floating_taps/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/FOM_rxffe_floating_taps/py_impl.py +121 -0
- sicopr-1.2.1/com_functions/fn/FOM_rxffe_floating_taps/test_verify.py +239 -0
- sicopr-1.2.1/com_functions/fn/Fract_T_FFE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Fract_T_FFE/matlab_source.m +10 -0
- sicopr-1.2.1/com_functions/fn/Fract_T_FFE/py_impl.py +39 -0
- sicopr-1.2.1/com_functions/fn/Fract_T_FFE/test_verify.py +104 -0
- sicopr-1.2.1/com_functions/fn/Full_Grid_Matrix/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Full_Grid_Matrix/py_impl.py +40 -0
- sicopr-1.2.1/com_functions/fn/Full_Grid_Matrix/test_verify.py +83 -0
- sicopr-1.2.1/com_functions/fn/H_interp/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/H_interp/py_impl.py +44 -0
- sicopr-1.2.1/com_functions/fn/H_interp/test_verify.py +199 -0
- sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/matlab_source.m +32 -0
- sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/py_impl.py +67 -0
- sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/test_verify.py +186 -0
- sicopr-1.2.1/com_functions/fn/MLSE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/MLSE/py_impl.py +129 -0
- sicopr-1.2.1/com_functions/fn/MLSE/test_verify.py +223 -0
- sicopr-1.2.1/com_functions/fn/MLSE_U1_c_178A/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/MLSE_U1_c_178A/py_impl.py +192 -0
- sicopr-1.2.1/com_functions/fn/MLSE_U1_c_178A/test_verify.py +138 -0
- sicopr-1.2.1/com_functions/fn/MMSE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/MMSE/py_impl.py +363 -0
- sicopr-1.2.1/com_functions/fn/MMSE/test_verify.py +441 -0
- sicopr-1.2.1/com_functions/fn/MMSE_FOM/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/MMSE_FOM/py_impl.py +241 -0
- sicopr-1.2.1/com_functions/fn/MMSE_FOM/test_verify.py +457 -0
- sicopr-1.2.1/com_functions/fn/N_s/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/N_s/py_impl.py +39 -0
- sicopr-1.2.1/com_functions/fn/N_s/test_verify.py +184 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/matlab_source.m +254 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/py_impl.py +382 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/test_verify.py +391 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Build_TXFFE/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Build_TXFFE/py_impl.py +118 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Build_TXFFE/test_verify.py +252 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_FOM/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_FOM/py_impl.py +102 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_FOM/test_verify.py +178 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/matlab_source.m +7 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/py_impl.py +49 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/test_verify.py +174 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise/py_impl.py +192 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise/test_verify.py +365 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise_XC/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise_XC/py_impl.py +69 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise_XC/test_verify.py +175 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calculate_Settings/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calculate_Settings/py_impl.py +198 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Calculate_Settings/test_verify.py +171 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_CTLE/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_CTLE/py_impl.py +144 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_CTLE/test_verify.py +255 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_DFE/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_DFE/py_impl.py +159 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_DFE/test_verify.py +351 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_RxFFE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_RxFFE/py_impl.py +65 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_RxFFE/test_verify.py +239 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_TXFFE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_TXFFE/py_impl.py +69 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Compute_TXFFE/test_verify.py +165 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Create_Output/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Create_Output/py_impl.py +157 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Create_Output/test_verify.py +262 -0
- sicopr-1.2.1/com_functions/fn/OptFom_FD_or_TD_Fields/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_FD_or_TD_Fields/py_impl.py +16 -0
- sicopr-1.2.1/com_functions/fn/OptFom_FD_or_TD_Fields/test_verify.py +79 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Find_Sample_Point/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Find_Sample_Point/py_impl.py +76 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Find_Sample_Point/test_verify.py +128 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Initialize_Loop_Struct/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Initialize_Loop_Struct/py_impl.py +36 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Initialize_Loop_Struct/test_verify.py +82 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Itick_BoxSearch/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Itick_BoxSearch/py_impl.py +52 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Itick_BoxSearch/test_verify.py +171 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Itick_LocalSearch/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Itick_LocalSearch/py_impl.py +16 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Itick_LocalSearch/test_verify.py +140 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Local_Search/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Local_Search/py_impl.py +51 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Local_Search/test_verify.py +163 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Plot_Best_Results/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Plot_Best_Results/py_impl.py +103 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Plot_Best_Results/test_verify.py +90 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Set_Best_Itick/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Set_Best_Itick/py_impl.py +14 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Set_Best_Itick/test_verify.py +191 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Setup_Sampler_Sweep/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Setup_Sampler_Sweep/py_impl.py +52 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Setup_Sampler_Sweep/test_verify.py +121 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_BEST_Post_Optimize/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_BEST_Post_Optimize/py_impl.py +173 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_BEST_Post_Optimize/test_verify.py +292 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Settings_EQ_Failed/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Settings_EQ_Failed/py_impl.py +161 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Settings_EQ_Failed/test_verify.py +180 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Setttings/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Setttings/py_impl.py +92 -0
- sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Setttings/test_verify.py +275 -0
- sicopr-1.2.1/com_functions/fn/Output_Arg_Fill/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/Output_Arg_Fill/py_impl.py +354 -0
- sicopr-1.2.1/com_functions/fn/Output_Arg_Fill/test_verify.py +430 -0
- sicopr-1.2.1/com_functions/fn/PRBS13Q/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/PRBS13Q/py_impl.py +65 -0
- sicopr-1.2.1/com_functions/fn/PRBS13Q/test_verify.py +232 -0
- sicopr-1.2.1/com_functions/fn/README.md +95 -0
- sicopr-1.2.1/com_functions/fn/RILN_TD/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/RILN_TD/py_impl.py +190 -0
- sicopr-1.2.1/com_functions/fn/RILN_TD/test_verify.py +302 -0
- sicopr-1.2.1/com_functions/fn/RXFFE_Illegal/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/RXFFE_Illegal/py_impl.py +33 -0
- sicopr-1.2.1/com_functions/fn/RXFFE_Illegal/test_verify.py +116 -0
- sicopr-1.2.1/com_functions/fn/R_series2/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/R_series2/matlab_source.m +6 -0
- sicopr-1.2.1/com_functions/fn/R_series2/py_impl.py +57 -0
- sicopr-1.2.1/com_functions/fn/R_series2/test_verify.py +114 -0
- sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/matlab_source.m +6 -0
- sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/py_impl.py +38 -0
- sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/test_verify.py +153 -0
- sicopr-1.2.1/com_functions/fn/SL/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/SL/py_impl.py +47 -0
- sicopr-1.2.1/com_functions/fn/SL/test_verify.py +194 -0
- sicopr-1.2.1/com_functions/fn/SNDR_ref/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/SNDR_ref/py_impl.py +133 -0
- sicopr-1.2.1/com_functions/fn/SNDR_ref/test_verify.py +291 -0
- sicopr-1.2.1/com_functions/fn/S_IN/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/S_IN/py_impl.py +58 -0
- sicopr-1.2.1/com_functions/fn/S_IN/test_verify.py +239 -0
- sicopr-1.2.1/com_functions/fn/S_RN/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/S_RN/py_impl.py +28 -0
- sicopr-1.2.1/com_functions/fn/S_RN/test_verify.py +155 -0
- sicopr-1.2.1/com_functions/fn/TDR_ERL_Processing/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/TDR_ERL_Processing/py_impl.py +137 -0
- sicopr-1.2.1/com_functions/fn/TDR_ERL_Processing/test_verify.py +296 -0
- sicopr-1.2.1/com_functions/fn/TD_CTLE/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/TD_CTLE/matlab_source.m +16 -0
- sicopr-1.2.1/com_functions/fn/TD_CTLE/py_impl.py +56 -0
- sicopr-1.2.1/com_functions/fn/TD_CTLE/test_verify.py +174 -0
- sicopr-1.2.1/com_functions/fn/TD_FD_fillin/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/TD_FD_fillin/py_impl.py +107 -0
- sicopr-1.2.1/com_functions/fn/TD_FD_fillin/test_verify.py +219 -0
- sicopr-1.2.1/com_functions/fn/Tukey_Window/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Tukey_Window/matlab_source.m +12 -0
- sicopr-1.2.1/com_functions/fn/Tukey_Window/py_impl.py +59 -0
- sicopr-1.2.1/com_functions/fn/Tukey_Window/test_verify.py +186 -0
- sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/matlab_source.m +41 -0
- sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/py_impl.py +62 -0
- sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/test_verify.py +132 -0
- sicopr-1.2.1/com_functions/fn/Write_CSV/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/Write_CSV/py_impl.py +117 -0
- sicopr-1.2.1/com_functions/fn/Write_CSV/test_verify.py +185 -0
- sicopr-1.2.1/com_functions/fn/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/add_brd/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/add_brd/py_impl.py +76 -0
- sicopr-1.2.1/com_functions/fn/add_brd/test_verify.py +184 -0
- sicopr-1.2.1/com_functions/fn/add_brdorig/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/add_brdorig/py_impl.py +48 -0
- sicopr-1.2.1/com_functions/fn/add_brdorig/test_verify.py +196 -0
- sicopr-1.2.1/com_functions/fn/add_pkg_with_die/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/add_pkg_with_die/py_impl.py +94 -0
- sicopr-1.2.1/com_functions/fn/add_pkg_with_die/test_verify.py +206 -0
- sicopr-1.2.1/com_functions/fn/adjust_Rx_noise_for_quantization/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/adjust_Rx_noise_for_quantization/py_impl.py +143 -0
- sicopr-1.2.1/com_functions/fn/adjust_Rx_noise_for_quantization/test_verify.py +187 -0
- sicopr-1.2.1/com_functions/fn/append_csv_row/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/append_csv_row/matlab_source.m +31 -0
- sicopr-1.2.1/com_functions/fn/append_csv_row/py_impl.py +107 -0
- sicopr-1.2.1/com_functions/fn/append_csv_row/test_verify.py +147 -0
- sicopr-1.2.1/com_functions/fn/applyDFEbk/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/applyDFEbk/py_impl.py +65 -0
- sicopr-1.2.1/com_functions/fn/applyDFEbk/test_verify.py +219 -0
- sicopr-1.2.1/com_functions/fn/auto_port_order/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/auto_port_order/matlab_source.m +126 -0
- sicopr-1.2.1/com_functions/fn/auto_port_order/py_impl.py +150 -0
- sicopr-1.2.1/com_functions/fn/auto_port_order/test_verify.py +159 -0
- sicopr-1.2.1/com_functions/fn/bessel/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/bessel/matlab_source.m +6 -0
- sicopr-1.2.1/com_functions/fn/bessel/py_impl.py +53 -0
- sicopr-1.2.1/com_functions/fn/bessel/test_verify.py +139 -0
- sicopr-1.2.1/com_functions/fn/calculate_delay_CausalityEnforcement/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/calculate_delay_CausalityEnforcement/py_impl.py +138 -0
- sicopr-1.2.1/com_functions/fn/calculate_delay_CausalityEnforcement/test_verify.py +200 -0
- sicopr-1.2.1/com_functions/fn/capture_RIL_RILN/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/capture_RIL_RILN/py_impl.py +131 -0
- sicopr-1.2.1/com_functions/fn/capture_RIL_RILN/test_verify.py +228 -0
- sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/matlab_source.m +12 -0
- sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/py_impl.py +59 -0
- sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/test_verify.py +147 -0
- sicopr-1.2.1/com_functions/fn/com_ieee8023_/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/com_ieee8023_/py_impl.py +554 -0
- sicopr-1.2.1/com_functions/fn/com_ieee8023_/test_verify.py +569 -0
- sicopr-1.2.1/com_functions/fn/comb_fct/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/comb_fct/matlab_source.m +26 -0
- sicopr-1.2.1/com_functions/fn/comb_fct/py_impl.py +55 -0
- sicopr-1.2.1/com_functions/fn/comb_fct/test_verify.py +147 -0
- sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/matlab_source.m +41 -0
- sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/py_impl.py +98 -0
- sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/test_verify.py +208 -0
- sicopr-1.2.1/com_functions/fn/combines4p/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/combines4p/py_impl.py +16 -0
- sicopr-1.2.1/com_functions/fn/combines4p/test_verify.py +144 -0
- sicopr-1.2.1/com_functions/fn/compute_hard_cap/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/compute_hard_cap/matlab_source.m +7 -0
- sicopr-1.2.1/com_functions/fn/compute_hard_cap/py_impl.py +59 -0
- sicopr-1.2.1/com_functions/fn/compute_hard_cap/test_verify.py +94 -0
- sicopr-1.2.1/com_functions/fn/conv_fct/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/conv_fct/matlab_source.m +14 -0
- sicopr-1.2.1/com_functions/fn/conv_fct/py_impl.py +156 -0
- sicopr-1.2.1/com_functions/fn/conv_fct/test_verify.py +262 -0
- sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/matlab_source.m +16 -0
- sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/py_impl.py +152 -0
- sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/test_verify.py +207 -0
- sicopr-1.2.1/com_functions/fn/cursor_sample_index/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/cursor_sample_index/py_impl.py +66 -0
- sicopr-1.2.1/com_functions/fn/cursor_sample_index/test_verify.py +148 -0
- sicopr-1.2.1/com_functions/fn/d_cpdf/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/d_cpdf/matlab_source.m +51 -0
- sicopr-1.2.1/com_functions/fn/d_cpdf/py_impl.py +108 -0
- sicopr-1.2.1/com_functions/fn/d_cpdf/test_verify.py +184 -0
- sicopr-1.2.1/com_functions/fn/dfe_clipper/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/dfe_clipper/matlab_source.m +12 -0
- sicopr-1.2.1/com_functions/fn/dfe_clipper/py_impl.py +85 -0
- sicopr-1.2.1/com_functions/fn/dfe_clipper/test_verify.py +181 -0
- sicopr-1.2.1/com_functions/fn/end_display_control/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/end_display_control/py_impl.py +142 -0
- sicopr-1.2.1/com_functions/fn/end_display_control/test_verify.py +276 -0
- sicopr-1.2.1/com_functions/fn/find_eye_width/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/find_eye_width/py_impl.py +89 -0
- sicopr-1.2.1/com_functions/fn/find_eye_width/test_verify.py +129 -0
- sicopr-1.2.1/com_functions/fn/findbankloc/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/findbankloc/py_impl.py +195 -0
- sicopr-1.2.1/com_functions/fn/findbankloc/test_verify.py +138 -0
- sicopr-1.2.1/com_functions/fn/floatingDFE/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/floatingDFE/py_impl.py +33 -0
- sicopr-1.2.1/com_functions/fn/floatingDFE/test_verify.py +236 -0
- sicopr-1.2.1/com_functions/fn/floating_taps_1sttest/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/floating_taps_1sttest/py_impl.py +167 -0
- sicopr-1.2.1/com_functions/fn/floating_taps_1sttest/test_verify.py +184 -0
- sicopr-1.2.1/com_functions/fn/force/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/force/py_impl.py +429 -0
- sicopr-1.2.1/com_functions/fn/force/test_verify.py +339 -0
- sicopr-1.2.1/com_functions/fn/get_ACBW/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_ACBW/py_impl.py +74 -0
- sicopr-1.2.1/com_functions/fn/get_ACBW/test_verify.py +85 -0
- sicopr-1.2.1/com_functions/fn/get_BW_from_CICP_residual/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_BW_from_CICP_residual/py_impl.py +106 -0
- sicopr-1.2.1/com_functions/fn/get_BW_from_CICP_residual/test_verify.py +105 -0
- sicopr-1.2.1/com_functions/fn/get_CICP_fit_residual/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_CICP_fit_residual/py_impl.py +69 -0
- sicopr-1.2.1/com_functions/fn/get_CICP_fit_residual/test_verify.py +60 -0
- sicopr-1.2.1/com_functions/fn/get_CICP_fit_sweep/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_CICP_fit_sweep/py_impl.py +88 -0
- sicopr-1.2.1/com_functions/fn/get_CICP_fit_sweep/test_verify.py +61 -0
- sicopr-1.2.1/com_functions/fn/get_ILN/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_ILN/py_impl.py +67 -0
- sicopr-1.2.1/com_functions/fn/get_ILN/test_verify.py +209 -0
- sicopr-1.2.1/com_functions/fn/get_ILN_cmp_td/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_ILN_cmp_td/py_impl.py +268 -0
- sicopr-1.2.1/com_functions/fn/get_ILN_cmp_td/test_verify.py +266 -0
- sicopr-1.2.1/com_functions/fn/get_PSDs/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_PSDs/matlab_source.m +275 -0
- sicopr-1.2.1/com_functions/fn/get_PSDs/py_impl.py +542 -0
- sicopr-1.2.1/com_functions/fn/get_PSDs/test_verify.py +746 -0
- sicopr-1.2.1/com_functions/fn/get_PulseR/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_PulseR/py_impl.py +78 -0
- sicopr-1.2.1/com_functions/fn/get_PulseR/test_verify.py +303 -0
- sicopr-1.2.1/com_functions/fn/get_RAW_FIR/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_RAW_FIR/py_impl.py +13 -0
- sicopr-1.2.1/com_functions/fn/get_RAW_FIR/test_verify.py +104 -0
- sicopr-1.2.1/com_functions/fn/get_RILN_cmp_td/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_RILN_cmp_td/py_impl.py +266 -0
- sicopr-1.2.1/com_functions/fn/get_RILN_cmp_td/test_verify.py +416 -0
- sicopr-1.2.1/com_functions/fn/get_StepR/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_StepR/py_impl.py +72 -0
- sicopr-1.2.1/com_functions/fn/get_StepR/test_verify.py +172 -0
- sicopr-1.2.1/com_functions/fn/get_TDR/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_TDR/py_impl.py +444 -0
- sicopr-1.2.1/com_functions/fn/get_TDR/test_verify.py +564 -0
- sicopr-1.2.1/com_functions/fn/get_TD_files/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_TD_files/py_impl.py +127 -0
- sicopr-1.2.1/com_functions/fn/get_TD_files/test_verify.py +148 -0
- sicopr-1.2.1/com_functions/fn/get_center_of_UI/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_center_of_UI/matlab_source.m +11 -0
- sicopr-1.2.1/com_functions/fn/get_center_of_UI/py_impl.py +32 -0
- sicopr-1.2.1/com_functions/fn/get_center_of_UI/test_verify.py +85 -0
- sicopr-1.2.1/com_functions/fn/get_cm_noise/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_cm_noise/py_impl.py +153 -0
- sicopr-1.2.1/com_functions/fn/get_cm_noise/test_verify.py +133 -0
- sicopr-1.2.1/com_functions/fn/get_pdf/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_pdf/py_impl.py +263 -0
- sicopr-1.2.1/com_functions/fn/get_pdf/test_verify.py +241 -0
- sicopr-1.2.1/com_functions/fn/get_pdf_from_sampled_signal/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_pdf_from_sampled_signal/py_impl.py +116 -0
- sicopr-1.2.1/com_functions/fn/get_pdf_from_sampled_signal/test_verify.py +171 -0
- sicopr-1.2.1/com_functions/fn/get_pdf_full/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_pdf_full/py_impl.py +290 -0
- sicopr-1.2.1/com_functions/fn/get_pdf_full/test_verify.py +267 -0
- sicopr-1.2.1/com_functions/fn/get_s4p_files/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_s4p_files/py_impl.py +93 -0
- sicopr-1.2.1/com_functions/fn/get_s4p_files/test_verify.py +191 -0
- sicopr-1.2.1/com_functions/fn/get_sigma_eta_ACCM_noise/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_sigma_eta_ACCM_noise/py_impl.py +43 -0
- sicopr-1.2.1/com_functions/fn/get_sigma_eta_ACCM_noise/test_verify.py +150 -0
- sicopr-1.2.1/com_functions/fn/get_sigma_noise/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/get_sigma_noise/py_impl.py +49 -0
- sicopr-1.2.1/com_functions/fn/get_sigma_noise/test_verify.py +158 -0
- sicopr-1.2.1/com_functions/fn/get_xtlk_noise/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/get_xtlk_noise/py_impl.py +195 -0
- sicopr-1.2.1/com_functions/fn/get_xtlk_noise/test_verify.py +199 -0
- sicopr-1.2.1/com_functions/fn/hrem/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/hrem/matlab_source.m +3 -0
- sicopr-1.2.1/com_functions/fn/hrem/py_impl.py +59 -0
- sicopr-1.2.1/com_functions/fn/hrem/test_verify.py +126 -0
- sicopr-1.2.1/com_functions/fn/interp_Sparam/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/interp_Sparam/py_impl.py +331 -0
- sicopr-1.2.1/com_functions/fn/interp_Sparam/test_verify.py +412 -0
- sicopr-1.2.1/com_functions/fn/make_full_pkg/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/make_full_pkg/py_impl.py +320 -0
- sicopr-1.2.1/com_functions/fn/make_full_pkg/test_verify.py +311 -0
- sicopr-1.2.1/com_functions/fn/make_pkg/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/make_pkg/py_impl.py +60 -0
- sicopr-1.2.1/com_functions/fn/make_pkg/test_verify.py +227 -0
- sicopr-1.2.1/com_functions/fn/missingParameter/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/missingParameter/matlab_source.m +3 -0
- sicopr-1.2.1/com_functions/fn/missingParameter/py_impl.py +28 -0
- sicopr-1.2.1/com_functions/fn/missingParameter/test_verify.py +42 -0
- sicopr-1.2.1/com_functions/fn/normal_dist/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/normal_dist/matlab_source.m +6 -0
- sicopr-1.2.1/com_functions/fn/normal_dist/py_impl.py +57 -0
- sicopr-1.2.1/com_functions/fn/normal_dist/test_verify.py +183 -0
- sicopr-1.2.1/com_functions/fn/optimize_fom/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/optimize_fom/py_impl.py +462 -0
- sicopr-1.2.1/com_functions/fn/optimize_fom/test_verify.py +1305 -0
- sicopr-1.2.1/com_functions/fn/pam/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/pam/matlab_source.m +13 -0
- sicopr-1.2.1/com_functions/fn/pam/py_impl.py +67 -0
- sicopr-1.2.1/com_functions/fn/pam/test_verify.py +111 -0
- sicopr-1.2.1/com_functions/fn/parameter_size_adjustment/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/parameter_size_adjustment/py_impl.py +128 -0
- sicopr-1.2.1/com_functions/fn/parameter_size_adjustment/test_verify.py +147 -0
- sicopr-1.2.1/com_functions/fn/pdf2sgm/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/pdf2sgm/matlab_source.m +3 -0
- sicopr-1.2.1/com_functions/fn/pdf2sgm/py_impl.py +37 -0
- sicopr-1.2.1/com_functions/fn/pdf2sgm/test_verify.py +105 -0
- sicopr-1.2.1/com_functions/fn/pdf_to_cdf/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/pdf_to_cdf/matlab_source.m +12 -0
- sicopr-1.2.1/com_functions/fn/pdf_to_cdf/py_impl.py +49 -0
- sicopr-1.2.1/com_functions/fn/pdf_to_cdf/test_verify.py +178 -0
- sicopr-1.2.1/com_functions/fn/plot_bathtub_curves/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/plot_bathtub_curves/py_impl.py +69 -0
- sicopr-1.2.1/com_functions/fn/plot_bathtub_curves/test_verify.py +108 -0
- sicopr-1.2.1/com_functions/fn/plot_modal/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/plot_modal/py_impl.py +135 -0
- sicopr-1.2.1/com_functions/fn/plot_modal/test_verify.py +163 -0
- sicopr-1.2.1/com_functions/fn/plot_pie_com/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/plot_pie_com/py_impl.py +73 -0
- sicopr-1.2.1/com_functions/fn/plot_pie_com/test_verify.py +61 -0
- sicopr-1.2.1/com_functions/fn/process_sxp/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/process_sxp/py_impl.py +379 -0
- sicopr-1.2.1/com_functions/fn/process_sxp/test_verify.py +460 -0
- sicopr-1.2.1/com_functions/fn/r_parrelell2/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/r_parrelell2/matlab_source.m +5 -0
- sicopr-1.2.1/com_functions/fn/r_parrelell2/py_impl.py +60 -0
- sicopr-1.2.1/com_functions/fn/r_parrelell2/test_verify.py +113 -0
- sicopr-1.2.1/com_functions/fn/rangelimit/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/rangelimit/py_impl.py +27 -0
- sicopr-1.2.1/com_functions/fn/rangelimit/test_verify.py +171 -0
- sicopr-1.2.1/com_functions/fn/read_Nport_touchstone/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/read_Nport_touchstone/py_impl.py +155 -0
- sicopr-1.2.1/com_functions/fn/read_Nport_touchstone/test_verify.py +271 -0
- sicopr-1.2.1/com_functions/fn/read_PR_files/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/read_PR_files/py_impl.py +44 -0
- sicopr-1.2.1/com_functions/fn/read_PR_files/test_verify.py +165 -0
- sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/matlab_source.m +658 -0
- sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/py_impl.py +1067 -0
- sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/test_verify.py +907 -0
- sicopr-1.2.1/com_functions/fn/read_p2_s2params/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/read_p2_s2params/py_impl.py +71 -0
- sicopr-1.2.1/com_functions/fn/read_p2_s2params/test_verify.py +196 -0
- sicopr-1.2.1/com_functions/fn/read_p4_s4params/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/read_p4_s4params/py_impl.py +120 -0
- sicopr-1.2.1/com_functions/fn/read_p4_s4params/test_verify.py +298 -0
- sicopr-1.2.1/com_functions/fn/read_package_parameters/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/read_package_parameters/py_impl.py +137 -0
- sicopr-1.2.1/com_functions/fn/read_package_parameters/test_verify.py +343 -0
- sicopr-1.2.1/com_functions/fn/read_s4p_files/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/read_s4p_files/py_impl.py +917 -0
- sicopr-1.2.1/com_functions/fn/read_s4p_files/test_verify.py +705 -0
- sicopr-1.2.1/com_functions/fn/readdataSnPx/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/readdataSnPx/py_impl.py +164 -0
- sicopr-1.2.1/com_functions/fn/readdataSnPx/test_verify.py +328 -0
- sicopr-1.2.1/com_functions/fn/recolor_plots/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/recolor_plots/matlab_source.m +14 -0
- sicopr-1.2.1/com_functions/fn/recolor_plots/py_impl.py +26 -0
- sicopr-1.2.1/com_functions/fn/recolor_plots/test_verify.py +32 -0
- sicopr-1.2.1/com_functions/fn/s21_pkg/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/s21_pkg/py_impl.py +442 -0
- sicopr-1.2.1/com_functions/fn/s21_pkg/test_verify.py +317 -0
- sicopr-1.2.1/com_functions/fn/s21_to_impulse_DC/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/s21_to_impulse_DC/py_impl.py +372 -0
- sicopr-1.2.1/com_functions/fn/s21_to_impulse_DC/test_verify.py +447 -0
- sicopr-1.2.1/com_functions/fn/s_for_c2/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/s_for_c2/matlab_source.m +7 -0
- sicopr-1.2.1/com_functions/fn/s_for_c2/py_impl.py +52 -0
- sicopr-1.2.1/com_functions/fn/s_for_c2/test_verify.py +106 -0
- sicopr-1.2.1/com_functions/fn/s_for_c4/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/s_for_c4/matlab_source.m +5 -0
- sicopr-1.2.1/com_functions/fn/s_for_c4/py_impl.py +65 -0
- sicopr-1.2.1/com_functions/fn/s_for_c4/test_verify.py +146 -0
- sicopr-1.2.1/com_functions/fn/save_cmd_line/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/save_cmd_line/py_impl.py +7 -0
- sicopr-1.2.1/com_functions/fn/save_cmd_line/test_verify.py +56 -0
- sicopr-1.2.1/com_functions/fn/savefigs/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/savefigs/py_impl.py +49 -0
- sicopr-1.2.1/com_functions/fn/savefigs/test_verify.py +53 -0
- sicopr-1.2.1/com_functions/fn/savefigs_png/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/savefigs_png/py_impl.py +47 -0
- sicopr-1.2.1/com_functions/fn/savefigs_png/test_verify.py +58 -0
- sicopr-1.2.1/com_functions/fn/scaleCDF/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/scaleCDF/matlab_source.m +11 -0
- sicopr-1.2.1/com_functions/fn/scaleCDF/py_impl.py +71 -0
- sicopr-1.2.1/com_functions/fn/scaleCDF/test_verify.py +138 -0
- sicopr-1.2.1/com_functions/fn/scalePDF/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/scalePDF/matlab_source.m +8 -0
- sicopr-1.2.1/com_functions/fn/scalePDF/py_impl.py +62 -0
- sicopr-1.2.1/com_functions/fn/scalePDF/test_verify.py +181 -0
- sicopr-1.2.1/com_functions/fn/stot/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/stot/matlab_source.m +6 -0
- sicopr-1.2.1/com_functions/fn/stot/py_impl.py +53 -0
- sicopr-1.2.1/com_functions/fn/stot/test_verify.py +139 -0
- sicopr-1.2.1/com_functions/fn/str2csv/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/str2csv/matlab_source.m +7 -0
- sicopr-1.2.1/com_functions/fn/str2csv/py_impl.py +29 -0
- sicopr-1.2.1/com_functions/fn/str2csv/test_verify.py +73 -0
- sicopr-1.2.1/com_functions/fn/synth_tline/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/synth_tline/matlab_source.m +25 -0
- sicopr-1.2.1/com_functions/fn/synth_tline/py_impl.py +87 -0
- sicopr-1.2.1/com_functions/fn/synth_tline/test_verify.py +170 -0
- sicopr-1.2.1/com_functions/fn/ttos/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/ttos/matlab_source.m +6 -0
- sicopr-1.2.1/com_functions/fn/ttos/py_impl.py +51 -0
- sicopr-1.2.1/com_functions/fn/ttos/test_verify.py +129 -0
- sicopr-1.2.1/com_functions/fn/varargin_extractor/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/varargin_extractor/matlab_source.m +9 -0
- sicopr-1.2.1/com_functions/fn/varargin_extractor/py_impl.py +31 -0
- sicopr-1.2.1/com_functions/fn/varargin_extractor/test_verify.py +86 -0
- sicopr-1.2.1/com_functions/fn/vma/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/vma/py_impl.py +73 -0
- sicopr-1.2.1/com_functions/fn/vma/test_verify.py +149 -0
- sicopr-1.2.1/com_functions/fn/vref_intersect/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/vref_intersect/matlab_source.m +13 -0
- sicopr-1.2.1/com_functions/fn/vref_intersect/py_impl.py +60 -0
- sicopr-1.2.1/com_functions/fn/vref_intersect/test_verify.py +129 -0
- sicopr-1.2.1/com_functions/fn/writecsv_transposed/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/writecsv_transposed/py_impl.py +133 -0
- sicopr-1.2.1/com_functions/fn/writecsv_transposed/test_verify.py +174 -0
- sicopr-1.2.1/com_functions/fn/xls_parameter/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/xls_parameter/py_impl.py +341 -0
- sicopr-1.2.1/com_functions/fn/xls_parameter/test_verify.py +229 -0
- sicopr-1.2.1/com_functions/fn/xls_parameter_txffe/__init__.py +1 -0
- sicopr-1.2.1/com_functions/fn/xls_parameter_txffe/py_impl.py +31 -0
- sicopr-1.2.1/com_functions/fn/xls_parameter_txffe/test_verify.py +235 -0
- sicopr-1.2.1/com_functions/fn/zzz_list_of_changes/__init__.py +0 -0
- sicopr-1.2.1/com_functions/fn/zzz_list_of_changes/py_impl.py +17 -0
- sicopr-1.2.1/com_functions/fn/zzz_list_of_changes/test_verify.py +26 -0
- sicopr-1.2.1/com_functions/inlined_copies.json +2320 -0
- sicopr-1.2.1/com_functions/registry.json +2035 -0
- sicopr-1.2.1/com_functions/shared/__init__.py +0 -0
- sicopr-1.2.1/com_functions/shared/conftest.py +6 -0
- sicopr-1.2.1/com_functions/shared/matlab_helpers.py +28 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-09-23-223c48fec.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-09-23-600b427d2.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-09-23-644258e1d.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-09-23-8a69c29c4.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-09-23-e82669f2d.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-10-16-deedd6c59.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-10-21-3d9d3c24b.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-10-29-374cbfb86.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-10-29-87487e0d1.txt +30 -0
- sicopr-1.2.1/com_functions/verification/approved/2026-10-30-74e08c177.txt +30 -0
- sicopr-1.2.1/com_functions/verification/builtins.md +251 -0
- sicopr-1.2.1/com_functions/verification/equivalent_mutants.md +124 -0
- sicopr-1.2.1/com_functions/verification/mutations.py +1040 -0
- sicopr-1.2.1/com_functions/verification/reach.py +55 -0
- sicopr-1.2.1/com_functions/verification/report.py +360 -0
- sicopr-1.2.1/com_functions/verification/triage_copies.py +298 -0
- sicopr-1.2.1/com_functions/verification/value_semantics.py +92 -0
- sicopr-1.2.1/com_mat_export.py +510 -0
- sicopr-1.2.1/com_plots.py +684 -0
- sicopr-1.2.1/dev/audit_stage0.py +31 -0
- sicopr-1.2.1/dev/audit_tier0_coverage.py +386 -0
- sicopr-1.2.1/dev/check_interfaces.py +114 -0
- sicopr-1.2.1/docs/ARCHIVE_gated_fix_pass.md +144 -0
- sicopr-1.2.1/docs/AUDIT_FINDINGS.md +1163 -0
- sicopr-1.2.1/docs/COM_PDF_RESIDUAL.md +176 -0
- sicopr-1.2.1/docs/FEATURE_STATUS.md +127 -0
- sicopr-1.2.1/docs/FIX_SUMMARY.md +988 -0
- sicopr-1.2.1/docs/MAINTAINING.md +116 -0
- sicopr-1.2.1/docs/MATLAB_4p16p0_CHANGES.md +184 -0
- sicopr-1.2.1/docs/MATLAB_4p16p0_IMPACT.md +188 -0
- sicopr-1.2.1/docs/MATLAB_4p17p0_CHANGES.md +137 -0
- sicopr-1.2.1/docs/MIN_RADIUS_ASSUMPTION.md +164 -0
- sicopr-1.2.1/docs/README.md +70 -0
- sicopr-1.2.1/docs/STAGE6_NOISE_AGREEMENT.md +291 -0
- sicopr-1.2.1/docs/TUTORIAL.md +1529 -0
- sicopr-1.2.1/docs/TXFFE_SWEEP_ROOT_CAUSE.md +552 -0
- sicopr-1.2.1/docs/UPSTREAM_QUANTIZATION_WITHOUT_RXFFE.md +178 -0
- sicopr-1.2.1/docs/VERIFICATION.md +658 -0
- sicopr-1.2.1/docs/VERSIONS.md +120 -0
- sicopr-1.2.1/docs/com_enchance_r_analysis.md +440 -0
- sicopr-1.2.1/docs/images/gui_config.png +0 -0
- sicopr-1.2.1/docs/images/gui_run.png +0 -0
- sicopr-1.2.1/docs/refresh_tutorial_toc.py +67 -0
- sicopr-1.2.1/docs/tutorial/fig01.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig02.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig03.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig04.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig05.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig06.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig07.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig08.png +0 -0
- sicopr-1.2.1/docs/tutorial/fig09.png +0 -0
- sicopr-1.2.1/examples/README.md +72 -0
- sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/CHANNEL.md +38 -0
- sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/EXPECTED.md +26 -0
- sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case1.xlsx +0 -0
- sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_octave_no_crosstalk.csv +2 -0
- sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_octave_with_crosstalk.csv +2 -0
- sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_sicopr_no_crosstalk.csv +2 -0
- sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_sicopr_with_crosstalk.csv +2 -0
- sicopr-1.2.1/examples/run_example.py +278 -0
- sicopr-1.2.1/gui/README.md +370 -0
- sicopr-1.2.1/gui/__init__.py +0 -0
- sicopr-1.2.1/gui/app.py +1629 -0
- sicopr-1.2.1/gui/config_io.py +425 -0
- sicopr-1.2.1/gui/runner.py +168 -0
- sicopr-1.2.1/gui/schematic.py +150 -0
- sicopr-1.2.1/gui/static/app.js +1899 -0
- sicopr-1.2.1/gui/static/index.html +278 -0
- sicopr-1.2.1/gui/static/style.css +366 -0
- sicopr-1.2.1/matlab/com_ieee8023_4p14p0.m +11742 -0
- sicopr-1.2.1/matlab/com_ieee8023_4p15p0.m +11884 -0
- sicopr-1.2.1/matlab/com_ieee8023_4p15p0_adaptive_local_search.m +12199 -0
- sicopr-1.2.1/matlab/com_ieee8023_4p16p0.m +12233 -0
- sicopr-1.2.1/matlab/com_ieee8023_4p17p0.m +12765 -0
- sicopr-1.2.1/octave/README.md +285 -0
- sicopr-1.2.1/octave/accel/build_accel.py +75 -0
- sicopr-1.2.1/octave/accel/com_octave_accel.cc +456 -0
- sicopr-1.2.1/octave/com_ieee8023_4p15p0_octave_compat.m +13025 -0
- sicopr-1.2.1/octave/com_ieee8023_4p16p0_octave_compat.m +13059 -0
- sicopr-1.2.1/octave/com_ieee8023_4p17p0_octave_compat.m +13602 -0
- sicopr-1.2.1/octave/make_octave_compat.py +563 -0
- sicopr-1.2.1/octave/patches/CDF_ev.m +60 -0
- sicopr-1.2.1/octave/patches/COM_CommandLine_Parse.m +90 -0
- sicopr-1.2.1/octave/patches/FOM_rxffe_floating_taps.m +151 -0
- sicopr-1.2.1/octave/patches/FOM_rxffe_floating_taps_4p17p0.m +162 -0
- sicopr-1.2.1/octave/patches/H_interp.m +70 -0
- sicopr-1.2.1/octave/patches/OptFom_Calc_Noise_XC.m +74 -0
- sicopr-1.2.1/octave/patches/com_checkpoint.m +75 -0
- sicopr-1.2.1/octave/patches/com_octave_accel_on.m +59 -0
- sicopr-1.2.1/octave/patches/csvread4com.m +81 -0
- sicopr-1.2.1/octave/patches/erfcinv.m +67 -0
- sicopr-1.2.1/octave/patches/mldivide_matlab.m +63 -0
- sicopr-1.2.1/octave/patches/read_Nport_touchstone.m +229 -0
- sicopr-1.2.1/octave/patches/writecsv_transposed.m +55 -0
- sicopr-1.2.1/pyproject.toml +70 -0
- sicopr-1.2.1/requirements.txt +32 -0
- sicopr-1.2.1/setup.cfg +4 -0
- sicopr-1.2.1/sicopr.egg-info/PKG-INFO +396 -0
- sicopr-1.2.1/sicopr.egg-info/SOURCES.txt +747 -0
- sicopr-1.2.1/sicopr.egg-info/dependency_links.txt +1 -0
- sicopr-1.2.1/sicopr.egg-info/requires.txt +16 -0
- sicopr-1.2.1/sicopr.egg-info/top_level.txt +3 -0
- sicopr-1.2.1/sicopr.py +21657 -0
- sicopr-1.2.1/tests/__init__.py +0 -0
- sicopr-1.2.1/tests/audit_check.py +107 -0
- sicopr-1.2.1/tests/conftest.py +92 -0
- sicopr-1.2.1/tests/fixtures/README.md +38 -0
- sicopr-1.2.1/tests/run_all.ps1 +70 -0
- sicopr-1.2.1/tests/test_abort_path_leaks.py +198 -0
- sicopr-1.2.1/tests/test_analytic_recovery.py +210 -0
- sicopr-1.2.1/tests/test_argument_mutation.py +237 -0
- sicopr-1.2.1/tests/test_assembled_names.py +153 -0
- sicopr-1.2.1/tests/test_builtin_classification.py +280 -0
- sicopr-1.2.1/tests/test_change_discipline.py +128 -0
- sicopr-1.2.1/tests/test_checkpoints.py +114 -0
- sicopr-1.2.1/tests/test_cli_exit_code.py +54 -0
- sicopr-1.2.1/tests/test_config_roundtrip.py +377 -0
- sicopr-1.2.1/tests/test_config_search_space.py +294 -0
- sicopr-1.2.1/tests/test_conv_dfe.py +228 -0
- sicopr-1.2.1/tests/test_csv_inputs.py +276 -0
- sicopr-1.2.1/tests/test_cursor_indexing.py +299 -0
- sicopr-1.2.1/tests/test_documented_contracts.py +249 -0
- sicopr-1.2.1/tests/test_end_to_end.py +91 -0
- sicopr-1.2.1/tests/test_export_columns.py +210 -0
- sicopr-1.2.1/tests/test_freq_grid.py +334 -0
- sicopr-1.2.1/tests/test_gui_server.py +1304 -0
- sicopr-1.2.1/tests/test_gui_static.py +643 -0
- sicopr-1.2.1/tests/test_impulse_spectrum.py +326 -0
- sicopr-1.2.1/tests/test_index_base.py +264 -0
- sicopr-1.2.1/tests/test_inlined_copies.py +644 -0
- sicopr-1.2.1/tests/test_integer_ratio_rounding.py +174 -0
- sicopr-1.2.1/tests/test_mat_export_meta.py +82 -0
- sicopr-1.2.1/tests/test_matlab_semantics.py +644 -0
- sicopr-1.2.1/tests/test_matlab_stage_oracles.py +311 -0
- sicopr-1.2.1/tests/test_matlab_version_diff.py +59 -0
- sicopr-1.2.1/tests/test_mlse.py +99 -0
- sicopr-1.2.1/tests/test_mutation_score.py +277 -0
- sicopr-1.2.1/tests/test_noise_pdf_composite.py +298 -0
- sicopr-1.2.1/tests/test_noise_units.py +578 -0
- sicopr-1.2.1/tests/test_octave_checkpoints.py +786 -0
- sicopr-1.2.1/tests/test_octave_compat.py +419 -0
- sicopr-1.2.1/tests/test_optimization_invariants.py +188 -0
- sicopr-1.2.1/tests/test_optimize_cursor.py +97 -0
- sicopr-1.2.1/tests/test_optimizer_fom.py +370 -0
- sicopr-1.2.1/tests/test_optimizer_mmse.py +379 -0
- sicopr-1.2.1/tests/test_option_coverage.py +120 -0
- sicopr-1.2.1/tests/test_pdf_pipeline.py +245 -0
- sicopr-1.2.1/tests/test_reference_leaks.py +185 -0
- sicopr-1.2.1/tests/test_rounding_reshape.py +146 -0
- sicopr-1.2.1/tests/test_smoke.py +186 -0
- sicopr-1.2.1/tests/test_snapshot_isolation.py +177 -0
- sicopr-1.2.1/tests/test_sort_stability.py +182 -0
- sicopr-1.2.1/tests/test_sparam_cascade.py +274 -0
- sicopr-1.2.1/tests/test_stage_figures.py +108 -0
- sicopr-1.2.1/tests/test_std_normalization.py +126 -0
- sicopr-1.2.1/tests/test_structural_invariants.py +257 -0
- sicopr-1.2.1/tests/test_stub_reachability.py +207 -0
- sicopr-1.2.1/tests/test_tline_tdr_erl.py +277 -0
- sicopr-1.2.1/tests/test_translation_coverage.py +112 -0
- sicopr-1.2.1/tests/test_verification_report.py +145 -0
- sicopr-1.2.1/tests/test_xtlk_noise.py +118 -0
- sicopr-1.2.1/tools/_sicopr_case.py +67 -0
- sicopr-1.2.1/tools/audit_search_space.py +125 -0
- sicopr-1.2.1/tools/corpus_sweep.py +382 -0
- sicopr-1.2.1/tools/equivalence_check.py +219 -0
- sicopr-1.2.1/tools/fom_com_probe.py +277 -0
- sicopr-1.2.1/tools/gen_semantics_pins.py +154 -0
- sicopr-1.2.1/tools/hist_dep_repro.py +136 -0
- sicopr-1.2.1/tools/matlab_version_diff.py +274 -0
- sicopr-1.2.1/tools/octave_compare.py +357 -0
- sicopr-1.2.1/tools/octave_oracle.py +178 -0
- sicopr-1.2.1/tools/plot_sweep_compare.py +257 -0
- sicopr-1.2.1/tools/record_comparisons.py +110 -0
- sicopr-1.2.1/tools/regen_checkpoints.py +188 -0
- sicopr-1.2.1/tools/sweep_compare.py +228 -0
- sicopr-1.2.1/tools/translation_coverage.py +1012 -0
- sicopr-1.2.1/tools/xlsx_to_com_mat.py +221 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to SiCoPR. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
4
|
+
|
|
5
|
+
Versions follow [Semantic Versioning](https://semver.org/). **1.0.0 is the first
|
|
6
|
+
release**; there is no earlier version history, and this file starts there.
|
|
7
|
+
|
|
8
|
+
Two things this file is *not*:
|
|
9
|
+
|
|
10
|
+
- **It is not the engineering ledger.** Anything that changes a COM, FOM or
|
|
11
|
+
sampling-phase number is recorded in [`docs/FIX_SUMMARY.md`](docs/FIX_SUMMARY.md)
|
|
12
|
+
with its evidence, and that is the record to read when a number moves.
|
|
13
|
+
`CONTRIBUTING.md` requires an entry there; this file summarises for people who
|
|
14
|
+
are not reading diffs.
|
|
15
|
+
- **It is not a statement about the MATLAB reference.** Which upstream release
|
|
16
|
+
the engine emulates is in [`VERSION.json`](VERSION.json), and changing it is a
|
|
17
|
+
change to what the engine *is*, not a routine entry here.
|
|
18
|
+
|
|
19
|
+
## [1.2.1] - 2026-10-29
|
|
20
|
+
|
|
21
|
+
Packaging only. **The engine is unchanged**, and so is every file a checkout
|
|
22
|
+
runs: COM, FOM and sampling-phase results are the same as 1.2.0's.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **The wheel installs the engine and nothing else**: the modules `sicopr`,
|
|
27
|
+
`com_mat_export` and `com_plots`. A 1.2.0 wheel also installed `gui` and
|
|
28
|
+
`com_functions` as top-level packages in site-packages, where names that
|
|
29
|
+
generic can collide with other software's; the engine imports neither.
|
|
30
|
+
`pip install sicopr` then `python -m sicopr config.xlsx thru.s4p` runs COM.
|
|
31
|
+
- **The sdist carries the source tree a checkout has** (`MANIFEST.in`):
|
|
32
|
+
`com_functions/`, `gui/`, `tests/`, `tools/`, `docs/`, `examples/`,
|
|
33
|
+
`matlab/`, `octave/`, `R/`, `benchmark/` and the top-level files. The GUI, the
|
|
34
|
+
worked example, the tests, the Octave route and
|
|
35
|
+
[SiCoPR-Assist](https://github.com/tbermen/SiCoPR-Assist) still need a
|
|
36
|
+
checkout (or the unpacked sdist), as before.
|
|
37
|
+
- Package metadata: the licence is the SPDX expression `BSD-3-Clause` with
|
|
38
|
+
`LICENSE` and `NOTICE` as licence files, and the project links add Issues and
|
|
39
|
+
Changelog. The build needs setuptools 77 or newer.
|
|
40
|
+
- README, *Install*: says what `pip install sicopr` gives and what needs a
|
|
41
|
+
checkout.
|
|
42
|
+
|
|
43
|
+
## [1.2.0] - 2026-10-29
|
|
44
|
+
|
|
45
|
+
GUI panels, and three hardenings of the GUI. Everything here is in `gui/`, the
|
|
46
|
+
config editor, a supporting tool: **the engine is unchanged**, and COM, FOM and
|
|
47
|
+
sampling-phase results are the same as 1.1.4's (the 208 MATLAB stage-oracle cases
|
|
48
|
+
pass unchanged).
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
|
|
52
|
+
- **GUI panels.** A panel is a side panel that another installed Python package
|
|
53
|
+
adds to the config editor (`python gui/app.py`). It shows on the right of the
|
|
54
|
+
page and works alongside the five tabs: it can load a workbook in Config, see
|
|
55
|
+
edits, assemble the Run tab (channel files and options), take over its
|
|
56
|
+
**Run sicopr.py**, put its own run's output in the Run tab's Output, and open
|
|
57
|
+
a dashboard in Results, dynamic.
|
|
58
|
+
- **For users:** install [SiCoPR-Assist](https://github.com/tbermen/SiCoPR-Assist)
|
|
59
|
+
beside SiCoPR to get its panel; start the editor as usual and the panel is
|
|
60
|
+
there. With no panel installed the editor is exactly as before, and
|
|
61
|
+
`--no-panels` leaves installed panels out.
|
|
62
|
+
- **For package authors:** register an object in the Python entry-point group
|
|
63
|
+
`sicopr.gui_panels`. The editor serves its `panel.js` and `panel.css`, routes
|
|
64
|
+
`/panel/<name>/api/...` to its `handle()` with a narrow view of the server
|
|
65
|
+
(the opened directories, the run directory, whether a run is live), and lists
|
|
66
|
+
it at `/api/panels` (panel API 1). Page and panel talk through named DOM
|
|
67
|
+
events: `sicopr:config`, `sicopr:edit`, `sicopr:view`, `sicopr:run`,
|
|
68
|
+
`sicopr:channels` and `sicopr:browsed` tell the panel what the page did;
|
|
69
|
+
`sicopr:open-config`, `sicopr:overlay`, `sicopr:clear-edits`, `sicopr:browse`,
|
|
70
|
+
`sicopr:set-run`, `sicopr:output` and `sicopr:show` let it act on the page;
|
|
71
|
+
`sicopr:run-request` and `sicopr:stop-request` hand **Run sicopr.py** and
|
|
72
|
+
**Stop** to the panel that assembled the run. The contract is in
|
|
73
|
+
[`gui/README.md`](gui/README.md), *Panels*.
|
|
74
|
+
- **The request guard** of 1.1.2 (`Handler._refused`) covers the panel routes:
|
|
75
|
+
a cross-site, foreign-Origin, DNS-rebinding or text/plain request to
|
|
76
|
+
`/panel/<name>/...` is refused before the panel's `handle()` is reached.
|
|
77
|
+
- `tests/test_gui_server.py` and `tests/test_gui_static.py` pin the contract
|
|
78
|
+
and the no-panel case.
|
|
79
|
+
|
|
80
|
+
### Security
|
|
81
|
+
|
|
82
|
+
From a security review of the GUI on 2026-10-29. Each has a check in
|
|
83
|
+
`tests/test_gui_server.py` that fails without it.
|
|
84
|
+
|
|
85
|
+
- **Rscript is never taken from the current folder.** On Windows, Python's
|
|
86
|
+
`shutil.which` looks in the current folder before `PATH`, so an `Rscript.exe`
|
|
87
|
+
placed in the folder the editor was started from would run, with your rights,
|
|
88
|
+
at the first dashboard build. The editor now looks under `%ProgramFiles%\R`
|
|
89
|
+
first on Windows, then on `PATH`, skipping the current folder.
|
|
90
|
+
- **Dashboards are sandboxed.** A `*_report.html` is served with
|
|
91
|
+
`Content-Security-Policy: sandbox allow-scripts`, so a dashboard from a run
|
|
92
|
+
directory someone else wrote cannot call the editor's API (open directories,
|
|
93
|
+
save workbooks, start runs) from its scripts. The plots still draw.
|
|
94
|
+
- **Every response** carries `X-Content-Type-Options: nosniff` and
|
|
95
|
+
`Content-Security-Policy: frame-ancestors 'self'`, so no other site can frame
|
|
96
|
+
the editor.
|
|
97
|
+
|
|
98
|
+
### Changed
|
|
99
|
+
|
|
100
|
+
- The request guard lets one kind of cross-site request through: a dashboard's
|
|
101
|
+
own `lib/` script or stylesheet (a GET under `/rpt/` that is not a page, loaded
|
|
102
|
+
as a script or style), which the browser marks cross-site because the sandboxed
|
|
103
|
+
page has no origin. Without it the dashboards would load no Plotly.
|
|
104
|
+
- On Windows, an R install under `%ProgramFiles%\R` is now preferred over an
|
|
105
|
+
`Rscript` found on `PATH`.
|
|
106
|
+
|
|
107
|
+
## [1.1.4] - 2026-10-29
|
|
108
|
+
|
|
109
|
+
A security fix, and the config-reader fixes that carry it. **Upgrade if you open
|
|
110
|
+
configuration workbooks or run CSVs that someone else wrote.** COM results do not
|
|
111
|
+
change for configs written with plain numbers and brackets: the 208 MATLAB
|
|
112
|
+
stage-oracle cases and the 28 COM Octave checkpoint cases pass unchanged.
|
|
113
|
+
|
|
114
|
+
### Security
|
|
115
|
+
|
|
116
|
+
- **Config cell text could run as Python (1.1.3 and earlier).** For the keywords
|
|
117
|
+
the Reference Code evaluates (for example `kappa1`, the Tx FFE `c(n)` cells,
|
|
118
|
+
and package-block parameters), SiCoPR handed the cell's text to Python's
|
|
119
|
+
unrestricted `eval`. A crafted `.xlsx` workbook or `.csv` run CSV therefore ran
|
|
120
|
+
arbitrary Python as soon as it was loaded, before any COM computation, with the
|
|
121
|
+
permissions of the user running SiCoPR. 1.1.4 reads those cells with its own
|
|
122
|
+
evaluator for the MATLAB subset configs use (below) and refuses anything else
|
|
123
|
+
with an error naming the keyword; Python's `eval` is no longer applied to
|
|
124
|
+
config text. If you open configs from other people, upgrade. No CVE has been
|
|
125
|
+
requested or is claimed.
|
|
126
|
+
|
|
127
|
+
### Fixed
|
|
128
|
+
|
|
129
|
+
Evidence: `docs/FIX_SUMMARY.md`, rows 58-60.
|
|
130
|
+
|
|
131
|
+
- **MATLAB vector expressions in a value cell.** A cell such as
|
|
132
|
+
`[0.3 0.2*ones(1,4) 0.1*ones(1,6)]` (802.3ck's `b_max(2..N_b)`) stopped SiCoPR
|
|
133
|
+
with `could not convert string to float`, because the config reader read only
|
|
134
|
+
numbers and brackets of numbers, where the Reference Code `eval`s the cell. It
|
|
135
|
+
now reads the MATLAB that configs use (numbers, `Inf`, `NaN`, `+ - * / .* ./`,
|
|
136
|
+
parentheses, colon ranges, brackets, `ones` and `zeros`) with MATLAB's
|
|
137
|
+
semantics, in `.xlsx`, `.csv` and `.mat` configs alike, and gives the values
|
|
138
|
+
COM Octave gives. Anything else stops with an error that names the keyword, as
|
|
139
|
+
the Reference Code stops on it; Python's `eval` is no longer used on config
|
|
140
|
+
text.
|
|
141
|
+
- **`b_min(2..N_b)` default.** With a vector `b_max(2..N_b)` and no
|
|
142
|
+
`b_min(2..N_b)`, every negative limit was `-b_max(2)`; the reference uses
|
|
143
|
+
`-b_max` tap by tap, and so does SiCoPR now.
|
|
144
|
+
- **DFE limits of the wrong length.** A `b_max(2..N_b)` or `b_min(2..N_b)` vector
|
|
145
|
+
that is not `N_b - 1` long was cut short or partly ignored; the Reference Code
|
|
146
|
+
stops on it, and SiCoPR now stops with an error naming the keyword.
|
|
147
|
+
|
|
148
|
+
### Who is affected
|
|
149
|
+
|
|
150
|
+
- Configs that write a value as a MATLAB expression: they now run, with the
|
|
151
|
+
reference's values.
|
|
152
|
+
- **Behaviour change: an Excel error cell.** A config with `#REF!` or `#N/A` in a
|
|
153
|
+
keyword the Reference Code evaluates: COM Octave stops on such a cell, and
|
|
154
|
+
SiCoPR now does too, with an error naming the keyword, where it used to carry
|
|
155
|
+
the text on. What MATLAB's `xlsread` returns for an Excel error cell is
|
|
156
|
+
unverified here. IEEE's 802.3dj CR `selectable` template has one in
|
|
157
|
+
`z_bp (TX)` (`=Lists!F34`, saved as `#REF!`).
|
|
158
|
+
- **Not affected:** configs written with plain numbers and brackets, which
|
|
159
|
+
includes every shipped and corpus workbook: the reader returns the same values
|
|
160
|
+
bit for bit, and the 28 COM Octave checkpoint cases and the 208 MATLAB
|
|
161
|
+
stage-oracle cases pass unchanged.
|
|
162
|
+
|
|
163
|
+
## [1.1.3] - 2026-10-21
|
|
164
|
+
|
|
165
|
+
Six port defects, found because IEEE's 802.3ck COM 3.70 C2M workbook stopped
|
|
166
|
+
SiCoPR 1.1.2 with an error where the Reference Code runs it, and a clearer error
|
|
167
|
+
for a configuration that stops the Reference Code itself. **C2M results can
|
|
168
|
+
change.** The reference corpus results do not: the 208 MATLAB stage-oracle cases
|
|
169
|
+
and the 28 COM Octave checkpoint cases pass unchanged.
|
|
170
|
+
|
|
171
|
+
### Who is affected
|
|
172
|
+
|
|
173
|
+
- **C2M configurations** (`PMD_type` or `PHY` C2M) with MLSE off: COM, FOM, the
|
|
174
|
+
chosen CTLE and Tx FFE, and the reported eye widths can change. On the case that
|
|
175
|
+
found it, the FOM moved by 2e-4 dB and the search chose a different CTLE and
|
|
176
|
+
Tx FFE.
|
|
177
|
+
- **Any configuration that computes the eye width** (`EW = 1`) with MLSE off: the
|
|
178
|
+
reported `EW_UI_est` and eye widths change, as below.
|
|
179
|
+
- **A two-segment package** (`package_Z_c` given as `[Tx Tx ; Rx Rx]`, as in the
|
|
180
|
+
802.3ck COM 3.70 C2M and MTF workbooks) with `TDR_W_TXPKG = 1`: it now runs
|
|
181
|
+
where it stopped with an error.
|
|
182
|
+
- **A workbook with spaced minus signs inside brackets**, such as
|
|
183
|
+
`[ -0.15 - 0.15 - 0.05 ]`: the value is now read as MATLAB reads it.
|
|
184
|
+
- **The reported `flim_GHz`**, when the workbook's `flim` lies above the THRU's last
|
|
185
|
+
frequency (the default is 1000 GHz).
|
|
186
|
+
- **Not affected:** the 802.3dj KR and CR configurations the correlation corpora
|
|
187
|
+
use. They run MLSE (so no eye width is computed), set `flim` to 67 GHz, use
|
|
188
|
+
four-segment packages and plain brackets, so none of these defects reach them.
|
|
189
|
+
|
|
190
|
+
### Fixed
|
|
191
|
+
|
|
192
|
+
What was found (symptom, cause) and the resolution, one per defect. Detail and
|
|
193
|
+
evidence: `docs/FIX_SUMMARY.md`, rows 52-57.
|
|
194
|
+
|
|
195
|
+
- **Two-segment package crash.** `TDR_W_TXPKG = 1` with a two-segment package
|
|
196
|
+
stopped with `make_full_pkg: Zpkg(3): out of bound 2`, because the reader filled
|
|
197
|
+
the package impedance out to four segments in the transposed shape (4x2 where
|
|
198
|
+
the reference has 2x4). It now builds the reference's shape, and the reported
|
|
199
|
+
`pkg_Z_c` has that shape too.
|
|
200
|
+
- **Frequency limit leaked to the caller.** `flim_GHz` reported the THRU's last
|
|
201
|
+
frequency (67 GHz on the reproducing case) instead of the reference's 1000 GHz
|
|
202
|
+
default, and files read after the THRU were cut at that frequency, because two
|
|
203
|
+
file readers copied into `read_s4p_files` wrote their frequency limit back to the
|
|
204
|
+
shared parameters where MATLAB changes only a local copy. They now leave the
|
|
205
|
+
caller's value alone, as the main readers already did.
|
|
206
|
+
- **Eye widths one sample out.** Every left eye width was one sample short and
|
|
207
|
+
every right one sample long, because `COM_eye_width` passed a 0-based centre
|
|
208
|
+
index to a function that expects MATLAB's 1-based one. It now passes the 1-based
|
|
209
|
+
index.
|
|
210
|
+
- **Eye contour one PDF bin out.** The eye contour was one bin (1e-5 V) out at
|
|
211
|
+
about half its points, because `COM_eye_width` truncated each noise PDF's offset
|
|
212
|
+
to an integer where MATLAB keeps it fractional and rounds the sum. On C2M the
|
|
213
|
+
contour sets the noise amplitude, so this moved the FOM the equalizer search
|
|
214
|
+
ranks by, and COM with it: 2e-4 dB of FOM and a different CTLE and Tx FFE on
|
|
215
|
+
the reproducing case. The offset is now kept fractional, as in the reference.
|
|
216
|
+
- **One eye width instead of one per eye.** `EW_UI_est` added all the eyes'
|
|
217
|
+
widths into one number (0.67) where the reference reports one per eye
|
|
218
|
+
(`[0.21 0.23 0.21]`). It now reports one per eye.
|
|
219
|
+
- **Spaced minus signs in brackets.** `[ -0.15 - 0.15 - 0.05 ]` (the 3.70 C2M
|
|
220
|
+
workbook's `b_min(2..N_b)`) was read as three numbers, because the reader joined
|
|
221
|
+
every `- x` to `-x`; MATLAB reads `a - b` as a subtraction (here -0.35) and only
|
|
222
|
+
`a -b` as two numbers. The reader now follows MATLAB.
|
|
223
|
+
|
|
224
|
+
Evidence: after these fixes the 3.70 C2M workbook matches COM Octave on 4p15p0,
|
|
225
|
+
4p16p0 and 4p17p0, with COM and FOM within 5.3e-14 dB and the sampling phase,
|
|
226
|
+
CTLE, `g_DC_HP`, Tx FFE, ERL, `EW_UI` and `flim` identical. Each fix has a test
|
|
227
|
+
pinned to COM Octave values that fails with the defect restored. The 208 MATLAB
|
|
228
|
+
stage-oracle cases and the 28 COM Octave checkpoint cases still pass unchanged.
|
|
229
|
+
|
|
230
|
+
### Changed
|
|
231
|
+
|
|
232
|
+
- **A defect in the Reference Code: ADC quantization with the Rx FFE off.** With
|
|
233
|
+
`N_qb ~= 0` and the Rx FFE off (`ffe_pre_tap_len = ffe_post_tap_len = 0`), the
|
|
234
|
+
Reference Code (4p14p0 to 4p17p0) runs the equalizer search and then stops with
|
|
235
|
+
`structure has no member 'RxFFE'`. SiCoPR stops at the same point, as it must
|
|
236
|
+
to match the reference, but now with a `ValueError` that names the cause and
|
|
237
|
+
the workaround instead of a bare `AttributeError`. **Workaround:** set
|
|
238
|
+
`N_qb = 0` when the Rx FFE is off (with no Rx FFE the reference adds no
|
|
239
|
+
quantization noise to COM either way), or keep one Rx FFE tap if quantization
|
|
240
|
+
noise is to be modelled. No shipped workbook reaches this. Root cause, a related
|
|
241
|
+
observation about a zero pre-cursor tap, and a proposed fix for the COM
|
|
242
|
+
ad hoc: [`docs/UPSTREAM_QUANTIZATION_WITHOUT_RXFFE.md`](docs/UPSTREAM_QUANTIZATION_WITHOUT_RXFFE.md).
|
|
243
|
+
|
|
244
|
+
## [1.1.2] - 2026-10-16
|
|
245
|
+
|
|
246
|
+
A security fix for the GUI, a faster COM Octave on 4p17p0, and test and tooling
|
|
247
|
+
work. No engine result changes: every COM, FOM and equalizer setting is what
|
|
248
|
+
1.1.1 computes.
|
|
249
|
+
|
|
250
|
+
### Changed
|
|
251
|
+
|
|
252
|
+
- COM Octave 4p17p0 runs a 4p17p0 variant of the floating-tap search speed patch
|
|
253
|
+
(`octave/patches/FOM_rxffe_floating_taps_4p17p0.m`), and the optional compiled
|
|
254
|
+
kernel has the matching mode: 1.6x to 1.8x faster, bit-identical to the release's
|
|
255
|
+
own search. Rebuild the kernel (`python octave/accel/build_accel.py`) to use it.
|
|
256
|
+
- The shipped example runs 4p17p0, and its expected values were regenerated with
|
|
257
|
+
both engines on it (COM unchanged to 1e-14 dB; the engines agree to 1.0e-14 dB).
|
|
258
|
+
- Octave speed figures re-measured on 4p17p0 (2026-10-15): with the compiled kernels
|
|
259
|
+
COM Octave runs at 0.87x to 1.04x SiCoPR's time, 1.8x interpreted
|
|
260
|
+
(`octave/README.md`, TUTORIAL 12.5).
|
|
261
|
+
- Tests: the unguarded `.copy()` sites the mutation gate reported fell from 31
|
|
262
|
+
functions to 2, both fallback stubs production never calls. New MATLAB
|
|
263
|
+
value-semantics checks (`com_functions/verification/value_semantics.py`) catch 20
|
|
264
|
+
more sites; 28 are argued equivalent in `equivalent_mutants.md`; the gate no longer
|
|
265
|
+
counts sites in `__main__` demo blocks. The verification report's `Finding:`
|
|
266
|
+
trailer check is scoped to `py_impl.py`, as `docs/VERIFICATION.md` specifies.
|
|
267
|
+
No engine result changes.
|
|
268
|
+
- `COM_FD_to_TD`, `COM_eye_width`, `get_TDR` and `get_PSDs` no longer carry
|
|
269
|
+
hand-written fallback stubs for their callees: a call that does not inject them
|
|
270
|
+
now uses the canonical functions, the same ones the engine injects. Several stubs
|
|
271
|
+
were badly wrong (a Bessel-Thomson filter with DC gain 105, an eye contour with its
|
|
272
|
+
edges swapped), though the engine never reached them. No engine result changes;
|
|
273
|
+
the last two unguarded `.copy()` gaps went with them.
|
|
274
|
+
|
|
275
|
+
### Fixed
|
|
276
|
+
|
|
277
|
+
- The GUI now refuses requests that did not come from its own page. Binding to
|
|
278
|
+
127.0.0.1 kept out the network but not other websites open in the same browser:
|
|
279
|
+
a page on any site could have opened a whole drive (`/api/open` is a GET) and then
|
|
280
|
+
overwritten workbooks on it through a text/plain POST to `/api/save`, and a
|
|
281
|
+
DNS-rebinding page could also have read files from opened directories. Requests
|
|
282
|
+
must now name this server in `Host`, must not be marked cross-site
|
|
283
|
+
(`Sec-Fetch-Site`, `Origin`), and POSTs must be `application/json`, as the page's
|
|
284
|
+
own already are. Found through the first CodeQL code scan.
|
|
285
|
+
- CI declares `permissions: contents: read`; its jobs had the repository's broader
|
|
286
|
+
default token permissions.
|
|
287
|
+
- The two INFO lines about a channel's frequency range (data ending below the
|
|
288
|
+
signalling rate; data starting above the recommended frequency) now print the
|
|
289
|
+
Reference Code's own text, including its "GH" for "GHz". The conditions were
|
|
290
|
+
already the reference's.
|
|
291
|
+
|
|
292
|
+
## [1.1.1] - 2026-10-06
|
|
293
|
+
|
|
294
|
+
### Fixed
|
|
295
|
+
|
|
296
|
+
- The engine dropped imports its function sources had, so paths no unit test
|
|
297
|
+
reached raised `NameError`: a `.csv` configuration file and
|
|
298
|
+
`writecsv_transposed` (`csv`), a `.csv` pulse-response file (`io`), and the
|
|
299
|
+
apparent channel bandwidth fit when a workbook sets `ACBW = 1` (`cho_factor`,
|
|
300
|
+
`cho_solve`, `solve_triangular`). The Reference Code reads a `.csv`
|
|
301
|
+
configuration, so this was a port defect.
|
|
302
|
+
- A configuration missing a mandatory keyword (`M`, `R_0`, `RESULT_DIR`, `f_b`
|
|
303
|
+
and the rest) failed later with an unrelated `TypeError` instead of naming the
|
|
304
|
+
keyword: two modules' private `_SENTINEL` collided once assembled.
|
|
305
|
+
- A `.mat` configuration (the `parameter` cell array the Reference Code loads,
|
|
306
|
+
as `tools/xlsx_to_com_mat.py` writes it for COM Octave) failed on its first
|
|
307
|
+
arithmetic, because each cell arrived as a small array. It now loads to the
|
|
308
|
+
same `param` and `OP` as the workbook it came from.
|
|
309
|
+
- A MATLAB range in a configuration cell that does not land on its limit is
|
|
310
|
+
now read as MATLAB reads it: `[0:0.3:1]` is 0, 0.3, 0.6, 0.9, where the reader
|
|
311
|
+
stretched it to 0, 0.333, 0.667, 1, and an end that the steps overshoot by
|
|
312
|
+
rounding is set to the limit, as the colon does (`[0:0.1:0.3]` ends at 0.3).
|
|
313
|
+
The translated `xls_parameter_txffe`, which the engine does not call, lacked
|
|
314
|
+
that end clamp and now has it. Both are pinned against COM Octave. Every range in the shipped and reference workbooks reads exactly
|
|
315
|
+
as before, so no reference result moves.
|
|
316
|
+
- `tests/test_assembled_names.py` now fails on either kind of defect in the
|
|
317
|
+
assembled engine, and `tests/test_csv_inputs.py` loads every shipped workbook
|
|
318
|
+
as a `.csv` and requires the same `param` and `OP`.
|
|
319
|
+
|
|
320
|
+
## [1.1.0] - 2026-10-04
|
|
321
|
+
|
|
322
|
+
### Added
|
|
323
|
+
|
|
324
|
+
- **COM 4p17p0** (release 4.17.0 of the Reference Code, 2026-09-23), now the
|
|
325
|
+
default emulated release; `--matlab-version 4p16p0` and `4p15p0` remain. The
|
|
326
|
+
release file is in `matlab/`, byte-identical to the tagged release (`NOTICE`
|
|
327
|
+
now records every reference file's origin at
|
|
328
|
+
https://opensource.ieee.org/802-com/com_code). What changed and what the port
|
|
329
|
+
does about each item: [`docs/MATLAB_4p17p0_CHANGES.md`](docs/MATLAB_4p17p0_CHANGES.md).
|
|
330
|
+
- `MMSE_FOM` builds its Gram matrix by lag from `H(:,1)'*H`, formed once in
|
|
331
|
+
`MMSE`, as 4p17p0 does. Results move by summation order only.
|
|
332
|
+
- Apparent channel bandwidth: `get_ACBW` and three helpers, reported as
|
|
333
|
+
`ACBW_GHz` when a workbook sets `ACBW = 1` (threshold `T_dev`). Off by
|
|
334
|
+
default.
|
|
335
|
+
- `octave/com_ieee8023_4p17p0_octave_compat.m`, generated by
|
|
336
|
+
`octave/make_octave_compat.py`. It runs the release's own floating-tap search:
|
|
337
|
+
the speed patch for that search predates 4p17p0's change and is not applied.
|
|
338
|
+
- `benchmark/208_case_4p17p0/`: the 208-case benchmark under 4p17p0, with its
|
|
339
|
+
COM Octave results and their agreement with SiCoPR.
|
|
340
|
+
- `tools/octave_compare.py --resume`: each case's comparison is written as it
|
|
341
|
+
finishes, and a resumed batch skips completed cases.
|
|
342
|
+
|
|
343
|
+
### Changed
|
|
344
|
+
|
|
345
|
+
- `MMSE` calls the canonical `MMSE_FOM` instead of carrying a copy of it.
|
|
346
|
+
- `tools/translation_coverage.py` measures against the default release named in
|
|
347
|
+
`VERSION.json`; the command line's release choices come from it too.
|
|
348
|
+
|
|
349
|
+
### Fixed
|
|
350
|
+
|
|
351
|
+
- `tools/matlab_version_diff.py` did not recognise a function declaration
|
|
352
|
+
continued with `...`, and merged its body into the function above. It missed
|
|
353
|
+
three of 4p17p0's four new functions, and had folded `s21_to_impulse_DC` into
|
|
354
|
+
its neighbour in every release since 4p14p0.
|
|
355
|
+
|
|
356
|
+
## [1.0.0] - 2026-09-29
|
|
357
|
+
|
|
358
|
+
First public release. The engine, the test suite and the documentation are the
|
|
359
|
+
state described in [`README.md`](README.md); the correlation results it reports
|
|
360
|
+
were produced before this file existed and are not restated as changes.
|
|
361
|
+
|
|
362
|
+
### Added
|
|
363
|
+
|
|
364
|
+
- `octave/com_ieee8023_4p15p0_octave_compat.m` and `..._4p16p0_octave_compat.m`
|
|
365
|
+
now run under GNU Octave. They are generated from `matlab/` by
|
|
366
|
+
`octave/make_octave_compat.py` with the patch set in `octave/patches/`, and
|
|
367
|
+
`tests/test_octave_compat.py` checks that the committed files are what the
|
|
368
|
+
generator produces and that Octave parses them. Before this they were
|
|
369
|
+
byte-identical to the MATLAB releases.
|
|
370
|
+
- The Octave release files run **2.5 to 3 times faster than the same files before
|
|
371
|
+
this work** (measured 2026-09-18: one 4p16p0 case 1418 s to 561 s; one 4p15p0
|
|
372
|
+
case 137 s to 46 s), and every result is unchanged to the last bit. On the
|
|
373
|
+
shipped example (measured 2026-10-01, one case at a time, one BLAS thread),
|
|
374
|
+
Octave takes 2.2 to 2.4 times SiCoPR's run time interpreted and 1.2 to 1.4
|
|
375
|
+
times with the compiled kernels. Part of it is in the patch
|
|
376
|
+
set (the touchstone reader, the floating-tap search, the ISI distribution
|
|
377
|
+
build, FFE, two `isequal` tests); the rest is `octave/accel/`, **optional
|
|
378
|
+
compiled kernels** for the three hottest loops, built once per machine with
|
|
379
|
+
`python octave/accel/build_accel.py` and used automatically from then on
|
|
380
|
+
(`COM_OCTAVE_ACCEL=0` turns them off, which is how the equivalence is
|
|
381
|
+
checked). The `.oct` is per Octave version and platform, so it is not
|
|
382
|
+
committed, and a build that does not match is ignored. Bit-identity is
|
|
383
|
+
enforced by `tests/test_octave_compat.py`, which compares the release's own
|
|
384
|
+
functions with the kernels off and on and fails on each of five planted
|
|
385
|
+
last-bit defects.
|
|
386
|
+
- `tools/xlsx_to_com_mat.py` — a COM workbook as the `.mat` configuration
|
|
387
|
+
Octave reads, with `--set KEY=VALUE` for the headless plumbing keywords.
|
|
388
|
+
- `tools/octave_compare.py` — the same case through Octave and `python -m
|
|
389
|
+
sicopr`, compared field by field; batch mode over a JSON case list.
|
|
390
|
+
- `NOTICE` — upstream provenance, origin and SHA-256 checksums for each of the
|
|
391
|
+
four MATLAB reference files.
|
|
392
|
+
- `CITATION.cff`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, this file.
|
|
393
|
+
- `com_functions/inlined_copies.json` — a generated manifest recording, for
|
|
394
|
+
every inlined helper copy in the engine, which helper it came from, which
|
|
395
|
+
function it was inlined into, and the upstream MATLAB line range of both.
|
|
396
|
+
- Licence headers on the standalone source files (`gui/`, `tools/`, `R/`,
|
|
397
|
+
the assembler and the plotting modules). The 157 `py_impl.py` files are
|
|
398
|
+
covered collectively by [`com_functions/fn/README.md`](com_functions/fn/README.md)
|
|
399
|
+
rather than individually — the assembler inlines their leading comments, so a
|
|
400
|
+
per-file header would appear 157 times inside the generated engine.
|
|
401
|
+
- `com_functions/verification/report.py` answers "are there any opens?" from the
|
|
402
|
+
suite; all 146 translated functions are checked against the executed reference.
|
|
403
|
+
The contract is [`docs/VERIFICATION.md`](docs/VERIFICATION.md).
|
|
404
|
+
- `tests/test_octave_checkpoints.py`, `tests/test_mutation_score.py`,
|
|
405
|
+
`tools/gen_semantics_pins.py` and `tools/equivalence_check.py`; see
|
|
406
|
+
`docs/VERIFICATION.md`.
|
|
407
|
+
- `benchmark/208_case_4p15p0/`: the 208-case benchmark with its COM Octave
|
|
408
|
+
results, the channel list (IEEE URLs and SHA-256, no channel data) and the
|
|
409
|
+
eight configuration workbooks, with the results' provenance and their measured
|
|
410
|
+
agreement with the MATLAB reference results.
|
|
411
|
+
- `--exit-on-fail`: exit status 3 if any package case fails its COM threshold,
|
|
412
|
+
for CI. Without it a completed run still exits 0, pass or fail.
|
|
413
|
+
- README: the Python entry point, batch use, exit codes and runtime; why a
|
|
414
|
+
Python port when Octave runs the Reference Code; how the port was built (with
|
|
415
|
+
AI assistance) and verified; the compliance statement; the 2026-09-29 ad hoc
|
|
416
|
+
slides and acknowledgements; screenshots of the GUI. A defect-report issue
|
|
417
|
+
template.
|
|
418
|
+
|
|
419
|
+
### Changed
|
|
420
|
+
|
|
421
|
+
- The documentation now states the maintainer's commitment as presented to the
|
|
422
|
+
IEEE 802.3 COM ad hoc on 2026-09-29. The commitment is consistency and
|
|
423
|
+
correlation with the Reference Code. SiCoPR follows official releases, and
|
|
424
|
+
between releases the engine changes only for port defects and speed-ups
|
|
425
|
+
proven to change no result. The supporting tools (`gui/`, `R/`, the study
|
|
426
|
+
tools, search instrumentation) are outside it. README, `CONTRIBUTING.md`,
|
|
427
|
+
`docs/MAINTAINING.md`.
|
|
428
|
+
- Outside help now comes through issues only. Pull requests are no longer
|
|
429
|
+
accepted, so the DCO sign-off section is gone from `CONTRIBUTING.md`. The CI
|
|
430
|
+
`dco` job remains, and runs only on pull requests.
|
|
431
|
+
|
|
432
|
+
- Documentation restructured for users. `README.md` is now a short guide:
|
|
433
|
+
install (`pip install -e .`), the worked example, running your own case with
|
|
434
|
+
the actual output file names, the reference code under Octave, the
|
|
435
|
+
correlation headline, limitations and licence. Version detail moved to the new
|
|
436
|
+
[`docs/VERSIONS.md`](docs/VERSIONS.md); test-suite detail, inlined-copy
|
|
437
|
+
coverage and the correlation-data policy moved to `CONTRIBUTING.md`; the
|
|
438
|
+
equalizer-search study and repository layout to `docs/TUTORIAL.md`. Personal
|
|
439
|
+
names replaced by roles, stale example output and figure names corrected.
|
|
440
|
+
- Behavioural coverage of the inlined helper copies raised from 113 to 136 of
|
|
441
|
+
177; five further divergences were found in the process and are catalogued in
|
|
442
|
+
`test_inlined_copies.py`'s `KNOWN_BEHAVIOUR`. On 2026-09-22 most copies were
|
|
443
|
+
then replaced by imports: 62 copies of 45 functions remain, 34 of which cannot
|
|
444
|
+
be driven from synthetic inputs and are disclosed as unverified in
|
|
445
|
+
`CONTRIBUTING.md`.
|
|
446
|
+
- `results.csv` is written in MATLAB `num2str` format (about five significant
|
|
447
|
+
digits), as the reference writes it. Compare engines at full precision:
|
|
448
|
+
`tools/_sicopr_case.py` writes every result field to JSON, and
|
|
449
|
+
`tools/octave_compare.py` reads that.
|
|
450
|
+
- The August speed-ups' FFT convolution and hoisted Gram matrix were withdrawn
|
|
451
|
+
(the FFT lost the far tail of the noise CDF that DER is read from). Speed-ups
|
|
452
|
+
are now accepted only under `tools/equivalence_check.py`: strict outputs
|
|
453
|
+
bit-identical, noise and DER fields within 1e-12 relative per element, on 28
|
|
454
|
+
checkpoint cases. The August 4.5–5× figure is withdrawn pending re-measurement.
|
|
455
|
+
|
|
456
|
+
### Fixed
|
|
457
|
+
|
|
458
|
+
- The R dashboard could not be built from any `--export-mat` file written since
|
|
459
|
+
2026-09-05: R.matlab cannot read an empty text field, and the export's
|
|
460
|
+
`meta.git_commit` was empty whenever a run started outside the repository
|
|
461
|
+
(as the GUI's runs do). The export now never writes an empty field, and
|
|
462
|
+
`meta.com_version` names the release the run emulated.
|
|
463
|
+
- GUI: static-results captions and the "not produced by this run" line used
|
|
464
|
+
only `/` to find a file name, so on Windows every figure was listed as
|
|
465
|
+
missing; the unsaved-changes bar did not hide at zero; the S-parameter legend
|
|
466
|
+
now names the return-loss traces and its axis labels are larger; the Run tab
|
|
467
|
+
says when figures are drawn.
|
|
468
|
+
- The example's COM Octave results no longer record a local path.
|
|
469
|
+
- A configuration workbook saved by a tool that writes whole numbers as `32.0`
|
|
470
|
+
crashed the engine (`np.ones(32.0)`); MATLAB, where every number is a double,
|
|
471
|
+
runs it. Whole-number cell values now reach the engine as integers, as they
|
|
472
|
+
did from Excel-saved workbooks, and so do CSV values. Keywords the engine uses
|
|
473
|
+
as counts (`M`, `L`, `N_b`, tap lengths and others) are conditioned where every
|
|
474
|
+
source is read, whatever its type; a fractional count is an error naming the
|
|
475
|
+
keyword instead of a crash. Checked by running the shipped example with every
|
|
476
|
+
number in its workbook forced to float: every pinned value reproduced.
|
|
477
|
+
- `__load_excel` left configuration workbooks open, locking them on Windows.
|
|
478
|
+
- Three tests asserted *that* something failed rather than *why*, and would have
|
|
479
|
+
passed with the guard they were protecting removed.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
title: "SiCoPR — a Python port of the IEEE 802.3 COM MATLAB reference"
|
|
3
|
+
message: >-
|
|
4
|
+
If you refer to this software, please cite it using the metadata below. It is
|
|
5
|
+
an independent port and is not an IEEE deliverable; when the subject is the
|
|
6
|
+
COM methodology itself rather than this implementation, cite the IEEE 802.3
|
|
7
|
+
standard and the MATLAB reference instead.
|
|
8
|
+
type: software
|
|
9
|
+
authors:
|
|
10
|
+
- family-names: Bermensolo
|
|
11
|
+
given-names: Todd
|
|
12
|
+
repository-code: "https://github.com/tbermen/SiCoPR"
|
|
13
|
+
version: "1.2.1"
|
|
14
|
+
date-released: "2026-10-29"
|
|
15
|
+
abstract: >-
|
|
16
|
+
A function-for-function Python translation of the IEEE 802.3ck/dj Channel
|
|
17
|
+
Operating Margin (COM) MATLAB reference tool, with R extensions for reports
|
|
18
|
+
and visualisations. It computes COM, VEO and VEC and the supporting
|
|
19
|
+
equalisation and noise analysis for a serial channel described by Touchstone
|
|
20
|
+
S-parameter files and an Excel configuration spreadsheet. Against 208 MATLAB
|
|
21
|
+
reference cases it chooses the same sampling phase and equalizer on every case
|
|
22
|
+
and agrees on COM to 4.6e-14 dB; the scope and limits of that measurement are
|
|
23
|
+
stated in the project README.
|
|
24
|
+
keywords:
|
|
25
|
+
- channel operating margin
|
|
26
|
+
- COM
|
|
27
|
+
- IEEE 802.3
|
|
28
|
+
- signal integrity
|
|
29
|
+
- SerDes
|
|
30
|
+
- equalization
|
|
31
|
+
license: BSD-3-Clause
|
|
32
|
+
references:
|
|
33
|
+
- type: software
|
|
34
|
+
title: "IEEE 802.3 Channel Operating Margin MATLAB reference implementation"
|
|
35
|
+
authors:
|
|
36
|
+
- name: "802-COM Authors"
|
|
37
|
+
year: 2025
|
|
38
|
+
license: BSD-3-Clause
|
|
39
|
+
notes: >-
|
|
40
|
+
The upstream this project translates. Redistributed unmodified under
|
|
41
|
+
matlab/ with notices intact; exact versions and SHA-256 checksums are
|
|
42
|
+
recorded in NOTICE. The MATLAB reference remains the normative
|
|
43
|
+
implementation.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Code of conduct
|
|
2
|
+
|
|
3
|
+
This is a small technical project with one maintainer. The expectations are
|
|
4
|
+
short, and they are the ones that actually matter for work like this.
|
|
5
|
+
|
|
6
|
+
## Expected
|
|
7
|
+
|
|
8
|
+
**Argue about the numbers, not the person.** This project exists to match a
|
|
9
|
+
reference implementation. Disagreements are settled by MATLAB line numbers,
|
|
10
|
+
test cases and measurements — not by seniority, tone or persistence.
|
|
11
|
+
|
|
12
|
+
**Say what you actually measured.** "I ran X and got Y" is worth more than "this
|
|
13
|
+
looks wrong". If you did not check, say you did not check.
|
|
14
|
+
|
|
15
|
+
**Accept being wrong quickly and without ceremony.** Everyone working on this
|
|
16
|
+
has been wrong about something in it, including the maintainer, repeatedly and
|
|
17
|
+
in writing. Correcting yourself costs nothing here.
|
|
18
|
+
|
|
19
|
+
**Assume the other person read the docs and still has a point.** If a question
|
|
20
|
+
seems obvious, the documentation may be at fault.
|
|
21
|
+
|
|
22
|
+
## Not acceptable
|
|
23
|
+
|
|
24
|
+
- Personal attacks, demeaning comments, or dismissing someone rather than their
|
|
25
|
+
argument.
|
|
26
|
+
- Harassment of any kind, including unwanted contact after being asked to stop.
|
|
27
|
+
- Comments about someone's identity, background, employer or perceived skill
|
|
28
|
+
level in place of engaging with what they said.
|
|
29
|
+
- Deliberately wasting maintainer time: reports known to be false, or pressure
|
|
30
|
+
to change the port ahead of the Reference Code.
|
|
31
|
+
|
|
32
|
+
## Scope
|
|
33
|
+
|
|
34
|
+
This applies in issues, commit messages and any other discussion on this
|
|
35
|
+
repository. It does not extend to IEEE 802.3 meetings, the reflector, or any
|
|
36
|
+
other venue — those have their own rules, and this document does not attempt to
|
|
37
|
+
speak for them.
|
|
38
|
+
|
|
39
|
+
## Enforcement
|
|
40
|
+
|
|
41
|
+
Report a problem by opening an issue, or by contacting the maintainer directly
|
|
42
|
+
if the issue tracker is not appropriate for it.
|
|
43
|
+
|
|
44
|
+
The maintainer decides, and the range of responses is: a request to change
|
|
45
|
+
behaviour, editing or removing a comment, closing a thread, or blocking an
|
|
46
|
+
account from the repository. Reports will be handled discreetly. There is no
|
|
47
|
+
committee and no appeals process — this is a one-person project, and pretending
|
|
48
|
+
otherwise would be dishonest.
|
|
49
|
+
|
|
50
|
+
## Attribution
|
|
51
|
+
|
|
52
|
+
The substance follows the spirit of the Contributor Covenant, rewritten to fit a
|
|
53
|
+
project of this size rather than adopted verbatim.
|