FitBenchmarking 1.4.0__tar.gz → 1.5.0__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 (249) hide show
  1. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/PKG-INFO +9 -9
  2. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/README.md +7 -7
  3. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/base_controller.py +9 -15
  4. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/core/fitting_benchmarking.py +12 -3
  5. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/core/results_output.py +2 -3
  6. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/base_table.py +123 -30
  7. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/compare_table.py +2 -1
  8. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/energy_usage_table.py +5 -1
  9. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/plots.py +36 -4
  10. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/tables.py +3 -15
  11. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/problem_index_page.html +1 -2
  12. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/table_template.html +1 -2
  13. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/checkpoint.py +2 -0
  14. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/fitbm_result.py +10 -1
  15. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/misc.py +13 -2
  16. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/pyproject.toml +1 -1
  17. fitbenchmarking-1.4.0/fitbenchmarking/templates/js/plotly.js +0 -3882
  18. fitbenchmarking-1.4.0/fitbenchmarking/templates/js/tex-mml-chtml.js +0 -1
  19. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/.gitignore +0 -0
  20. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/LICENSE.txt +0 -0
  21. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/__init__.py +0 -0
  22. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/__main__.py +0 -0
  23. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/ENSO.dat +0 -0
  24. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/Gauss3.dat +0 -0
  25. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/Hahn1.dat +0 -0
  26. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/Kirby2.dat +0 -0
  27. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/Lanczos1.dat +0 -0
  28. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/Lanczos2.dat +0 -0
  29. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/META.txt +0 -0
  30. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/MGH17.dat +0 -0
  31. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/Misra1c.dat +0 -0
  32. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/Misra1d.dat +0 -0
  33. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/ENSO.hes +0 -0
  34. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/ENSO.jac +0 -0
  35. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Gauss3.hes +0 -0
  36. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Gauss3.jac +0 -0
  37. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Hahn1.hes +0 -0
  38. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Hahn1.jac +0 -0
  39. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Kirby2.hes +0 -0
  40. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Kirby2.jac +0 -0
  41. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Lanczos1.hes +0 -0
  42. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Lanczos1.jac +0 -0
  43. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Lanczos2.hes +0 -0
  44. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Lanczos2.jac +0 -0
  45. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/MGH17.hes +0 -0
  46. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/MGH17.jac +0 -0
  47. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Misra1c.hes +0 -0
  48. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Misra1c.jac +0 -0
  49. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Misra1d.hes +0 -0
  50. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/average_difficulty/data_files/Misra1d.jac +0 -0
  51. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/Bennett5.dat +0 -0
  52. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/BoxBOD.dat +0 -0
  53. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/Eckerle4.dat +0 -0
  54. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/META.txt +0 -0
  55. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/MGH09.dat +0 -0
  56. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/MGH10.dat +0 -0
  57. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/Rat42.dat +0 -0
  58. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/Rat43.dat +0 -0
  59. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/Thurber.dat +0 -0
  60. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Bennett5.hes +0 -0
  61. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Bennett5.jac +0 -0
  62. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/BoxBOD.hes +0 -0
  63. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/BoxBOD.jac +0 -0
  64. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Eckerle4.hes +0 -0
  65. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Eckerle4.jac +0 -0
  66. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/MGH09.hes +0 -0
  67. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/MGH09.jac +0 -0
  68. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/MGH10.hes +0 -0
  69. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/MGH10.jac +0 -0
  70. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Rat42.hes +0 -0
  71. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Rat42.jac +0 -0
  72. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Rat43.hes +0 -0
  73. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Rat43.jac +0 -0
  74. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Thurber.hes +0 -0
  75. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/high_difficulty/data_files/Thurber.jac +0 -0
  76. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/Chwirut1.dat +0 -0
  77. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/Chwirut2.dat +0 -0
  78. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/DanWood.dat +0 -0
  79. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/Gauss1.dat +0 -0
  80. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/Gauss2.dat +0 -0
  81. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/Lanczos3.dat +0 -0
  82. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/META.txt +0 -0
  83. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/Misra1a.dat +0 -0
  84. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/Misra1b.dat +0 -0
  85. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Chwirut1.hes +0 -0
  86. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Chwirut1.jac +0 -0
  87. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Chwirut2.hes +0 -0
  88. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Chwirut2.jac +0 -0
  89. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/DanWood.hes +0 -0
  90. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/DanWood.jac +0 -0
  91. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Gauss1.hes +0 -0
  92. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Gauss1.jac +0 -0
  93. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Gauss2.hes +0 -0
  94. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Gauss2.jac +0 -0
  95. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Lanczos3.hes +0 -0
  96. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Lanczos3.jac +0 -0
  97. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Misra1a.hes +0 -0
  98. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Misra1a.jac +0 -0
  99. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Misra1b.hes +0 -0
  100. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/benchmark_problems/NIST/low_difficulty/data_files/Misra1b.jac +0 -0
  101. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cli/__init__.py +0 -0
  102. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cli/checkpoint_handler.py +0 -0
  103. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cli/exception_handler.py +0 -0
  104. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cli/main.py +0 -0
  105. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/__init__.py +0 -0
  106. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/bumps_controller.py +0 -0
  107. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/ceres_controller.py +0 -0
  108. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/controller_factory.py +0 -0
  109. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/dfo_controller.py +0 -0
  110. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/galahad_controller.py +0 -0
  111. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/gofit_controller.py +0 -0
  112. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/gradient_free_controller.py +0 -0
  113. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/gsl_controller.py +0 -0
  114. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/horace_controller.py +0 -0
  115. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/levmar_controller.py +0 -0
  116. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/lmfit_controller.py +0 -0
  117. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/mantid_controller.py +0 -0
  118. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/matlab_controller.py +0 -0
  119. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/matlab_curve_controller/eval_r.m +0 -0
  120. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/matlab_curve_controller.py +0 -0
  121. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/matlab_mixin.py +0 -0
  122. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/matlab_opt_controller.py +0 -0
  123. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/matlab_stats_controller.py +0 -0
  124. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/minuit_controller.py +0 -0
  125. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/nlopt_controller.py +0 -0
  126. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/paramonte_controller.py +0 -0
  127. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/ralfit_controller.py +0 -0
  128. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/scipy_controller.py +0 -0
  129. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/scipy_go_controller.py +0 -0
  130. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/scipy_leastsq_controller.py +0 -0
  131. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/scipy_ls_controller.py +0 -0
  132. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/controllers/theseus_controller.py +0 -0
  133. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/core/__init__.py +0 -0
  134. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/__init__.py +0 -0
  135. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/base_cost_func.py +0 -0
  136. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/cost_func_factory.py +0 -0
  137. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/hellinger_nlls_cost_func.py +0 -0
  138. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/loglike_nlls_cost_func.py +0 -0
  139. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/nlls_base_cost_func.py +0 -0
  140. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/nlls_cost_func.py +0 -0
  141. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/poisson_cost_func.py +0 -0
  142. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/cost_func/weighted_nlls_cost_func.py +0 -0
  143. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-Bold.eot +0 -0
  144. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-BoldItalic.eot +0 -0
  145. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-Italic.eot +0 -0
  146. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-Light.eot +0 -0
  147. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-LightItalic.eot +0 -0
  148. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-Medium.eot +0 -0
  149. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-MediumItalic.eot +0 -0
  150. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/eot/FiraSans-Regular.eot +0 -0
  151. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-Bold.ttf +0 -0
  152. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-BoldItalic.ttf +0 -0
  153. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-Italic.ttf +0 -0
  154. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-Light.ttf +0 -0
  155. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-LightItalic.ttf +0 -0
  156. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-Medium.ttf +0 -0
  157. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-MediumItalic.ttf +0 -0
  158. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/ttf/FiraSans-Regular.ttf +0 -0
  159. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-Bold.woff +0 -0
  160. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-BoldItalic.woff +0 -0
  161. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-Italic.woff +0 -0
  162. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-Light.woff +0 -0
  163. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-LightItalic.woff +0 -0
  164. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-Medium.woff +0 -0
  165. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-MediumItalic.woff +0 -0
  166. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff/FiraSans-Regular.woff +0 -0
  167. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-Bold.woff2 +0 -0
  168. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-BoldItalic.woff2 +0 -0
  169. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-Italic.woff2 +0 -0
  170. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-Light.woff2 +0 -0
  171. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-LightItalic.woff2 +0 -0
  172. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-Medium.woff2 +0 -0
  173. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-MediumItalic.woff2 +0 -0
  174. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FiraSans/woff2/FiraSans-Regular.woff2 +0 -0
  175. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FontAwesome/fontawesome-webfont.eot +0 -0
  176. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FontAwesome/fontawesome-webfont.svg +0 -0
  177. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FontAwesome/fontawesome-webfont.ttf +0 -0
  178. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FontAwesome/fontawesome-webfont.woff +0 -0
  179. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/fonts/FontAwesome/fontawesome-webfont.woff2 +0 -0
  180. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/hessian/__init__.py +0 -0
  181. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/hessian/analytic_hessian.py +0 -0
  182. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/hessian/base_hessian.py +0 -0
  183. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/hessian/best_available_hessian.py +0 -0
  184. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/hessian/hessian_factory.py +0 -0
  185. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/hessian/numdifftools_hessian.py +0 -0
  186. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/hessian/scipy_hessian.py +0 -0
  187. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/__init__.py +0 -0
  188. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/analytic_jacobian.py +0 -0
  189. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/base_jacobian.py +0 -0
  190. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/best_available_jacobian.py +0 -0
  191. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/default_jacobian.py +0 -0
  192. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/jacobian_factory.py +0 -0
  193. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/numdifftools_jacobian.py +0 -0
  194. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/scipy_jacobian.py +0 -0
  195. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/jacobian/scripts/NIST-Jacobians.nb +0 -0
  196. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/__init__.py +0 -0
  197. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/bal_parser.py +0 -0
  198. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/base_parser.py +0 -0
  199. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/fitbenchmark_parser.py +0 -0
  200. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/fitting_problem.py +0 -0
  201. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/hogben_parser.py +0 -0
  202. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/horace_parser.py +0 -0
  203. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/ivp_parser.py +0 -0
  204. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/mantid_parser.py +0 -0
  205. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/mantiddev_parser.py +0 -0
  206. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/nist_data_functions.py +0 -0
  207. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/nist_parser.py +0 -0
  208. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/parser_factory.py +0 -0
  209. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/sasview_parser.py +0 -0
  210. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/parsing/sscanss_parser.py +0 -0
  211. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/__init__.py +0 -0
  212. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/acc_table.py +0 -0
  213. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/fitting_report.py +0 -0
  214. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/local_min_table.py +0 -0
  215. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/performance_profiler.py +0 -0
  216. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/problem_summary_page.py +0 -0
  217. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/results_processing/runtime_table.py +0 -0
  218. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/css/custom_style.css +0 -0
  219. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/css/dropdown_style.css +0 -0
  220. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/css/main_style.css +0 -0
  221. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/css/math_style.css +0 -0
  222. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/css/table_style.css +0 -0
  223. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/fitting_report_template.html +0 -0
  224. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/images/accuracy.png +0 -0
  225. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/images/compare.png +0 -0
  226. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/images/energy.png +0 -0
  227. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/images/fitbenchmarking_logo.png +0 -0
  228. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/images/local_min.png +0 -0
  229. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/images/runtime.png +0 -0
  230. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/index_page.html +0 -0
  231. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/js/dropdown.js +0 -0
  232. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/js/output/chtml/fonts/woff-v2/MathJax_Main-Regular.woff +0 -0
  233. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/js/output/chtml/fonts/woff-v2/MathJax_Math-Italic.woff +0 -0
  234. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/js/output/chtml/fonts/woff-v2/MathJax_Size2-Regular.woff +0 -0
  235. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/js/output/chtml/fonts/woff-v2/MathJax_Size3-Regular.woff +0 -0
  236. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/js/output/chtml/fonts/woff-v2/MathJax_Zero.woff +0 -0
  237. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/js/table.js +0 -0
  238. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/problem_summary_page_template.html +0 -0
  239. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/templates/style_sheet.py +0 -0
  240. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/__init__.py +0 -0
  241. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/create_dirs.py +0 -0
  242. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/debug.py +0 -0
  243. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/exceptions.py +0 -0
  244. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/log.py +0 -0
  245. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/matlab_engine.py +0 -0
  246. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/options.py +0 -0
  247. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/output_grabber.py +0 -0
  248. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/timer.py +0 -0
  249. {fitbenchmarking-1.4.0 → fitbenchmarking-1.5.0}/fitbenchmarking/utils/write_files.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: FitBenchmarking
3
- Version: 1.4.0
3
+ Version: 1.5.0
4
4
  Summary: FitBenchmarking: A tool for comparing fitting software
5
5
  Project-URL: Homepage, https://fitbenchmarking.github.io
6
6
  Project-URL: Documentation, https://fitbenchmarking.readthedocs.io/en/stable
@@ -14,7 +14,7 @@ Classifier: License :: OSI Approved :: BSD License
14
14
  Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
16
  Requires-Python: >=3.10.1
17
- Requires-Dist: codecarbon<2.7,>=2.5.1
17
+ Requires-Dist: codecarbon>=3.2.6
18
18
  Requires-Dist: configparser
19
19
  Requires-Dist: dash
20
20
  Requires-Dist: docutils
@@ -71,10 +71,10 @@ Requires-Dist: sasmodels; extra == 'sas'
71
71
  Requires-Dist: tinycc; (platform_system == 'Windows') and extra == 'sas'
72
72
  Description-Content-Type: text/markdown
73
73
 
74
- [![Build Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/release.yml?style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/release.yml?query=branch%3Av1.4.0)
75
- [![Tests Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/main.yml?label=tests&style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/main.yml?query=branch%3Av1.4.0)
74
+ [![Build Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/release.yml?style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/release.yml?query=branch%3Av1.5.0)
75
+ [![Tests Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/main.yml?label=tests&style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/main.yml?query=branch%3Av1.5.0)
76
76
  [![Install Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/install.yml?label=install&style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/install.yml)
77
- [![Documentation Status](https://img.shields.io/readthedocs/fitbenchmarking/v1.4.0?style=flat-square)](https://fitbenchmarking.readthedocs.io/en/v1.4.0)
77
+ [![Documentation Status](https://img.shields.io/readthedocs/fitbenchmarking/v1.5.0?style=flat-square)](https://fitbenchmarking.readthedocs.io/en/v1.5.0)
78
78
  [![Coverage Status](https://img.shields.io/coveralls/github/fitbenchmarking/fitbenchmarking.svg?style=flat-square)](https://coveralls.io/github/fitbenchmarking/fitbenchmarking)
79
79
  [![Chat](https://img.shields.io/badge/chat-CompareFitMinimizers-lightgrey.svg?style=flat-square&logo=slack)](https://slack.com/)
80
80
  [![Zenodo](https://img.shields.io/badge/Zenodo-10.5281/zenodo.15546207-blue.svg?style=flat-square)](https://zenodo.org/records/15546207)
@@ -83,10 +83,10 @@ Description-Content-Type: text/markdown
83
83
 
84
84
  FitBenchmarking is an open source tool for comparing different minimizers/fitting frameworks. FitBenchmarking is cross platform and we support Windows, Linux and Mac OS. For questions, feature requests or any other inquiries, please open an issue on GitHub.
85
85
 
86
- - **Installation Instructions:** https://fitbenchmarking.readthedocs.io/en/v1.4.0/users/install_instructions/index.html
87
- - **User Documentation & Example Usage:** https://fitbenchmarking.readthedocs.io/en/v1.4.0/users/index.html
88
- - **Community Guidelines:** https://fitbenchmarking.readthedocs.io/en/v1.4.0/contributors/guidelines.html
89
- - **Automated Tests:** Run via GitHub Actions, https://github.com/fitbenchmarking/fitbenchmarking/actions, and tests are documented at https://fitbenchmarking.readthedocs.io/en/v1.4.0/users/tests.html
86
+ - **Installation Instructions:** https://fitbenchmarking.readthedocs.io/en/v1.5.0/users/install_instructions/index.html
87
+ - **User Documentation & Example Usage:** https://fitbenchmarking.readthedocs.io/en/v1.5.0/users/index.html
88
+ - **Community Guidelines:** https://fitbenchmarking.readthedocs.io/en/v1.5.0/contributors/guidelines.html
89
+ - **Automated Tests:** Run via GitHub Actions, https://github.com/fitbenchmarking/fitbenchmarking/actions, and tests are documented at https://fitbenchmarking.readthedocs.io/en/v1.5.0/users/tests.html
90
90
 
91
91
  The package is the result of a collaboration between STFC’s Scientific Computing Department and ISIS Neutron and Muon Facility and the Diamond Light Source. We also would like to acknowledge support from:
92
92
 
@@ -1,7 +1,7 @@
1
- [![Build Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/release.yml?style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/release.yml?query=branch%3Av1.4.0)
2
- [![Tests Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/main.yml?label=tests&style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/main.yml?query=branch%3Av1.4.0)
1
+ [![Build Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/release.yml?style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/release.yml?query=branch%3Av1.5.0)
2
+ [![Tests Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/main.yml?label=tests&style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/main.yml?query=branch%3Av1.5.0)
3
3
  [![Install Status](https://img.shields.io/github/actions/workflow/status/fitbenchmarking/fitbenchmarking/install.yml?label=install&style=flat-square)](https://github.com/fitbenchmarking/fitbenchmarking/actions/workflows/install.yml)
4
- [![Documentation Status](https://img.shields.io/readthedocs/fitbenchmarking/v1.4.0?style=flat-square)](https://fitbenchmarking.readthedocs.io/en/v1.4.0)
4
+ [![Documentation Status](https://img.shields.io/readthedocs/fitbenchmarking/v1.5.0?style=flat-square)](https://fitbenchmarking.readthedocs.io/en/v1.5.0)
5
5
  [![Coverage Status](https://img.shields.io/coveralls/github/fitbenchmarking/fitbenchmarking.svg?style=flat-square)](https://coveralls.io/github/fitbenchmarking/fitbenchmarking)
6
6
  [![Chat](https://img.shields.io/badge/chat-CompareFitMinimizers-lightgrey.svg?style=flat-square&logo=slack)](https://slack.com/)
7
7
  [![Zenodo](https://img.shields.io/badge/Zenodo-10.5281/zenodo.15546207-blue.svg?style=flat-square)](https://zenodo.org/records/15546207)
@@ -10,10 +10,10 @@
10
10
 
11
11
  FitBenchmarking is an open source tool for comparing different minimizers/fitting frameworks. FitBenchmarking is cross platform and we support Windows, Linux and Mac OS. For questions, feature requests or any other inquiries, please open an issue on GitHub.
12
12
 
13
- - **Installation Instructions:** https://fitbenchmarking.readthedocs.io/en/v1.4.0/users/install_instructions/index.html
14
- - **User Documentation & Example Usage:** https://fitbenchmarking.readthedocs.io/en/v1.4.0/users/index.html
15
- - **Community Guidelines:** https://fitbenchmarking.readthedocs.io/en/v1.4.0/contributors/guidelines.html
16
- - **Automated Tests:** Run via GitHub Actions, https://github.com/fitbenchmarking/fitbenchmarking/actions, and tests are documented at https://fitbenchmarking.readthedocs.io/en/v1.4.0/users/tests.html
13
+ - **Installation Instructions:** https://fitbenchmarking.readthedocs.io/en/v1.5.0/users/install_instructions/index.html
14
+ - **User Documentation & Example Usage:** https://fitbenchmarking.readthedocs.io/en/v1.5.0/users/index.html
15
+ - **Community Guidelines:** https://fitbenchmarking.readthedocs.io/en/v1.5.0/contributors/guidelines.html
16
+ - **Automated Tests:** Run via GitHub Actions, https://github.com/fitbenchmarking/fitbenchmarking/actions, and tests are documented at https://fitbenchmarking.readthedocs.io/en/v1.5.0/users/tests.html
17
17
 
18
18
  The package is the result of a collaboration between STFC’s Scientific Computing Department and ISIS Neutron and Muon Facility and the Diamond Light Source. We also would like to acknowledge support from:
19
19
 
@@ -17,6 +17,7 @@ from fitbenchmarking.utils.exceptions import (
17
17
  MissingBoundsError,
18
18
  UnknownMinimizerError,
19
19
  )
20
+ from fitbenchmarking.utils.misc import ERROR_FLAG_MAPPINGS
20
21
 
21
22
  if TYPE_CHECKING:
22
23
  from fitbenchmarking.cost_func.base_cost_func import CostFunc
@@ -32,8 +33,6 @@ class Controller:
32
33
 
33
34
  __metaclass__ = ABCMeta
34
35
 
35
- VALID_FLAGS = [0, 1, 2, 3, 4, 5, 6, 7, 8]
36
-
37
36
  #: Within the controller class, you must
38
37
  #: initialize a dictionary, ``algorithm_check``,
39
38
  #: such that the **keys** are given by:
@@ -195,28 +194,23 @@ class Controller:
195
194
 
196
195
  @property
197
196
  def flag(self):
198
- """
199
- | 0: `Successfully converged`
200
- | 1: `Software reported maximum number of iterations exceeded`
201
- | 2: `Software run but didn't converge to solution`
202
- | 3: `Software raised an exception`
203
- | 4: `Solver doesn't support bounded problems`
204
- | 5: `Solution doesn't respect parameter bounds`
205
- | 6: `Solver has exceeded maximum allowed runtime`
206
- | 7: `Validation of the provided options failed`
207
- | 8: `Confidence in fit could not be calculated`
208
- """
209
197
  return self._flag
210
198
 
211
199
  @flag.setter
212
200
  def flag(self, value):
213
- if value not in self.VALID_FLAGS:
201
+ if value not in ERROR_FLAG_MAPPINGS:
214
202
  raise ControllerAttributeError(
215
203
  "controller.flag must be one of "
216
- f"{list(self.VALID_FLAGS)}. Got: {value}."
204
+ f"{list(ERROR_FLAG_MAPPINGS.keys())}. Got: {value}."
217
205
  )
218
206
  self._flag = int(value)
219
207
 
208
+ _flag_docstring = "\n" + "\n".join(
209
+ f"""\t :{key}: {value}""" for key, value in ERROR_FLAG_MAPPINGS.items()
210
+ )
211
+ flag.__doc__ = f"""Valid flags:
212
+ {_flag_docstring}"""
213
+
220
214
  @property
221
215
  def software(self):
222
216
  """
@@ -5,6 +5,7 @@ fitting software.
5
5
  """
6
6
 
7
7
  import os
8
+ import platform
8
9
  import timeit
9
10
 
10
11
  import numpy as np
@@ -71,6 +72,12 @@ class Fit:
71
72
  self._emissions_tracker = None
72
73
  self._logger_prefix = " "
73
74
  if "energy_usage" in options.table_type:
75
+ if platform.system() == "Darwin":
76
+ LOGGER.info(
77
+ "Please be aware that you may be prompted by "
78
+ "CodeCarbon to provide a password to give sudo rights "
79
+ "so that the powermetrics tool can be used."
80
+ )
74
81
  self._emissions_tracker = EmissionsTracker(
75
82
  measure_power_secs=1,
76
83
  tracking_mode="process",
@@ -151,8 +158,8 @@ class Fit:
151
158
  results = self._loop_over_starting_values(problem)
152
159
  self._results.extend(results)
153
160
 
154
- if self._emissions_tracker:
155
- _ = self._emissions_tracker.stop()
161
+ if self._emissions_tracker:
162
+ _ = self._emissions_tracker.stop()
156
163
 
157
164
  self._checkpointer.finalise_group(
158
165
  self._label, self._failed_problems, self._unselected_minimizers
@@ -548,6 +555,7 @@ class Fit:
548
555
  num_runs = self._options.num_runs
549
556
  energy = np.nan
550
557
  tracker = self._emissions_tracker
558
+ tracker_stopped = False
551
559
 
552
560
  try:
553
561
  with self._grabbed_output:
@@ -559,6 +567,7 @@ class Fit:
559
567
  num_runs, 1
560
568
  )
561
569
  energy = tracker.stop_task().energy_consumed / num_runs
570
+ tracker_stopped = True
562
571
  else:
563
572
  runtimes = timeit.Timer(stmt=controller.execute).repeat(
564
573
  num_runs, 1
@@ -630,7 +639,7 @@ class Fit:
630
639
  controller.timer.reset()
631
640
 
632
641
  # ensure emissions tracker has been stopped if energy not set
633
- if energy == np.nan and self._emissions_tracker:
642
+ if self._emissions_tracker and not tracker_stopped:
634
643
  _ = self._emissions_tracker.stop_task()
635
644
 
636
645
  if controller.flag in [3, 6, 7]:
@@ -30,7 +30,7 @@ from fitbenchmarking.utils import create_dirs
30
30
  from fitbenchmarking.utils.exceptions import PlottingError
31
31
  from fitbenchmarking.utils.fitbm_result import FittingResult
32
32
  from fitbenchmarking.utils.log import get_logger
33
- from fitbenchmarking.utils.misc import get_css, get_js
33
+ from fitbenchmarking.utils.misc import get_css
34
34
  from fitbenchmarking.utils.options import Options
35
35
  from fitbenchmarking.utils.write_files import write_file
36
36
 
@@ -494,7 +494,6 @@ def create_problem_level_index(
494
494
  :params config: Dictionary containing env config
495
495
  :type config: dict
496
496
  """
497
- js = get_js(options, group_dir)
498
497
 
499
498
  root = os.path.dirname(inspect.getfile(fitbenchmarking))
500
499
  template_dir = os.path.join(root, "templates")
@@ -512,7 +511,7 @@ def create_problem_level_index(
512
511
  template.render(
513
512
  css_style_sheet=css["main"],
514
513
  custom_style=css["custom"],
515
- mathjax=js["mathjax"],
514
+ mathjax="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js",
516
515
  group_name=group_name,
517
516
  table_type=names,
518
517
  links=links,
@@ -2,6 +2,7 @@
2
2
  Implements the base class for the tables.
3
3
  """
4
4
 
5
+ import math
5
6
  import os
6
7
  from abc import ABCMeta, abstractmethod
7
8
 
@@ -9,13 +10,13 @@ import docutils.core
9
10
  import matplotlib as mpl
10
11
 
11
12
  from fitbenchmarking.cost_func.cost_func_factory import create_cost_func
13
+ from fitbenchmarking.utils.fitbm_result import FittingResult
12
14
 
13
15
  mpl.use("Agg")
14
16
  import matplotlib.pyplot as plt
15
17
  import numpy as np
16
18
  import pandas as pd
17
-
18
- from fitbenchmarking.utils.misc import get_js
19
+ from pandas.io.formats import style
19
20
 
20
21
  FORMAT_DESCRIPTION = {
21
22
  "abs": "Absolute values are displayed in the table.",
@@ -91,8 +92,13 @@ class Table:
91
92
  :type table_name: str
92
93
  """
93
94
  # Flatten to reduce the necessity on having problems as rows.
95
+
96
+ # dict[row/problem, dict[column/minimiser, list[FittingResult]]]
94
97
  self.results = results
98
+
99
+ # dict[row/problem, dict[column/minimiser, FittingResult]]
95
100
  self.best_results = best_results
101
+
96
102
  self.options = options
97
103
  self.group_dir = group_dir
98
104
  self.pp_locations = pp_locations
@@ -226,13 +232,25 @@ class Table:
226
232
  """
227
233
  str_dict = {}
228
234
  for k, results in self.sorted_results.items():
229
- _, text_arrs = self.get_colours_for_row(results)
235
+ _, text_colors = self.get_colours_for_row(results)
230
236
  str_dict[k] = [
231
- self.get_str_result(r, t, html)
232
- for r, t in zip(results, text_arrs)
237
+ self.get_str_result(result, color, html)
238
+ for result, color in zip(results, text_colors)
233
239
  ]
234
240
  return str_dict
235
241
 
242
+ def get_hover_table(self):
243
+ """
244
+ Create a dict with the tooltip for each cell from self.sorted_results
245
+
246
+ :return: The dictionary of strings for the table
247
+ :rtype: dict[list[str]]
248
+ """
249
+ str_dict = {}
250
+ for k, results in self.sorted_results.items():
251
+ str_dict[k] = [self.get_hover_text(result) for result in results]
252
+ return str_dict.values()
253
+
236
254
  def get_colour_df(self, like_df=None):
237
255
  """
238
256
  Generate a dataframe of colours to add to the html rendering.
@@ -336,6 +354,35 @@ class Table:
336
354
  )
337
355
  return val_str
338
356
 
357
+ @staticmethod
358
+ def get_hover_text(result: FittingResult) -> str:
359
+ """
360
+ Generate the tooltip text for a given fitting result.
361
+ :param result: The result to generate the text for
362
+ :type result: FittingResult
363
+
364
+ :return: The generated tooltip
365
+ :rtype: str
366
+ """
367
+
368
+ if math.isinf(result.runtime) or math.isinf(result.min_accuracy):
369
+ return f"Error: {result.status}"
370
+
371
+ if result.iteration_count is None or result.iteration_count == 0:
372
+ iterations = "not available"
373
+ else:
374
+ iterations = result.func_evals
375
+
376
+ return (
377
+ f"""Status: {result.status}"""
378
+ f"""\\a Accuracy: {result.accuracy:.4g}"""
379
+ f"""\\a {result.runtime_metric.capitalize()}"""
380
+ f""" runtime: {result.runtime:.4g}"""
381
+ f"""\\a Energy usage: {result.energy:.4g}"""
382
+ f"""\\a Iterations: {iterations}"""
383
+ f"""\\a Function Evaluations: {result.func_evals}"""
384
+ )
385
+
339
386
  def get_colours_for_row(self, results):
340
387
  """
341
388
  Get the colours as strings for the given results in the table.
@@ -385,31 +432,48 @@ class Table:
385
432
  :rtype: pandas.DataFrame
386
433
  """
387
434
  str_results = self.get_str_dict(html)
388
- # Check all rows incase first row has missing information
435
+ rows, columns = self.format_results_indicies(str_results)
436
+
437
+ results_only = np.array(list(str_results.values()))
438
+
439
+ table = pd.DataFrame(results_only, index=rows, columns=columns)
440
+
441
+ return table
442
+
443
+ def format_results_indicies(self, results: dict[str, list[str]]):
444
+ """
445
+ Format rows and columns for the results dable
446
+
447
+ :param results: The results to format the indices for
448
+ :type dict: dict[row/problem, list[result string]]]
449
+ """
450
+ problems = list(results.keys())
451
+
452
+ problem_index_with_sizes = pd.MultiIndex.from_tuples(
453
+ zip(problems, self.problem_sizes)
454
+ )
455
+
389
456
  minimizers_list = []
457
+ # Check all rows incase first row has missing information
390
458
  for row in self.sorted_results.values():
391
- for i, r in enumerate(row):
392
- formatted = (r.software, r.modified_minimizer_name(False))
459
+ for i, result in enumerate(row):
460
+ formatted = (
461
+ result.software,
462
+ result.modified_minimizer_name(False),
463
+ )
464
+
465
+ # add the minimiser the first time it is seen
393
466
  if len(minimizers_list) == i:
394
467
  minimizers_list.append(formatted)
468
+ # if a longer minimiser name is seen under the same software,
469
+ # update the tuple to use that minimiser instead
470
+ # this ensures column width is wide enough for all minimisers
395
471
  elif len(minimizers_list[i][1]) < len(formatted[1]):
396
472
  minimizers_list[i] = formatted
397
473
 
398
474
  multi_columns = pd.MultiIndex.from_tuples(minimizers_list)
399
475
 
400
- single_index = list(str_results.keys())
401
-
402
- multi_index = pd.MultiIndex.from_tuples(
403
- zip(single_index, self.problem_sizes)
404
- )
405
-
406
- results_only = np.array(list(str_results.values()))
407
-
408
- table = pd.DataFrame(
409
- results_only, index=multi_index, columns=multi_columns
410
- )
411
-
412
- return table
476
+ return problem_index_with_sizes, multi_columns
413
477
 
414
478
  def to_html(self):
415
479
  """
@@ -489,15 +553,21 @@ class Table:
489
553
  multi_index = pd.MultiIndex.from_tuples(double_index)
490
554
  table.index = multi_index
491
555
 
492
- # Get columns where cost function changes
493
- column_dividers = [table.columns[0]]
494
- for column in table.columns[1:]:
556
+ style = self.style_df_for_html(multi_index, columns, table.style)
557
+
558
+ return style.to_html(table_uuid="table")
559
+
560
+ def style_df_for_html(
561
+ self, index, columns, styler: style.Styler
562
+ ) -> style.Styler:
563
+ column_dividers = [styler.columns[0]]
564
+ for column in styler.columns[1:]:
495
565
  if column[0] != column_dividers[-1][0]:
496
566
  column_dividers.append(column)
497
567
  column_dividers = column_dividers[1:]
498
568
 
499
569
  # Set the cell colours and increase bars between cost functions
500
- table_style = table.style.apply(
570
+ styler = styler.apply(
501
571
  lambda df: self.get_colour_df(like_df=df), axis=None
502
572
  ).set_table_styles(
503
573
  table_styles={
@@ -515,7 +585,26 @@ class Table:
515
585
  }
516
586
  )
517
587
 
518
- return table_style.to_html(table_uuid="table")
588
+ hover_table = pd.DataFrame(
589
+ list(self.get_hover_table()),
590
+ index=index,
591
+ columns=columns,
592
+ )
593
+
594
+ styler = styler.set_tooltips(
595
+ ttips=hover_table,
596
+ props="white-space: pre;"
597
+ "visibility: hidden;"
598
+ "position: absolute; z-index: 1;"
599
+ "border: 1px solid #8c8b8b;"
600
+ "background-color: white;"
601
+ "color: black; font-size: 0.8em;"
602
+ "transform: translate(2em, -0.6em); padding: 0.6em;"
603
+ "border-radius: 0em;"
604
+ "pointer-events: none;",
605
+ )
606
+
607
+ return styler
519
608
 
520
609
  def to_csv_file(self):
521
610
  """
@@ -552,8 +641,9 @@ class Table:
552
641
  " a problem ``rel = abs / 1e-10``."
553
642
  )
554
643
  descrip = descrip.replace(":ref:", "")
555
- js = get_js(self.options, self.group_dir)
556
- docsettings = {"math_output": "MathJax " + js["mathjax"]}
644
+ docsettings = {
645
+ "math_output": "MathJax https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js"
646
+ }
557
647
  description_page = docutils.core.publish_parts(
558
648
  descrip, writer_name="html", settings_overrides=docsettings
559
649
  )
@@ -832,7 +922,7 @@ class Table:
832
922
  "runtime_dropdown", "Select Runtime Metric", items
833
923
  )
834
924
 
835
- def get_runtime_value_str(self, result):
925
+ def get_runtime_value_str(self, result: FittingResult) -> str:
836
926
  """
837
927
  Generates the value str for the compare and runtime tables.
838
928
 
@@ -843,6 +933,7 @@ class Table:
843
933
  metrics.
844
934
  :rtype: str
845
935
  """
936
+ error = result.error_flag if result.error_flag != 0 else ""
846
937
  val_str = ""
847
938
  for rt in self.runtime_choices:
848
939
  formated_runtime = f"{getattr(result, rt + '_runtime'):.4g}"
@@ -851,7 +942,9 @@ class Table:
851
942
  val_str += (
852
943
  f"<span class='runtime' id='{rt}' "
853
944
  f"style='display:{display_style}'>"
854
- f"{formated_runtime} ({formatted_norm_runtime})</span>"
945
+ f"{formated_runtime} ({formatted_norm_runtime})"
946
+ f"<sup>{error}</sup>"
947
+ f"</span>"
855
948
  )
856
949
  return val_str
857
950
 
@@ -3,6 +3,7 @@ compare table
3
3
  """
4
4
 
5
5
  from fitbenchmarking.results_processing.base_table import Table
6
+ from fitbenchmarking.utils.fitbm_result import FittingResult
6
7
 
7
8
 
8
9
  class CompareTable(Table):
@@ -150,7 +151,7 @@ class CompareTable(Table):
150
151
  foreground_text = zip(acc_text, runtime_text)
151
152
  return background_col, foreground_text
152
153
 
153
- def get_hyperlink(self, result, val_str, text_col):
154
+ def get_hyperlink(self, result: FittingResult, val_str, text_col):
154
155
  """
155
156
  Generates the hyperlink for a given result
156
157
 
@@ -15,7 +15,11 @@ class EnergyUsageTable(Table):
15
15
 
16
16
  For more information on how energy usage is measured,
17
17
  see the Methodology section of the `codecarbon docs
18
- <https://mlco2.github.io/codecarbon/methodology.html#cpu>`_.
18
+ <https://docs.codecarbon.io/latest/explanation/methodology/>`_.
19
+
20
+ Please be aware that if you are running on a Mac, then you may
21
+ be prompted to provide a password to give sudo rights (so that
22
+ the powermetrics tool can be used).
19
23
 
20
24
  """
21
25
 
@@ -13,7 +13,6 @@ import plotly.graph_objects as go
13
13
  from plotly.subplots import make_subplots
14
14
 
15
15
  from fitbenchmarking.utils.exceptions import PlottingError
16
- from fitbenchmarking.utils.misc import get_js
17
16
 
18
17
 
19
18
  class Plot:
@@ -87,9 +86,8 @@ class Plot:
87
86
  :param options: The options for the run
88
87
  :type options: utils.options.Options
89
88
  """
90
- plotly_path = get_js(options, figures_dir).get("plotly")
91
89
  html_file_name = Path(figures_dir) / htmlfile
92
- fig.write_html(html_file_name, include_plotlyjs=plotly_path)
90
+ fig.write_html(html_file_name, include_plotlyjs="cdn")
93
91
 
94
92
  @staticmethod
95
93
  def best_filename(result) -> str:
@@ -192,7 +190,7 @@ class Plot:
192
190
  title=self.result.name, legend=self._legend_style
193
191
  )
194
192
  self._update_to_logscale_if_needed(fig, self.result)
195
-
193
+ self._add_menu_buttons(fig)
196
194
  htmlfile = (
197
195
  f"{minimizer}_fit_for_{self.result.costfun_tag}"
198
196
  f"_{self.result.sanitised_name}.html"
@@ -985,6 +983,40 @@ class Plot:
985
983
  fig.update_yaxes(type="log")
986
984
  return fig
987
985
 
986
+ @staticmethod
987
+ def _add_menu_buttons(fig) -> go.Figure:
988
+ """
989
+ Adds an interactible button to the plot, to toggle error bars
990
+
991
+ :param fig: The plotly figure to update the axis for
992
+ :type fig: plotly.graph_objects.Figure
993
+
994
+ :return: Updated plot
995
+ :rtype: plotly.graph_objects.Figure
996
+ """
997
+ fig.update_layout(
998
+ updatemenus=[
999
+ {
1000
+ "type": "buttons",
1001
+ "direction": "down",
1002
+ "showactive": False,
1003
+ "x": 1.25,
1004
+ "y": 1.15,
1005
+ "xanchor": "right",
1006
+ "yanchor": "top",
1007
+ "buttons": [
1008
+ {
1009
+ "label": "Toggle error bars",
1010
+ "method": "restyle",
1011
+ "args": [{"error_y.visible": [True]}, [0]],
1012
+ "args2": [{"error_y.visible": [False]}, [0]],
1013
+ }
1014
+ ],
1015
+ }
1016
+ ]
1017
+ )
1018
+ return fig
1019
+
988
1020
  @staticmethod
989
1021
  def _sample_colours(points: np.ndarray) -> list[str]:
990
1022
  """
@@ -15,22 +15,10 @@ from fitbenchmarking.utils.exceptions import (
15
15
  UnknownTableError,
16
16
  )
17
17
  from fitbenchmarking.utils.log import get_logger
18
- from fitbenchmarking.utils.misc import get_css, get_js
18
+ from fitbenchmarking.utils.misc import ERROR_FLAG_MAPPINGS, get_css, get_js
19
19
 
20
20
  LOGGER = get_logger()
21
21
 
22
- ERROR_OPTIONS = {
23
- 0: "Successfully converged",
24
- 1: "Software reported maximum number of iterations exceeded",
25
- 2: "Software run but didn't converge to solution",
26
- 3: "Software raised an exception",
27
- 4: "Solver doesn't support bounded problems",
28
- 5: "Solution doesn't respect parameter bounds",
29
- 6: "Solver has exceeded maximum allowed runtime",
30
- 7: "Validation of the provided options failed",
31
- 8: "Confidence in fit could not be calculated",
32
- }
33
-
34
22
  SORTED_TABLE_NAMES = ["compare", "acc", "runtime", "local_min", "energy_usage"]
35
23
 
36
24
 
@@ -133,7 +121,7 @@ def create_results_tables(
133
121
  dropdown_style=css["dropdown"],
134
122
  table_style=css["table"],
135
123
  dropdown_js=js["dropdown"],
136
- mathjax=js["mathjax"],
124
+ mathjax="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js",
137
125
  table_js=js["table"],
138
126
  table=html["table"],
139
127
  problem_dropdown=html["problem_dropdown"],
@@ -157,7 +145,7 @@ def create_results_tables(
157
145
  ),
158
146
  cbar=cbar,
159
147
  run_name=run_name,
160
- error_message=ERROR_OPTIONS,
148
+ error_message=ERROR_FLAG_MAPPINGS,
161
149
  failed_problems=failed_problems,
162
150
  unselected_minimzers=unselected_minimzers,
163
151
  algorithm_type=options.algorithm_type,
@@ -4,8 +4,7 @@
4
4
  <meta name="viewport" content="width=device-width, initial-scale=1" />
5
5
  <link rel="stylesheet" type="text/css" href="{{ css_style_sheet }}" />
6
6
  <link rel="stylesheet" type="text/css" href="{{ custom_style }}" />
7
- <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
8
- <script id="MathJax-script" async src="{{ mathjax }}"></script>
7
+ <script src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js" defer></script>
9
8
 
10
9
  <head>
11
10
  <title>{{ run_name }}{{ group_name }} results</title>
@@ -6,10 +6,9 @@
6
6
  <link rel="stylesheet" type="text/css" href="{{ custom_style }}" />
7
7
  <link rel="stylesheet" type="text/css" href="{{ dropdown_style }}" />
8
8
  <link rel="stylesheet" type="text/css" href="{{ table_style }}" />
9
- <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
10
9
  <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
11
10
  <script type="text/javascript" src="{{ dropdown_js }}"></script>
12
- <script id="MathJax-script" async src="{{ mathjax }}"></script>
11
+ <script src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js" defer></script>
13
12
  <script type="text/javascript" src="{{ table_js }}"></script>
14
13
  <script>
15
14
  // When the table page loads, read the selected runtime metric
@@ -124,6 +124,7 @@ class Checkpoint:
124
124
  "J": _compress(result.jac_x),
125
125
  "fin_y": _compress(result.fin_y),
126
126
  "tags": result.algorithm_type,
127
+ "status": result.status,
127
128
  }
128
129
 
129
130
  with open(self.results_file, "a", encoding="utf-8") as f:
@@ -348,6 +349,7 @@ class Checkpoint:
348
349
  new_result.r_x = _decompress(r["r"])
349
350
  new_result.jac_x = _decompress(r["J"])
350
351
  new_result.algorithm_type = r["tags"]
352
+ new_result.status = r.get("status", "unknown")
351
353
 
352
354
  new_result.name = r["name"]
353
355
  p = problems[new_result.name]