Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Tensor wave 1 API's. - #101196

Merged
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype
May 16, 2024
Merged

Tensor wave 1 API's.#101196
michaelgsharp merged 25 commits into
dotnet:mainfrom
michaelgsharp:tensor-prototype

Conversation

@michaelgsharp

Copy link
Copy Markdown
Contributor

This is the initial PR for the Tensor Prototype. The design doc is here, and its still in discussion so updates will be coming from the result of those discussions. Further updates will also be coming in regards to error handling/etc, but this will allow for preliminary reviews.

@ghost

Copy link
Copy Markdown

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-numerics
See info in area-owners.md if you want to be subscribed.

@michaelgsharp
michaelgsharpforce-pushed the tensor-prototype branch 2 times, most recently from a4ce322 to 61faee1CompareApril 22, 2024 21:17
@michaelgsharp
michaelgsharp marked this pull request as ready for review April 22, 2024 21:17

@stephentoubstephentoub left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I've skimmed through some. Will review the rest in a bit.

Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
{
public static partial class Tensor
{
public static Tensor<T> Create<T>(bool mustPin, ReadOnlySpan<nint> lengths)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Missing XML comments on a bunch of these public APIs

@michaelgsharpmichaelgsharp changed the title Tensor prototypeTensor wave 1 API's.Apr 23, 2024
Comment threadsrc/libraries/System.Numerics.Tensors/src/System/NativeIndex.cs Outdated
public bool MoveNext() { throw null; }
}
}
public static partial class Tensor

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Most of these APIs that both take and return some form of Span are missing scoped where relevant.

Many of the span APIs are also unnecessarily mutable, for example Add should only be taking in ReadOnlyTensorSpan while AddInPlace should take one TensorSpan and one ReadOnlyTensorSpan.

I'm fine with this class in particular being handled in a follow up PR, but I think it's important to do that cleanup prior to the first preview.

static System.Numerics.Tensors.Tensor<T> System.Numerics.Tensors.ITensor<System.Numerics.Tensors.Tensor<T>, T>.CreateUninitialized(scoped System.ReadOnlySpan<nint> lengths, scoped System.ReadOnlySpan<nint> strides, bool pinned) { throw null; }
public string ToString(scoped System.ReadOnlySpan<nint> maximumLengths) { throw null; }
public bool TryCopyTo(scoped System.Numerics.Tensors.TensorSpan<T> destination) { throw null; }
public bool TryFlattenTo(scoped System.Span<T> destination) { throw null; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Likewise fine with it being cleaned up in a separate PR, but scoped shouldn't be needed on any API where the underlying ref field cannot be captured.

Tensor<T> cannot have a ref field and most of these APIs do not return a ref. It's different for TensorSpan<T> since the hidden this parameter allows the ref to be captured.

@tannergoodingtannergooding left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think there's a lot of cleanup that still needs to be done in the form of optimization work, validating inputs are correct/sensible to the BCL/FDG standards, ensuring we do the relevant security audit, etc

But, this looks like it now matches the so far reviewed API proposal and should be good to merge to keep the PR from growing exponentially. We should ideally log issues to track most of this additional work/cleanup prior to merging

@tannergooding

tannergooding commented May 15, 2024

Copy link
Copy Markdown
Member

@michaelgsharp
michaelgsharp merged commit b15e351 into dotnet:mainMay 16, 2024
@michaelgsharp
michaelgsharp deleted the tensor-prototype branch May 22, 2024 19:02
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
* Native Index/Range and ref.
* SpanND without slice
* index/range testing and implicit conversions
* SpanND Tests
* tensor working, still need more statics
* more tensors updates
* ref files updated
* final ref update
* span updates
* all but broadcast and some TensorPrimitives
* broadcast in
* organizational changes
* ref and implicit broadcast
* build failures
* updates from PR comments
* error text moved to strings.resx
* exception strings moved to strings.resc
* comments from PR
* more fixes from PR and API review
* rebase on main. XML comments. API updates
* NIndex,NRange,RO/TensorSpan API updates
* IROTensor,ITensor,Tensor API updates
* changes from pr comments
* changes from PR comments
* fixed test failure
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 22, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@michaelgsharp@tannergooding@stephentoub