Skip to content

Expose Storage.data_ptr() as public API#1554

Open
alinpahontu2912 wants to merge 2 commits intodotnet:mainfrom
alinpahontu2912:fix/expose-data-ptr-public-api
Open

Expose Storage.data_ptr() as public API#1554
alinpahontu2912 wants to merge 2 commits intodotnet:mainfrom
alinpahontu2912:fix/expose-data-ptr-public-api

Conversation

@alinpahontu2912
Copy link
Member

Change the access modifier of Storage.data_ptr() from protected to public, allowing external consumers to obtain the raw data pointer for interop with other native libraries (e.g. bitsandbytes).

Fixes #1454

@alinpahontu2912
Copy link
Member Author

Hey @LittleLittleCloud does this help you?

@alinpahontu2912 alinpahontu2912 requested a review from Copilot March 25, 2026 10:31
Change the access modifier of Storage.data_ptr() from protected to public,
allowing external consumers to obtain the raw data pointer for interop with
other native libraries (e.g. bitsandbytes).

Fixes dotnet#1454

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR exposes torch.Storage.data_ptr() as a public API so external consumers can obtain the underlying storage pointer for native interop scenarios (e.g., CUDA libraries like bitsandbytes).

Changes:

  • Change Storage.data_ptr() visibility from protected to public.
  • Add a unit test validating storage<T>().data_ptr() returns a non-zero pointer.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
src/TorchSharp/Tensor/Storage.cs Makes data_ptr() public to enable external interop access to the underlying storage pointer.
test/TorchSharpTest/TestTorchTensor.cs Adds coverage ensuring Storage.data_ptr() returns a non-zero pointer for a basic tensor-backed storage.
Comments suppressed due to low confidence (1)

src/TorchSharp/Tensor/Storage.cs:151

  • Now that data_ptr() is public, calling it after Storage.Dispose() will currently throw a NullReferenceException because Dispose() sets _tensor = null and data_ptr() unconditionally dereferences _tensor.Handle. Consider adding an explicit guard (e.g., throw InvalidOperationException) when _tensor is null so the public API fails predictably instead of NRE.
            public IntPtr data_ptr()
            {
                if (_tensor_data_ptr != IntPtr.Zero)
                    return _tensor_data_ptr;

                var res = THSStorage_data_ptr(_tensor.Handle);
                if (res == IntPtr.Zero) { CheckForErrors(); }
                _tensor_data_ptr = res;
                return res;
            }

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose data_ptr as a public API

2 participants