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.
Files changed (749) hide show
  1. sicopr-1.2.1/CHANGELOG.md +479 -0
  2. sicopr-1.2.1/CITATION.cff +43 -0
  3. sicopr-1.2.1/CODE_OF_CONDUCT.md +53 -0
  4. sicopr-1.2.1/CONTRIBUTING.md +374 -0
  5. sicopr-1.2.1/LICENSE +58 -0
  6. sicopr-1.2.1/MANIFEST.in +27 -0
  7. sicopr-1.2.1/MATLAB_Correlation_Review.md +574 -0
  8. sicopr-1.2.1/NOTICE +161 -0
  9. sicopr-1.2.1/PKG-INFO +396 -0
  10. sicopr-1.2.1/R/com_analysis.R +830 -0
  11. sicopr-1.2.1/R/corpus_report.R +289 -0
  12. sicopr-1.2.1/R/correlation_report.R +254 -0
  13. sicopr-1.2.1/R/run_com_analysis.R +28 -0
  14. sicopr-1.2.1/R/sweep_compare.R +342 -0
  15. sicopr-1.2.1/README.md +362 -0
  16. sicopr-1.2.1/SECURITY.md +60 -0
  17. sicopr-1.2.1/VERSION.json +55 -0
  18. sicopr-1.2.1/assemble_sicopr.py +601 -0
  19. sicopr-1.2.1/benchmark/208_case_4p15p0/README.md +59 -0
  20. sicopr-1.2.1/benchmark/208_case_4p15p0/cases_com_octave.csv +209 -0
  21. sicopr-1.2.1/benchmark/208_case_4p15p0/channels.csv +165 -0
  22. sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case1.xlsx +0 -0
  23. 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
  24. sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case2.xlsx +0 -0
  25. 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
  26. sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGB_06_2_2025__Case3.xlsx +0 -0
  27. 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
  28. sicopr-1.2.1/benchmark/208_case_4p15p0/configs/config_com_dj_200G_CAKR_178_PKGB_06_2_2025__Case4.xlsx +0 -0
  29. 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
  30. sicopr-1.2.1/benchmark/208_case_4p17p0/README.md +67 -0
  31. sicopr-1.2.1/benchmark/208_case_4p17p0/cases_com_octave.csv +209 -0
  32. sicopr-1.2.1/com_functions/__init__.py +0 -0
  33. sicopr-1.2.1/com_functions/fn/Apply_EQ/__init__.py +0 -0
  34. sicopr-1.2.1/com_functions/fn/Apply_EQ/py_impl.py +103 -0
  35. sicopr-1.2.1/com_functions/fn/Apply_EQ/test_verify.py +386 -0
  36. sicopr-1.2.1/com_functions/fn/Bathtub_Contribution_Wrapper/__init__.py +1 -0
  37. sicopr-1.2.1/com_functions/fn/Bathtub_Contribution_Wrapper/py_impl.py +131 -0
  38. sicopr-1.2.1/com_functions/fn/Bathtub_Contribution_Wrapper/test_verify.py +197 -0
  39. sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/__init__.py +0 -0
  40. sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/matlab_source.m +8 -0
  41. sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/py_impl.py +40 -0
  42. sicopr-1.2.1/com_functions/fn/Bessel_Thomson_Filter/test_verify.py +124 -0
  43. sicopr-1.2.1/com_functions/fn/Bread_Crumb_Chdata_Reduction/__init__.py +0 -0
  44. sicopr-1.2.1/com_functions/fn/Bread_Crumb_Chdata_Reduction/py_impl.py +37 -0
  45. sicopr-1.2.1/com_functions/fn/Bread_Crumb_Chdata_Reduction/test_verify.py +137 -0
  46. sicopr-1.2.1/com_functions/fn/Burst_Probability_Calc/__init__.py +0 -0
  47. sicopr-1.2.1/com_functions/fn/Burst_Probability_Calc/py_impl.py +125 -0
  48. sicopr-1.2.1/com_functions/fn/Burst_Probability_Calc/test_verify.py +156 -0
  49. sicopr-1.2.1/com_functions/fn/Butterworth_Filter/__init__.py +0 -0
  50. sicopr-1.2.1/com_functions/fn/Butterworth_Filter/matlab_source.m +6 -0
  51. sicopr-1.2.1/com_functions/fn/Butterworth_Filter/py_impl.py +38 -0
  52. sicopr-1.2.1/com_functions/fn/Butterworth_Filter/test_verify.py +148 -0
  53. sicopr-1.2.1/com_functions/fn/CDF_ev/__init__.py +0 -0
  54. sicopr-1.2.1/com_functions/fn/CDF_ev/matlab_source.m +3 -0
  55. sicopr-1.2.1/com_functions/fn/CDF_ev/py_impl.py +46 -0
  56. sicopr-1.2.1/com_functions/fn/CDF_ev/test_verify.py +114 -0
  57. sicopr-1.2.1/com_functions/fn/CDF_inv_ev/__init__.py +0 -0
  58. sicopr-1.2.1/com_functions/fn/CDF_inv_ev/matlab_source.m +7 -0
  59. sicopr-1.2.1/com_functions/fn/CDF_inv_ev/py_impl.py +28 -0
  60. sicopr-1.2.1/com_functions/fn/CDF_inv_ev/test_verify.py +113 -0
  61. sicopr-1.2.1/com_functions/fn/COM_CommandLine_Parse/__init__.py +0 -0
  62. sicopr-1.2.1/com_functions/fn/COM_CommandLine_Parse/py_impl.py +121 -0
  63. sicopr-1.2.1/com_functions/fn/COM_CommandLine_Parse/test_verify.py +192 -0
  64. sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/__init__.py +0 -0
  65. sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/matlab_source.m +161 -0
  66. sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/py_impl.py +288 -0
  67. sicopr-1.2.1/com_functions/fn/COM_FD_to_TD/test_verify.py +553 -0
  68. sicopr-1.2.1/com_functions/fn/COM_eye_width/__init__.py +0 -0
  69. sicopr-1.2.1/com_functions/fn/COM_eye_width/py_impl.py +447 -0
  70. sicopr-1.2.1/com_functions/fn/COM_eye_width/test_verify.py +445 -0
  71. sicopr-1.2.1/com_functions/fn/Create_Noise_PDF/__init__.py +0 -0
  72. sicopr-1.2.1/com_functions/fn/Create_Noise_PDF/py_impl.py +276 -0
  73. sicopr-1.2.1/com_functions/fn/Create_Noise_PDF/test_verify.py +302 -0
  74. sicopr-1.2.1/com_functions/fn/FD_CTLE/__init__.py +0 -0
  75. sicopr-1.2.1/com_functions/fn/FD_CTLE/matlab_source.m +2 -0
  76. sicopr-1.2.1/com_functions/fn/FD_CTLE/py_impl.py +18 -0
  77. sicopr-1.2.1/com_functions/fn/FD_CTLE/test_verify.py +135 -0
  78. sicopr-1.2.1/com_functions/fn/FD_Processing/__init__.py +0 -0
  79. sicopr-1.2.1/com_functions/fn/FD_Processing/py_impl.py +334 -0
  80. sicopr-1.2.1/com_functions/fn/FD_Processing/test_verify.py +627 -0
  81. sicopr-1.2.1/com_functions/fn/FFE/__init__.py +0 -0
  82. sicopr-1.2.1/com_functions/fn/FFE/matlab_source.m +17 -0
  83. sicopr-1.2.1/com_functions/fn/FFE/py_impl.py +51 -0
  84. sicopr-1.2.1/com_functions/fn/FFE/test_verify.py +129 -0
  85. sicopr-1.2.1/com_functions/fn/FFE_Fast/__init__.py +0 -0
  86. sicopr-1.2.1/com_functions/fn/FFE_Fast/matlab_source.m +14 -0
  87. sicopr-1.2.1/com_functions/fn/FFE_Fast/py_impl.py +30 -0
  88. sicopr-1.2.1/com_functions/fn/FFE_Fast/test_verify.py +113 -0
  89. sicopr-1.2.1/com_functions/fn/FOM_rxffe_floating_taps/__init__.py +0 -0
  90. sicopr-1.2.1/com_functions/fn/FOM_rxffe_floating_taps/py_impl.py +121 -0
  91. sicopr-1.2.1/com_functions/fn/FOM_rxffe_floating_taps/test_verify.py +239 -0
  92. sicopr-1.2.1/com_functions/fn/Fract_T_FFE/__init__.py +0 -0
  93. sicopr-1.2.1/com_functions/fn/Fract_T_FFE/matlab_source.m +10 -0
  94. sicopr-1.2.1/com_functions/fn/Fract_T_FFE/py_impl.py +39 -0
  95. sicopr-1.2.1/com_functions/fn/Fract_T_FFE/test_verify.py +104 -0
  96. sicopr-1.2.1/com_functions/fn/Full_Grid_Matrix/__init__.py +0 -0
  97. sicopr-1.2.1/com_functions/fn/Full_Grid_Matrix/py_impl.py +40 -0
  98. sicopr-1.2.1/com_functions/fn/Full_Grid_Matrix/test_verify.py +83 -0
  99. sicopr-1.2.1/com_functions/fn/H_interp/__init__.py +1 -0
  100. sicopr-1.2.1/com_functions/fn/H_interp/py_impl.py +44 -0
  101. sicopr-1.2.1/com_functions/fn/H_interp/test_verify.py +199 -0
  102. sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/__init__.py +0 -0
  103. sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/matlab_source.m +32 -0
  104. sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/py_impl.py +67 -0
  105. sicopr-1.2.1/com_functions/fn/Init_PDF_Fast/test_verify.py +186 -0
  106. sicopr-1.2.1/com_functions/fn/MLSE/__init__.py +0 -0
  107. sicopr-1.2.1/com_functions/fn/MLSE/py_impl.py +129 -0
  108. sicopr-1.2.1/com_functions/fn/MLSE/test_verify.py +223 -0
  109. sicopr-1.2.1/com_functions/fn/MLSE_U1_c_178A/__init__.py +0 -0
  110. sicopr-1.2.1/com_functions/fn/MLSE_U1_c_178A/py_impl.py +192 -0
  111. sicopr-1.2.1/com_functions/fn/MLSE_U1_c_178A/test_verify.py +138 -0
  112. sicopr-1.2.1/com_functions/fn/MMSE/__init__.py +0 -0
  113. sicopr-1.2.1/com_functions/fn/MMSE/py_impl.py +363 -0
  114. sicopr-1.2.1/com_functions/fn/MMSE/test_verify.py +441 -0
  115. sicopr-1.2.1/com_functions/fn/MMSE_FOM/__init__.py +0 -0
  116. sicopr-1.2.1/com_functions/fn/MMSE_FOM/py_impl.py +241 -0
  117. sicopr-1.2.1/com_functions/fn/MMSE_FOM/test_verify.py +457 -0
  118. sicopr-1.2.1/com_functions/fn/N_s/__init__.py +1 -0
  119. sicopr-1.2.1/com_functions/fn/N_s/py_impl.py +39 -0
  120. sicopr-1.2.1/com_functions/fn/N_s/test_verify.py +184 -0
  121. sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/__init__.py +0 -0
  122. sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/matlab_source.m +254 -0
  123. sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/py_impl.py +382 -0
  124. sicopr-1.2.1/com_functions/fn/OptFom_Adaptive_Local_Search/test_verify.py +391 -0
  125. sicopr-1.2.1/com_functions/fn/OptFom_Build_TXFFE/__init__.py +1 -0
  126. sicopr-1.2.1/com_functions/fn/OptFom_Build_TXFFE/py_impl.py +118 -0
  127. sicopr-1.2.1/com_functions/fn/OptFom_Build_TXFFE/test_verify.py +252 -0
  128. sicopr-1.2.1/com_functions/fn/OptFom_Calc_FOM/__init__.py +0 -0
  129. sicopr-1.2.1/com_functions/fn/OptFom_Calc_FOM/py_impl.py +102 -0
  130. sicopr-1.2.1/com_functions/fn/OptFom_Calc_FOM/test_verify.py +178 -0
  131. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/__init__.py +0 -0
  132. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/matlab_source.m +7 -0
  133. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/py_impl.py +49 -0
  134. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Hr/test_verify.py +174 -0
  135. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise/__init__.py +1 -0
  136. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise/py_impl.py +192 -0
  137. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise/test_verify.py +365 -0
  138. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise_XC/__init__.py +1 -0
  139. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise_XC/py_impl.py +69 -0
  140. sicopr-1.2.1/com_functions/fn/OptFom_Calc_Noise_XC/test_verify.py +175 -0
  141. sicopr-1.2.1/com_functions/fn/OptFom_Calculate_Settings/__init__.py +1 -0
  142. sicopr-1.2.1/com_functions/fn/OptFom_Calculate_Settings/py_impl.py +198 -0
  143. sicopr-1.2.1/com_functions/fn/OptFom_Calculate_Settings/test_verify.py +171 -0
  144. sicopr-1.2.1/com_functions/fn/OptFom_Compute_CTLE/__init__.py +1 -0
  145. sicopr-1.2.1/com_functions/fn/OptFom_Compute_CTLE/py_impl.py +144 -0
  146. sicopr-1.2.1/com_functions/fn/OptFom_Compute_CTLE/test_verify.py +255 -0
  147. sicopr-1.2.1/com_functions/fn/OptFom_Compute_DFE/__init__.py +1 -0
  148. sicopr-1.2.1/com_functions/fn/OptFom_Compute_DFE/py_impl.py +159 -0
  149. sicopr-1.2.1/com_functions/fn/OptFom_Compute_DFE/test_verify.py +351 -0
  150. sicopr-1.2.1/com_functions/fn/OptFom_Compute_RxFFE/__init__.py +0 -0
  151. sicopr-1.2.1/com_functions/fn/OptFom_Compute_RxFFE/py_impl.py +65 -0
  152. sicopr-1.2.1/com_functions/fn/OptFom_Compute_RxFFE/test_verify.py +239 -0
  153. sicopr-1.2.1/com_functions/fn/OptFom_Compute_TXFFE/__init__.py +0 -0
  154. sicopr-1.2.1/com_functions/fn/OptFom_Compute_TXFFE/py_impl.py +69 -0
  155. sicopr-1.2.1/com_functions/fn/OptFom_Compute_TXFFE/test_verify.py +165 -0
  156. sicopr-1.2.1/com_functions/fn/OptFom_Create_Output/__init__.py +1 -0
  157. sicopr-1.2.1/com_functions/fn/OptFom_Create_Output/py_impl.py +157 -0
  158. sicopr-1.2.1/com_functions/fn/OptFom_Create_Output/test_verify.py +262 -0
  159. sicopr-1.2.1/com_functions/fn/OptFom_FD_or_TD_Fields/__init__.py +1 -0
  160. sicopr-1.2.1/com_functions/fn/OptFom_FD_or_TD_Fields/py_impl.py +16 -0
  161. sicopr-1.2.1/com_functions/fn/OptFom_FD_or_TD_Fields/test_verify.py +79 -0
  162. sicopr-1.2.1/com_functions/fn/OptFom_Find_Sample_Point/__init__.py +1 -0
  163. sicopr-1.2.1/com_functions/fn/OptFom_Find_Sample_Point/py_impl.py +76 -0
  164. sicopr-1.2.1/com_functions/fn/OptFom_Find_Sample_Point/test_verify.py +128 -0
  165. sicopr-1.2.1/com_functions/fn/OptFom_Initialize_Loop_Struct/__init__.py +1 -0
  166. sicopr-1.2.1/com_functions/fn/OptFom_Initialize_Loop_Struct/py_impl.py +36 -0
  167. sicopr-1.2.1/com_functions/fn/OptFom_Initialize_Loop_Struct/test_verify.py +82 -0
  168. sicopr-1.2.1/com_functions/fn/OptFom_Itick_BoxSearch/__init__.py +1 -0
  169. sicopr-1.2.1/com_functions/fn/OptFom_Itick_BoxSearch/py_impl.py +52 -0
  170. sicopr-1.2.1/com_functions/fn/OptFom_Itick_BoxSearch/test_verify.py +171 -0
  171. sicopr-1.2.1/com_functions/fn/OptFom_Itick_LocalSearch/__init__.py +1 -0
  172. sicopr-1.2.1/com_functions/fn/OptFom_Itick_LocalSearch/py_impl.py +16 -0
  173. sicopr-1.2.1/com_functions/fn/OptFom_Itick_LocalSearch/test_verify.py +140 -0
  174. sicopr-1.2.1/com_functions/fn/OptFom_Local_Search/__init__.py +0 -0
  175. sicopr-1.2.1/com_functions/fn/OptFom_Local_Search/py_impl.py +51 -0
  176. sicopr-1.2.1/com_functions/fn/OptFom_Local_Search/test_verify.py +163 -0
  177. sicopr-1.2.1/com_functions/fn/OptFom_Plot_Best_Results/__init__.py +0 -0
  178. sicopr-1.2.1/com_functions/fn/OptFom_Plot_Best_Results/py_impl.py +103 -0
  179. sicopr-1.2.1/com_functions/fn/OptFom_Plot_Best_Results/test_verify.py +90 -0
  180. sicopr-1.2.1/com_functions/fn/OptFom_Set_Best_Itick/__init__.py +1 -0
  181. sicopr-1.2.1/com_functions/fn/OptFom_Set_Best_Itick/py_impl.py +14 -0
  182. sicopr-1.2.1/com_functions/fn/OptFom_Set_Best_Itick/test_verify.py +191 -0
  183. sicopr-1.2.1/com_functions/fn/OptFom_Setup_Sampler_Sweep/__init__.py +1 -0
  184. sicopr-1.2.1/com_functions/fn/OptFom_Setup_Sampler_Sweep/py_impl.py +52 -0
  185. sicopr-1.2.1/com_functions/fn/OptFom_Setup_Sampler_Sweep/test_verify.py +121 -0
  186. sicopr-1.2.1/com_functions/fn/OptFom_Update_BEST_Post_Optimize/__init__.py +0 -0
  187. sicopr-1.2.1/com_functions/fn/OptFom_Update_BEST_Post_Optimize/py_impl.py +173 -0
  188. sicopr-1.2.1/com_functions/fn/OptFom_Update_BEST_Post_Optimize/test_verify.py +292 -0
  189. sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Settings_EQ_Failed/__init__.py +0 -0
  190. sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Settings_EQ_Failed/py_impl.py +161 -0
  191. sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Settings_EQ_Failed/test_verify.py +180 -0
  192. sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Setttings/__init__.py +0 -0
  193. sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Setttings/py_impl.py +92 -0
  194. sicopr-1.2.1/com_functions/fn/OptFom_Update_Best_Setttings/test_verify.py +275 -0
  195. sicopr-1.2.1/com_functions/fn/Output_Arg_Fill/__init__.py +1 -0
  196. sicopr-1.2.1/com_functions/fn/Output_Arg_Fill/py_impl.py +354 -0
  197. sicopr-1.2.1/com_functions/fn/Output_Arg_Fill/test_verify.py +430 -0
  198. sicopr-1.2.1/com_functions/fn/PRBS13Q/__init__.py +1 -0
  199. sicopr-1.2.1/com_functions/fn/PRBS13Q/py_impl.py +65 -0
  200. sicopr-1.2.1/com_functions/fn/PRBS13Q/test_verify.py +232 -0
  201. sicopr-1.2.1/com_functions/fn/README.md +95 -0
  202. sicopr-1.2.1/com_functions/fn/RILN_TD/__init__.py +1 -0
  203. sicopr-1.2.1/com_functions/fn/RILN_TD/py_impl.py +190 -0
  204. sicopr-1.2.1/com_functions/fn/RILN_TD/test_verify.py +302 -0
  205. sicopr-1.2.1/com_functions/fn/RXFFE_Illegal/__init__.py +1 -0
  206. sicopr-1.2.1/com_functions/fn/RXFFE_Illegal/py_impl.py +33 -0
  207. sicopr-1.2.1/com_functions/fn/RXFFE_Illegal/test_verify.py +116 -0
  208. sicopr-1.2.1/com_functions/fn/R_series2/__init__.py +0 -0
  209. sicopr-1.2.1/com_functions/fn/R_series2/matlab_source.m +6 -0
  210. sicopr-1.2.1/com_functions/fn/R_series2/py_impl.py +57 -0
  211. sicopr-1.2.1/com_functions/fn/R_series2/test_verify.py +114 -0
  212. sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/__init__.py +0 -0
  213. sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/matlab_source.m +6 -0
  214. sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/py_impl.py +38 -0
  215. sicopr-1.2.1/com_functions/fn/Raised_Cosine_Filter/test_verify.py +153 -0
  216. sicopr-1.2.1/com_functions/fn/SL/__init__.py +1 -0
  217. sicopr-1.2.1/com_functions/fn/SL/py_impl.py +47 -0
  218. sicopr-1.2.1/com_functions/fn/SL/test_verify.py +194 -0
  219. sicopr-1.2.1/com_functions/fn/SNDR_ref/__init__.py +1 -0
  220. sicopr-1.2.1/com_functions/fn/SNDR_ref/py_impl.py +133 -0
  221. sicopr-1.2.1/com_functions/fn/SNDR_ref/test_verify.py +291 -0
  222. sicopr-1.2.1/com_functions/fn/S_IN/__init__.py +1 -0
  223. sicopr-1.2.1/com_functions/fn/S_IN/py_impl.py +58 -0
  224. sicopr-1.2.1/com_functions/fn/S_IN/test_verify.py +239 -0
  225. sicopr-1.2.1/com_functions/fn/S_RN/__init__.py +1 -0
  226. sicopr-1.2.1/com_functions/fn/S_RN/py_impl.py +28 -0
  227. sicopr-1.2.1/com_functions/fn/S_RN/test_verify.py +155 -0
  228. sicopr-1.2.1/com_functions/fn/TDR_ERL_Processing/__init__.py +0 -0
  229. sicopr-1.2.1/com_functions/fn/TDR_ERL_Processing/py_impl.py +137 -0
  230. sicopr-1.2.1/com_functions/fn/TDR_ERL_Processing/test_verify.py +296 -0
  231. sicopr-1.2.1/com_functions/fn/TD_CTLE/__init__.py +0 -0
  232. sicopr-1.2.1/com_functions/fn/TD_CTLE/matlab_source.m +16 -0
  233. sicopr-1.2.1/com_functions/fn/TD_CTLE/py_impl.py +56 -0
  234. sicopr-1.2.1/com_functions/fn/TD_CTLE/test_verify.py +174 -0
  235. sicopr-1.2.1/com_functions/fn/TD_FD_fillin/__init__.py +0 -0
  236. sicopr-1.2.1/com_functions/fn/TD_FD_fillin/py_impl.py +107 -0
  237. sicopr-1.2.1/com_functions/fn/TD_FD_fillin/test_verify.py +219 -0
  238. sicopr-1.2.1/com_functions/fn/Tukey_Window/__init__.py +0 -0
  239. sicopr-1.2.1/com_functions/fn/Tukey_Window/matlab_source.m +12 -0
  240. sicopr-1.2.1/com_functions/fn/Tukey_Window/py_impl.py +59 -0
  241. sicopr-1.2.1/com_functions/fn/Tukey_Window/test_verify.py +186 -0
  242. sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/__init__.py +0 -0
  243. sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/matlab_source.m +41 -0
  244. sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/py_impl.py +62 -0
  245. sicopr-1.2.1/com_functions/fn/Tx_FFE_Filter/test_verify.py +132 -0
  246. sicopr-1.2.1/com_functions/fn/Write_CSV/__init__.py +1 -0
  247. sicopr-1.2.1/com_functions/fn/Write_CSV/py_impl.py +117 -0
  248. sicopr-1.2.1/com_functions/fn/Write_CSV/test_verify.py +185 -0
  249. sicopr-1.2.1/com_functions/fn/__init__.py +0 -0
  250. sicopr-1.2.1/com_functions/fn/add_brd/__init__.py +0 -0
  251. sicopr-1.2.1/com_functions/fn/add_brd/py_impl.py +76 -0
  252. sicopr-1.2.1/com_functions/fn/add_brd/test_verify.py +184 -0
  253. sicopr-1.2.1/com_functions/fn/add_brdorig/__init__.py +1 -0
  254. sicopr-1.2.1/com_functions/fn/add_brdorig/py_impl.py +48 -0
  255. sicopr-1.2.1/com_functions/fn/add_brdorig/test_verify.py +196 -0
  256. sicopr-1.2.1/com_functions/fn/add_pkg_with_die/__init__.py +0 -0
  257. sicopr-1.2.1/com_functions/fn/add_pkg_with_die/py_impl.py +94 -0
  258. sicopr-1.2.1/com_functions/fn/add_pkg_with_die/test_verify.py +206 -0
  259. sicopr-1.2.1/com_functions/fn/adjust_Rx_noise_for_quantization/__init__.py +0 -0
  260. sicopr-1.2.1/com_functions/fn/adjust_Rx_noise_for_quantization/py_impl.py +143 -0
  261. sicopr-1.2.1/com_functions/fn/adjust_Rx_noise_for_quantization/test_verify.py +187 -0
  262. sicopr-1.2.1/com_functions/fn/append_csv_row/__init__.py +0 -0
  263. sicopr-1.2.1/com_functions/fn/append_csv_row/matlab_source.m +31 -0
  264. sicopr-1.2.1/com_functions/fn/append_csv_row/py_impl.py +107 -0
  265. sicopr-1.2.1/com_functions/fn/append_csv_row/test_verify.py +147 -0
  266. sicopr-1.2.1/com_functions/fn/applyDFEbk/__init__.py +1 -0
  267. sicopr-1.2.1/com_functions/fn/applyDFEbk/py_impl.py +65 -0
  268. sicopr-1.2.1/com_functions/fn/applyDFEbk/test_verify.py +219 -0
  269. sicopr-1.2.1/com_functions/fn/auto_port_order/__init__.py +0 -0
  270. sicopr-1.2.1/com_functions/fn/auto_port_order/matlab_source.m +126 -0
  271. sicopr-1.2.1/com_functions/fn/auto_port_order/py_impl.py +150 -0
  272. sicopr-1.2.1/com_functions/fn/auto_port_order/test_verify.py +159 -0
  273. sicopr-1.2.1/com_functions/fn/bessel/__init__.py +0 -0
  274. sicopr-1.2.1/com_functions/fn/bessel/matlab_source.m +6 -0
  275. sicopr-1.2.1/com_functions/fn/bessel/py_impl.py +53 -0
  276. sicopr-1.2.1/com_functions/fn/bessel/test_verify.py +139 -0
  277. sicopr-1.2.1/com_functions/fn/calculate_delay_CausalityEnforcement/__init__.py +0 -0
  278. sicopr-1.2.1/com_functions/fn/calculate_delay_CausalityEnforcement/py_impl.py +138 -0
  279. sicopr-1.2.1/com_functions/fn/calculate_delay_CausalityEnforcement/test_verify.py +200 -0
  280. sicopr-1.2.1/com_functions/fn/capture_RIL_RILN/__init__.py +0 -0
  281. sicopr-1.2.1/com_functions/fn/capture_RIL_RILN/py_impl.py +131 -0
  282. sicopr-1.2.1/com_functions/fn/capture_RIL_RILN/test_verify.py +228 -0
  283. sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/__init__.py +0 -0
  284. sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/matlab_source.m +12 -0
  285. sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/py_impl.py +59 -0
  286. sicopr-1.2.1/com_functions/fn/cdf_to_ber_contour/test_verify.py +147 -0
  287. sicopr-1.2.1/com_functions/fn/com_ieee8023_/__init__.py +0 -0
  288. sicopr-1.2.1/com_functions/fn/com_ieee8023_/py_impl.py +554 -0
  289. sicopr-1.2.1/com_functions/fn/com_ieee8023_/test_verify.py +569 -0
  290. sicopr-1.2.1/com_functions/fn/comb_fct/__init__.py +0 -0
  291. sicopr-1.2.1/com_functions/fn/comb_fct/matlab_source.m +26 -0
  292. sicopr-1.2.1/com_functions/fn/comb_fct/py_impl.py +55 -0
  293. sicopr-1.2.1/com_functions/fn/comb_fct/test_verify.py +147 -0
  294. sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/__init__.py +0 -0
  295. sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/matlab_source.m +41 -0
  296. sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/py_impl.py +98 -0
  297. sicopr-1.2.1/com_functions/fn/combine_pdf_same_voltage_axis/test_verify.py +208 -0
  298. sicopr-1.2.1/com_functions/fn/combines4p/__init__.py +1 -0
  299. sicopr-1.2.1/com_functions/fn/combines4p/py_impl.py +16 -0
  300. sicopr-1.2.1/com_functions/fn/combines4p/test_verify.py +144 -0
  301. sicopr-1.2.1/com_functions/fn/compute_hard_cap/__init__.py +0 -0
  302. sicopr-1.2.1/com_functions/fn/compute_hard_cap/matlab_source.m +7 -0
  303. sicopr-1.2.1/com_functions/fn/compute_hard_cap/py_impl.py +59 -0
  304. sicopr-1.2.1/com_functions/fn/compute_hard_cap/test_verify.py +94 -0
  305. sicopr-1.2.1/com_functions/fn/conv_fct/__init__.py +0 -0
  306. sicopr-1.2.1/com_functions/fn/conv_fct/matlab_source.m +14 -0
  307. sicopr-1.2.1/com_functions/fn/conv_fct/py_impl.py +156 -0
  308. sicopr-1.2.1/com_functions/fn/conv_fct/test_verify.py +262 -0
  309. sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/__init__.py +0 -0
  310. sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/matlab_source.m +16 -0
  311. sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/py_impl.py +152 -0
  312. sicopr-1.2.1/com_functions/fn/conv_fct_MeanNotZero/test_verify.py +207 -0
  313. sicopr-1.2.1/com_functions/fn/cursor_sample_index/__init__.py +1 -0
  314. sicopr-1.2.1/com_functions/fn/cursor_sample_index/py_impl.py +66 -0
  315. sicopr-1.2.1/com_functions/fn/cursor_sample_index/test_verify.py +148 -0
  316. sicopr-1.2.1/com_functions/fn/d_cpdf/__init__.py +0 -0
  317. sicopr-1.2.1/com_functions/fn/d_cpdf/matlab_source.m +51 -0
  318. sicopr-1.2.1/com_functions/fn/d_cpdf/py_impl.py +108 -0
  319. sicopr-1.2.1/com_functions/fn/d_cpdf/test_verify.py +184 -0
  320. sicopr-1.2.1/com_functions/fn/dfe_clipper/__init__.py +0 -0
  321. sicopr-1.2.1/com_functions/fn/dfe_clipper/matlab_source.m +12 -0
  322. sicopr-1.2.1/com_functions/fn/dfe_clipper/py_impl.py +85 -0
  323. sicopr-1.2.1/com_functions/fn/dfe_clipper/test_verify.py +181 -0
  324. sicopr-1.2.1/com_functions/fn/end_display_control/__init__.py +1 -0
  325. sicopr-1.2.1/com_functions/fn/end_display_control/py_impl.py +142 -0
  326. sicopr-1.2.1/com_functions/fn/end_display_control/test_verify.py +276 -0
  327. sicopr-1.2.1/com_functions/fn/find_eye_width/__init__.py +0 -0
  328. sicopr-1.2.1/com_functions/fn/find_eye_width/py_impl.py +89 -0
  329. sicopr-1.2.1/com_functions/fn/find_eye_width/test_verify.py +129 -0
  330. sicopr-1.2.1/com_functions/fn/findbankloc/__init__.py +1 -0
  331. sicopr-1.2.1/com_functions/fn/findbankloc/py_impl.py +195 -0
  332. sicopr-1.2.1/com_functions/fn/findbankloc/test_verify.py +138 -0
  333. sicopr-1.2.1/com_functions/fn/floatingDFE/__init__.py +1 -0
  334. sicopr-1.2.1/com_functions/fn/floatingDFE/py_impl.py +33 -0
  335. sicopr-1.2.1/com_functions/fn/floatingDFE/test_verify.py +236 -0
  336. sicopr-1.2.1/com_functions/fn/floating_taps_1sttest/__init__.py +1 -0
  337. sicopr-1.2.1/com_functions/fn/floating_taps_1sttest/py_impl.py +167 -0
  338. sicopr-1.2.1/com_functions/fn/floating_taps_1sttest/test_verify.py +184 -0
  339. sicopr-1.2.1/com_functions/fn/force/__init__.py +0 -0
  340. sicopr-1.2.1/com_functions/fn/force/py_impl.py +429 -0
  341. sicopr-1.2.1/com_functions/fn/force/test_verify.py +339 -0
  342. sicopr-1.2.1/com_functions/fn/get_ACBW/__init__.py +1 -0
  343. sicopr-1.2.1/com_functions/fn/get_ACBW/py_impl.py +74 -0
  344. sicopr-1.2.1/com_functions/fn/get_ACBW/test_verify.py +85 -0
  345. sicopr-1.2.1/com_functions/fn/get_BW_from_CICP_residual/__init__.py +1 -0
  346. sicopr-1.2.1/com_functions/fn/get_BW_from_CICP_residual/py_impl.py +106 -0
  347. sicopr-1.2.1/com_functions/fn/get_BW_from_CICP_residual/test_verify.py +105 -0
  348. sicopr-1.2.1/com_functions/fn/get_CICP_fit_residual/__init__.py +1 -0
  349. sicopr-1.2.1/com_functions/fn/get_CICP_fit_residual/py_impl.py +69 -0
  350. sicopr-1.2.1/com_functions/fn/get_CICP_fit_residual/test_verify.py +60 -0
  351. sicopr-1.2.1/com_functions/fn/get_CICP_fit_sweep/__init__.py +1 -0
  352. sicopr-1.2.1/com_functions/fn/get_CICP_fit_sweep/py_impl.py +88 -0
  353. sicopr-1.2.1/com_functions/fn/get_CICP_fit_sweep/test_verify.py +61 -0
  354. sicopr-1.2.1/com_functions/fn/get_ILN/__init__.py +1 -0
  355. sicopr-1.2.1/com_functions/fn/get_ILN/py_impl.py +67 -0
  356. sicopr-1.2.1/com_functions/fn/get_ILN/test_verify.py +209 -0
  357. sicopr-1.2.1/com_functions/fn/get_ILN_cmp_td/__init__.py +0 -0
  358. sicopr-1.2.1/com_functions/fn/get_ILN_cmp_td/py_impl.py +268 -0
  359. sicopr-1.2.1/com_functions/fn/get_ILN_cmp_td/test_verify.py +266 -0
  360. sicopr-1.2.1/com_functions/fn/get_PSDs/__init__.py +0 -0
  361. sicopr-1.2.1/com_functions/fn/get_PSDs/matlab_source.m +275 -0
  362. sicopr-1.2.1/com_functions/fn/get_PSDs/py_impl.py +542 -0
  363. sicopr-1.2.1/com_functions/fn/get_PSDs/test_verify.py +746 -0
  364. sicopr-1.2.1/com_functions/fn/get_PulseR/__init__.py +1 -0
  365. sicopr-1.2.1/com_functions/fn/get_PulseR/py_impl.py +78 -0
  366. sicopr-1.2.1/com_functions/fn/get_PulseR/test_verify.py +303 -0
  367. sicopr-1.2.1/com_functions/fn/get_RAW_FIR/__init__.py +1 -0
  368. sicopr-1.2.1/com_functions/fn/get_RAW_FIR/py_impl.py +13 -0
  369. sicopr-1.2.1/com_functions/fn/get_RAW_FIR/test_verify.py +104 -0
  370. sicopr-1.2.1/com_functions/fn/get_RILN_cmp_td/__init__.py +0 -0
  371. sicopr-1.2.1/com_functions/fn/get_RILN_cmp_td/py_impl.py +266 -0
  372. sicopr-1.2.1/com_functions/fn/get_RILN_cmp_td/test_verify.py +416 -0
  373. sicopr-1.2.1/com_functions/fn/get_StepR/__init__.py +1 -0
  374. sicopr-1.2.1/com_functions/fn/get_StepR/py_impl.py +72 -0
  375. sicopr-1.2.1/com_functions/fn/get_StepR/test_verify.py +172 -0
  376. sicopr-1.2.1/com_functions/fn/get_TDR/__init__.py +0 -0
  377. sicopr-1.2.1/com_functions/fn/get_TDR/py_impl.py +444 -0
  378. sicopr-1.2.1/com_functions/fn/get_TDR/test_verify.py +564 -0
  379. sicopr-1.2.1/com_functions/fn/get_TD_files/__init__.py +0 -0
  380. sicopr-1.2.1/com_functions/fn/get_TD_files/py_impl.py +127 -0
  381. sicopr-1.2.1/com_functions/fn/get_TD_files/test_verify.py +148 -0
  382. sicopr-1.2.1/com_functions/fn/get_center_of_UI/__init__.py +0 -0
  383. sicopr-1.2.1/com_functions/fn/get_center_of_UI/matlab_source.m +11 -0
  384. sicopr-1.2.1/com_functions/fn/get_center_of_UI/py_impl.py +32 -0
  385. sicopr-1.2.1/com_functions/fn/get_center_of_UI/test_verify.py +85 -0
  386. sicopr-1.2.1/com_functions/fn/get_cm_noise/__init__.py +1 -0
  387. sicopr-1.2.1/com_functions/fn/get_cm_noise/py_impl.py +153 -0
  388. sicopr-1.2.1/com_functions/fn/get_cm_noise/test_verify.py +133 -0
  389. sicopr-1.2.1/com_functions/fn/get_pdf/__init__.py +0 -0
  390. sicopr-1.2.1/com_functions/fn/get_pdf/py_impl.py +263 -0
  391. sicopr-1.2.1/com_functions/fn/get_pdf/test_verify.py +241 -0
  392. sicopr-1.2.1/com_functions/fn/get_pdf_from_sampled_signal/__init__.py +1 -0
  393. sicopr-1.2.1/com_functions/fn/get_pdf_from_sampled_signal/py_impl.py +116 -0
  394. sicopr-1.2.1/com_functions/fn/get_pdf_from_sampled_signal/test_verify.py +171 -0
  395. sicopr-1.2.1/com_functions/fn/get_pdf_full/__init__.py +0 -0
  396. sicopr-1.2.1/com_functions/fn/get_pdf_full/py_impl.py +290 -0
  397. sicopr-1.2.1/com_functions/fn/get_pdf_full/test_verify.py +267 -0
  398. sicopr-1.2.1/com_functions/fn/get_s4p_files/__init__.py +0 -0
  399. sicopr-1.2.1/com_functions/fn/get_s4p_files/py_impl.py +93 -0
  400. sicopr-1.2.1/com_functions/fn/get_s4p_files/test_verify.py +191 -0
  401. sicopr-1.2.1/com_functions/fn/get_sigma_eta_ACCM_noise/__init__.py +1 -0
  402. sicopr-1.2.1/com_functions/fn/get_sigma_eta_ACCM_noise/py_impl.py +43 -0
  403. sicopr-1.2.1/com_functions/fn/get_sigma_eta_ACCM_noise/test_verify.py +150 -0
  404. sicopr-1.2.1/com_functions/fn/get_sigma_noise/__init__.py +1 -0
  405. sicopr-1.2.1/com_functions/fn/get_sigma_noise/py_impl.py +49 -0
  406. sicopr-1.2.1/com_functions/fn/get_sigma_noise/test_verify.py +158 -0
  407. sicopr-1.2.1/com_functions/fn/get_xtlk_noise/__init__.py +0 -0
  408. sicopr-1.2.1/com_functions/fn/get_xtlk_noise/py_impl.py +195 -0
  409. sicopr-1.2.1/com_functions/fn/get_xtlk_noise/test_verify.py +199 -0
  410. sicopr-1.2.1/com_functions/fn/hrem/__init__.py +0 -0
  411. sicopr-1.2.1/com_functions/fn/hrem/matlab_source.m +3 -0
  412. sicopr-1.2.1/com_functions/fn/hrem/py_impl.py +59 -0
  413. sicopr-1.2.1/com_functions/fn/hrem/test_verify.py +126 -0
  414. sicopr-1.2.1/com_functions/fn/interp_Sparam/__init__.py +0 -0
  415. sicopr-1.2.1/com_functions/fn/interp_Sparam/py_impl.py +331 -0
  416. sicopr-1.2.1/com_functions/fn/interp_Sparam/test_verify.py +412 -0
  417. sicopr-1.2.1/com_functions/fn/make_full_pkg/__init__.py +0 -0
  418. sicopr-1.2.1/com_functions/fn/make_full_pkg/py_impl.py +320 -0
  419. sicopr-1.2.1/com_functions/fn/make_full_pkg/test_verify.py +311 -0
  420. sicopr-1.2.1/com_functions/fn/make_pkg/__init__.py +1 -0
  421. sicopr-1.2.1/com_functions/fn/make_pkg/py_impl.py +60 -0
  422. sicopr-1.2.1/com_functions/fn/make_pkg/test_verify.py +227 -0
  423. sicopr-1.2.1/com_functions/fn/missingParameter/__init__.py +0 -0
  424. sicopr-1.2.1/com_functions/fn/missingParameter/matlab_source.m +3 -0
  425. sicopr-1.2.1/com_functions/fn/missingParameter/py_impl.py +28 -0
  426. sicopr-1.2.1/com_functions/fn/missingParameter/test_verify.py +42 -0
  427. sicopr-1.2.1/com_functions/fn/normal_dist/__init__.py +0 -0
  428. sicopr-1.2.1/com_functions/fn/normal_dist/matlab_source.m +6 -0
  429. sicopr-1.2.1/com_functions/fn/normal_dist/py_impl.py +57 -0
  430. sicopr-1.2.1/com_functions/fn/normal_dist/test_verify.py +183 -0
  431. sicopr-1.2.1/com_functions/fn/optimize_fom/__init__.py +0 -0
  432. sicopr-1.2.1/com_functions/fn/optimize_fom/py_impl.py +462 -0
  433. sicopr-1.2.1/com_functions/fn/optimize_fom/test_verify.py +1305 -0
  434. sicopr-1.2.1/com_functions/fn/pam/__init__.py +0 -0
  435. sicopr-1.2.1/com_functions/fn/pam/matlab_source.m +13 -0
  436. sicopr-1.2.1/com_functions/fn/pam/py_impl.py +67 -0
  437. sicopr-1.2.1/com_functions/fn/pam/test_verify.py +111 -0
  438. sicopr-1.2.1/com_functions/fn/parameter_size_adjustment/__init__.py +0 -0
  439. sicopr-1.2.1/com_functions/fn/parameter_size_adjustment/py_impl.py +128 -0
  440. sicopr-1.2.1/com_functions/fn/parameter_size_adjustment/test_verify.py +147 -0
  441. sicopr-1.2.1/com_functions/fn/pdf2sgm/__init__.py +0 -0
  442. sicopr-1.2.1/com_functions/fn/pdf2sgm/matlab_source.m +3 -0
  443. sicopr-1.2.1/com_functions/fn/pdf2sgm/py_impl.py +37 -0
  444. sicopr-1.2.1/com_functions/fn/pdf2sgm/test_verify.py +105 -0
  445. sicopr-1.2.1/com_functions/fn/pdf_to_cdf/__init__.py +0 -0
  446. sicopr-1.2.1/com_functions/fn/pdf_to_cdf/matlab_source.m +12 -0
  447. sicopr-1.2.1/com_functions/fn/pdf_to_cdf/py_impl.py +49 -0
  448. sicopr-1.2.1/com_functions/fn/pdf_to_cdf/test_verify.py +178 -0
  449. sicopr-1.2.1/com_functions/fn/plot_bathtub_curves/__init__.py +0 -0
  450. sicopr-1.2.1/com_functions/fn/plot_bathtub_curves/py_impl.py +69 -0
  451. sicopr-1.2.1/com_functions/fn/plot_bathtub_curves/test_verify.py +108 -0
  452. sicopr-1.2.1/com_functions/fn/plot_modal/__init__.py +0 -0
  453. sicopr-1.2.1/com_functions/fn/plot_modal/py_impl.py +135 -0
  454. sicopr-1.2.1/com_functions/fn/plot_modal/test_verify.py +163 -0
  455. sicopr-1.2.1/com_functions/fn/plot_pie_com/__init__.py +0 -0
  456. sicopr-1.2.1/com_functions/fn/plot_pie_com/py_impl.py +73 -0
  457. sicopr-1.2.1/com_functions/fn/plot_pie_com/test_verify.py +61 -0
  458. sicopr-1.2.1/com_functions/fn/process_sxp/__init__.py +0 -0
  459. sicopr-1.2.1/com_functions/fn/process_sxp/py_impl.py +379 -0
  460. sicopr-1.2.1/com_functions/fn/process_sxp/test_verify.py +460 -0
  461. sicopr-1.2.1/com_functions/fn/r_parrelell2/__init__.py +0 -0
  462. sicopr-1.2.1/com_functions/fn/r_parrelell2/matlab_source.m +5 -0
  463. sicopr-1.2.1/com_functions/fn/r_parrelell2/py_impl.py +60 -0
  464. sicopr-1.2.1/com_functions/fn/r_parrelell2/test_verify.py +113 -0
  465. sicopr-1.2.1/com_functions/fn/rangelimit/__init__.py +1 -0
  466. sicopr-1.2.1/com_functions/fn/rangelimit/py_impl.py +27 -0
  467. sicopr-1.2.1/com_functions/fn/rangelimit/test_verify.py +171 -0
  468. sicopr-1.2.1/com_functions/fn/read_Nport_touchstone/__init__.py +0 -0
  469. sicopr-1.2.1/com_functions/fn/read_Nport_touchstone/py_impl.py +155 -0
  470. sicopr-1.2.1/com_functions/fn/read_Nport_touchstone/test_verify.py +271 -0
  471. sicopr-1.2.1/com_functions/fn/read_PR_files/__init__.py +0 -0
  472. sicopr-1.2.1/com_functions/fn/read_PR_files/py_impl.py +44 -0
  473. sicopr-1.2.1/com_functions/fn/read_PR_files/test_verify.py +165 -0
  474. sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/__init__.py +0 -0
  475. sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/matlab_source.m +658 -0
  476. sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/py_impl.py +1067 -0
  477. sicopr-1.2.1/com_functions/fn/read_ParamConfigFile/test_verify.py +907 -0
  478. sicopr-1.2.1/com_functions/fn/read_p2_s2params/__init__.py +0 -0
  479. sicopr-1.2.1/com_functions/fn/read_p2_s2params/py_impl.py +71 -0
  480. sicopr-1.2.1/com_functions/fn/read_p2_s2params/test_verify.py +196 -0
  481. sicopr-1.2.1/com_functions/fn/read_p4_s4params/__init__.py +0 -0
  482. sicopr-1.2.1/com_functions/fn/read_p4_s4params/py_impl.py +120 -0
  483. sicopr-1.2.1/com_functions/fn/read_p4_s4params/test_verify.py +298 -0
  484. sicopr-1.2.1/com_functions/fn/read_package_parameters/__init__.py +0 -0
  485. sicopr-1.2.1/com_functions/fn/read_package_parameters/py_impl.py +137 -0
  486. sicopr-1.2.1/com_functions/fn/read_package_parameters/test_verify.py +343 -0
  487. sicopr-1.2.1/com_functions/fn/read_s4p_files/__init__.py +0 -0
  488. sicopr-1.2.1/com_functions/fn/read_s4p_files/py_impl.py +917 -0
  489. sicopr-1.2.1/com_functions/fn/read_s4p_files/test_verify.py +705 -0
  490. sicopr-1.2.1/com_functions/fn/readdataSnPx/__init__.py +0 -0
  491. sicopr-1.2.1/com_functions/fn/readdataSnPx/py_impl.py +164 -0
  492. sicopr-1.2.1/com_functions/fn/readdataSnPx/test_verify.py +328 -0
  493. sicopr-1.2.1/com_functions/fn/recolor_plots/__init__.py +0 -0
  494. sicopr-1.2.1/com_functions/fn/recolor_plots/matlab_source.m +14 -0
  495. sicopr-1.2.1/com_functions/fn/recolor_plots/py_impl.py +26 -0
  496. sicopr-1.2.1/com_functions/fn/recolor_plots/test_verify.py +32 -0
  497. sicopr-1.2.1/com_functions/fn/s21_pkg/__init__.py +0 -0
  498. sicopr-1.2.1/com_functions/fn/s21_pkg/py_impl.py +442 -0
  499. sicopr-1.2.1/com_functions/fn/s21_pkg/test_verify.py +317 -0
  500. sicopr-1.2.1/com_functions/fn/s21_to_impulse_DC/__init__.py +0 -0
  501. sicopr-1.2.1/com_functions/fn/s21_to_impulse_DC/py_impl.py +372 -0
  502. sicopr-1.2.1/com_functions/fn/s21_to_impulse_DC/test_verify.py +447 -0
  503. sicopr-1.2.1/com_functions/fn/s_for_c2/__init__.py +0 -0
  504. sicopr-1.2.1/com_functions/fn/s_for_c2/matlab_source.m +7 -0
  505. sicopr-1.2.1/com_functions/fn/s_for_c2/py_impl.py +52 -0
  506. sicopr-1.2.1/com_functions/fn/s_for_c2/test_verify.py +106 -0
  507. sicopr-1.2.1/com_functions/fn/s_for_c4/__init__.py +0 -0
  508. sicopr-1.2.1/com_functions/fn/s_for_c4/matlab_source.m +5 -0
  509. sicopr-1.2.1/com_functions/fn/s_for_c4/py_impl.py +65 -0
  510. sicopr-1.2.1/com_functions/fn/s_for_c4/test_verify.py +146 -0
  511. sicopr-1.2.1/com_functions/fn/save_cmd_line/__init__.py +1 -0
  512. sicopr-1.2.1/com_functions/fn/save_cmd_line/py_impl.py +7 -0
  513. sicopr-1.2.1/com_functions/fn/save_cmd_line/test_verify.py +56 -0
  514. sicopr-1.2.1/com_functions/fn/savefigs/__init__.py +0 -0
  515. sicopr-1.2.1/com_functions/fn/savefigs/py_impl.py +49 -0
  516. sicopr-1.2.1/com_functions/fn/savefigs/test_verify.py +53 -0
  517. sicopr-1.2.1/com_functions/fn/savefigs_png/__init__.py +0 -0
  518. sicopr-1.2.1/com_functions/fn/savefigs_png/py_impl.py +47 -0
  519. sicopr-1.2.1/com_functions/fn/savefigs_png/test_verify.py +58 -0
  520. sicopr-1.2.1/com_functions/fn/scaleCDF/__init__.py +0 -0
  521. sicopr-1.2.1/com_functions/fn/scaleCDF/matlab_source.m +11 -0
  522. sicopr-1.2.1/com_functions/fn/scaleCDF/py_impl.py +71 -0
  523. sicopr-1.2.1/com_functions/fn/scaleCDF/test_verify.py +138 -0
  524. sicopr-1.2.1/com_functions/fn/scalePDF/__init__.py +0 -0
  525. sicopr-1.2.1/com_functions/fn/scalePDF/matlab_source.m +8 -0
  526. sicopr-1.2.1/com_functions/fn/scalePDF/py_impl.py +62 -0
  527. sicopr-1.2.1/com_functions/fn/scalePDF/test_verify.py +181 -0
  528. sicopr-1.2.1/com_functions/fn/stot/__init__.py +0 -0
  529. sicopr-1.2.1/com_functions/fn/stot/matlab_source.m +6 -0
  530. sicopr-1.2.1/com_functions/fn/stot/py_impl.py +53 -0
  531. sicopr-1.2.1/com_functions/fn/stot/test_verify.py +139 -0
  532. sicopr-1.2.1/com_functions/fn/str2csv/__init__.py +0 -0
  533. sicopr-1.2.1/com_functions/fn/str2csv/matlab_source.m +7 -0
  534. sicopr-1.2.1/com_functions/fn/str2csv/py_impl.py +29 -0
  535. sicopr-1.2.1/com_functions/fn/str2csv/test_verify.py +73 -0
  536. sicopr-1.2.1/com_functions/fn/synth_tline/__init__.py +0 -0
  537. sicopr-1.2.1/com_functions/fn/synth_tline/matlab_source.m +25 -0
  538. sicopr-1.2.1/com_functions/fn/synth_tline/py_impl.py +87 -0
  539. sicopr-1.2.1/com_functions/fn/synth_tline/test_verify.py +170 -0
  540. sicopr-1.2.1/com_functions/fn/ttos/__init__.py +0 -0
  541. sicopr-1.2.1/com_functions/fn/ttos/matlab_source.m +6 -0
  542. sicopr-1.2.1/com_functions/fn/ttos/py_impl.py +51 -0
  543. sicopr-1.2.1/com_functions/fn/ttos/test_verify.py +129 -0
  544. sicopr-1.2.1/com_functions/fn/varargin_extractor/__init__.py +0 -0
  545. sicopr-1.2.1/com_functions/fn/varargin_extractor/matlab_source.m +9 -0
  546. sicopr-1.2.1/com_functions/fn/varargin_extractor/py_impl.py +31 -0
  547. sicopr-1.2.1/com_functions/fn/varargin_extractor/test_verify.py +86 -0
  548. sicopr-1.2.1/com_functions/fn/vma/__init__.py +1 -0
  549. sicopr-1.2.1/com_functions/fn/vma/py_impl.py +73 -0
  550. sicopr-1.2.1/com_functions/fn/vma/test_verify.py +149 -0
  551. sicopr-1.2.1/com_functions/fn/vref_intersect/__init__.py +0 -0
  552. sicopr-1.2.1/com_functions/fn/vref_intersect/matlab_source.m +13 -0
  553. sicopr-1.2.1/com_functions/fn/vref_intersect/py_impl.py +60 -0
  554. sicopr-1.2.1/com_functions/fn/vref_intersect/test_verify.py +129 -0
  555. sicopr-1.2.1/com_functions/fn/writecsv_transposed/__init__.py +1 -0
  556. sicopr-1.2.1/com_functions/fn/writecsv_transposed/py_impl.py +133 -0
  557. sicopr-1.2.1/com_functions/fn/writecsv_transposed/test_verify.py +174 -0
  558. sicopr-1.2.1/com_functions/fn/xls_parameter/__init__.py +1 -0
  559. sicopr-1.2.1/com_functions/fn/xls_parameter/py_impl.py +341 -0
  560. sicopr-1.2.1/com_functions/fn/xls_parameter/test_verify.py +229 -0
  561. sicopr-1.2.1/com_functions/fn/xls_parameter_txffe/__init__.py +1 -0
  562. sicopr-1.2.1/com_functions/fn/xls_parameter_txffe/py_impl.py +31 -0
  563. sicopr-1.2.1/com_functions/fn/xls_parameter_txffe/test_verify.py +235 -0
  564. sicopr-1.2.1/com_functions/fn/zzz_list_of_changes/__init__.py +0 -0
  565. sicopr-1.2.1/com_functions/fn/zzz_list_of_changes/py_impl.py +17 -0
  566. sicopr-1.2.1/com_functions/fn/zzz_list_of_changes/test_verify.py +26 -0
  567. sicopr-1.2.1/com_functions/inlined_copies.json +2320 -0
  568. sicopr-1.2.1/com_functions/registry.json +2035 -0
  569. sicopr-1.2.1/com_functions/shared/__init__.py +0 -0
  570. sicopr-1.2.1/com_functions/shared/conftest.py +6 -0
  571. sicopr-1.2.1/com_functions/shared/matlab_helpers.py +28 -0
  572. sicopr-1.2.1/com_functions/verification/approved/2026-09-23-223c48fec.txt +30 -0
  573. sicopr-1.2.1/com_functions/verification/approved/2026-09-23-600b427d2.txt +30 -0
  574. sicopr-1.2.1/com_functions/verification/approved/2026-09-23-644258e1d.txt +30 -0
  575. sicopr-1.2.1/com_functions/verification/approved/2026-09-23-8a69c29c4.txt +30 -0
  576. sicopr-1.2.1/com_functions/verification/approved/2026-09-23-e82669f2d.txt +30 -0
  577. sicopr-1.2.1/com_functions/verification/approved/2026-10-16-deedd6c59.txt +30 -0
  578. sicopr-1.2.1/com_functions/verification/approved/2026-10-21-3d9d3c24b.txt +30 -0
  579. sicopr-1.2.1/com_functions/verification/approved/2026-10-29-374cbfb86.txt +30 -0
  580. sicopr-1.2.1/com_functions/verification/approved/2026-10-29-87487e0d1.txt +30 -0
  581. sicopr-1.2.1/com_functions/verification/approved/2026-10-30-74e08c177.txt +30 -0
  582. sicopr-1.2.1/com_functions/verification/builtins.md +251 -0
  583. sicopr-1.2.1/com_functions/verification/equivalent_mutants.md +124 -0
  584. sicopr-1.2.1/com_functions/verification/mutations.py +1040 -0
  585. sicopr-1.2.1/com_functions/verification/reach.py +55 -0
  586. sicopr-1.2.1/com_functions/verification/report.py +360 -0
  587. sicopr-1.2.1/com_functions/verification/triage_copies.py +298 -0
  588. sicopr-1.2.1/com_functions/verification/value_semantics.py +92 -0
  589. sicopr-1.2.1/com_mat_export.py +510 -0
  590. sicopr-1.2.1/com_plots.py +684 -0
  591. sicopr-1.2.1/dev/audit_stage0.py +31 -0
  592. sicopr-1.2.1/dev/audit_tier0_coverage.py +386 -0
  593. sicopr-1.2.1/dev/check_interfaces.py +114 -0
  594. sicopr-1.2.1/docs/ARCHIVE_gated_fix_pass.md +144 -0
  595. sicopr-1.2.1/docs/AUDIT_FINDINGS.md +1163 -0
  596. sicopr-1.2.1/docs/COM_PDF_RESIDUAL.md +176 -0
  597. sicopr-1.2.1/docs/FEATURE_STATUS.md +127 -0
  598. sicopr-1.2.1/docs/FIX_SUMMARY.md +988 -0
  599. sicopr-1.2.1/docs/MAINTAINING.md +116 -0
  600. sicopr-1.2.1/docs/MATLAB_4p16p0_CHANGES.md +184 -0
  601. sicopr-1.2.1/docs/MATLAB_4p16p0_IMPACT.md +188 -0
  602. sicopr-1.2.1/docs/MATLAB_4p17p0_CHANGES.md +137 -0
  603. sicopr-1.2.1/docs/MIN_RADIUS_ASSUMPTION.md +164 -0
  604. sicopr-1.2.1/docs/README.md +70 -0
  605. sicopr-1.2.1/docs/STAGE6_NOISE_AGREEMENT.md +291 -0
  606. sicopr-1.2.1/docs/TUTORIAL.md +1529 -0
  607. sicopr-1.2.1/docs/TXFFE_SWEEP_ROOT_CAUSE.md +552 -0
  608. sicopr-1.2.1/docs/UPSTREAM_QUANTIZATION_WITHOUT_RXFFE.md +178 -0
  609. sicopr-1.2.1/docs/VERIFICATION.md +658 -0
  610. sicopr-1.2.1/docs/VERSIONS.md +120 -0
  611. sicopr-1.2.1/docs/com_enchance_r_analysis.md +440 -0
  612. sicopr-1.2.1/docs/images/gui_config.png +0 -0
  613. sicopr-1.2.1/docs/images/gui_run.png +0 -0
  614. sicopr-1.2.1/docs/refresh_tutorial_toc.py +67 -0
  615. sicopr-1.2.1/docs/tutorial/fig01.png +0 -0
  616. sicopr-1.2.1/docs/tutorial/fig02.png +0 -0
  617. sicopr-1.2.1/docs/tutorial/fig03.png +0 -0
  618. sicopr-1.2.1/docs/tutorial/fig04.png +0 -0
  619. sicopr-1.2.1/docs/tutorial/fig05.png +0 -0
  620. sicopr-1.2.1/docs/tutorial/fig06.png +0 -0
  621. sicopr-1.2.1/docs/tutorial/fig07.png +0 -0
  622. sicopr-1.2.1/docs/tutorial/fig08.png +0 -0
  623. sicopr-1.2.1/docs/tutorial/fig09.png +0 -0
  624. sicopr-1.2.1/examples/README.md +72 -0
  625. sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/CHANNEL.md +38 -0
  626. sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/EXPECTED.md +26 -0
  627. sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/config_com_dj_200G_CAKR_178_PKGA_06_2_2025__Case1.xlsx +0 -0
  628. sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_octave_no_crosstalk.csv +2 -0
  629. sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_octave_with_crosstalk.csv +2 -0
  630. sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_sicopr_no_crosstalk.csv +2 -0
  631. sicopr-1.2.1/examples/akinwale_CR_22dB_VendorX/expected_sicopr_with_crosstalk.csv +2 -0
  632. sicopr-1.2.1/examples/run_example.py +278 -0
  633. sicopr-1.2.1/gui/README.md +370 -0
  634. sicopr-1.2.1/gui/__init__.py +0 -0
  635. sicopr-1.2.1/gui/app.py +1629 -0
  636. sicopr-1.2.1/gui/config_io.py +425 -0
  637. sicopr-1.2.1/gui/runner.py +168 -0
  638. sicopr-1.2.1/gui/schematic.py +150 -0
  639. sicopr-1.2.1/gui/static/app.js +1899 -0
  640. sicopr-1.2.1/gui/static/index.html +278 -0
  641. sicopr-1.2.1/gui/static/style.css +366 -0
  642. sicopr-1.2.1/matlab/com_ieee8023_4p14p0.m +11742 -0
  643. sicopr-1.2.1/matlab/com_ieee8023_4p15p0.m +11884 -0
  644. sicopr-1.2.1/matlab/com_ieee8023_4p15p0_adaptive_local_search.m +12199 -0
  645. sicopr-1.2.1/matlab/com_ieee8023_4p16p0.m +12233 -0
  646. sicopr-1.2.1/matlab/com_ieee8023_4p17p0.m +12765 -0
  647. sicopr-1.2.1/octave/README.md +285 -0
  648. sicopr-1.2.1/octave/accel/build_accel.py +75 -0
  649. sicopr-1.2.1/octave/accel/com_octave_accel.cc +456 -0
  650. sicopr-1.2.1/octave/com_ieee8023_4p15p0_octave_compat.m +13025 -0
  651. sicopr-1.2.1/octave/com_ieee8023_4p16p0_octave_compat.m +13059 -0
  652. sicopr-1.2.1/octave/com_ieee8023_4p17p0_octave_compat.m +13602 -0
  653. sicopr-1.2.1/octave/make_octave_compat.py +563 -0
  654. sicopr-1.2.1/octave/patches/CDF_ev.m +60 -0
  655. sicopr-1.2.1/octave/patches/COM_CommandLine_Parse.m +90 -0
  656. sicopr-1.2.1/octave/patches/FOM_rxffe_floating_taps.m +151 -0
  657. sicopr-1.2.1/octave/patches/FOM_rxffe_floating_taps_4p17p0.m +162 -0
  658. sicopr-1.2.1/octave/patches/H_interp.m +70 -0
  659. sicopr-1.2.1/octave/patches/OptFom_Calc_Noise_XC.m +74 -0
  660. sicopr-1.2.1/octave/patches/com_checkpoint.m +75 -0
  661. sicopr-1.2.1/octave/patches/com_octave_accel_on.m +59 -0
  662. sicopr-1.2.1/octave/patches/csvread4com.m +81 -0
  663. sicopr-1.2.1/octave/patches/erfcinv.m +67 -0
  664. sicopr-1.2.1/octave/patches/mldivide_matlab.m +63 -0
  665. sicopr-1.2.1/octave/patches/read_Nport_touchstone.m +229 -0
  666. sicopr-1.2.1/octave/patches/writecsv_transposed.m +55 -0
  667. sicopr-1.2.1/pyproject.toml +70 -0
  668. sicopr-1.2.1/requirements.txt +32 -0
  669. sicopr-1.2.1/setup.cfg +4 -0
  670. sicopr-1.2.1/sicopr.egg-info/PKG-INFO +396 -0
  671. sicopr-1.2.1/sicopr.egg-info/SOURCES.txt +747 -0
  672. sicopr-1.2.1/sicopr.egg-info/dependency_links.txt +1 -0
  673. sicopr-1.2.1/sicopr.egg-info/requires.txt +16 -0
  674. sicopr-1.2.1/sicopr.egg-info/top_level.txt +3 -0
  675. sicopr-1.2.1/sicopr.py +21657 -0
  676. sicopr-1.2.1/tests/__init__.py +0 -0
  677. sicopr-1.2.1/tests/audit_check.py +107 -0
  678. sicopr-1.2.1/tests/conftest.py +92 -0
  679. sicopr-1.2.1/tests/fixtures/README.md +38 -0
  680. sicopr-1.2.1/tests/run_all.ps1 +70 -0
  681. sicopr-1.2.1/tests/test_abort_path_leaks.py +198 -0
  682. sicopr-1.2.1/tests/test_analytic_recovery.py +210 -0
  683. sicopr-1.2.1/tests/test_argument_mutation.py +237 -0
  684. sicopr-1.2.1/tests/test_assembled_names.py +153 -0
  685. sicopr-1.2.1/tests/test_builtin_classification.py +280 -0
  686. sicopr-1.2.1/tests/test_change_discipline.py +128 -0
  687. sicopr-1.2.1/tests/test_checkpoints.py +114 -0
  688. sicopr-1.2.1/tests/test_cli_exit_code.py +54 -0
  689. sicopr-1.2.1/tests/test_config_roundtrip.py +377 -0
  690. sicopr-1.2.1/tests/test_config_search_space.py +294 -0
  691. sicopr-1.2.1/tests/test_conv_dfe.py +228 -0
  692. sicopr-1.2.1/tests/test_csv_inputs.py +276 -0
  693. sicopr-1.2.1/tests/test_cursor_indexing.py +299 -0
  694. sicopr-1.2.1/tests/test_documented_contracts.py +249 -0
  695. sicopr-1.2.1/tests/test_end_to_end.py +91 -0
  696. sicopr-1.2.1/tests/test_export_columns.py +210 -0
  697. sicopr-1.2.1/tests/test_freq_grid.py +334 -0
  698. sicopr-1.2.1/tests/test_gui_server.py +1304 -0
  699. sicopr-1.2.1/tests/test_gui_static.py +643 -0
  700. sicopr-1.2.1/tests/test_impulse_spectrum.py +326 -0
  701. sicopr-1.2.1/tests/test_index_base.py +264 -0
  702. sicopr-1.2.1/tests/test_inlined_copies.py +644 -0
  703. sicopr-1.2.1/tests/test_integer_ratio_rounding.py +174 -0
  704. sicopr-1.2.1/tests/test_mat_export_meta.py +82 -0
  705. sicopr-1.2.1/tests/test_matlab_semantics.py +644 -0
  706. sicopr-1.2.1/tests/test_matlab_stage_oracles.py +311 -0
  707. sicopr-1.2.1/tests/test_matlab_version_diff.py +59 -0
  708. sicopr-1.2.1/tests/test_mlse.py +99 -0
  709. sicopr-1.2.1/tests/test_mutation_score.py +277 -0
  710. sicopr-1.2.1/tests/test_noise_pdf_composite.py +298 -0
  711. sicopr-1.2.1/tests/test_noise_units.py +578 -0
  712. sicopr-1.2.1/tests/test_octave_checkpoints.py +786 -0
  713. sicopr-1.2.1/tests/test_octave_compat.py +419 -0
  714. sicopr-1.2.1/tests/test_optimization_invariants.py +188 -0
  715. sicopr-1.2.1/tests/test_optimize_cursor.py +97 -0
  716. sicopr-1.2.1/tests/test_optimizer_fom.py +370 -0
  717. sicopr-1.2.1/tests/test_optimizer_mmse.py +379 -0
  718. sicopr-1.2.1/tests/test_option_coverage.py +120 -0
  719. sicopr-1.2.1/tests/test_pdf_pipeline.py +245 -0
  720. sicopr-1.2.1/tests/test_reference_leaks.py +185 -0
  721. sicopr-1.2.1/tests/test_rounding_reshape.py +146 -0
  722. sicopr-1.2.1/tests/test_smoke.py +186 -0
  723. sicopr-1.2.1/tests/test_snapshot_isolation.py +177 -0
  724. sicopr-1.2.1/tests/test_sort_stability.py +182 -0
  725. sicopr-1.2.1/tests/test_sparam_cascade.py +274 -0
  726. sicopr-1.2.1/tests/test_stage_figures.py +108 -0
  727. sicopr-1.2.1/tests/test_std_normalization.py +126 -0
  728. sicopr-1.2.1/tests/test_structural_invariants.py +257 -0
  729. sicopr-1.2.1/tests/test_stub_reachability.py +207 -0
  730. sicopr-1.2.1/tests/test_tline_tdr_erl.py +277 -0
  731. sicopr-1.2.1/tests/test_translation_coverage.py +112 -0
  732. sicopr-1.2.1/tests/test_verification_report.py +145 -0
  733. sicopr-1.2.1/tests/test_xtlk_noise.py +118 -0
  734. sicopr-1.2.1/tools/_sicopr_case.py +67 -0
  735. sicopr-1.2.1/tools/audit_search_space.py +125 -0
  736. sicopr-1.2.1/tools/corpus_sweep.py +382 -0
  737. sicopr-1.2.1/tools/equivalence_check.py +219 -0
  738. sicopr-1.2.1/tools/fom_com_probe.py +277 -0
  739. sicopr-1.2.1/tools/gen_semantics_pins.py +154 -0
  740. sicopr-1.2.1/tools/hist_dep_repro.py +136 -0
  741. sicopr-1.2.1/tools/matlab_version_diff.py +274 -0
  742. sicopr-1.2.1/tools/octave_compare.py +357 -0
  743. sicopr-1.2.1/tools/octave_oracle.py +178 -0
  744. sicopr-1.2.1/tools/plot_sweep_compare.py +257 -0
  745. sicopr-1.2.1/tools/record_comparisons.py +110 -0
  746. sicopr-1.2.1/tools/regen_checkpoints.py +188 -0
  747. sicopr-1.2.1/tools/sweep_compare.py +228 -0
  748. sicopr-1.2.1/tools/translation_coverage.py +1012 -0
  749. 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.