weightslab 1.3.1__tar.gz → 1.3.2__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 (350) hide show
  1. weightslab-1.3.2/CHANGELOG.md +1 -0
  2. {weightslab-1.3.1/weightslab.egg-info → weightslab-1.3.2}/PKG-INFO +1 -1
  3. {weightslab-1.3.1 → weightslab-1.3.2}/tests/gRPC/test_grpc_histogram_categorical.py +60 -0
  4. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/_version.py +3 -3
  5. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/data_service.py +20 -9
  6. {weightslab-1.3.1 → weightslab-1.3.2/weightslab.egg-info}/PKG-INFO +1 -1
  7. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab.egg-info/scm_version.json +2 -2
  8. weightslab-1.3.1/CHANGELOG.md +0 -1
  9. {weightslab-1.3.1 → weightslab-1.3.2}/.gitattributes +0 -0
  10. {weightslab-1.3.1 → weightslab-1.3.2}/.github/workflows/ci.yml +0 -0
  11. {weightslab-1.3.1 → weightslab-1.3.2}/.github/workflows/docs-pages.yml +0 -0
  12. {weightslab-1.3.1 → weightslab-1.3.2}/.github/workflows/release.yml +0 -0
  13. {weightslab-1.3.1 → weightslab-1.3.2}/.gitignore +0 -0
  14. {weightslab-1.3.1 → weightslab-1.3.2}/AGENTS.md +0 -0
  15. {weightslab-1.3.1 → weightslab-1.3.2}/LICENSE +0 -0
  16. {weightslab-1.3.1 → weightslab-1.3.2}/README.md +0 -0
  17. {weightslab-1.3.1 → weightslab-1.3.2}/agent_config.yaml +0 -0
  18. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/.gitkeep +0 -0
  19. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/custom.css +0 -0
  20. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/examples-gallery.js +0 -0
  21. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/favicon.png +0 -0
  22. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/github-stars.js +0 -0
  23. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/logo-dark.png +0 -0
  24. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/logo-light.png +0 -0
  25. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/version-switcher.js +0 -0
  26. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/weights_studio_architecture.png +0 -0
  27. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/wl-ribbon.js +0 -0
  28. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_static/wl-topnav.js +0 -0
  29. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_templates/.gitkeep +0 -0
  30. {weightslab-1.3.1 → weightslab-1.3.2}/docs/_templates/sidebar/brand.html +0 -0
  31. {weightslab-1.3.1 → weightslab-1.3.2}/docs/agent.rst +0 -0
  32. {weightslab-1.3.1 → weightslab-1.3.2}/docs/conf.py +0 -0
  33. {weightslab-1.3.1 → weightslab-1.3.2}/docs/configuration.rst +0 -0
  34. {weightslab-1.3.1 → weightslab-1.3.2}/docs/data_exploration.rst +0 -0
  35. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/index.rst +0 -0
  36. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/lightning/classification.rst +0 -0
  37. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/lightning/index.rst +0 -0
  38. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/pytorch/classification.rst +0 -0
  39. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/pytorch/clustering.rst +0 -0
  40. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/pytorch/detection.rst +0 -0
  41. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/pytorch/generation.rst +0 -0
  42. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/pytorch/index.rst +0 -0
  43. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/pytorch/segmentation.rst +0 -0
  44. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/ultralytics/detection.rst +0 -0
  45. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/ultralytics/index.rst +0 -0
  46. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/usecases/index.rst +0 -0
  47. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/usecases/lidar_detection.rst +0 -0
  48. {weightslab-1.3.1 → weightslab-1.3.2}/docs/examples/usecases/loss_shape_classification.rst +0 -0
  49. {weightslab-1.3.1 → weightslab-1.3.2}/docs/four_way_approach.rst +0 -0
  50. {weightslab-1.3.1 → weightslab-1.3.2}/docs/grpc/audit_logger.rst +0 -0
  51. {weightslab-1.3.1 → weightslab-1.3.2}/docs/grpc/grpc_functions.rst +0 -0
  52. {weightslab-1.3.1 → weightslab-1.3.2}/docs/grpc/index.rst +0 -0
  53. {weightslab-1.3.1 → weightslab-1.3.2}/docs/hyperparameters.rst +0 -0
  54. {weightslab-1.3.1 → weightslab-1.3.2}/docs/index.rst +0 -0
  55. {weightslab-1.3.1 → weightslab-1.3.2}/docs/logger.rst +0 -0
  56. {weightslab-1.3.1 → weightslab-1.3.2}/docs/model_interaction.rst +0 -0
  57. {weightslab-1.3.1 → weightslab-1.3.2}/docs/pytorch_lightning.rst +0 -0
  58. {weightslab-1.3.1 → weightslab-1.3.2}/docs/quickstart.rst +0 -0
  59. {weightslab-1.3.1 → weightslab-1.3.2}/docs/requirements.txt +0 -0
  60. {weightslab-1.3.1 → weightslab-1.3.2}/docs/segmentation_usecase.rst +0 -0
  61. {weightslab-1.3.1 → weightslab-1.3.2}/docs/ultralytics.rst +0 -0
  62. {weightslab-1.3.1 → weightslab-1.3.2}/docs/usage/docker.rst +0 -0
  63. {weightslab-1.3.1 → weightslab-1.3.2}/docs/usage/good_practice.rst +0 -0
  64. {weightslab-1.3.1 → weightslab-1.3.2}/docs/usage/parameters.rst +0 -0
  65. {weightslab-1.3.1 → weightslab-1.3.2}/docs/usage.rst +0 -0
  66. {weightslab-1.3.1 → weightslab-1.3.2}/docs/usecases.rst +0 -0
  67. {weightslab-1.3.1 → weightslab-1.3.2}/docs/user_commands.rst +0 -0
  68. {weightslab-1.3.1 → weightslab-1.3.2}/docs/user_functions.rst +0 -0
  69. {weightslab-1.3.1 → weightslab-1.3.2}/docs/weights_studio.rst +0 -0
  70. {weightslab-1.3.1 → weightslab-1.3.2}/pyproject.toml +0 -0
  71. {weightslab-1.3.1 → weightslab-1.3.2}/setup.cfg +0 -0
  72. {weightslab-1.3.1 → weightslab-1.3.2}/tests/__init__.py +0 -0
  73. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/__init__.py +0 -0
  74. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_audit_logger.py +0 -0
  75. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_cli_additional_unit.py +0 -0
  76. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_compare_dataloaders.py +0 -0
  77. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_data_loader_interface.py +0 -0
  78. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_instance_signal_logger.py +0 -0
  79. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_ledgers.py +0 -0
  80. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_logger_core.py +0 -0
  81. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_model_interface_unit.py +0 -0
  82. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_optimizer_interface.py +0 -0
  83. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_optimizer_interface_additional_unit.py +0 -0
  84. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_ui_docker_bridge.py +0 -0
  85. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_write_dataframe.py +0 -0
  86. {weightslab-1.3.1 → weightslab-1.3.2}/tests/backend/test_write_history.py +0 -0
  87. {weightslab-1.3.1 → weightslab-1.3.2}/tests/chaos_monkeys_utests/__init__.py +0 -0
  88. {weightslab-1.3.1 → weightslab-1.3.2}/tests/chaos_monkeys_utests/test_grpc_chaos_monkey_robustness.py +0 -0
  89. {weightslab-1.3.1 → weightslab-1.3.2}/tests/components/__init__.py +0 -0
  90. {weightslab-1.3.1 → weightslab-1.3.2}/tests/components/test_checkpoint_workflow.py +0 -0
  91. {weightslab-1.3.1 → weightslab-1.3.2}/tests/components/test_experiment_hash_and_art.py +0 -0
  92. {weightslab-1.3.1 → weightslab-1.3.2}/tests/components/test_global_monitoring_unit.py +0 -0
  93. {weightslab-1.3.1 → weightslab-1.3.2}/tests/gRPC/__init__.py +0 -0
  94. {weightslab-1.3.1 → weightslab-1.3.2}/tests/gRPC/test_get_point_cloud.py +0 -0
  95. {weightslab-1.3.1 → weightslab-1.3.2}/tests/gRPC/test_grpc_tag_operations.py +0 -0
  96. {weightslab-1.3.1 → weightslab-1.3.2}/tests/gRPC/test_grpc_user_actions.py +0 -0
  97. {weightslab-1.3.1 → weightslab-1.3.2}/tests/general/__init__.py +0 -0
  98. {weightslab-1.3.1 → weightslab-1.3.2}/tests/general/test_auditor_mode.py +0 -0
  99. {weightslab-1.3.1 → weightslab-1.3.2}/tests/general/test_cli.py +0 -0
  100. {weightslab-1.3.1 → weightslab-1.3.2}/tests/general/test_hyperparams.py +0 -0
  101. {weightslab-1.3.1 → weightslab-1.3.2}/tests/general/test_logger_snapshot_rotation.py +0 -0
  102. {weightslab-1.3.1 → weightslab-1.3.2}/tests/general/test_signals.py +0 -0
  103. {weightslab-1.3.1 → weightslab-1.3.2}/tests/general/test_signals_wrapping.py +0 -0
  104. {weightslab-1.3.1 → weightslab-1.3.2}/tests/integrations/__init__.py +0 -0
  105. {weightslab-1.3.1 → weightslab-1.3.2}/tests/integrations/test_pytorch_lightning_integration.py +0 -0
  106. {weightslab-1.3.1 → weightslab-1.3.2}/tests/integrations/ultralytics/ddp/ddp_ablation.py +0 -0
  107. {weightslab-1.3.1 → weightslab-1.3.2}/tests/integrations/ultralytics/ddp/ddp_test_suite.py +0 -0
  108. {weightslab-1.3.1 → weightslab-1.3.2}/tests/model/__init__.py +0 -0
  109. {weightslab-1.3.1 → weightslab-1.3.2}/tests/model/test_constraint_generation.py +0 -0
  110. {weightslab-1.3.1 → weightslab-1.3.2}/tests/model/test_dependency_patterns.py +0 -0
  111. {weightslab-1.3.1 → weightslab-1.3.2}/tests/model/test_logger.py +0 -0
  112. {weightslab-1.3.1 → weightslab-1.3.2}/tests/model/test_model_with_ops.py +0 -0
  113. {weightslab-1.3.1 → weightslab-1.3.2}/tests/model/test_model_with_ops_unit.py +0 -0
  114. {weightslab-1.3.1 → weightslab-1.3.2}/tests/model/test_tracking.py +0 -0
  115. {weightslab-1.3.1 → weightslab-1.3.2}/tests/modules/__init__.py +0 -0
  116. {weightslab-1.3.1 → weightslab-1.3.2}/tests/modules/test_modules_with_ops.py +0 -0
  117. {weightslab-1.3.1 → weightslab-1.3.2}/tests/test_secure_docker.py +0 -0
  118. {weightslab-1.3.1 → weightslab-1.3.2}/tests/test_src_functions.py +0 -0
  119. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/__init__.py +0 -0
  120. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/services/__init__.py +0 -0
  121. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/services/test_agent_live_prompt_evaluation.py +0 -0
  122. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/services/test_agent_model_and_safety_unit.py +0 -0
  123. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/services/test_agent_prompt_unit.py +0 -0
  124. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/services/test_agent_service_unit.py +0 -0
  125. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/services/test_trainer_services_server.py +0 -0
  126. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/services/test_trainer_services_unit.py +0 -0
  127. {weightslab-1.3.1 → weightslab-1.3.2}/tests/trainer/test_trainer_tools.py +0 -0
  128. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/__init__.py +0 -0
  129. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/test_computational_graph_utils_unit.py +0 -0
  130. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/test_logs_unit.py +0 -0
  131. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/test_modules_dependencies_unit.py +0 -0
  132. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/test_plot_graph_render_unit.py +0 -0
  133. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/test_plot_graph_unit.py +0 -0
  134. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/test_shape_prop_unit.py +0 -0
  135. {weightslab-1.3.1 → weightslab-1.3.2}/tests/utils/test_utils_tools_unit.py +0 -0
  136. {weightslab-1.3.1 → weightslab-1.3.2}/tests/watchdog/__init__.py +0 -0
  137. {weightslab-1.3.1 → weightslab-1.3.2}/tests/watchdog/test_lock_monitor.py +0 -0
  138. {weightslab-1.3.1 → weightslab-1.3.2}/tests/watchdog/test_watchdog.py +0 -0
  139. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/__init__.py +0 -0
  140. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/art.py +0 -0
  141. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/__init__.py +0 -0
  142. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/audit_logger.py +0 -0
  143. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/cli.py +0 -0
  144. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/dataloader_interface.py +0 -0
  145. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/ledgers.py +0 -0
  146. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/logger.py +0 -0
  147. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/model_interface.py +0 -0
  148. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/backend/optimizer_interface.py +0 -0
  149. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/components/__init__.py +0 -0
  150. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/components/checkpoint_manager.py +0 -0
  151. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/components/evaluation_controller.py +0 -0
  152. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/components/experiment_hash.py +0 -0
  153. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/components/global_monitoring.py +0 -0
  154. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/components/parallel_primitives.py +0 -0
  155. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/components/tracking.py +0 -0
  156. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/__init__.py +0 -0
  157. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/array_proxy.py +0 -0
  158. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/data_samples_with_ops.py +0 -0
  159. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/data_utils.py +0 -0
  160. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/dataframe_manager.py +0 -0
  161. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/h5_array_store.py +0 -0
  162. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/h5_dataframe_store.py +0 -0
  163. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/point_cloud_utils.py +0 -0
  164. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/data/sample_stats.py +0 -0
  165. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/Dockerfile +0 -0
  166. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/.dockerignore +0 -0
  167. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/.env.example +0 -0
  168. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/DEPLOYMENT.md +0 -0
  169. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/docker-compose.yml +0 -0
  170. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/nginx-entrypoint.sh +0 -0
  171. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/nginx.base-path.conf copy.template +0 -0
  172. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/nginx.base-path.conf.template +0 -0
  173. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/nginx.conf +0 -0
  174. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/test-deployment.sh +0 -0
  175. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/utils/build-and-deploy.sh +0 -0
  176. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/utils/generate-certs-auth-token.ps1 +0 -0
  177. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/utils/generate-certs-auth-token.sh +0 -0
  178. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/docker/utils/test-deployment.sh +0 -0
  179. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/envoy/envoy.downstream_plaintext.yaml +0 -0
  180. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/envoy/envoy.downstream_upstream_plaintext.yaml +0 -0
  181. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/envoy/envoy.upstream_plaintext.yaml +0 -0
  182. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/envoy/envoy.yaml +0 -0
  183. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/docker/nginx.conf +0 -0
  184. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/README.md +0 -0
  185. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/docker_in_docker/Dockerfile +0 -0
  186. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/docker_in_docker/README.md +0 -0
  187. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/docker_in_docker/docker-compose.yml +0 -0
  188. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/docker_in_docker/entrypoint.sh +0 -0
  189. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/siblings_self_contained/Dockerfile +0 -0
  190. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/siblings_self_contained/README.md +0 -0
  191. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/siblings_self_contained/docker-compose.yml +0 -0
  192. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/siblings_self_contained/entrypoint.sh +0 -0
  193. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Docker_training/siblings_self_contained/ui-compose.yml +0 -0
  194. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Lightning/ws-classification/config.yaml +0 -0
  195. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Lightning/ws-classification/main.py +0 -0
  196. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-classification/config.yaml +0 -0
  197. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-classification/main.py +0 -0
  198. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-clustering/config.yaml +0 -0
  199. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-clustering/face/__init__.py +0 -0
  200. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-clustering/face/data.py +0 -0
  201. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-clustering/face/model.py +0 -0
  202. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-clustering/face/signals.py +0 -0
  203. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-clustering/face/utils.py +0 -0
  204. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-clustering/main.py +0 -0
  205. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-detection/README.md +0 -0
  206. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-detection/config.yaml +0 -0
  207. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-detection/main.py +0 -0
  208. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-detection/utils/criterions.py +0 -0
  209. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-detection/utils/data.py +0 -0
  210. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-detection/utils/model.py +0 -0
  211. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-generation/config.yaml +0 -0
  212. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-generation/main.py +0 -0
  213. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/0000f77c-6257be58.jpg +0 -0
  214. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/000f8d37-d4c09a0f.jpg +0 -0
  215. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/00a0f008-a315437f.jpg +0 -0
  216. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/00c12bd0-bb46e479.jpg +0 -0
  217. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/00c29c52-f9524f1e.jpg +0 -0
  218. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/00ce6f6d-50bbee62.jpg +0 -0
  219. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/00d1bafa-1b47b41c.jpg +0 -0
  220. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/00d7268f-fd4487be.jpg +0 -0
  221. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/00f0dd0f-5e9c9557.jpg +0 -0
  222. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/0a0d7f4c-ac5c3c8f.jpg +0 -0
  223. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/0a1f4fce-f9cac880.jpg +0 -0
  224. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/train/0a3bb2d8-c195d91e.jpg +0 -0
  225. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1cac6a7-04e33135.jpg +0 -0
  226. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1ceb32e-3f481b43.jpg +0 -0
  227. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1d10d08-5b108225.jpg +0 -0
  228. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1d22449-15fb948f.jpg +0 -0
  229. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1d7b3ac-5af8623b.jpg +0 -0
  230. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1dce572-c6a8cb5e.jpg +0 -0
  231. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1e1a7b8-0aec80e8.jpg +0 -0
  232. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1e8ad72-c3c79240.jpg +0 -0
  233. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1ee702d-0ae1fc10.jpg +0 -0
  234. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b1f0efd9-37a14dda.jpg +0 -0
  235. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b2a0648b-d8e126bc.jpg +0 -0
  236. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/images/val/b2b70230-bad4ff6e.jpg +0 -0
  237. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/0000f77c-6257be58.png +0 -0
  238. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/000f8d37-d4c09a0f.png +0 -0
  239. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/00a0f008-a315437f.png +0 -0
  240. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/00c12bd0-bb46e479.png +0 -0
  241. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/00c29c52-f9524f1e.png +0 -0
  242. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/00ce6f6d-50bbee62.png +0 -0
  243. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/00d1bafa-1b47b41c.png +0 -0
  244. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/00d7268f-fd4487be.png +0 -0
  245. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/00f0dd0f-5e9c9557.png +0 -0
  246. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/0a0d7f4c-ac5c3c8f.png +0 -0
  247. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/0a1f4fce-f9cac880.png +0 -0
  248. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/train/0a3bb2d8-c195d91e.png +0 -0
  249. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1cac6a7-04e33135.png +0 -0
  250. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1ceb32e-3f481b43.png +0 -0
  251. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1d10d08-5b108225.png +0 -0
  252. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1d22449-15fb948f.png +0 -0
  253. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1d7b3ac-5af8623b.png +0 -0
  254. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1dce572-c6a8cb5e.png +0 -0
  255. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1e1a7b8-0aec80e8.png +0 -0
  256. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1e8ad72-c3c79240.png +0 -0
  257. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1ee702d-0ae1fc10.png +0 -0
  258. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b1f0efd9-37a14dda.png +0 -0
  259. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b2a0648b-d8e126bc.png +0 -0
  260. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/BDD_subset/labels/val/b2b70230-bad4ff6e.png +0 -0
  261. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/config.yaml +0 -0
  262. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/main.py +0 -0
  263. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/utils/criterions.py +0 -0
  264. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/utils/data.py +0 -0
  265. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/PyTorch/ws-segmentation/utils/model.py +0 -0
  266. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Ultralytics/ws-detection/config.yaml +0 -0
  267. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Ultralytics/ws-detection/main.py +0 -0
  268. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-2d-lidar-detection/README.md +0 -0
  269. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-2d-lidar-detection/config.yaml +0 -0
  270. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-2d-lidar-detection/main.py +0 -0
  271. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-2d-lidar-detection/utils/criterions.py +0 -0
  272. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-2d-lidar-detection/utils/data.py +0 -0
  273. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-2d-lidar-detection/utils/model.py +0 -0
  274. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-3d-lidar-detection/README.md +0 -0
  275. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-3d-lidar-detection/config.yaml +0 -0
  276. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-3d-lidar-detection/main.py +0 -0
  277. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-3d-lidar-detection/utils/criterions.py +0 -0
  278. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-3d-lidar-detection/utils/data.py +0 -0
  279. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-3d-lidar-detection/utils/kitti_download.py +0 -0
  280. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-3d-lidar-detection/utils/model.py +0 -0
  281. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/README.md +0 -0
  282. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/config.yaml +0 -0
  283. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/main.py +0 -0
  284. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/criterions.py +0 -0
  285. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/data.py +0 -0
  286. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/Usecases/ws-loss_shapes_classification_per_sample/utils/model.py +0 -0
  287. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/__init__.py +0 -0
  288. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/utils/__init__.py +0 -0
  289. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/utils/baseline_models/__init__.py +0 -0
  290. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/utils/baseline_models/pytorch/__init__.py +0 -0
  291. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/examples/utils/baseline_models/pytorch/models.py +0 -0
  292. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/__init__.py +0 -0
  293. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/ultralytics/README.md +0 -0
  294. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/ultralytics/__init__.py +0 -0
  295. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/ultralytics/_utils.py +0 -0
  296. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/ultralytics/collate.py +0 -0
  297. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/ultralytics/dataset.py +0 -0
  298. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/ultralytics/signals.py +0 -0
  299. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/integrations/ultralytics/trainer.py +0 -0
  300. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/models/__init__.py +0 -0
  301. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/models/model_with_ops.py +0 -0
  302. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/models/monkey_patcher.py +0 -0
  303. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/modules/__init__.py +0 -0
  304. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/modules/modules_with_ops.py +0 -0
  305. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/modules/neuron_ops.py +0 -0
  306. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/proto/__init__.py +0 -0
  307. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/proto/experiment_service.proto +0 -0
  308. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/proto/experiment_service_pb2.py +0 -0
  309. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/proto/experiment_service_pb2_grpc.py +0 -0
  310. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/security/__init__.py +0 -0
  311. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/security/cert_auth_manager.py +0 -0
  312. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/src.py +0 -0
  313. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/__init__.py +0 -0
  314. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/experiment_context.py +0 -0
  315. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/__init__.py +0 -0
  316. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/agent/__init__.py +0 -0
  317. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/agent/agent.py +0 -0
  318. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/agent/agent_overview/agent.png +0 -0
  319. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/agent/agent_overview/query_example.png +0 -0
  320. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/agent/agent_overview/schema.png +0 -0
  321. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/agent/intent_prompt.py +0 -0
  322. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/agent_service.py +0 -0
  323. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/data_image_utils.py +0 -0
  324. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/experiment_service.py +0 -0
  325. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/instance_merger.py +0 -0
  326. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/model_service.py +0 -0
  327. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/utils/__init__.py +0 -0
  328. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/services/utils/tools.py +0 -0
  329. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/trainer_services.py +0 -0
  330. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/trainer/trainer_tools.py +0 -0
  331. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/ui_docker_bridge.py +0 -0
  332. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/__init__.py +0 -0
  333. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/computational_graph.py +0 -0
  334. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/logs.py +0 -0
  335. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/modules_dependencies.py +0 -0
  336. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/plot_graph.py +0 -0
  337. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/shape_prop.py +0 -0
  338. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/telemetry.py +0 -0
  339. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/utils/tools.py +0 -0
  340. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/watchdog/__init__.py +0 -0
  341. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/watchdog/grpc_watchdog.py +0 -0
  342. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/watchdog/lock_monitor.py +0 -0
  343. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/watchdog/log_level.py +0 -0
  344. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab/watchdog/watchdog.py +0 -0
  345. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab.egg-info/SOURCES.txt +0 -0
  346. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab.egg-info/dependency_links.txt +0 -0
  347. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab.egg-info/entry_points.txt +0 -0
  348. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab.egg-info/requires.txt +0 -0
  349. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab.egg-info/scm_file_list.json +0 -0
  350. {weightslab-1.3.1 → weightslab-1.3.2}/weightslab.egg-info/top_level.txt +0 -0
@@ -0,0 +1 @@
1
+ # Changelog - 2026-07-07 v1.3.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: weightslab
3
- Version: 1.3.1
3
+ Version: 1.3.2
4
4
  Summary: Paving the way between black-box and white-box modeling.
5
5
  Author-email: Alexandru-Andrei Rotaru <alexandru@graybx.com>, Guillaue Pelluet <guillaue@graybx.com>
6
6
  License: BSD 2-clause
@@ -172,6 +172,66 @@ class TestGetHistogramMixedNaN(unittest.TestCase):
172
172
  self.assertGreater(len(resp.bins), 0)
173
173
 
174
174
 
175
+ class TestGetHistogramObjectDtypeNumeric(unittest.TestCase):
176
+ """A numeric column stored as object dtype (floats mixed with None/NaN)
177
+ must stay numeric — None/NaN are missing data, not an 'unset' category."""
178
+
179
+ def test_object_dtype_floats_with_none_stays_numeric(self):
180
+ # Mixing Python floats with None yields an object-dtype column; this is
181
+ # how a per-sample loss column looks before every sample has a value.
182
+ df = pd.DataFrame({
183
+ "loss": pd.Series(
184
+ [0.1, None, 0.3, np.nan, 0.5, None, 0.7, 0.2, None, 0.9],
185
+ dtype=object,
186
+ ),
187
+ "origin": ["train"] * 5 + ["eval"] * 5,
188
+ "discarded": [False] * 10,
189
+ })
190
+ self.assertEqual(df["loss"].dtype, object)
191
+ svc = _make_service_with_df(df)
192
+ resp = svc.GetHistogram(_req("loss"), MockContext())
193
+ self.assertTrue(resp.success, resp.message)
194
+ self.assertFalse(resp.is_categorical)
195
+ self.assertGreater(len(resp.bins), 0)
196
+ self.assertEqual(len(resp.categorical_bars), 0)
197
+
198
+ def test_none_nan_excluded_from_numeric_counts(self):
199
+ # Only the 6 finite values should be counted across all bins; the 4
200
+ # None/NaN entries must not appear as an "unset" category or a value.
201
+ df = pd.DataFrame({
202
+ "loss": pd.Series([1.0, None, 2.0, np.nan, 3.0, None, 4.0, 5.0, None, 6.0],
203
+ dtype=object),
204
+ "origin": ["train"] * 10,
205
+ "discarded": [False] * 10,
206
+ })
207
+ svc = _make_service_with_df(df)
208
+ resp = svc.GetHistogram(_req("loss"), MockContext())
209
+ self.assertFalse(resp.is_categorical)
210
+ total_counted = sum(b.count for b in resp.bins)
211
+ self.assertEqual(total_counted, 6)
212
+
213
+
214
+ class TestGetHistogramAllNaNFloatColumn(unittest.TestCase):
215
+ """A genuine float dtype column that is entirely NaN (e.g. a loss column
216
+ no sample has filled yet) must render as an empty numeric histogram — not
217
+ a categorical 'unset' bar."""
218
+
219
+ def test_all_nan_float_column_stays_numeric(self):
220
+ df = pd.DataFrame({
221
+ "loss": pd.Series([np.nan] * 8, dtype=float),
222
+ "origin": ["train"] * 8,
223
+ "discarded": [False] * 8,
224
+ })
225
+ self.assertTrue(pd.api.types.is_float_dtype(df["loss"]))
226
+ svc = _make_service_with_df(df)
227
+ resp = svc.GetHistogram(_req("loss"), MockContext())
228
+ self.assertTrue(resp.success, resp.message)
229
+ self.assertFalse(resp.is_categorical)
230
+ self.assertEqual(len(resp.categorical_bars), 0)
231
+ # No finite values → every bin is empty, none surfaced as "unset".
232
+ self.assertEqual(sum(b.count for b in resp.bins), 0)
233
+
234
+
175
235
  class TestGetHistogramEdgeCases(unittest.TestCase):
176
236
  def test_column_not_in_df(self):
177
237
  df = pd.DataFrame({"a": [1, 2, 3], "origin": ["train"] * 3,
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.3.1'
22
- __version_tuple__ = version_tuple = (1, 3, 1)
21
+ __version__ = version = '1.3.2'
22
+ __version_tuple__ = version_tuple = (1, 3, 2)
23
23
 
24
- __commit_id__ = commit_id = 'g3898cb715'
24
+ __commit_id__ = commit_id = 'g8eab0cc6d'
@@ -4339,18 +4339,29 @@ class DataService:
4339
4339
  else np.zeros(n, bool))
4340
4340
 
4341
4341
  # Detect whether column is categorical (string/object) or numeric.
4342
+ # A column is numeric if ANY value coerces to a finite number — even
4343
+ # when the pandas dtype is ``object`` (e.g. a loss column holding
4344
+ # floats mixed with None/NaN for samples that have no value yet).
4345
+ # None/NaN are MISSING data, not a category, so they must never turn
4346
+ # a numeric column into a categorical one (which would surface them
4347
+ # as a spurious "unset" bar). We therefore treat as categorical only
4348
+ # a genuine pandas ``category`` dtype, or a column whose values do
4349
+ # not coerce to any numeric value at all (pure strings).
4342
4350
  col_series = df[column]
4343
4351
  numeric_vals = pd.to_numeric(col_series, errors="coerce")
4344
- is_categorical = numeric_vals.isna().all() or (
4345
- col_series.dtype == object or
4346
- str(col_series.dtype) == "category" or
4347
- hasattr(col_series, "cat")
4352
+ is_category_dtype = (
4353
+ str(col_series.dtype) == "category" or hasattr(col_series, "cat")
4354
+ )
4355
+ # A genuine numeric dtype (float/int/bool) is ALWAYS numeric — even
4356
+ # when every value is NaN (e.g. a loss column no sample has filled
4357
+ # yet). Such a column yields an empty numeric histogram, never a
4358
+ # spurious "unset" categorical bar.
4359
+ is_numeric_dtype = (
4360
+ pd.api.types.is_numeric_dtype(col_series) and not is_category_dtype
4361
+ )
4362
+ is_categorical = (not is_numeric_dtype) and (
4363
+ is_category_dtype or not bool(numeric_vals.notna().any())
4348
4364
  )
4349
- # A column that has a few non-NaN numeric values mixed with mostly
4350
- # NaN still counts as numeric; only treat as categorical when
4351
- # pd.to_numeric fails on all values.
4352
- if not is_categorical and numeric_vals.notna().sum() == 0:
4353
- is_categorical = True
4354
4365
 
4355
4366
  if is_categorical:
4356
4367
  # --- Categorical path ---
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: weightslab
3
- Version: 1.3.1
3
+ Version: 1.3.2
4
4
  Summary: Paving the way between black-box and white-box modeling.
5
5
  Author-email: Alexandru-Andrei Rotaru <alexandru@graybx.com>, Guillaue Pelluet <guillaue@graybx.com>
6
6
  License: BSD 2-clause
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "1.3.1",
2
+ "tag": "1.3.2",
3
3
  "distance": 0,
4
- "node": "g3898cb71521e5b2e15b709a84c5ed095706ddd95",
4
+ "node": "g8eab0cc6dde4dbee84302aad461e8acdc26d3b9e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-07-07"
@@ -1 +0,0 @@
1
- # Changelog - 2026-07-07 v1.3.1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes