Skip to content

Comments

clean omni#1550

Closed
KRRT7 wants to merge 275 commits intomainfrom
omni-java-refactor-java-support
Closed

clean omni#1550
KRRT7 wants to merge 275 commits intomainfrom
omni-java-refactor-java-support

Conversation

@KRRT7
Copy link
Collaborator

@KRRT7 KRRT7 commented Feb 19, 2026

No description provided.

codeflash-ai bot and others added 30 commits February 1, 2026 22:01
This optimization achieves a **26x speedup (2598% improvement)** by eliminating expensive logging operations that dominated the original runtime.

## Key Performance Improvements

### 1. **Conditional Logging Guard (95% of original time eliminated)**
The original code unconditionally formatted expensive log messages even when logging was disabled:
```python
logger.warning(
    f"Optimized code not found for {relative_path} In the context\n-------\n{optimized_code}\n-------\n"
    ...
)
```
This single operation consumed **111ms out of 117ms total runtime** (95%).

The optimization adds a guard check:
```python
if logger.isEnabledFor(logger.level):
    logger.warning(...)
```
This prevents string formatting and object serialization when the log message won't be emitted, dramatically reducing overhead in production scenarios where warning-level logging may be disabled.

### 2. **Eliminated Redundant Path Object Creation**
The original created `Path` objects repeatedly during filename matching:
```python
if file_path_str and Path(file_path_str).name == target_filename:
```

The optimized version uses string operations:
```python
if file_path_str.endswith(target_filename) and (len(file_path_str) == len(target_filename) or file_path_str[-len(target_filename)-1] in ('/', '\\')):
```
This removes overhead from Path instantiation (1.16ms → 44µs in the profiler).

### 3. **Minor Cache Lookup Optimization**
Changed from `self._cache.get("file_to_path") is not None` to `"file_to_path" in self._cache` and hoisted the dict assignment to avoid inline mutation, providing small gains in the caching path.

### 4. **String Conversion Hoisting**
Pre-computed `relative_path_str = str(relative_path)` to avoid repeated conversions.

## Test Case Performance Patterns

- **Exact path matches** (most common case): 10-20% faster due to optimized caching
- **No-match scenarios** (fallback paths): **78-189x faster** due to eliminated logger.warning overhead
  - `test_empty_code_strings`: 1.03ms → 12.9µs (7872% faster)
  - `test_no_match_multiple_blocks`: 1.28ms → 16.3µs (7753% faster)
  - `test_many_code_blocks_no_match`: 20.5ms → 107µs (18985% faster)

The optimization particularly benefits scenarios where file path mismatches occur, as these trigger the expensive warning path in the original code. For the common case of exact matches, the improvements are modest but consistent.
…2026-02-01T22.01.32

⚡️ Speed up function `get_optimized_code_for_module` by 2,599% in PR #1199 (`omni-java`)
…benchmarking

- Add inner loop in Java test instrumentation for JIT warmup within single JVM
- Implement compile-once-run-many: compile tests once with Maven, then run
  directly via JUnit Console Launcher (~500ms vs ~5-10s per invocation)
- Add fallback to Maven-based execution when direct execution fails
- Update parsing to handle JUnit Console Launcher output format
- Add inner_iterations parameter (default: 100) to control loop count
- Add comprehensive E2E tests for inner loop benchmarking

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Configure JUnit Console Launcher to capture stdout/stderr in XML reports:
- Add --config=junit.platform.output.capture.stdout=true
- Add --config=junit.platform.output.capture.stderr=true
- Change --details=verbose to --details=none to avoid duplicate output

This ensures timing markers are properly captured in the JUnit XML's
<system-out> element, eliminating the need to rely on subprocess stdout
fallback for parsing timing markers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: add inner loop and compile-once-run-many optimization for Java benchmarking
- Fix multi-module Maven project detection for projects where tests are
  in a submodule within the same project root (e.g., test/src/...)
- Add fallback to Maven-based execution when JUnit Console Launcher
  is not available (JUnit 4 projects don't have it)
- Prefer benchmarking_file_path over behavior path in module detection

Tested on aerospike-client-java with JUnit 4:
- Multi-module detection now correctly identifies 'test' module
- Fallback to Maven execution works for JUnit 4 projects
- JIT warmup effect captured: 13,363x speedup from using min runtime

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add support for Java optimizations that include new class-level members:
- Static fields (e.g., lookup tables like BYTE_TO_HEX)
- Helper methods (e.g., createByteToHex())
- Precomputed arrays

Changes:
- Add _add_java_class_members() in code_replacer.py to detect and insert
  new class members from optimized code into the original source
- Update _add_global_declarations_for_language() to handle Java
- Add ParsedOptimization dataclass and supporting functions in replacement.py
- Exclude target functions from being added as helpers (they're replaced)

Tests:
- Add TestOptimizationWithStaticFields (3 tests)
- Add TestOptimizationWithHelperMethods (2 tests)
- Add TestOptimizationWithFieldsAndHelpers (2 tests including real-world
  bytesToHexString optimization pattern)

All 28 Java replacement tests and 32 instrumentation tests pass.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…rs exist

Previously, the benchmark loop stopped immediately when Maven returned
non-zero (any test failure). This was too aggressive because:
- Generated tests may have some failures
- Passing tests still produce valid timing markers
- We need multiple loops for accurate measurements

Now the loop continues if timing markers are present, only stopping when:
- No timing markers are found (all tests failed)
- Target duration is reached
- Max loops is reached

This allows proper multi-loop benchmarking even when some generated
tests fail, improving measurement accuracy.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add index-based tracking for overloaded methods to ensure correct
  method is replaced when multiple methods share the same name
- Match target method by line number (with 5-line tolerance) when
  multiple overloads exist
- Track overload index to re-find correct method after class member
  insertion which shifts line numbers
- Improve error logging in test compilation to show both stdout/stderr
- Use -e flag instead of -q for Maven compilation to show errors
- Add comprehensive test for overloaded method replacement

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Don't add class members before replace_function() as it shifts line numbers
  and breaks overload matching
- Pass full optimized code to replace_function() for Java so it can extract
  and add class members (fields, helper methods) correctly
- Update find_classes() to also find interfaces and enums
- Wrap field source in dummy class when parsing to get field name

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The replace_function_definitions_in_module call wasn't passing
function_to_optimize, causing the fallback path to be used which
doesn't have line number info for precise overload matching.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The testcase.result[0].message field can be None in JUnit XML output
when a test fails without a specific message (e.g., assertion failures
without a custom message). This caused an AttributeError when trying
to call .lower() on None.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The default of 100 inner iterations generated too much timing marker
output (~100 markers per test method), causing the parsing/processing
to hang with high CPU usage. Reduce to 10 iterations which still
provides sufficient JIT warmup while keeping stdout manageable.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When parsing JUnit XML results with timing markers, the fallback to
subprocess stdout was happening inside the testcase loop. With ~71
testcases and ~710 timing markers, this caused the regex parsing to
run 71 times instead of once, leading to very slow performance.

Move the fallback stdout pre-parsing outside the testcase loop and
cache the results for reuse.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Security fixes:
- Add validation for test class names to prevent command injection (CVE-level)
- Implement safe XML parsing to prevent XXE attacks
- Add input sanitization for Maven test filters

Error handling improvements:
- Add robust error handling for malformed XML in Surefire reports
- Handle invalid numeric values in test result attributes
- Add try-catch blocks around integer conversions

Changes:
- test_runner.py: Add _validate_java_class_name() and _validate_test_filter()
- test_runner.py: Validate test class names before passing to Maven
- build_tools.py: Add _safe_parse_xml() for secure XML parsing
- build_tools.py: Replace all ET.parse() calls with secure version
- build_tools.py: Add validation for numeric XML attributes

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added test coverage for:
- Input validation (command injection prevention)
- Test class name validation with positive and negative cases
- Test filter validation including wildcards
- XML parsing security (XXE attack prevention)
- Error handling for malformed XML
- Error handling for invalid numeric attributes
- Edge cases (empty strings, whitespace, special characters)

All tests pass. This ensures the security fixes work correctly
and prevents regressions.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add Strategy 4 to Java test discovery: import-based matching.
When a test file imports a class containing the target function,
consider it a potential test for that function.

This fixes an issue where tests like TestQueryBlob (which imports
and uses Buffer) were not being discovered as tests for Buffer
methods because the class naming convention didn't match.

Includes test cases that reproduce the real-world scenario from
aerospike-client-java where test class names don't follow the
standard naming pattern.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit adds thorough testing and fixes several bugs discovered
by running test discovery against real-world examples from
aerospike-client-java.

Bugs fixed:
1. Import extraction for wildcard imports (import com.example.*)
   was incorrectly extracting "example" as a class name
2. Static imports (import static Utils.format) were extracting the
   method name instead of the class name
3. *Tests.java files (plural) were not being discovered as test files
4. ClassNameTests pattern wasn't handled in naming convention matching

New test cases added:
- TestImportExtraction: 7 tests for import statement parsing
  - Basic imports, multiple imports, wildcard imports
  - Static imports, static wildcard imports, deeply nested packages
  - Mixed import scenarios
- TestMethodCallDetection: tests for method call detection in tests
- TestClassNamingConventions: 3 tests for naming patterns
  - *Test, Test*, *Tests suffix/prefix patterns

All tests verified against real aerospike-client-java test files:
- TestQueryBlob correctly imports Buffer class
- TestPutGet correctly imports Assert, Bin, Key, etc.
- TestAsyncBatch correctly imports batch operation classes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ents

fix: Java security and validation improvements
The test_detect_fixture_project test expects the java_maven fixture
directory to have a pom.xml file for Maven build tool detection. Add
the missing pom.xml with JUnit 5 dependencies.

Also add .gitignore exception to allow pom.xml files in test fixtures.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: add import-based test discovery for Java
The Comparator was reading from an `invocations` table, but Java instrumentation
writes to a `test_results` table. This aligns the Comparator with the cross-language
schema consistency requirement.

Changes:
- Update SQL query to SELECT from test_results table
- Map columns: iteration_id + loop_index → call_id
- Map return_value → resultJson for comparison
- Construct method_id from test_class_name.function_getting_tested
- Add parseIterationId() helper to extract numeric ID from string format
- Set args_json and error_json to null (not captured in test_results schema)

This enables behavior verification to work correctly by reading the data
that instrumented tests actually write.

Test results: All 336 Java tests pass (18 comparator tests + 318 others)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…est-results-table

fix: update Java Comparator to read from test_results table
Added comprehensive integration tests to validate that the Java Comparator
correctly reads from the test_results table schema.

New test class: TestTestResultsTableSchema with 5 tests:
- test_comparator_reads_test_results_table_identical
  Validates identical results are correctly compared

- test_comparator_reads_test_results_table_different_values
  Detects when return values differ between original and candidate

- test_comparator_handles_multiple_loop_iterations
  Tests multiple benchmark loops with different loop_index values

- test_comparator_iteration_id_parsing
  Validates parseIterationId() correctly parses "iter_testIteration" format

- test_comparator_missing_result_in_candidate
  Detects when candidate is missing results that exist in original

Test features:
- Creates actual test_results table with instrumentation schema
- Tests full SQL integration path through Java Comparator
- Validates column mapping: iteration_id → call_id, return_value → result_json
- Uses @requires_java decorator to skip gracefully when Java unavailable
- Documents expected schema for future developers
- Prevents regressions if table name changes back to invocations

These tests validate the fix in PR #1272 that updated the Comparator
to read from test_results instead of invocations.

Test results: 18 passed, 5 skipped (without Java)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed a bug where the Python fallback comparator used simple string
comparison for JSON results, causing false negatives when JSON was
semantically identical but formatted differently.

Problem:
The compare_invocations_directly() function compared result_json fields
using direct string comparison (orig_result != cand_result). This failed
for semantically identical JSON with:
- Different whitespace: {"a":1,"b":2} vs { "a": 1, "b": 2 }
- Different key ordering: {"a":1,"b":2} vs {"b":2,"a":1}

The Java Comparator handles this correctly by parsing JSON, but the Python
fallback did not.

Solution:
- Added _compare_json_values() helper function that:
  1. Handles None values correctly
  2. Fast-path for exact string matches
  3. Parses JSON and compares deserialized objects
  4. Falls back to string comparison if JSON parsing fails
- Updated compare_invocations_directly() to use JSON-aware comparison

Impact:
- Prevents false negatives in behavior verification
- Matches Java Comparator behavior for consistency
- Handles whitespace, key ordering, and nested objects correctly
- Gracefully handles invalid JSON by falling back to string comparison

Tests added:
- Updated test_whitespace_in_json to expect correct behavior (True)
- Added TestJsonComparison class with 8 comprehensive tests:
  * test_json_key_ordering_difference
  * test_json_whitespace_and_ordering_combined
  * test_json_nested_object_comparison
  * test_json_array_comparison_order_matters
  * test_json_invalid_json_falls_back_to_string
  * test_json_null_vs_string_null
  * test_json_empty_object_vs_null
  * test_json_numeric_equivalence

Test results: 344 Java tests pass (26 comparator tests)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…omparison

fix: add JSON-aware comparison to Python comparator fallback
…rator-json-comparison

Revert "fix: add JSON-aware comparison to Python comparator fallback"
- Use fully qualified java.sql.Statement to avoid conflicts with other
  Statement classes (e.g., com.aerospike.client.query.Statement)
- Remove Gson dependency for serialization, use String.valueOf() instead
  to avoid missing dependency errors in projects without Gson

These changes fix compilation errors when instrumenting tests in projects
that have their own Statement class or don't have Gson as a dependency.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive e2e tests for the Java optimization pipeline:
- Function discovery (BubbleSort, Calculator)
- Code context extraction
- Code replacement
- Test discovery (JUnit 5)
- Project detection (Maven)
- Compilation and test execution

Also add:
- GitHub Actions workflow for Java e2e tests (java-e2e-tests.yml)
- Maven pom.xml for the Java sample project
- .gitignore exception for pom.xml

The e2e tests verify the full Java pipeline works correctly,
from function discovery through code replacement.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
KRRT7 added 13 commits February 19, 2026 14:28
Delete stale code_context_extractor.py at old path (moved to
languages/python/context/ on main). Instead of a Java-specific
field on CodeContext, append type skeletons to read_only_context
so the shared pipeline consumes them without language-specific logic.
…java-support

Merge main's lang_support refactor (PR #1546) with Java support branch.
Key decisions: grouped Python-specific imports (main's style), kept Java
routing in parse_test_output and verification_utils, added tree-sitter-java
dep and B009 ruff ignore.
@github-actions github-actions bot added the workflow-modified This PR modifies GitHub Actions workflows label Feb 19, 2026
@@ -37,14 +38,23 @@

DEBUG_MODE = logging.getLogger().getEffectiveLevel() == logging.DEBUG
Copy link
Contributor

Choose a reason for hiding this comment

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

Bug (HIGH): DEBUG_MODE is evaluated at module import time, before CLI argument parsing has configured the log level. This means DEBUG_MODE will always be False regardless of --verbose flag, and all the new verbose logging functions (log_code_after_replacement, log_instrumented_test, log_test_run_output, log_optimization_context) will never execute.

Consider making this a function call instead:

Suggested change
DEBUG_MODE = logging.getLogger().getEffectiveLevel() == logging.DEBUG
def is_debug_mode() -> bool:
return logging.getLogger().getEffectiveLevel() == logging.DEBUG

Comment on lines +324 to +333
current = module_root
while current != current.parent:
if (current / "pom.xml").exists():
return current.resolve()
if (current / "build.gradle").exists() or (current / "build.gradle.kts").exists():
return current.resolve()
# Check for config file (pyproject.toml for Python, codeflash.toml for other languages)
if (current / "codeflash.toml").exists():
return current.resolve()
current = current.parent
Copy link
Contributor

Choose a reason for hiding this comment

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

Bug (HIGH): This traversal runs for ALL languages, not just Java. If a Python or JavaScript project is in a monorepo with a pom.xml or build.gradle in a parent directory, the project root will be incorrectly changed to that parent directory.

The early return on line 319 (pyproject_file_path.parent == module_root) only protects cases where the pyproject path matches, but Python projects in subdirectories or JS projects would fall through to this Java-specific traversal.

Consider guarding with a language check, or at minimum only checking pom.xml/build.gradle when the language is Java.

private static final ThreadLocal<Long> lastLineTime = new ThreadLocal<>();
private static final ThreadLocal<String> lastKey = new ThreadLocal<>();
private static final java.util.concurrent.atomic.AtomicInteger totalHits = new java.util.concurrent.atomic.AtomicInteger(0);
private static final String OUTPUT_FILE = "{self.output_file!s}";
Copy link
Contributor

Choose a reason for hiding this comment

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

Bug (HIGH): self.output_file path is interpolated directly into a Java string literal without escaping. On Windows, backslashes in the path (e.g., C:\Users\test\output.json) will be interpreted as Java escape sequences (\U, \t, \o), causing compilation errors. A path containing " could break out of the string literal entirely.

The path should be escaped for Java string literal safety (replace \ with \\ and " with \") or use .as_posix() to normalize to forward slashes.

Comment on lines +257 to +259
import re

modules = re.findall(r"<module>([^<]+)</module>", content)
Copy link
Contributor

Choose a reason for hiding this comment

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

Bug (HIGH): Regex-based <module> extraction can match content inside XML comments or CDATA sections, leading to incorrect module detection. This file already has _extract_modules_from_pom_content (line 146) that does proper XML parsing — consider using that instead of regex here.

@claude
Copy link
Contributor

claude bot commented Feb 19, 2026

PR Review Summary

Prek Checks

All checks passedruff check and ruff format both passed with no issues.

Mypy

⚠️ Mypy reports type errors in changed files — mostly in new Java support files. These are union-attr (null safety), arg-type mismatches, and no-any-return issues that require logic changes to fix properly. Not addressed in this pass since they'd require runtime behavior changes.

Code Review

Resolved: The instrument_existing_test signature mismatch in function_optimizer.py (comment #1) is now fixed — the call correctly uses test_path=path_obj_test_file.

Still open (from previous review):

# File Issue Severity
2 console.py:39 DEBUG_MODE evaluated at import time, always False HIGH
3 cli.py:318-335 project_root_from_module_root Java build file detection runs for all languages HIGH
4 line_profiler.py:129 Windows path not escaped in Java string literal HIGH
5 test_runner.py:259 Regex-based <module> extraction instead of XML parser MEDIUM

New observations from latest commits:

  • Java instrument_existing_test silently drops call_positions and tests_project_root params. This is by design (Java uses class-renaming instrumentation, not position-based), but the docstring in instrumentation.py:345-352 lists parameters that don't exist in the function signature — should be cleaned up.
  • Latest refactor commits (74ddae6 through 5aa2f7d) correctly aligned language support signatures and removed dead indirection code.

Test Results (PR branch)

  • 3119 passed, 29 failed, 58 skipped
  • Failures breakdown:
    • test_tracer.py (8 failures): Tests reference attributes (output_file, trace_count, cur) not present on current Tracer class — tests appear stale
    • test_instrumentation.py (5 failures): Java Maven dependency resolution failures in CI (no JDK/Maven setup)
    • Other failures: timeout in benchmark test, misc

Test Coverage (PR branch)

New files (added in this PR) — target ≥75%:

File Stmts Miss Coverage Status
java/parser.py 319 5 98%
java/line_profiler.py 140 14 90%
java/config.py 202 22 89%
java/context.py 467 52 89%
java/concurrency_analyzer.py 112 13 88%
java/discovery.py 108 13 88%
java/import_resolver.py 130 16 88%
java/remove_asserts.py 442 54 88%
java/instrumentation.py 483 85 82%
java/support.py 167 55 67% ⚠️ Below 75%
java/formatter.py 143 51 64% ⚠️ Below 75%
java/build_tools.py 423 177 58% ⚠️ Below 75%
java/replacement.py 355 166 53% ⚠️ Below 75%
java/comparator.py 155 83 46% ⚠️ Below 75%
java/parse.py 189 148 22% ⚠️ Below 75%
init_java.py 302 251 17% ⚠️ Below 75%

Modified files (key changes):

File Stmts Miss Coverage
models/models.py 627 134 79%
languages/registry.py 145 31 79%
languages/python/static_analysis/code_replacer.py 421 96 77%
languages/javascript/instrument.py 632 179 72%
languages/javascript/support.py 1007 290 71%
setup/detector.py 457 144 68%
setup/config_writer.py 146 51 65%
code_utils/config_parser.py 137 54 61%
languages/python/support.py 311 160 49%
verification/coverage_utils.py 271 146 46%
optimization/function_optimizer.py 1205 982 19%
optimization/optimizer.py 450 362 20%

Overall changed files coverage: 55%

7 new Java files are below the 75% coverage threshold. The core Java modules (parser, context, config, instrumentation) have good coverage. Files needing attention: parse.py (22%), init_java.py (17%), comparator.py (46%), replacement.py (53%).


Last updated: 2026-02-19T22:45Z — Re-review after synchronize event

Add `default_file_extension` and `dir_excludes` to JavaSupport to satisfy the LanguageSupport protocol, fixing frozenset union TypeError. Update test import from removed `codeflash.context` to `codeflash.languages.python.context`.
Drop the test_string parameter from inject_profiling_into_existing_test
and inject_async_profiling_into_existing_test — each function now reads
file content internally from test_path, matching main's protocol. This
fixes JavaScriptSupport.instrument_existing_test() receiving an
unexpected test_string keyword argument.
- Add type annotations to instrument_generated_test in test_instrumentation.py
- Move Path import into TYPE_CHECKING block in java/tests.py
- Replace %-format strings with f-strings in parse_line_profile_test_output.py
- Replace os.path.basename with Path.name
- Remove unused is_javascript import from instrument_existing_tests.py
…stale test references

- Pass test_string to inject_profiling_into_existing_js_test in JavaScriptSupport
- Fix ruff violations in Java files (PLR1714, N806, SIM113, TC003, G004, ANN)
- Update test_java_test_paths.py to use standalone functions from generated_tests.py
  instead of removed FunctionOptimizer methods
- Remove trailing comma flagged by ruff format
The is_java() branch in inject_profiling_into_existing_test was
unreachable — Java uses polymorphic dispatch via LanguageSupport.
Delete the branch and its sole consumer wrapper file.
@codeflash-ai
Copy link
Contributor

codeflash-ai bot commented Feb 19, 2026

⚡️ Codeflash found optimizations for this PR

📄 29% (0.29x) speedup for check_formatter_installed in codeflash/code_utils/env_utils.py

⏱️ Runtime : 105 milliseconds 81.9 milliseconds (best of 25 runs)

A dependent PR with the suggested changes has been created. Please review:

If you approve, it will be merged into this PR (branch omni-java-refactor-java-support).

Static Badge

@codeflash-ai
Copy link
Contributor

codeflash-ai bot commented Feb 19, 2026

⚡️ Codeflash found optimizations for this PR

📄 58% (0.58x) speedup for is_java in codeflash/languages/current.py

⏱️ Runtime : 792 microseconds 500 microseconds (best of 245 runs)

A new Optimization Review has been created.

🔗 Review here

Static Badge

@KRRT7 KRRT7 closed this Feb 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

workflow-modified This PR modifies GitHub Actions workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants