Skip to content

Commit 523f10e

Browse files
authored
Merge pull request #58 from denehoffman/boxed_update
Remove Clone requirement on generics for algorithms that store a `LineSearch`
2 parents 36d4080 + 7e8068f commit 523f10e

File tree

14 files changed

+32
-85
lines changed

14 files changed

+32
-85
lines changed

.github/workflows/coverage.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- name: Install cargo-llvm-cov
1515
uses: taiki-e/install-action@cargo-llvm-cov
1616
- name: Generate code coverage
17-
run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
17+
run: cargo llvm-cov --workspace --lcov --output-path lcov.info
1818
- name: Upload coverage to Codecov
1919
uses: codecov/codecov-action@v3
2020
with:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ use ganesh::algorithms::NelderMead;
7474
fn main() -> Result<(), Infallible> {
7575
let problem = Rosenbrock { n: 2 };
7676
let nm = NelderMead::default();
77-
let mut m = Minimizer::new(&nm, 2);
77+
let mut m = Minimizer::new(Box::new(nm), 2);
7878
let x0 = &[2.0, 2.0];
7979
m.minimize(&problem, x0, &mut ())?;
8080
println!("{}", m.status);

benches/bfgs_benchmark.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fn bfgs_benchmark(c: &mut Criterion) {
99
group.bench_with_input(BenchmarkId::new("Rosenbrock", n), &n, |b, ndim| {
1010
let problem = Rosenbrock { n: *ndim };
1111
let nm = BFGS::default();
12-
let mut m = Minimizer::new(&nm, *ndim).with_max_steps(10_000_000);
12+
let mut m = Minimizer::new(Box::new(nm), *ndim).with_max_steps(10_000_000);
1313
let x0 = vec![5.0; *ndim];
1414
b.iter(|| {
1515
m.minimize(&problem, &x0, &mut ()).unwrap();

benches/lbfgs_benchmark.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fn lbfgs_benchmark(c: &mut Criterion) {
99
group.bench_with_input(BenchmarkId::new("Rosenbrock", n), &n, |b, ndim| {
1010
let problem = Rosenbrock { n: *ndim };
1111
let nm = LBFGS::default();
12-
let mut m = Minimizer::new(&nm, *ndim).with_max_steps(10_000_000);
12+
let mut m = Minimizer::new(Box::new(nm), *ndim).with_max_steps(10_000_000);
1313
let x0 = vec![5.0; *ndim];
1414
b.iter(|| {
1515
m.minimize(&problem, &x0, &mut ()).unwrap();

benches/lbfgsb_benchmark.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fn lbfgsb_benchmark(c: &mut Criterion) {
99
group.bench_with_input(BenchmarkId::new("Rosenbrock", n), &n, |b, ndim| {
1010
let problem = Rosenbrock { n: *ndim };
1111
let nm = LBFGSB::default();
12-
let mut m = Minimizer::new(&nm, *ndim).with_max_steps(10_000_000);
12+
let mut m = Minimizer::new(Box::new(nm), *ndim).with_max_steps(10_000_000);
1313
let x0 = vec![5.0; *ndim];
1414
b.iter(|| {
1515
m.minimize(&problem, &x0, &mut ()).unwrap();

benches/nelder_mead_benchmark.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fn nelder_mead_benchmark(c: &mut Criterion) {
99
group.bench_with_input(BenchmarkId::new("Rosenbrock", n), &n, |b, ndim| {
1010
let problem = Rosenbrock { n: *ndim };
1111
let nm = NelderMead::default();
12-
let mut m = Minimizer::new(&nm, *ndim).with_max_steps(10_000_000);
12+
let mut m = Minimizer::new(Box::new(nm), *ndim).with_max_steps(10_000_000);
1313
let x0 = vec![5.0; *ndim];
1414
b.iter(|| {
1515
m.minimize(&problem, &x0, &mut ()).unwrap();
@@ -22,7 +22,7 @@ fn nelder_mead_benchmark(c: &mut Criterion) {
2222
|b, ndim| {
2323
let problem = Rosenbrock { n: *ndim };
2424
let nm = NelderMead::default().with_adaptive(n);
25-
let mut m = Minimizer::new(&nm, *ndim).with_max_steps(10_000_000);
25+
let mut m = Minimizer::new(Box::new(nm), *ndim).with_max_steps(10_000_000);
2626
let x0 = vec![5.0; *ndim];
2727
b.iter(|| {
2828
m.minimize(&problem, &x0, &mut ()).unwrap();

examples/multivariate_normal_ess/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ fn main() -> Result<(), Box<dyn Error>> {
5151
.build();
5252

5353
// Create a new Sampler
54-
let mut s = Sampler::new(&a, x0).with_observer(aco.clone());
54+
let mut s = Sampler::new(Box::new(a), x0).with_observer(aco.clone());
5555

5656
// Run a maximum of 1000 steps of the MCMC algorithm
5757
s.sample(&problem, &mut cov_inv, 1000)?;

src/algorithms/bfgs.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,7 @@ impl<U, E> BFGS<U, E> {
133133
}
134134
}
135135

136-
impl<U, E> Algorithm<U, E> for BFGS<U, E>
137-
where
138-
U: Clone,
139-
E: Clone,
140-
{
136+
impl<U, E> Algorithm<U, E> for BFGS<U, E> {
141137
fn initialize(
142138
&mut self,
143139
func: &dyn Function<U, E>,
@@ -240,7 +236,7 @@ mod tests {
240236
#[test]
241237
fn test_bfgs() -> Result<(), Infallible> {
242238
let algo = BFGS::default();
243-
let mut m = Minimizer::new(&algo, 2).with_max_steps(10000);
239+
let mut m = Minimizer::new(Box::new(algo), 2).with_max_steps(10000);
244240
let problem = Rosenbrock { n: 2 };
245241
m.minimize(&problem, &[-2.0, 2.0], &mut ())?;
246242
assert!(m.status.converged);

src/algorithms/lbfgs.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,7 @@ impl<U, E> LBFGS<U, E> {
154154
}
155155
}
156156

157-
impl<U, E> Algorithm<U, E> for LBFGS<U, E>
158-
where
159-
U: Clone,
160-
E: Clone,
161-
{
157+
impl<U, E> Algorithm<U, E> for LBFGS<U, E> {
162158
fn initialize(
163159
&mut self,
164160
func: &dyn Function<U, E>,
@@ -267,7 +263,7 @@ mod tests {
267263
#[test]
268264
fn test_lbfgs() -> Result<(), Infallible> {
269265
let algo = LBFGS::default();
270-
let mut m = Minimizer::new(&algo, 2);
266+
let mut m = Minimizer::new(Box::new(algo), 2);
271267
let problem = Rosenbrock { n: 2 };
272268
m.minimize(&problem, &[-2.0, 2.0], &mut ())?;
273269
assert!(m.status.converged);

src/algorithms/lbfgsb.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -349,11 +349,7 @@ impl<U, E> LBFGSB<U, E> {
349349
}
350350
}
351351

352-
impl<U, E> Algorithm<U, E> for LBFGSB<U, E>
353-
where
354-
U: Clone,
355-
E: Clone,
356-
{
352+
impl<U, E> Algorithm<U, E> for LBFGSB<U, E> {
357353
fn initialize(
358354
&mut self,
359355
func: &dyn Function<U, E>,
@@ -495,7 +491,7 @@ mod tests {
495491
#[test]
496492
fn test_lbfgsb() -> Result<(), Infallible> {
497493
let algo = LBFGSB::default();
498-
let mut m = Minimizer::new(&algo, 2);
494+
let mut m = Minimizer::new(Box::new(algo), 2);
499495
let problem = Rosenbrock { n: 2 };
500496
m.minimize(&problem, &[-2.0, 2.0], &mut ())?;
501497
assert!(m.status.converged);
@@ -521,7 +517,8 @@ mod tests {
521517
#[test]
522518
fn test_bounded_lbfgsb() -> Result<(), Infallible> {
523519
let algo = LBFGSB::default();
524-
let mut m = Minimizer::new(&algo, 2).with_bounds(Some(vec![(-4.0, 4.0), (-4.0, 4.0)]));
520+
let mut m =
521+
Minimizer::new(Box::new(algo), 2).with_bounds(Some(vec![(-4.0, 4.0), (-4.0, 4.0)]));
525522
let problem = Rosenbrock { n: 2 };
526523
m.minimize(&problem, &[-2.0, 2.0], &mut ())?;
527524
assert!(m.status.converged);

0 commit comments

Comments
 (0)