arraybridge 0.2.8__tar.gz → 0.2.10__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 (90) hide show
  1. {arraybridge-0.2.8 → arraybridge-0.2.10}/.github/badges/coverage.svg +1 -1
  2. {arraybridge-0.2.8 → arraybridge-0.2.10}/PKG-INFO +1 -1
  3. {arraybridge-0.2.8 → arraybridge-0.2.10}/pyproject.toml +3 -3
  4. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/__init__.py +1 -1
  5. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/decorators.py +6 -19
  6. {arraybridge-0.2.8 → arraybridge-0.2.10}/.github/workflows/ci.yml +0 -0
  7. {arraybridge-0.2.8 → arraybridge-0.2.10}/.github/workflows/coverage-pages.yml +0 -0
  8. {arraybridge-0.2.8 → arraybridge-0.2.10}/.github/workflows/gpu-tests.yml +0 -0
  9. {arraybridge-0.2.8 → arraybridge-0.2.10}/.github/workflows/publish.yml +0 -0
  10. {arraybridge-0.2.8 → arraybridge-0.2.10}/.gitignore +0 -0
  11. {arraybridge-0.2.8 → arraybridge-0.2.10}/.readthedocs.yml +0 -0
  12. {arraybridge-0.2.8 → arraybridge-0.2.10}/ADDING_NEW_FRAMEWORKS.md +0 -0
  13. {arraybridge-0.2.8 → arraybridge-0.2.10}/CI_ARTIFACT_UPDATE.md +0 -0
  14. {arraybridge-0.2.8 → arraybridge-0.2.10}/CI_CUPY_FIX.md +0 -0
  15. {arraybridge-0.2.8 → arraybridge-0.2.10}/CI_IMPROVEMENTS.md +0 -0
  16. {arraybridge-0.2.8 → arraybridge-0.2.10}/CONFLICT_VISUALIZATION.md +0 -0
  17. {arraybridge-0.2.8 → arraybridge-0.2.10}/CONTRIBUTING.md +0 -0
  18. {arraybridge-0.2.8 → arraybridge-0.2.10}/COVERAGE_AUDIT_PLAN.md +0 -0
  19. {arraybridge-0.2.8 → arraybridge-0.2.10}/DEPLOYMENT_SUMMARY.md +0 -0
  20. {arraybridge-0.2.8 → arraybridge-0.2.10}/GPU_TESTING_SETUP.md +0 -0
  21. {arraybridge-0.2.8 → arraybridge-0.2.10}/LICENSE +0 -0
  22. {arraybridge-0.2.8 → arraybridge-0.2.10}/MERGE_CONFLICT_RESOLUTION.md +0 -0
  23. {arraybridge-0.2.8 → arraybridge-0.2.10}/MIGRATION_SUMMARY.md +0 -0
  24. {arraybridge-0.2.8 → arraybridge-0.2.10}/QUICK_FIX_GUIDE.txt +0 -0
  25. {arraybridge-0.2.8 → arraybridge-0.2.10}/README.md +0 -0
  26. {arraybridge-0.2.8 → arraybridge-0.2.10}/RESOLVED_FILES.md +0 -0
  27. {arraybridge-0.2.8 → arraybridge-0.2.10}/SETUP_INSTRUCTIONS.md +0 -0
  28. {arraybridge-0.2.8 → arraybridge-0.2.10}/TESTING.md +0 -0
  29. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/Makefile +0 -0
  30. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/ci-cd.md +0 -0
  31. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/.gitignore +0 -0
  32. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/Makefile +0 -0
  33. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/README.md +0 -0
  34. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/advanced_topics.rst +0 -0
  35. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/api/converters.rst +0 -0
  36. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/api/decorators.rst +0 -0
  37. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/api/exceptions.rst +0 -0
  38. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/api/index.rst +0 -0
  39. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/api/types.rst +0 -0
  40. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/api/utils.rst +0 -0
  41. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/api_reference.rst +0 -0
  42. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/ci-cd.rst +0 -0
  43. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/conf.py +0 -0
  44. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/contributing.rst +0 -0
  45. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/converters.rst +0 -0
  46. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/decorators.rst +0 -0
  47. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/examples/basic_conversion.rst +0 -0
  48. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/examples/decorators.rst +0 -0
  49. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/examples/index.rst +0 -0
  50. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/examples/multi_framework.rst +0 -0
  51. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/gpu_features.rst +0 -0
  52. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/index.rst +0 -0
  53. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/installation.rst +0 -0
  54. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/quickstart.rst +0 -0
  55. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/stack_utils.rst +0 -0
  56. {arraybridge-0.2.8 → arraybridge-0.2.10}/docs/source/user_guide.rst +0 -0
  57. {arraybridge-0.2.8 → arraybridge-0.2.10}/paper.bib +0 -0
  58. {arraybridge-0.2.8 → arraybridge-0.2.10}/paper.md +0 -0
  59. {arraybridge-0.2.8 → arraybridge-0.2.10}/scripts/release.py +0 -0
  60. {arraybridge-0.2.8 → arraybridge-0.2.10}/scripts/update_and_release.py +0 -0
  61. {arraybridge-0.2.8 → arraybridge-0.2.10}/scripts/update_version.py +0 -0
  62. {arraybridge-0.2.8 → arraybridge-0.2.10}/scripts/verify_release_ready.py +0 -0
  63. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/converters.py +0 -0
  64. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/converters_registry.py +0 -0
  65. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/dtype_scaling.py +0 -0
  66. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/exceptions.py +0 -0
  67. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/framework_config.py +0 -0
  68. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/framework_ops.py +0 -0
  69. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/gpu_cleanup.py +0 -0
  70. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/oom_recovery.py +0 -0
  71. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/slice_processing.py +0 -0
  72. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/stack_utils.py +0 -0
  73. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/types.py +0 -0
  74. {arraybridge-0.2.8 → arraybridge-0.2.10}/src/arraybridge/utils.py +0 -0
  75. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/__init__.py +0 -0
  76. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/conftest.py +0 -0
  77. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_converters.py +0 -0
  78. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_converters_registry.py +0 -0
  79. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_decorators.py +0 -0
  80. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_dtype_scaling.py +0 -0
  81. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_exceptions.py +0 -0
  82. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_framework_config.py +0 -0
  83. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_gpu_cleanup.py +0 -0
  84. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_integration.py +0 -0
  85. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_oom_recovery.py +0 -0
  86. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_registry_integration.py +0 -0
  87. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_slice_processing.py +0 -0
  88. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_stack_utils.py +0 -0
  89. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_types.py +0 -0
  90. {arraybridge-0.2.8 → arraybridge-0.2.10}/tests/test_utils.py +0 -0
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 77.57%"><title>coverage: 77.57%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#97ca00"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">77.57%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">77.57%</text></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 75.14%"><title>coverage: 75.14%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#97ca00"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">75.14%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">75.14%</text></g></svg>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arraybridge
3
- Version: 0.2.8
3
+ Version: 0.2.10
4
4
  Summary: Unified API for NumPy, CuPy, PyTorch, TensorFlow, JAX, and pyclesperanto with automatic memory type conversion
5
5
  Project-URL: Homepage, https://github.com/OpenHCSDev/arraybridge
6
6
  Project-URL: Documentation, https://arraybridge.readthedocs.io
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "arraybridge"
7
- version = "0.2.8"
7
+ version = "0.2.10"
8
8
  description = "Unified API for NumPy, CuPy, PyTorch, TensorFlow, JAX, and pyclesperanto with automatic memory type conversion"
9
9
  authors = [{name = "Tristan Simas", email = "tristan.simas@mail.mcgill.ca"}]
10
10
  license = {text = "MIT"}
@@ -113,13 +113,13 @@ target-version = ["py39", "py310", "py311", "py312"]
113
113
 
114
114
  [tool.ruff]
115
115
  line-length = 100
116
- target-version = "0.2.8"
116
+ target-version = "0.2.9"
117
117
 
118
118
  [tool.ruff.lint]
119
119
  select = ["E", "F", "I", "N", "W", "UP"]
120
120
 
121
121
  [tool.mypy]
122
- python_version = "0.2.8"
122
+ python_version = "0.2.9"
123
123
  warn_return_any = true
124
124
  warn_unused_configs = true
125
125
  disallow_untyped_defs = false # Too strict for scientific code
@@ -5,7 +5,7 @@ This package provides automatic memory type conversion, declarative decorators,
5
5
  and unified utilities for working with multiple array/tensor frameworks.
6
6
  """
7
7
 
8
- __version__ = "0.2.8"
8
+ __version__ = "0.2.10"
9
9
 
10
10
  from .converters import convert_memory, detect_memory_type
11
11
  from .decorators import (
@@ -167,10 +167,12 @@ def _create_dtype_wrapper(func, mem_type: MemoryType, func_name: str):
167
167
  scale_func = SCALING_FUNCTIONS[mem_type.value]
168
168
 
169
169
  @functools.wraps(func)
170
- def dtype_wrapper(image, *args, dtype_conversion=None, slice_by_slice: bool = False, **kwargs):
171
- # Set default dtype_conversion if not provided
172
- if dtype_conversion is None:
173
- dtype_conversion = DtypeConversion.PRESERVE_INPUT
170
+ def dtype_wrapper(image, *args, slice_by_slice: bool = False, **kwargs):
171
+
172
+ # Get dtype_config from kwargs (injected by OpenHCS)
173
+ dtype_config = kwargs.pop("dtype_config")
174
+ # Extract the conversion mode from the config dataclass
175
+ dtype_conversion = dtype_config.default_dtype_conversion
174
176
 
175
177
  # Store original dtype
176
178
  original_dtype = getattr(image, "dtype", None)
@@ -222,16 +224,6 @@ def _create_dtype_wrapper(func, mem_type: MemoryType, func_name: str):
222
224
  # Check if parameters already exist
223
225
  param_names = [p.name for p in new_params]
224
226
 
225
- # Add dtype_conversion parameter first (before slice_by_slice)
226
- if "dtype_conversion" not in param_names:
227
- dtype_param = inspect.Parameter(
228
- "dtype_conversion",
229
- inspect.Parameter.KEYWORD_ONLY,
230
- default=DtypeConversion.PRESERVE_INPUT,
231
- annotation=Optional[DtypeConversion],
232
- )
233
- new_params.append(dtype_param)
234
-
235
227
  # Add slice_by_slice parameter
236
228
  if "slice_by_slice" not in param_names:
237
229
  slice_param = inspect.Parameter(
@@ -248,11 +240,6 @@ def _create_dtype_wrapper(func, mem_type: MemoryType, func_name: str):
248
240
  dtype_wrapper.__doc__ += (
249
241
  f"\n\n Additional Parameters " f"(added by {mem_type.value} decorator):\n"
250
242
  )
251
- dtype_wrapper.__doc__ += (
252
- " dtype_conversion (DtypeConversion, optional): "
253
- "How to handle output dtype.\n"
254
- )
255
- dtype_wrapper.__doc__ += " Defaults to PRESERVE_INPUT (match input dtype).\n"
256
243
  dtype_wrapper.__doc__ += (
257
244
  " slice_by_slice (bool, optional): " "Process 3D arrays slice-by-slice.\n"
258
245
  )
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