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.
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/CHANGELOG.md +8 -1
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/PKG-INFO +3 -3
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/README.md +1 -1
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/pyproject.toml +2 -2
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/__init__.py +1 -1
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/runtime.py +14 -1
- nbxtensor-0.0.3/tests/test_the_backend_is_the_card_on_the_machine.py +19 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/.github/PULL_REQUEST_TEMPLATE/certificate.md +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/CONTRIBUTING.md +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/LICENSE +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/THIRD_PARTY_NOTICES.md +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/assets/logo.png +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/__main__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/capabilities.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu/blas.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu/pool.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/cpu_backend.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/device_facts.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/device_files.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/device_names.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna2.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna3.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/cdna4.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/rdna3.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/amd/rdna4.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1_max.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1_pro.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m1_ultra.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2_max.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2_pro.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m2_ultra.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3_max.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3_pro.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m3_ultra.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m4.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m4_max.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m4_pro.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5_max.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5_pro.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m5_ultra.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_m6.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/apple/apple_silicon.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/bmg.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/dg2.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/lnl.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/intel/pvc.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/nvidia/ampere.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/nvidia/hopper.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/devices/nvidia/volta.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/faults.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/host_memory.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/install_help.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/install_steps.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/launcher.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/launcher_contract.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/level_zero.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/level_zero_driver.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/metal_backend.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/metal_device.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/process_memory.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/replay_graph.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/backend/triton_ext_driver.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/convert.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/dtypes.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/itemsize.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/nbx_dtype.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/operands.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/outputs.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/policy.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/policy.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/dtype/promotion.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/host.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/io/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/io/read_rate.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/io/safetensors.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/allocator.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/arena.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/device_memory.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/device_transfer.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/layout.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/memory_pool.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/metal.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/oom_advice.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/pointer_tables.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/pool.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/shadow.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/slab.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/trace_replay.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/traces/sana-video-2b-720p.16g.2026-11-02.tsv +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/memory/vmm.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_autotune_policy.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_common.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_configs.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/_cost.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/abs.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/adaptive_avg_pool2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/add.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addcdiv.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addcmul.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addmv_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/addr.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/all_reduce.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/amax.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/any_reduce.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/arange_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/argmax.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/argmin.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/atan2.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/attention_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_bucket.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_cache.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_certified.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_refusals.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/autotune_settings.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/avg_pool2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/baddbmm_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/batch_norm.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/binary_strided.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_and.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_left_shift.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_not.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_or.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bitwise_right_shift.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/bucketize.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cat_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/celu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/certified_index.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/clamp.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/clamp_min.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv2d_m8n8k4.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv_depthwise2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv_transpose2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/conv_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/copy.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/copy_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cos.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/count_nonzero.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cross_entropy.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cummax.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cummin.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/cumsum.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/decode_attn_vec.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/depthwise_conv2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dequant_gemv.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dft.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dispatch.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/div.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dot_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dropout.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/dtype_convert.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/elementwise_launch.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/elementwise_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/elu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/embedding.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/eq.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/erf.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/exp.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/exp2.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fft_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fill_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flash_attention.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flash_attention_m8n8k4.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flash_decode.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/flip_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/floor.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/full_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fused_moe.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fused_moe_m8n8k4.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/fused_upsample_conv.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gather_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/ge.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gelu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gemv_vec.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/glu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/grid_sampler.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/group_norm_tiled.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/groupnorm.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/gt.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/hardsigmoid.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/hardswish.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/im2col.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_add.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_put_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_select.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/index_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/isfinite.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/isinf.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/isnan.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/launch_keys.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/launch_observer.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/layernorm.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/le.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/leaky_relu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/lerp.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/linalg_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/linspace_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/log.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/log_sigmoid.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_and.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_not.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_or.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/logical_xor.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/loss_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/lt.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/masked_fill.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/matmul.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/matmul_m8n8k4.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/max_pool2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/max_pool3d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/max_reduce.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/maximum.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mean.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/min_reduce.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/minimum.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mish.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mma_m8n8k4.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_align.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_decode_vec.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_device_residency.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/moe_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mse_loss.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/mul.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nan_to_num.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/ne.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/neg.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nllloss.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nonzero.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/nonzero_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/norm_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/ones_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/oracles/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/oracles/conv2d_fp64.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pad_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/paged_decode_attn.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pixel_shuffle.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pixel_unshuffle.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/pow.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/prod.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rand_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/random_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/reciprocal.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/reduction_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/relu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/remainder.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/repeat_interleave.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/repeat_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/residual_chain.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rmsnorm.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rope.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/rsqrt.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/scaled_softmax.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/scatter_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/screen_oracle.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/selu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/shape_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sigmoid.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/silu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sin.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/softmax.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/softplus.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sort_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/spectral_wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sqrt.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/stack_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/std.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/strided_copy.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sub.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/sum.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tan.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tanh.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/threshold.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tiling.yml +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tiling_policy.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tiling_sizes.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/topk.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/trace_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/tril.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/triu.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/unfold_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/unique_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/upsample_bilinear2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/upsample_nearest2d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/upsample_nearest3d.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/var.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/vector_norm.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/weight_norm.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/where.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/wrappers.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/ops/zeros_op.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/quant/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/quant/quantized_tensor.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/mt_randn.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/rng_pin.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/rng_stream.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/random/seeded_draw.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/shape/__init__.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/src/nbxtensor/tensor.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_a_small_tensor_never_pins_a_large_block.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_a_sweep_refused_everywhere_says_so.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_a_triton_kernel_compiles_for_amd_and_launches_through_hip.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_allocator_interceptor.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_array_api_promotion.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_cpu_pool.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_device_facts.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_device_files.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_device_memory.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_dtype_convert.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_dtype_outputs.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_dtype_promotion.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_host.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_io_bf16_split.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_io_read_rate.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_nbx_dtype.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_no_environment_switch_changes_a_kernel.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_ops_cost.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_policy.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_readme.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_shape.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_compiler_key_is_prewarmed.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_hip_driver_keeps_the_launch_contract.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_launcher_refuses_a_backend_it_has_no_driver_for.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_level_zero_backend_keeps_its_contracts.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_malloc_trace_names_the_wrapper.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_the_metal_dispatch_facts_are_declared_or_refused.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_third_party_notices.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tests/test_version.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tools/device_key_census.py +0 -0
- {nbxtensor-0.0.2 → nbxtensor-0.0.3}/tools/device_key_trace.py +0 -0
- {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.
|
|
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.
|
|
4
|
-
Summary: Run AI models without PyTorch: tensors, Triton kernels, planned memory and certified tuning,
|
|
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.
|
|
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.
|
|
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.
|
|
8
|
-
description = "Run AI models without PyTorch: tensors, Triton kernels, planned memory and certified tuning,
|
|
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"
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|