Skip to content

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

@michaelgsharp@tjwald@ericstj@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Tensor<T> select. Iteration along dimensions by michaelgsharp · Pull Request #113697 · dotnet/runtime · GitHub
Skip to content

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

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

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

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

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

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

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

@michaelgsharp@tjwald@ericstj@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Tensor<T> select. Iteration along dimensions by michaelgsharp · Pull Request #113697 · dotnet/runtime · GitHub
Skip to content

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

@michaelgsharp@tjwald@ericstj@tannergooding
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Tensor<T> select. Iteration along dimensions by michaelgsharp · Pull Request #113697 · dotnet/runtime · GitHub
Skip to content

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

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

Tensor<T> select. Iteration along dimensions - #113697

Merged
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select
Jun 14, 2025
Merged

Tensor<T> select. Iteration along dimensions#113697
tannergooding merged 6 commits into
dotnet:mainfrom
michaelgsharp:tensor-select

Conversation

@michaelgsharp

@michaelgsharpmichaelgsharp commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

Fixes#113068 and fixes#113863

Adds a new method, SliceAlongDimension, that lets you slice any given subdimension out of a tensor.

Adds a new method, Select, that lets you run Tensor operations on segments of the Tensor instead of the whole Tensor.

Adds a DimensionCollection, which is similar to a Dictionary's KeyCollection, in that it has an Enumerator that lets you iterate over the Tensor along a given dimension (compared to the KeyCollection that lets you iterate by the keys).

@michaelgsharpmichaelgsharp self-assigned this Mar 19, 2025
CopilotAI review requested due to automatic review settings March 19, 2025 16:26
@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.

1 similar comment
@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-tensors
See info in area-owners.md if you want to be subscribed.

This comment was marked as outdated.

@tjwald

Copy link
Copy Markdown

My comments on the new API:
#113068 (comment)

@ericstj

Copy link
Copy Markdown
Member

@michaelgsharp what's the state of this PR? Are you returning to it, or is it no longer necessary?

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

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 introduces new slicing and selection operations for Tensor by adding methods such as SliceAlongDimension and Select, as well as new types for iterating along tensor dimensions. Key changes include new unit tests for dimension slicing, additions to the Tensor and TensorSpan implementations to support GetDimensionSpan, and corresponding project file and suppression updates.

Reviewed Changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
tests/TensorDimensionSpanTests.csAdded thorough tests for dimension slicing on tensors in various shapes
src/System/Numerics/Tensors/netcore/Tensor_1.csNew GetDimensionSpan method and tweak in IDisposable.Dispose implementation
src/System/Numerics/Tensors/netcore/TensorSpan_1.csAdded GetDimensionSpan method for TensorSpan
src/System/Numerics/Tensors/netcore/TensorShape.csAdded AdjustToNextIndex and updated GetLinearOffset methods using DivRem
src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.csNew implementation of TensorDimensionSpan for slicing a tensor along a given dimension
csproj and CompatibilitySuppressions.xmlUpdated to include the new files and suppress expected compatibility diagnostics
Comments suppressed due to low confidence (1)

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/netcore/TensorDimensionSpan_1.cs:25

  • Consider adding a clarifying comment here to explain why the 'dimension' parameter is incremented, which would help improve readability and understanding of the slicing logic.
dimension += 1;

@ericstjericstj 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.

Looks good for the most part - shared a suggestion to cleanup suppressions and bring ref up to date.

/// <summary>Enumerates the spans of a tensor dimension span.</summary>
public ref struct Enumerator
#if NET9_0_OR_GREATER
: IEnumerator<ReadOnlyTensorSpan<T>>

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.

Should this implement other interfaces in older TFMs?

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.

What other interfaces would it implement?

Comment threadsrc/libraries/System.Numerics.Tensors/src/CompatibilitySuppressions.xml Outdated
@tannergooding

Copy link
Copy Markdown
Member

/ba-g unrelated failures

@tannergooding
tannergooding merged commit 9ed11b9 into dotnet:mainJun 14, 2025
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 15, 2025
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.

[API Proposal]: Tensor Dimensions Refining [API Proposal]: Tensor Operations Per Dimension

5 participants

@michaelgsharp@tjwald@ericstj@tannergooding