Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
1f1e9d1
refactor(docs): Documentation Overhaul
raimannma Feb 12, 2026
cc0dce5
ci: add doc tests and update examples to match current codebase
raimannma Feb 12, 2026
6a4b27c
refactor: move all type re-exports out of crate root into their modules
raimannma Feb 12, 2026
ee59c9c
refactor(examples): split multi-concept examples into focused single-…
raimannma Feb 12, 2026
964b4d5
feat: add Objective trait and unify optimize API
raimannma Feb 12, 2026
d81d1de
refactor(tests): split integration.rs into focused subfolders
raimannma Feb 12, 2026
c20a53d
fix: bump minimum tokio version to 1.30 for JoinSet::len()
raimannma Feb 12, 2026
47b5f9c
feat: unify optimize and optimize_with via blanket Objective impl
raimannma Feb 12, 2026
d20f09c
refactor: shorten sampler type names
raimannma Feb 12, 2026
e68a378
refactor: move RandomMultiObjectiveSampler into sampler::random
raimannma Feb 12, 2026
12f7f25
Update README.md
raimannma Feb 12, 2026
6f1c070
test: actually use NaN values in test_best_trial_with_nan_values
raimannma Feb 12, 2026
cc3937d
Add LICENSE.md
raimannma Feb 12, 2026
2d88526
Update examples/pruning.rs
raimannma Feb 12, 2026
968eb67
fix: return error instead of panicking on out-of-bounds categorical i…
raimannma Feb 12, 2026
3723f91
refactor: update rustfmt configuration by commenting out unused options
raimannma Feb 12, 2026
8713a93
refactor: adjust indentation for better readability in pruning.rs
raimannma Feb 12, 2026
04d8224
Update Cargo.toml
raimannma Feb 12, 2026
c561caa
fix: validate NaN/Inf in deserialized trials during journal loading
raimannma Feb 12, 2026
2717487
perf(tpe): use quickselect instead of full sort in split_trials
raimannma Feb 12, 2026
750bbad
test: assert pruned count unconditionally in summary test
raimannma Feb 12, 2026
baebbae
docs: add pre-commit guidelines for formatting and testing
raimannma Feb 12, 2026
74cf064
perf: replace RNG mutex with per-call seed derivation in stateless sa…
raimannma Feb 12, 2026
5da63d8
perf: reduce CompletedTrial cloning overhead
raimannma Feb 12, 2026
ddbbe29
perf(journal): use incremental refresh instead of re-reading entire file
raimannma Feb 12, 2026
1b158e4
perf: pre-allocate vectors in analysis methods
raimannma Feb 12, 2026
9ab9400
perf(tpe): eliminate unnecessary Vec allocations in KDE/TPE sampling
raimannma Feb 12, 2026
4781107
refactor(study): split monolithic study.rs into focused submodules
raimannma Feb 12, 2026
d80d2bb
refactor(sampler): extract shared utilities to reduce duplication
raimannma Feb 12, 2026
a502d7e
refactor(tpe): split multivariate sampler into focused submodules
raimannma Feb 12, 2026
f0798ca
refactor(study): move export_json() from persistence to export module
raimannma Feb 12, 2026
38a20bb
fix(docs): resolve all broken rustdoc intra-doc links
raimannma Feb 12, 2026
cc50e1a
refactor: reduce #[allow] attributes and extract per-distribution hel…
raimannma Feb 12, 2026
3d3dcb4
feat(error): mark Error enum as #[non_exhaustive]
raimannma Feb 12, 2026
12efbaa
fix(sampler): return None instead of panicking on parameter type mism…
raimannma Feb 12, 2026
0e0e9ff
test(sobol): add integration tests for SobolSampler via Study API
raimannma Feb 12, 2026
8394a74
test(journal): add corrupted and malicious JSONL file tests
raimannma Feb 12, 2026
7c0cce1
test(stress): add ignored stress tests for large-scale scenarios
raimannma Feb 12, 2026
fd5c545
test(async): add concurrency verification tests for optimize_parallel
raimannma Feb 12, 2026
479554f
fix(docs): convert JournalStorage intra-doc link to plain backtick text
raimannma Feb 12, 2026
8d06d21
docs(journal): document file-size DoS potential in JournalStorage
raimannma Feb 12, 2026
cfa8426
docs(sampler,pruner): add implementation guides for custom samplers a…
raimannma Feb 12, 2026
8c025b4
fix(journal): canonicalize file paths in JournalStorage constructors
raimannma Feb 12, 2026
9f2ce2a
fix(docs): remove private intra-doc link from JournalStorage doc comment
raimannma Feb 12, 2026
1cd18c1
fix: address review findings in grid sampler, parallel optimization, …
raimannma Feb 12, 2026
11a8534
fix: address 18 bugs found during codebase audit (#8)
raimannma Feb 13, 2026
86db636
fix(sampler): clamp multivariate TPE candidates to parameter bounds
raimannma Feb 13, 2026
93d7a63
chore: release v1.0.0
raimannma Feb 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions .claude/commands/commit-push-pr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git diff:*), Bash(git log:*), Bash(git config:*), Bash(git push:*), Bash(git branch:*), Bash(git rev-parse:*), Bash(gh pr:*)
description: Create a git commit, push, and open a PR
---

## Context

- Current git status: !`git status`
- Current git diff (staged and unstaged changes): !`git diff HEAD`
- Current branch: !`git branch --show-current`
- Remote tracking: !`git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null || echo "no upstream"`
- Recent commits (for style reference): !`git log --oneline -10`
- Author commits (for style reference): !`git log --author="$(git config user.email)" --oneline -10`
- All commits on this branch not on main: !`git log --oneline main..HEAD 2>/dev/null`
- User input (optional, can specify target branch): $ARGUMENTS

## Your task

Based on the above changes, create a git commit, push, and open a pull request.

1. If there are no staged changes, stage only the relevant changed files by name (never use `git add -A` or `git add .`).
2. Do NOT commit files that likely contain secrets (.env, credentials.json, etc).
3. Write a commit message following the guidelines below, then commit.
4. Push to the remote. Use `git push -u origin <branch>` if there is no upstream set.
5. Create a pull request using `gh pr create` targeting the base branch:
- If the user specified a target branch in their input, use that.
- Otherwise, default to `main`.
6. The PR title should match the commit title (or summarize all branch commits if multiple).
7. Write the PR body following the PR format below.
8. Return the PR URL when done.

## Commit message guidelines

- Use imperative mood (e.g., "add feature" not "added feature")
- First line: brief summary, max 72 characters
- Focus on the "why" and "what", not the "how"
- Be specific but concise
- Many commits do not need a body if the title is self-explanatory
- Litmus test: "Would a developer understand this commit from the title + diff?" If yes, skip the body.
- Do NOT include "Generated with ...", "Co-Authored-By ...", or any AI attribution

### Conventional commit prefixes

Match the prefix to the nature of the change. These must align with `cliff.toml` commit parsers so they appear correctly in the changelog.

**Changelog: "Added"**
- `feat:` / `feat(scope):` — new feature

**Changelog: "Fixed"**
- `fix:` / `fix(scope):` — bug fix

**Changelog: "Changed"**
- `refactor:` / `refactor(scope):` — code restructuring without behavior change
- `perf:` / `perf(scope):` — performance improvement
- `docs:` / `docs(scope):` — documentation changes (README, guides, etc.)
- `style:` / `style(scope):` — formatting only (no logic change)
- `chore:` / `chore(scope):` — tooling, deps, config, scripts, AI config (.claude/, CLAUDE.md)

**Changelog: "Removed"**
- `revert:` / `revert(scope):` — revert a previous commit

**Excluded from changelog**
- `test:` / `test(scope):` — adding or updating tests
- `ci:` / `ci(scope):` — CI/CD pipeline changes

### Body rules

- When a body is needed (multiple important things in one commit), use bullet points.
- Body is separated from the title by a blank line.
- One bullet point per concept/change.
- Don't explain obvious things like "added unit tests for X".

### Commit format

Always pass the commit message via a HEREDOC:

```
git commit -m "$(cat <<'EOF'
<title line>

<optional body>
EOF
)"
```

## PR format

Use a HEREDOC for the body. Look at ALL commits on the branch (not just the latest) to write the summary.

```
gh pr create --title "<title>" --base <target-branch> --body "$(cat <<'EOF'
## Summary
<1-3 bullet points covering all branch commits>
EOF
)"
```

## Before you commit

1. Run `cargo +nightly fmt --all && cargo +nightly clippy --all-features --all-targets --fix --allow-dirty` to auto-format and fix lint issues.
2. Run all tests and doctests to ensure nothing is broken.
82 changes: 82 additions & 0 deletions .claude/commands/commit-push.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git diff:*), Bash(git log:*), Bash(git config:*), Bash(git push:*), Bash(git branch:*), Bash(git rev-parse:*)
description: Create a git commit and push to remote
---

## Context

- Current git status: !`git status`
- Current git diff (staged and unstaged changes): !`git diff HEAD`
- Current branch: !`git branch --show-current`
- Remote tracking: !`git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null || echo "no upstream"`
- Recent commits (for style reference): !`git log --oneline -10`
- Author commits (for style reference): !`git log --author="$(git config user.email)" --oneline -10`
- User input (optional): $ARGUMENTS

## Your task

Based on the above changes, create a single git commit and push it to the remote.

1. If there are no staged changes, stage only the relevant changed files by name (never use `git add -A` or `git add .`).
2. Do NOT commit files that likely contain secrets (.env, credentials.json, etc).
3. Write a commit message following the guidelines below, then commit.
4. Push to the remote. Use `git push -u origin <branch>` if there is no upstream set.

## Commit message guidelines

- Use imperative mood (e.g., "add feature" not "added feature")
- First line: brief summary, max 72 characters
- Focus on the "why" and "what", not the "how"
- Be specific but concise
- Many commits do not need a body if the title is self-explanatory
- Litmus test: "Would a developer understand this commit from the title + diff?" If yes, skip the body.
- Do NOT include "Generated with ...", "Co-Authored-By ...", or any AI attribution

### Conventional commit prefixes

Match the prefix to the nature of the change. These must align with `cliff.toml` commit parsers so they appear correctly in the changelog.

**Changelog: "Added"**
- `feat:` / `feat(scope):` — new feature

**Changelog: "Fixed"**
- `fix:` / `fix(scope):` — bug fix

**Changelog: "Changed"**
- `refactor:` / `refactor(scope):` — code restructuring without behavior change
- `perf:` / `perf(scope):` — performance improvement
- `docs:` / `docs(scope):` — documentation changes (README, guides, etc.)
- `style:` / `style(scope):` — formatting only (no logic change)
- `chore:` / `chore(scope):` — tooling, deps, config, scripts, AI config (.claude/, CLAUDE.md)

**Changelog: "Removed"**
- `revert:` / `revert(scope):` — revert a previous commit

**Excluded from changelog**
- `test:` / `test(scope):` — adding or updating tests
- `ci:` / `ci(scope):` — CI/CD pipeline changes

### Body rules

- When a body is needed (multiple important things in one commit), use bullet points.
- Body is separated from the title by a blank line.
- One bullet point per concept/change.
- Don't explain obvious things like "added unit tests for X".

### Commit format

Always pass the commit message via a HEREDOC:

```
git commit -m "$(cat <<'EOF'
<title line>

<optional body>
EOF
)"
```

## Before you commit

1. Run `cargo +nightly fmt --all && cargo +nightly clippy --all-features --all-targets --fix --allow-dirty` to auto-format and fix lint issues.
2. Run all tests and doctests to ensure nothing is broken.
81 changes: 81 additions & 0 deletions .claude/commands/commit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git diff:*), Bash(git log:*), Bash(git config:*), Bash(git branch:*)
description: Create a git commit
---

## Context

- Current git status: !`git status`
- Current git diff (staged and unstaged changes): !`git diff HEAD`
- Current branch: !`git branch --show-current`
- Recent commits (for style reference): !`git log --oneline -10`
- Author commits (for style reference): !`git log --author="$(git config user.email)" --oneline -10`
- User input (optional): $ARGUMENTS

## Your task

Based on the above changes, create a single git commit.

1. If there are no staged changes, stage only the relevant changed files by name (never use `git add -A` or `git add .`).
2. Do NOT commit files that likely contain secrets (.env, credentials.json, etc).
3. Write a commit message following the guidelines below, then commit.
4. Do NOT push to remote.

## Commit message guidelines

- Use imperative mood (e.g., "add feature" not "added feature")
- First line: brief summary, max 72 characters
- Focus on the "why" and "what", not the "how"
- Be specific but concise
- Many commits do not need a body if the title is self-explanatory
- Litmus test: "Would a developer understand this commit from the title + diff?" If yes, skip the body.
- Do NOT include "Generated with ...", "Co-Authored-By ...", or any AI attribution

### Conventional commit prefixes

Match the prefix to the nature of the change. These must align with `cliff.toml` commit parsers so they appear correctly in the changelog.

**Changelog: "Added"**
- `feat:` / `feat(scope):` — new feature

**Changelog: "Fixed"**
- `fix:` / `fix(scope):` — bug fix

**Changelog: "Changed"**
- `refactor:` / `refactor(scope):` — code restructuring without behavior change
- `perf:` / `perf(scope):` — performance improvement
- `docs:` / `docs(scope):` — documentation changes (README, guides, etc.)
- `style:` / `style(scope):` — formatting only (no logic change)
- `chore:` / `chore(scope):` — tooling, deps, config, scripts, AI config (.claude/, CLAUDE.md)

**Changelog: "Removed"**
- `revert:` / `revert(scope):` — revert a previous commit

**Excluded from changelog**
- `test:` / `test(scope):` — adding or updating tests
- `ci:` / `ci(scope):` — CI/CD pipeline changes

### Body rules

- When a body is needed (multiple important things in one commit), use bullet points.
- Body is separated from the title by a blank line.
- One bullet point per concept/change.
- Don't explain obvious things like "added unit tests for X".

### Commit format

Always pass the commit message via a HEREDOC:

```
git commit -m "$(cat <<'EOF'
<title line>

<optional body>
EOF
)"
```

## Before you commit

1. Run `cargo +nightly fmt --all && cargo +nightly clippy --all-features --all-targets --fix --allow-dirty` to auto-format and fix lint issues.
2. Run all tests and doctests to ensure nothing is broken.
31 changes: 20 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ on:
push:
branches: [main, master]
pull_request:
branches: [main, master]

permissions:
contents: read
Expand Down Expand Up @@ -51,6 +50,8 @@ jobs:
- uses: Swatinem/rust-cache@v2
- name: Run tests
run: cargo test --verbose --all-features --all-targets
- name: Run doc tests
run: cargo test --verbose --all-features --doc

examples:
name: Examples
Expand All @@ -62,16 +63,24 @@ jobs:
rustup override set stable
rustup update stable
- uses: Swatinem/rust-cache@v2
- name: Run sync example (ml_hyperparameter_tuning)
run: cargo run --example ml_hyperparameter_tuning
- name: Run sync example (benchmark_convergence)
run: cargo run --example benchmark_convergence
- name: Run derive example (parameter_api)
run: cargo run --example parameter_api --features derive
- name: Run async example (async_api_optimization)
run: cargo run --example async_api_optimization --features async
- name: Run visualization example (visualization_demo)
run: cargo run --example visualization_demo
- name: Run basic_optimization
run: cargo run --example basic_optimization
- name: Run parameter_types
run: cargo run --example parameter_types --features derive
- name: Run sampler_comparison
run: cargo run --example sampler_comparison
- name: Run pruning
run: cargo run --example pruning
- name: Run early_stopping
run: cargo run --example early_stopping
- name: Run async_parallel
run: cargo run --example async_parallel --features async
- name: Run journal_storage
run: cargo run --example journal_storage --features journal
- name: Run ask_and_tell
run: cargo run --example ask_and_tell
- name: Run multi_objective
run: cargo run --example multi_objective

docs:
name: Docs
Expand Down
Loading