nbxtensor 0.0.2__tar.gz → 0.0.3__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 (341) hide show
  1. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/CHANGELOG.md +8 -1
  2. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/PKG-INFO +3 -3
  3. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/README.md +1 -1
  4. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/pyproject.toml +2 -2
  5. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/__init__.py +1 -1
  6. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/runtime.py +14 -1
  7. nbxtensor-0.0.3/tests/test_the_backend_is_the_card_on_the_machine.py +19 -0
  8. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/.github/PULL_REQUEST_TEMPLATE/certificate.md +0 -0
  9. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/CONTRIBUTING.md +0 -0
  10. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/LICENSE +0 -0
  11. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/THIRD_PARTY_NOTICES.md +0 -0
  12. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/assets/logo.png +0 -0
  13. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/__main__.py +0 -0
  14. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/__init__.py +0 -0
  15. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/capabilities.py +0 -0
  16. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu/__init__.py +0 -0
  17. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu/blas.py +0 -0
  18. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu/pool.py +0 -0
  19. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu_backend.py +0 -0
  20. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/device_facts.py +0 -0
  21. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/device_files.py +0 -0
  22. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/device_names.py +0 -0
  23. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna.yml +0 -0
  24. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna2.yml +0 -0
  25. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna3.yml +0 -0
  26. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna4.yml +0 -0
  27. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/rdna3.yml +0 -0
  28. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/rdna4.yml +0 -0
  29. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1.yml +0 -0
  30. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1_max.yml +0 -0
  31. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1_pro.yml +0 -0
  32. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1_ultra.yml +0 -0
  33. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2.yml +0 -0
  34. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2_max.yml +0 -0
  35. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2_pro.yml +0 -0
  36. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2_ultra.yml +0 -0
  37. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3.yml +0 -0
  38. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3_max.yml +0 -0
  39. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3_pro.yml +0 -0
  40. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3_ultra.yml +0 -0
  41. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m4.yml +0 -0
  42. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m4_max.yml +0 -0
  43. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m4_pro.yml +0 -0
  44. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5.yml +0 -0
  45. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5_max.yml +0 -0
  46. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5_pro.yml +0 -0
  47. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5_ultra.yml +0 -0
  48. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m6.yml +0 -0
  49. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_silicon.yml +0 -0
  50. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/bmg.yml +0 -0
  51. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/dg2.yml +0 -0
  52. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/lnl.yml +0 -0
  53. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/pvc.yml +0 -0
  54. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/nvidia/ampere.yml +0 -0
  55. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/nvidia/hopper.yml +0 -0
  56. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/nvidia/volta.yml +0 -0
  57. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/faults.py +0 -0
  58. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/host_memory.py +0 -0
  59. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/install_help.py +0 -0
  60. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/install_steps.yml +0 -0
  61. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/launcher.py +0 -0
  62. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/launcher_contract.py +0 -0
  63. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/level_zero.py +0 -0
  64. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/level_zero_driver.py +0 -0
  65. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/metal_backend.py +0 -0
  66. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/metal_device.py +0 -0
  67. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/process_memory.py +0 -0
  68. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/replay_graph.py +0 -0
  69. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/triton_ext_driver.py +0 -0
  70. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/__init__.py +0 -0
  71. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/convert.py +0 -0
  72. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/dtypes.yml +0 -0
  73. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/itemsize.py +0 -0
  74. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/nbx_dtype.py +0 -0
  75. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/operands.py +0 -0
  76. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/outputs.py +0 -0
  77. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/policy.py +0 -0
  78. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/policy.yml +0 -0
  79. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/promotion.py +0 -0
  80. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/host.py +0 -0
  81. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/io/__init__.py +0 -0
  82. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/io/read_rate.py +0 -0
  83. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/io/safetensors.py +0 -0
  84. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/__init__.py +0 -0
  85. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/allocator.py +0 -0
  86. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/arena.py +0 -0
  87. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/device_memory.py +0 -0
  88. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/device_transfer.py +0 -0
  89. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/layout.py +0 -0
  90. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/memory_pool.py +0 -0
  91. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/metal.py +0 -0
  92. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/oom_advice.py +0 -0
  93. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/pointer_tables.py +0 -0
  94. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/pool.py +0 -0
  95. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/shadow.py +0 -0
  96. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/slab.py +0 -0
  97. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/trace_replay.py +0 -0
  98. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/traces/sana-video-2b-720p.16g.2026-11-02.tsv +0 -0
  99. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/vmm.py +0 -0
  100. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/__init__.py +0 -0
  101. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_autotune_policy.py +0 -0
  102. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_common.py +0 -0
  103. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_configs.py +0 -0
  104. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_cost.py +0 -0
  105. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/abs.py +0 -0
  106. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/adaptive_avg_pool2d.py +0 -0
  107. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/add.py +0 -0
  108. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addcdiv.py +0 -0
  109. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addcmul.py +0 -0
  110. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addmv_op.py +0 -0
  111. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addr.py +0 -0
  112. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/all_reduce.py +0 -0
  113. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/amax.py +0 -0
  114. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/any_reduce.py +0 -0
  115. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/arange_op.py +0 -0
  116. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/argmax.py +0 -0
  117. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/argmin.py +0 -0
  118. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/atan2.py +0 -0
  119. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/attention_wrappers.py +0 -0
  120. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_bucket.py +0 -0
  121. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_cache.py +0 -0
  122. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_certified.py +0 -0
  123. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_refusals.py +0 -0
  124. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_settings.py +0 -0
  125. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/avg_pool2d.py +0 -0
  126. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/baddbmm_op.py +0 -0
  127. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/batch_norm.py +0 -0
  128. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/binary_strided.py +0 -0
  129. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_and.py +0 -0
  130. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_left_shift.py +0 -0
  131. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_not.py +0 -0
  132. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_or.py +0 -0
  133. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_right_shift.py +0 -0
  134. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bucketize.py +0 -0
  135. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cat_op.py +0 -0
  136. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/celu.py +0 -0
  137. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/certified_index.py +0 -0
  138. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/clamp.py +0 -0
  139. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/clamp_min.py +0 -0
  140. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv2d.py +0 -0
  141. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv2d_m8n8k4.py +0 -0
  142. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv_depthwise2d.py +0 -0
  143. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv_transpose2d.py +0 -0
  144. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv_wrappers.py +0 -0
  145. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/copy.py +0 -0
  146. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/copy_op.py +0 -0
  147. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cos.py +0 -0
  148. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/count_nonzero.py +0 -0
  149. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cross_entropy.py +0 -0
  150. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cummax.py +0 -0
  151. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cummin.py +0 -0
  152. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cumsum.py +0 -0
  153. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/decode_attn_vec.py +0 -0
  154. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/depthwise_conv2d.py +0 -0
  155. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dequant_gemv.py +0 -0
  156. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dft.py +0 -0
  157. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dispatch.py +0 -0
  158. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/div.py +0 -0
  159. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dot_op.py +0 -0
  160. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dropout.py +0 -0
  161. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dtype_convert.py +0 -0
  162. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/elementwise_launch.py +0 -0
  163. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/elementwise_wrappers.py +0 -0
  164. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/elu.py +0 -0
  165. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/embedding.py +0 -0
  166. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/eq.py +0 -0
  167. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/erf.py +0 -0
  168. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/exp.py +0 -0
  169. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/exp2.py +0 -0
  170. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fft_op.py +0 -0
  171. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fill_op.py +0 -0
  172. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flash_attention.py +0 -0
  173. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flash_attention_m8n8k4.py +0 -0
  174. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flash_decode.py +0 -0
  175. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flip_op.py +0 -0
  176. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/floor.py +0 -0
  177. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/full_op.py +0 -0
  178. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fused_moe.py +0 -0
  179. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fused_moe_m8n8k4.py +0 -0
  180. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fused_upsample_conv.py +0 -0
  181. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gather_op.py +0 -0
  182. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/ge.py +0 -0
  183. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gelu.py +0 -0
  184. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gemv_vec.py +0 -0
  185. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/glu.py +0 -0
  186. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/grid_sampler.py +0 -0
  187. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/group_norm_tiled.py +0 -0
  188. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/groupnorm.py +0 -0
  189. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gt.py +0 -0
  190. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/hardsigmoid.py +0 -0
  191. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/hardswish.py +0 -0
  192. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/im2col.py +0 -0
  193. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_add.py +0 -0
  194. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_put_op.py +0 -0
  195. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_select.py +0 -0
  196. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_wrappers.py +0 -0
  197. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/isfinite.py +0 -0
  198. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/isinf.py +0 -0
  199. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/isnan.py +0 -0
  200. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/launch_keys.py +0 -0
  201. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/launch_observer.py +0 -0
  202. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/layernorm.py +0 -0
  203. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/le.py +0 -0
  204. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/leaky_relu.py +0 -0
  205. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/lerp.py +0 -0
  206. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/linalg_wrappers.py +0 -0
  207. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/linspace_op.py +0 -0
  208. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/log.py +0 -0
  209. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/log_sigmoid.py +0 -0
  210. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_and.py +0 -0
  211. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_not.py +0 -0
  212. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_or.py +0 -0
  213. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_xor.py +0 -0
  214. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/loss_wrappers.py +0 -0
  215. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/lt.py +0 -0
  216. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/masked_fill.py +0 -0
  217. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/matmul.py +0 -0
  218. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/matmul_m8n8k4.py +0 -0
  219. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/max_pool2d.py +0 -0
  220. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/max_pool3d.py +0 -0
  221. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/max_reduce.py +0 -0
  222. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/maximum.py +0 -0
  223. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mean.py +0 -0
  224. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/min_reduce.py +0 -0
  225. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/minimum.py +0 -0
  226. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mish.py +0 -0
  227. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mma_m8n8k4.py +0 -0
  228. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_align.py +0 -0
  229. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_decode_vec.py +0 -0
  230. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_device_residency.py +0 -0
  231. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_wrappers.py +0 -0
  232. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mse_loss.py +0 -0
  233. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mul.py +0 -0
  234. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nan_to_num.py +0 -0
  235. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/ne.py +0 -0
  236. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/neg.py +0 -0
  237. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nllloss.py +0 -0
  238. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nonzero.py +0 -0
  239. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nonzero_op.py +0 -0
  240. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/norm_wrappers.py +0 -0
  241. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/ones_op.py +0 -0
  242. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/oracles/__init__.py +0 -0
  243. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/oracles/conv2d_fp64.py +0 -0
  244. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pad_op.py +0 -0
  245. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/paged_decode_attn.py +0 -0
  246. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pixel_shuffle.py +0 -0
  247. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pixel_unshuffle.py +0 -0
  248. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pow.py +0 -0
  249. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/prod.py +0 -0
  250. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rand_op.py +0 -0
  251. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/random_wrappers.py +0 -0
  252. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/reciprocal.py +0 -0
  253. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/reduction_wrappers.py +0 -0
  254. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/relu.py +0 -0
  255. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/remainder.py +0 -0
  256. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/repeat_interleave.py +0 -0
  257. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/repeat_op.py +0 -0
  258. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/residual_chain.py +0 -0
  259. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rmsnorm.py +0 -0
  260. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rope.py +0 -0
  261. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rsqrt.py +0 -0
  262. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/scaled_softmax.py +0 -0
  263. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/scatter_op.py +0 -0
  264. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/screen_oracle.py +0 -0
  265. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/selu.py +0 -0
  266. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/shape_wrappers.py +0 -0
  267. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sigmoid.py +0 -0
  268. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/silu.py +0 -0
  269. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sin.py +0 -0
  270. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/softmax.py +0 -0
  271. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/softplus.py +0 -0
  272. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sort_op.py +0 -0
  273. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/spectral_wrappers.py +0 -0
  274. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sqrt.py +0 -0
  275. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/stack_op.py +0 -0
  276. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/std.py +0 -0
  277. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/strided_copy.py +0 -0
  278. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sub.py +0 -0
  279. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sum.py +0 -0
  280. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tan.py +0 -0
  281. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tanh.py +0 -0
  282. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/threshold.py +0 -0
  283. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tiling.yml +0 -0
  284. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tiling_policy.py +0 -0
  285. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tiling_sizes.py +0 -0
  286. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/topk.py +0 -0
  287. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/trace_op.py +0 -0
  288. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tril.py +0 -0
  289. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/triu.py +0 -0
  290. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/unfold_op.py +0 -0
  291. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/unique_op.py +0 -0
  292. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/upsample_bilinear2d.py +0 -0
  293. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/upsample_nearest2d.py +0 -0
  294. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/upsample_nearest3d.py +0 -0
  295. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/var.py +0 -0
  296. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/vector_norm.py +0 -0
  297. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/weight_norm.py +0 -0
  298. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/where.py +0 -0
  299. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/wrappers.py +0 -0
  300. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/zeros_op.py +0 -0
  301. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/quant/__init__.py +0 -0
  302. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/quant/quantized_tensor.py +0 -0
  303. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/__init__.py +0 -0
  304. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/mt_randn.py +0 -0
  305. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/rng_pin.py +0 -0
  306. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/rng_stream.py +0 -0
  307. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/seeded_draw.py +0 -0
  308. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/shape/__init__.py +0 -0
  309. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/tensor.py +0 -0
  310. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_a_small_tensor_never_pins_a_large_block.py +0 -0
  311. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_a_sweep_refused_everywhere_says_so.py +0 -0
  312. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_a_triton_kernel_compiles_for_amd_and_launches_through_hip.py +0 -0
  313. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_allocator_interceptor.py +0 -0
  314. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_array_api_promotion.py +0 -0
  315. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_cpu_pool.py +0 -0
  316. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_device_facts.py +0 -0
  317. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_device_files.py +0 -0
  318. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_device_memory.py +0 -0
  319. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_dtype_convert.py +0 -0
  320. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_dtype_outputs.py +0 -0
  321. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_dtype_promotion.py +0 -0
  322. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_host.py +0 -0
  323. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_io_bf16_split.py +0 -0
  324. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_io_read_rate.py +0 -0
  325. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_nbx_dtype.py +0 -0
  326. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_no_environment_switch_changes_a_kernel.py +0 -0
  327. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_ops_cost.py +0 -0
  328. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_policy.py +0 -0
  329. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_readme.py +0 -0
  330. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_shape.py +0 -0
  331. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_compiler_key_is_prewarmed.py +0 -0
  332. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_hip_driver_keeps_the_launch_contract.py +0 -0
  333. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_launcher_refuses_a_backend_it_has_no_driver_for.py +0 -0
  334. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_level_zero_backend_keeps_its_contracts.py +0 -0
  335. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_malloc_trace_names_the_wrapper.py +0 -0
  336. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_metal_dispatch_facts_are_declared_or_refused.py +0 -0
  337. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_third_party_notices.py +0 -0
  338. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_version.py +0 -0
  339. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tools/device_key_census.py +0 -0
  340. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tools/device_key_trace.py +0 -0
  341. {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tools/scatter_scan.py +0 -0
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.3] - 2026-11-06
11
+
12
+ ### Fixed
13
+ - **The backend is the one whose card is on the machine**: nbxtensor depends on the CUDA runtime wheel on Linux, and a runtime library loads without its card — on an AMD or Intel machine 0.0.2 named the CUDA backend and never tried HIP or Level Zero. Detection now tries only the runtime libraries of the GPU vendors present on the PCI bus (all of them where the bus cannot be read). The CUDA runtime wheel stays a Linux dependency: without an NVIDIA card it is not used.
14
+ - **The package summary says where it runs**: wherever Triton runs — NVIDIA, AMD, Intel and Apple GPUs (it still named NVIDIA and Apple only).
15
+
10
16
  ## [0.0.2] - 2026-11-06
11
17
 
12
18
  ### Added
@@ -137,6 +143,7 @@ memory; the fix is in test).
137
143
  - **`flash_decode_split_kernel` and its route**: armed only by an environment switch (`NBX_FLASH_DECODE`, with `NBX_FD_BLOCK_N` and `NBX_FD_SEG`) and measured slower than the vector decode kernels; `flash_decode.py` keeps the fixed-order reduce they share.
138
144
  - **`conv1d_forward_kernel`**: launched by no route (a 1-D convolution runs through `conv2d`).
139
145
 
140
- [Unreleased]: https://github.com/NeuroBrix/nbxtensor/compare/v0.0.2...HEAD
146
+ [Unreleased]: https://github.com/NeuroBrix/nbxtensor/compare/v0.0.3...HEAD
147
+ [0.0.3]: https://github.com/NeuroBrix/nbxtensor/compare/v0.0.2...v0.0.3
141
148
  [0.0.2]: https://github.com/NeuroBrix/nbxtensor/compare/v0.0.1...v0.0.2
142
149
  [0.0.1]: https://github.com/NeuroBrix/nbxtensor/releases/tag/v0.0.1
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: nbxtensor
3
- Version: 0.0.2
4
- Summary: Run AI models without PyTorch: tensors, Triton kernels, planned memory and certified tuning, on NVIDIA and Apple GPUs.
3
+ Version: 0.0.3
4
+ Summary: Run AI models without PyTorch: tensors, Triton kernels, planned memory and certified tuning, wherever Triton runs — NVIDIA, AMD, Intel and Apple GPUs.
5
5
  Project-URL: Homepage, https://github.com/NeuroBrix/nbxtensor
6
6
  Project-URL: Source, https://github.com/NeuroBrix/nbxtensor
7
7
  Project-URL: Issues, https://github.com/NeuroBrix/nbxtensor/issues
@@ -492,7 +492,7 @@ with the tensor class (API.md §4).
492
492
 
493
493
  ## Versions
494
494
 
495
- The first publication was **0.0.1**; this is **0.0.2**. Each fix published after it increments the number (0.0.3,
495
+ The first publication was **0.0.1**; this is **0.0.3**. Each fix published after it increments the number (0.0.4,
496
496
  …), with no alpha or beta label. The rewrite of the core in Rust will be **2.0.0**. `nbxtensor.__version__` is the
497
497
  installed version.
498
498
 
@@ -472,7 +472,7 @@ with the tensor class (API.md §4).
472
472
 
473
473
  ## Versions
474
474
 
475
- The first publication was **0.0.1**; this is **0.0.2**. Each fix published after it increments the number (0.0.3,
475
+ The first publication was **0.0.1**; this is **0.0.3**. Each fix published after it increments the number (0.0.4,
476
476
  …), with no alpha or beta label. The rewrite of the core in Rust will be **2.0.0**. `nbxtensor.__version__` is the
477
477
  installed version.
478
478
 
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "nbxtensor"
7
- version = "0.0.2"
8
- description = "Run AI models without PyTorch: tensors, Triton kernels, planned memory and certified tuning, on NVIDIA and Apple GPUs."
7
+ version = "0.0.3"
8
+ description = "Run AI models without PyTorch: tensors, Triton kernels, planned memory and certified tuning, wherever Triton runs — NVIDIA, AMD, Intel and Apple GPUs."
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
11
11
  requires-python = ">=3.10"
@@ -13,5 +13,5 @@ first publication is 0.0.1, each fix after it increments, the Rust rewrite is
13
13
  """
14
14
 
15
15
  #: the one version number; `pyproject.toml` states the same (tests/test_version.py)
16
- __version__ = "0.0.2"
16
+ __version__ = "0.0.3"
17
17
  __all__: list = []
@@ -141,6 +141,19 @@ _GPU_BACKENDS = {
141
141
  }
142
142
 
143
143
 
144
+ #: the GPU vendor whose card each runtime-library backend drives (PCI vendor names, `backend.install_help`)
145
+ _BACKEND_VENDOR = {"cuda": "nvidia", "hip": "amd"}
146
+
147
+
148
+ def _on_this_machine(backends):
149
+ """The runtime-library backends whose vendor has a card on this machine's PCI bus, in table order — all of them
150
+ where the bus cannot be read (no sysfs). A runtime library loads without its card: the CUDA runtime wheel nbxtensor
151
+ depends on on Linux loaded on an AMD or Intel machine, named "cuda", and HIP / Level Zero were never tried."""
152
+ from nbxtensor.backend.install_help import pci_gpus
153
+ vendors = {v for v, _vid, _dev in pci_gpus()}
154
+ return [(n, b) for n, b in backends if not vendors or _BACKEND_VENDOR[n] in vendors]
155
+
156
+
144
157
  #: the backends found by asking for a DEVICE rather than by loading a runtime library, in order: (name, the probe's
145
158
  #: dotted path). Their runtime tables are not rows of `_GPU_BACKENDS` (another API than one C ABI): `_NATIVE_TABLES`.
146
159
  _DEVICE_PROBES = (("metal", "nbxtensor.backend.metal_device.metal_device_available"),
@@ -314,7 +327,7 @@ def gpu_backend() -> str:
314
327
  return _pin_triton_backend(forced)
315
328
  # The backend TABLE decides: the first vendor runtime the process can
316
329
  # load names the backend — adding a backend is adding a table entry.
317
- for name, backend in _GPU_BACKENDS.items():
330
+ for name, backend in _on_this_machine(_GPU_BACKENDS.items()):
318
331
  for lib in backend["rt_libs"]:
319
332
  try:
320
333
  ctypes.cdll.LoadLibrary(lib)
@@ -0,0 +1,19 @@
1
+ """The runtime-library backend is the one whose card is on the machine's PCI bus (`runtime._on_this_machine`).
2
+
3
+ nbxtensor 0.0.2 depends on the CUDA runtime wheel on Linux, and a runtime library loads without its card: on an AMD or
4
+ Intel machine `gpu_backend()` named "cuda" and HIP / Level Zero were never tried (the supervisor's reading of the 0.0.2
5
+ metadata, 2026-11-06 18:25). What this test does if the code were wrong: "cuda" kept on a bus with only an AMD card, or
6
+ a backend dropped where the bus cannot be read — red."""
7
+ from nbxtensor.backend import install_help, runtime
8
+
9
+
10
+ def test_only_the_backends_of_the_cards_present_are_tried(monkeypatch):
11
+ table = list(runtime._GPU_BACKENDS.items())
12
+ monkeypatch.setattr(install_help, "pci_gpus", lambda: [("amd", 0x1002, 0x744C)])
13
+ assert [n for n, _b in runtime._on_this_machine(table)] == ["hip"]
14
+ monkeypatch.setattr(install_help, "pci_gpus", lambda: [("intel", 0x8086, 0xE20B)])
15
+ assert runtime._on_this_machine(table) == [] # Level Zero is probed for its device after
16
+ monkeypatch.setattr(install_help, "pci_gpus", lambda: [("nvidia", 0x10DE, 0x1DB1)])
17
+ assert [n for n, _b in runtime._on_this_machine(table)] == ["cuda"]
18
+ monkeypatch.setattr(install_help, "pci_gpus", lambda: []) # no readable bus (macOS, a sandbox): as before
19
+ assert [n for n, _b in runtime._on_this_machine(table)] == ["cuda", "hip"]
File without changes
File without changes
File without changes