Skip to content

feat: add ml/base/loss/float32/squared-epsilon-insensitive-gradient - #16358

Open
Harsh28-raj wants to merge 2 commits into
stdlib-js:developfrom
Harsh28-raj:feat/float32-squared-epsilon-insensitive-gradient
Open

Harsh28-raj wants to merge 2 commits into
stdlib-js:developfrom
Harsh28-raj:feat/float32-squared-epsilon-insensitive-gradient

Conversation

@Harsh28-raj

Copy link
Copy Markdown

Description

What is the purpose of this pull request?

This pull request:

  • adds @stdlib/ml/base/loss/float32/squared-epsilon-insensitive-gradient, a single-precision port of @stdlib/ml/base/loss/float64/squared-epsilon-insensitive-gradient, with JavaScript and C implementations.

Related Issues

Does this pull request have any related issues?

This pull request has the following related issues:

Reference Packages

Did the content of this pull request follow one or more existing packages? Answering is optional.

This pull request followed these packages:

What carried over from the reference(s)?

  • Package structure, naming, documentation, examples, benchmark layout, and test shape from the float64 package.
  • Float32 conventions from feat: add ml/base/loss/float32/epsilon-insensitive-gradient #16317: f32 rounding of inputs and intermediate results in JS, float types and f-suffixed literals in C, isnanf, STDLIB_CONSTANT_FLOAT32_NAN, the FFFF_F N-API macro, a 1 ULP tolerance in tests, and the additional NaN tests for y and p.

What differed, or what did you have to work out yourself?

  • In JS, y - p, z ± e, and the final product are each rounded to single precision to match the C kernel's float arithmetic.
  • The -76.8 example is no longer exact in single precision, so it is documented as ~-76.8.
  • runner.jl was updated to compute in Float32. Julia was not available locally, so the fixture JSON files were generated by a Node.js script that mirrors the updated runner.jl, applying Math.fround after every operation.

Questions

Any questions for reviewers of this pull request?

  • The tiny-value fixtures (same input ranges as the float64 package) produce single-precision subnormal results (as small as ~2.7e-41). Should I keep these ranges, or narrow them to stay in the normal range?
  • Happy to regenerate the fixtures with Julia if preferred.

Other

Any other information relevant to this pull request? This may include screenshots, references, and/or implementation notes.

  • JavaScript tests pass locally (2021 assertions). Native tests and the C kernel were not compiled locally (no C toolchain available), so I am relying on CI for those.

Checklist

Please ensure the following tasks are completed before submitting this pull request.

AI Assistance

When authoring the changes proposed in this PR, did you use any kind of AI assistance?

  • Yes
  • No

If you answered "yes" above, how did you use AI assistance?

  • Code generation (e.g., when writing an implementation or fixing a bug)
  • Test/benchmark generation
  • Documentation (including examples)
  • Research and understanding

Disclosure

If you answered "yes" to using AI assistance, please provide a short disclosure indicating how you used AI assistance. This helps reviewers determine how much scrutiny to apply when reviewing your contribution. Example disclosures: "This PR was written primarily by Claude Code." or "I consulted ChatGPT to understand the codebase, but the proposed changes were fully authored manually by myself.".

This PR was written primarily by Claude Code, by porting the existing float64 package and following the float32 conventions in #16317. I reviewed the changes and ran the JavaScript tests locally.


@stdlib-js/reviewers

Ref: stdlib-js#16124

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Harsh28-raj
Harsh28-raj requested a review from a team October 29, 2026 11:45
@stdlib-bot

Copy link
Copy Markdown
Contributor

👋 Hi there! 👋

And thank you for opening your first pull request! We will review it shortly. 🏃 💨

Getting Started

Next Steps

  1. A project maintainer will approve GitHub Actions workflows for your PR.
  2. All CI checks must pass before your submission can be fully reviewed.
  3. You'll need to address any failures in linting or unit tests.

Running Tests Locally

You can use make to run any of the CI commands locally from the root directory of the stdlib repository:

# Run tests for all packages in the math namespace:
make test TESTS_FILTER=".*/@stdlib/math/.*"

# Run benchmarks for a specific package:
make benchmark BENCHMARKS_FILTER=".*/@stdlib/math/base/special/sin/.*"

If you haven't heard back from us within two weeks, please ping us by tagging the "reviewers" team in a comment on this PR.

If you have any further questions while waiting for a response, please join our Zulip community to chat with project maintainers and other community members.

We appreciate your contribution!

Documentation Links

@stdlib-bot stdlib-bot added First-time Contributor A pull request from a contributor who has never previously committed to the project repository. Needs Review A pull request which needs code review. labels Oct 29, 2026

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

Left some initial suggestions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Harsh28-raj

Copy link
Copy Markdown
Author

Thanks @AryanSharma48! Applied all four suggestions in f70442d. For the docstring p example, I kept the original range( 10.0, stop=0.0, ... ) and only wrapped it in Float32.( ... ), matching #16317, since I think the 0.0 → 50.0 in the suggestion was a copy slip. Let me know if you meant otherwise.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

First-time Contributor A pull request from a contributor who has never previously committed to the project repository. Needs Review A pull request which needs code review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants