[INFO] updating cached repository josemam/MH-practicas [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/josemam/MH-practicas [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/josemam/MH-practicas" "work/ex/clippy-test-run/sources/stable/gh/josemam/MH-practicas"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/josemam/MH-practicas'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/josemam/MH-practicas" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/josemam/MH-practicas"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/josemam/MH-practicas'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 1d66d737affc69aa143d834c71ab045921a27d3a [INFO] sha for GitHub repo josemam/MH-practicas: 1d66d737affc69aa143d834c71ab045921a27d3a [INFO] validating manifest of josemam/MH-practicas on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of josemam/MH-practicas on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing josemam/MH-practicas [INFO] finished frobbing josemam/MH-practicas [INFO] frobbed toml for josemam/MH-practicas written to work/ex/clippy-test-run/sources/stable/gh/josemam/MH-practicas/Cargo.toml [INFO] started frobbing josemam/MH-practicas [INFO] finished frobbing josemam/MH-practicas [INFO] frobbed toml for josemam/MH-practicas written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/josemam/MH-practicas/Cargo.toml [INFO] crate josemam/MH-practicas has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting josemam/MH-practicas against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/josemam/MH-practicas:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] b4c23eb1f12deb063f525f565288d6e344d9abd643a69354f3e2cf114335f7f8 [INFO] running `"docker" "start" "-a" "b4c23eb1f12deb063f525f565288d6e344d9abd643a69354f3e2cf114335f7f8"` [INFO] [stderr] Checking Prácticas v1.0.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/knn/arff.rs:200:35 [INFO] [stderr] | [INFO] [stderr] 200 | self.data.push(Instance { values: values }); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `values` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/knn/arff.rs:200:35 [INFO] [stderr] | [INFO] [stderr] 200 | self.data.push(Instance { values: values }); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `values` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/knn/arff.rs:200:35 [INFO] [stderr] | [INFO] [stderr] 200 | self.data.push(Instance { values: values }); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `values` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/knn/arff.rs:200:35 [INFO] [stderr] | [INFO] [stderr] 200 | self.data.push(Instance { values: values }); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `values` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/knn/arff.rs:200:35 [INFO] [stderr] | [INFO] [stderr] 200 | self.data.push(Instance { values: values }); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `values` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/knn/arff.rs:200:35 [INFO] [stderr] | [INFO] [stderr] 200 | self.data.push(Instance { values: values }); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `values` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:182:25 [INFO] [stderr] | [INFO] [stderr] 182 | let mut mejor_cut = 0.19999999; // Valor con el que se obtiene el mejor corte. Truncando con este valor inicial no se afecta a la clasificación [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0.199_999_99` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:217:34 [INFO] [stderr] | [INFO] [stderr] 217 | let candidato_exp = (0.1999999f64).log(*w); [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.199_999_9f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:245:30 [INFO] [stderr] | [INFO] [stderr] 245 | if *w != 0.0 && *w < 0.9999999 { [INFO] [stderr] | ^^^^^^^^^ help: consider: `0.999_999_9` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:246:38 [INFO] [stderr] | [INFO] [stderr] 246 | let candidato_cut = *w + 0.0000001f64; // Fijamos el valor que va a 0.2 a poco más del valor de w: así no cuenta el peso w ni ninguno menor [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.000_000_1f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:182:25 [INFO] [stderr] | [INFO] [stderr] 182 | let mut mejor_cut = 0.19999999; // Valor con el que se obtiene el mejor corte. Truncando con este valor inicial no se afecta a la clasificación [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0.199_999_99` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:217:34 [INFO] [stderr] | [INFO] [stderr] 217 | let candidato_exp = (0.1999999f64).log(*w); [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.199_999_9f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:245:30 [INFO] [stderr] | [INFO] [stderr] 245 | if *w != 0.0 && *w < 0.9999999 { [INFO] [stderr] | ^^^^^^^^^ help: consider: `0.999_999_9` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:246:38 [INFO] [stderr] | [INFO] [stderr] 246 | let candidato_cut = *w + 0.0000001f64; // Fijamos el valor que va a 0.2 a poco más del valor de w: así no cuenta el peso w ni ninguno menor [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.000_000_1f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:182:25 [INFO] [stderr] | [INFO] [stderr] 182 | let mut mejor_cut = 0.19999999; // Valor con el que se obtiene el mejor corte. Truncando con este valor inicial no se afecta a la clasificación [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0.199_999_99` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:217:34 [INFO] [stderr] | [INFO] [stderr] 217 | let candidato_exp = (0.1999999f64).log(*w); [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.199_999_9f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:245:30 [INFO] [stderr] | [INFO] [stderr] 245 | if *w != 0.0 && *w < 0.9999999 { [INFO] [stderr] | ^^^^^^^^^ help: consider: `0.999_999_9` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:246:38 [INFO] [stderr] | [INFO] [stderr] 246 | let candidato_cut = *w + 0.0000001f64; // Fijamos el valor que va a 0.2 a poco más del valor de w: así no cuenta el peso w ni ninguno menor [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.000_000_1f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica3.rs:16:30 [INFO] [stderr] | [INFO] [stderr] 16 | const MAX_CICLOS_BL: usize = 100000000; // No hay límite de ciclos, sino de evaluaciones [INFO] [stderr] | ^^^^^^^^^ help: consider: `100_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:182:25 [INFO] [stderr] | [INFO] [stderr] 182 | let mut mejor_cut = 0.19999999; // Valor con el que se obtiene el mejor corte. Truncando con este valor inicial no se afecta a la clasificación [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0.199_999_99` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:217:34 [INFO] [stderr] | [INFO] [stderr] 217 | let candidato_exp = (0.1999999f64).log(*w); [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.199_999_9f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:245:30 [INFO] [stderr] | [INFO] [stderr] 245 | if *w != 0.0 && *w < 0.9999999 { [INFO] [stderr] | ^^^^^^^^^ help: consider: `0.999_999_9` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:246:38 [INFO] [stderr] | [INFO] [stderr] 246 | let candidato_cut = *w + 0.0000001f64; // Fijamos el valor que va a 0.2 a poco más del valor de w: así no cuenta el peso w ni ninguno menor [INFO] [stderr] --> src/funciones_practica1.rs:182:25 [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.000_000_1f64` [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] 182 | let mut mejor_cut = 0.19999999; // Valor con el que se obtiene el mejor corte. Truncando con este valor inicial no se afecta a la clasificación [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0.199_999_99` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:217:34 [INFO] [stderr] | [INFO] [stderr] 217 | let candidato_exp = (0.1999999f64).log(*w); [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.199_999_9f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:245:30 [INFO] [stderr] --> src/funciones_practica2.rs:55:30 [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] 245 | if *w != 0.0 && *w < 0.9999999 { [INFO] [stderr] 55 | const MAX_CICLOS_BL: usize = 100000000; // No hay límite de ciclos, sino de evaluaciones [INFO] [stderr] | ^^^^^^^^^ help: consider: `0.999_999_9` [INFO] [stderr] | ^^^^^^^^^ help: consider: `100_000_000` [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/funciones_practica1.rs:246:38 [INFO] [stderr] --> src/funciones_practica2.rs:61:5 [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] 246 | let candidato_cut = *w + 0.0000001f64; // Fijamos el valor que va a 0.2 a poco más del valor de w: así no cuenta el peso w ni ninguno menor [INFO] [stderr] 61 | return 0; // No hace nada. Por consiguiente, no debe incrementar el contador de evaluaciones [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.000_000_1f64` [INFO] [stderr] | [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `0` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/funciones_practica2.rs:255:5 [INFO] [stderr] | [INFO] [stderr] 255 | return memetico_generacional(&entrenamiento, &gen_iniciales, &cruce, &vecino, (99999999, &nada), rng); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `memetico_generacional(&entrenamiento, &gen_iniciales, &cruce, &vecino, (99999999, &nada), rng)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica2.rs:55:30 [INFO] [stderr] --> src/funciones_practica2.rs:255:84 [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] 255 | return memetico_generacional(&entrenamiento, &gen_iniciales, &cruce, &vecino, (99999999, &nada), rng); [INFO] [stderr] 55 | const MAX_CICLOS_BL: usize = 100000000; // No hay límite de ciclos, sino de evaluaciones [INFO] [stderr] | ^^^^^^^^ help: consider: `99_999_999` [INFO] [stderr] | ^^^^^^^^^ help: consider: `100_000_000` [INFO] [stderr] | [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/funciones_practica2.rs:61:5 [INFO] [stderr] | [INFO] [stderr] 61 | return 0; // No hace nada. Por consiguiente, no debe incrementar el contador de evaluaciones [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `0` [INFO] [stderr] | [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] --> src/funciones_practica2.rs:379:9 [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] 379 | / if valor >= 0.2 && menor < 0.2 { [INFO] [stderr] 380 | | if rng.gen::() < 0.1 { valor = menor } [INFO] [stderr] 381 | | }; [INFO] [stderr] | |_________^ help: try: `if valor >= 0.2 && menor < 0.2 && rng.gen::() < 0.1 { valor = menor }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/funciones_practica2.rs:255:5 [INFO] [stderr] | [INFO] [stderr] 255 | return memetico_generacional(&entrenamiento, &gen_iniciales, &cruce, &vecino, (99999999, &nada), rng); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `memetico_generacional(&entrenamiento, &gen_iniciales, &cruce, &vecino, (99999999, &nada), rng)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica2.rs:255:84 [INFO] [stderr] | [INFO] [stderr] 255 | return memetico_generacional(&entrenamiento, &gen_iniciales, &cruce, &vecino, (99999999, &nada), rng); [INFO] [stderr] | ^^^^^^^^ help: consider: `99_999_999` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/funciones_practica2.rs:379:9 [INFO] [stderr] | [INFO] [stderr] 379 | / if valor >= 0.2 && menor < 0.2 { [INFO] [stderr] 380 | | if rng.gen::() < 0.1 { valor = menor } [INFO] [stderr] 381 | | }; [INFO] [stderr] | |_________^ help: try: `if valor >= 0.2 && menor < 0.2 && rng.gen::() < 0.1 { valor = menor }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:182:25 [INFO] [stderr] | [INFO] [stderr] 182 | let mut mejor_cut = 0.19999999; // Valor con el que se obtiene el mejor corte. Truncando con este valor inicial no se afecta a la clasificación [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0.199_999_99` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:217:34 [INFO] [stderr] | [INFO] [stderr] 217 | let candidato_exp = (0.1999999f64).log(*w); [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.199_999_9f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:245:30 [INFO] [stderr] | [INFO] [stderr] 245 | if *w != 0.0 && *w < 0.9999999 { [INFO] [stderr] | ^^^^^^^^^ help: consider: `0.999_999_9` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica1.rs:246:38 [INFO] [stderr] | [INFO] [stderr] 246 | let candidato_cut = *w + 0.0000001f64; // Fijamos el valor que va a 0.2 a poco más del valor de w: así no cuenta el peso w ni ninguno menor [INFO] [stderr] | ^^^^^^^^^^^^ help: consider: `0.000_000_1f64` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/funciones_practica3.rs:16:30 [INFO] [stderr] | [INFO] [stderr] 16 | const MAX_CICLOS_BL: usize = 100000000; // No hay límite de ciclos, sino de evaluaciones [INFO] [stderr] | ^^^^^^^^^ help: consider: `100_000_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match self { [INFO] [stderr] 60 | | &Value::Numeric(f) => Some(f), [INFO] [stderr] 61 | | _ => None, [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 59 | match *self { [INFO] [stderr] 60 | Value::Numeric(f) => Some(f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &Value::Text(i) => Some(i), [INFO] [stderr] 68 | | _ => None, [INFO] [stderr] 69 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | Value::Text(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self { [INFO] [stderr] 74 | | &Value::String(ref s) => Some(s), [INFO] [stderr] 75 | | _ => None, [INFO] [stderr] 76 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 73 | match *self { [INFO] [stderr] 74 | Value::String(ref s) => Some(s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | / match self { [INFO] [stderr] 117 | | &AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] 118 | | _ => None, [INFO] [stderr] 119 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 116 | match *self { [INFO] [stderr] 117 | AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/knn/arff.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/knn/arff.rs:146:31 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Reading {}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | / match value { [INFO] [stderr] 170 | | &Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | | &Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | | &Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | | &Value::Missing => line.push('?'), [INFO] [stderr] 174 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *value { [INFO] [stderr] 170 | Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | Value::Missing => line.push('?'), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:229:17 [INFO] [stderr] | [INFO] [stderr] 229 | / match samples { [INFO] [stderr] 230 | | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &mut AttributeSamples::BadType => (), [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 229 | match *samples { [INFO] [stderr] 230 | AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | None => (), [INFO] [stderr] 233 | }, [INFO] [stderr] 234 | AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] | _____________________________________________________________________^ [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] 233 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(f) = value.num() { list.push((f, id)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:234:66 [INFO] [stderr] | [INFO] [stderr] 234 | &mut AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 235 | | Some(i) => list[i].0.push(id), [INFO] [stderr] 236 | | None => (), [INFO] [stderr] 237 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(i) = value.text() { list[i].0.push(id) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ help: try this: `if let &mut AttributeSamples::Numeric(ref mut list) = samples { list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 245 | match *samples { [INFO] [stderr] 246 | AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/knn/arff.rs:274:33 [INFO] [stderr] | [INFO] [stderr] 274 | if line.starts_with("%") { [INFO] [stderr] | ^^^ help: try using a char instead: `'%'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match self { [INFO] [stderr] 60 | | &Value::Numeric(f) => Some(f), [INFO] [stderr] 61 | | _ => None, [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 59 | match *self { [INFO] [stderr] 60 | Value::Numeric(f) => Some(f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &Value::Text(i) => Some(i), [INFO] [stderr] 68 | | _ => None, [INFO] [stderr] 69 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | Value::Text(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self { [INFO] [stderr] 74 | | &Value::String(ref s) => Some(s), [INFO] [stderr] 75 | | _ => None, [INFO] [stderr] 76 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 73 | match *self { [INFO] [stderr] 74 | Value::String(ref s) => Some(s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/knn/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | self.atributos_c.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.atributos_c.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn index<'a>(&'a self, index: usize) -> &'a f64 { [INFO] [stderr] 83 | | &self.atributos_f[index as usize] [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / fn index_mut<'a>(&'a mut self, index: usize) -> &'a mut f64 { [INFO] [stderr] 89 | | &mut self.atributos_f[index as usize] [INFO] [stderr] 90 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | / match self { [INFO] [stderr] 117 | | &AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] 118 | | _ => None, [INFO] [stderr] 119 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 116 | match *self { [INFO] [stderr] 117 | AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/knn/arff.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/knn/arff.rs:146:31 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Reading {}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | / match value { [INFO] [stderr] 170 | | &Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | | &Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | | &Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | | &Value::Missing => line.push('?'), [INFO] [stderr] 174 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *value { [INFO] [stderr] 170 | Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | Value::Missing => line.push('?'), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:229:17 [INFO] [stderr] | [INFO] [stderr] 229 | / match samples { [INFO] [stderr] 230 | | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &mut AttributeSamples::BadType => (), [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 229 | match *samples { [INFO] [stderr] 230 | AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | None => (), [INFO] [stderr] 233 | }, [INFO] [stderr] 234 | AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] | _____________________________________________________________________^ [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] 233 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(f) = value.num() { list.push((f, id)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:234:66 [INFO] [stderr] | [INFO] [stderr] 234 | &mut AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 235 | | Some(i) => list[i].0.push(id), [INFO] [stderr] 236 | | None => (), [INFO] [stderr] 237 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(i) = value.text() { list[i].0.push(id) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ help: try this: `if let &mut AttributeSamples::Numeric(ref mut list) = samples { list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 245 | match *samples { [INFO] [stderr] 246 | AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/knn/arff.rs:274:33 [INFO] [stderr] | [INFO] [stderr] 274 | if line.starts_with("%") { [INFO] [stderr] | ^^^ help: try using a char instead: `'%'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/knn/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | self.atributos_c.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.atributos_c.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn index<'a>(&'a self, index: usize) -> &'a f64 { [INFO] [stderr] 83 | | &self.atributos_f[index as usize] [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / fn index_mut<'a>(&'a mut self, index: usize) -> &'a mut f64 { [INFO] [stderr] 89 | | &mut self.atributos_f[index as usize] [INFO] [stderr] 90 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/evaluacion_pesos.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | vm.iter().filter(|m| m.id_categoria() == id).map(|m| *m).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vm.iter().filter(|m| m.id_categoria() == id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: the loop variable `cl_id` is used to index `distribucion` [INFO] [stderr] --> src/evaluacion_pesos.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for cl_id in 0..distribucion.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 103 | for (cl_id, ) in distribucion.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | for i in 0..n_fold { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 106 | for (i, ) in particion.iter_mut().enumerate().take(n_fold) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/evaluacion_pesos.rs:107:28 [INFO] [stderr] | [INFO] [stderr] 107 | let tomados = (distribucion[cl_id] as f64 /((n_fold-i) as f64)).round() as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(distribucion[cl_id])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `MAX_EVALUACIONES` [INFO] [stderr] --> src/funciones_practica1.rs:43:1 [INFO] [stderr] | [INFO] [stderr] 43 | const MAX_EVALUACIONES: usize = 15000; // Tope de evaluaciones de la función objetivo antes de terminar [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `MAX_CICLOS` [INFO] [stderr] --> src/funciones_practica1.rs:44:1 [INFO] [stderr] | [INFO] [stderr] 44 | const MAX_CICLOS: usize = 20; // Tope de veces que se explorará cada atributo sin que haya mejora [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_desde` [INFO] [stderr] --> src/funciones_practica1.rs:130:1 [INFO] [stderr] | [INFO] [stderr] 130 | pub fn busqueda_local_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local` [INFO] [stderr] --> src/funciones_practica1.rs:136:1 [INFO] [stderr] | [INFO] [stderr] 136 | pub fn busqueda_local(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_mut2_desde` [INFO] [stderr] --> src/funciones_practica1.rs:302:1 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn busqueda_local_mut2_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_mut2` [INFO] [stderr] --> src/funciones_practica1.rs:308:1 [INFO] [stderr] | [INFO] [stderr] 308 | pub fn busqueda_local_mut2(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_ordenada_desde` [INFO] [stderr] --> src/funciones_practica1.rs:317:1 [INFO] [stderr] | [INFO] [stderr] 317 | pub fn busqueda_local_ordenada_desde(entrenamiento: &[Dato], w_base: &[f64], vecino: &Fn(&[f64], usize, &mut Trng) -> Vec, max_evaluaciones: usize, max_ciclos: usize, rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden_desde` [INFO] [stderr] --> src/funciones_practica1.rs:374:1 [INFO] [stderr] | [INFO] [stderr] 374 | pub fn busqueda_local_orden_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden` [INFO] [stderr] --> src/funciones_practica1.rs:380:1 [INFO] [stderr] | [INFO] [stderr] 380 | pub fn busqueda_local_orden(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden_mut2_desde` [INFO] [stderr] --> src/funciones_practica1.rs:387:1 [INFO] [stderr] | [INFO] [stderr] 387 | pub fn busqueda_local_orden_mut2_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden_mut2` [INFO] [stderr] --> src/funciones_practica1.rs:394:1 [INFO] [stderr] | [INFO] [stderr] 394 | pub fn busqueda_local_orden_mut2(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:120:18 [INFO] [stderr] | [INFO] [stderr] 120 | for j in 0..n_fold { if j != i { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 120 | for (j, ) in particion.iter().enumerate().take(n_fold) { if j != i { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is used to index `medias` [INFO] [stderr] --> src/evaluacion_pesos.rs:137:18 [INFO] [stderr] | [INFO] [stderr] 137 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 137 | for (m, ) in medias.iter_mut().enumerate().take(4) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is only used to index `medias`. [INFO] [stderr] --> src/evaluacion_pesos.rs:142:14 [INFO] [stderr] | [INFO] [stderr] 142 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 142 | for in medias.iter_mut().take(4) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/evaluacion_pesos.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | vm.iter().filter(|m| m.id_categoria() == id).map(|m| *m).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vm.iter().filter(|m| m.id_categoria() == id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/funciones_practica1.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | let max = w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(max - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match self { [INFO] [stderr] 60 | | &Value::Numeric(f) => Some(f), [INFO] [stderr] 61 | | _ => None, [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 59 | match *self { [INFO] [stderr] 60 | Value::Numeric(f) => Some(f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &Value::Text(i) => Some(i), [INFO] [stderr] 68 | | _ => None, [INFO] [stderr] 69 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | Value::Text(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self { [INFO] [stderr] 74 | | &Value::String(ref s) => Some(s), [INFO] [stderr] 75 | | _ => None, [INFO] [stderr] 76 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 73 | match *self { [INFO] [stderr] 74 | Value::String(ref s) => Some(s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider comparing them within some error: `(nw[i] - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | / match self { [INFO] [stderr] 117 | | &AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] 118 | | _ => None, [INFO] [stderr] 119 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 116 | match *self { [INFO] [stderr] 117 | AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/knn/arff.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/knn/arff.rs:146:31 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Reading {}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | / match value { [INFO] [stderr] 170 | | &Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | | &Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | | &Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | | &Value::Missing => line.push('?'), [INFO] [stderr] 174 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *value { [INFO] [stderr] 170 | Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | Value::Missing => line.push('?'), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `/` [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: constant division of 0.0 with 0.0 will always result in NaN [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_divided_by_zero)] on by default [INFO] [stderr] = help: Consider using `std::f64::NAN` if you would like a constant representing NaN [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_divided_by_zero [INFO] [stderr] [INFO] [stderr] warning: the loop variable `cl_id` is used to index `distribucion` [INFO] [stderr] --> src/evaluacion_pesos.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for cl_id in 0..distribucion.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 103 | for (cl_id, ) in distribucion.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | for i in 0..n_fold { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 106 | for (i, ) in particion.iter_mut().enumerate().take(n_fold) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/evaluacion_pesos.rs:107:28 [INFO] [stderr] | [INFO] [stderr] 107 | let tomados = (distribucion[cl_id] as f64 /((n_fold-i) as f64)).round() as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(distribucion[cl_id])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:229:17 [INFO] [stderr] | [INFO] [stderr] 229 | / match samples { [INFO] [stderr] 230 | | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &mut AttributeSamples::BadType => (), [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 229 | match *samples { [INFO] [stderr] 230 | AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | None => (), [INFO] [stderr] 233 | }, [INFO] [stderr] 234 | AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] | _____________________________________________________________________^ [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] 233 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(f) = value.num() { list.push((f, id)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:234:66 [INFO] [stderr] | [INFO] [stderr] 234 | &mut AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 235 | | Some(i) => list[i].0.push(id), [INFO] [stderr] 236 | | None => (), [INFO] [stderr] 237 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(i) = value.text() { list[i].0.push(id) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ help: try this: `if let &mut AttributeSamples::Numeric(ref mut list) = samples { list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 245 | match *samples { [INFO] [stderr] 246 | AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:120:18 [INFO] [stderr] | [INFO] [stderr] 120 | for j in 0..n_fold { if j != i { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 120 | for (j, ) in particion.iter().enumerate().take(n_fold) { if j != i { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/knn/arff.rs:274:33 [INFO] [stderr] | [INFO] [stderr] 274 | if line.starts_with("%") { [INFO] [stderr] | ^^^ help: try using a char instead: `'%'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is used to index `medias` [INFO] [stderr] --> src/evaluacion_pesos.rs:137:18 [INFO] [stderr] | [INFO] [stderr] 137 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 137 | for (m, ) in medias.iter_mut().enumerate().take(4) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is only used to index `medias`. [INFO] [stderr] --> src/evaluacion_pesos.rs:142:14 [INFO] [stderr] | [INFO] [stderr] 142 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 142 | for in medias.iter_mut().take(4) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/knn/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | self.atributos_c.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.atributos_c.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn index<'a>(&'a self, index: usize) -> &'a f64 { [INFO] [stderr] 83 | | &self.atributos_f[index as usize] [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / fn index_mut<'a>(&'a mut self, index: usize) -> &'a mut f64 { [INFO] [stderr] 89 | | &mut self.atributos_f[index as usize] [INFO] [stderr] 90 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/funciones_practica1.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | let max = w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(max - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider comparing them within some error: `(nw[i] - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `/` [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: constant division of 0.0 with 0.0 will always result in NaN [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_divided_by_zero)] on by default [INFO] [stderr] = help: Consider using `std::f64::NAN` if you would like a constant representing NaN [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_divided_by_zero [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/evaluacion_pesos.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | vm.iter().filter(|m| m.id_categoria() == id).map(|m| *m).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vm.iter().filter(|m| m.id_categoria() == id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/funciones_practica1.rs:339:20 [INFO] [stderr] | [INFO] [stderr] 339 | for (_, va) in &arbol_atributos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 339 | for va in arbol_atributos.values() { [INFO] [stderr] | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `cl_id` is used to index `distribucion` [INFO] [stderr] --> src/evaluacion_pesos.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for cl_id in 0..distribucion.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 103 | for (cl_id, ) in distribucion.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | for i in 0..n_fold { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 106 | for (i, ) in particion.iter_mut().enumerate().take(n_fold) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/evaluacion_pesos.rs:107:28 [INFO] [stderr] | [INFO] [stderr] 107 | let tomados = (distribucion[cl_id] as f64 /((n_fold-i) as f64)).round() as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(distribucion[cl_id])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:120:18 [INFO] [stderr] | [INFO] [stderr] 120 | for j in 0..n_fold { if j != i { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 120 | for (j, ) in particion.iter().enumerate().take(n_fold) { if j != i { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is used to index `medias` [INFO] [stderr] --> src/evaluacion_pesos.rs:137:18 [INFO] [stderr] | [INFO] [stderr] 137 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 137 | for (m, ) in medias.iter_mut().enumerate().take(4) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is only used to index `medias`. [INFO] [stderr] --> src/evaluacion_pesos.rs:142:14 [INFO] [stderr] | [INFO] [stderr] 142 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 142 | for in medias.iter_mut().take(4) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/funciones_practica1.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | let max = w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(max - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider comparing them within some error: `(nw[i] - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/practica1.rs:24:27 [INFO] [stderr] | [INFO] [stderr] 24 | let lista_algoritmos: Vec<(fn(&[knn::Dato], &mut _) -> Vec, &str)> = vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `/` [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: constant division of 0.0 with 0.0 will always result in NaN [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_divided_by_zero)] on by default [INFO] [stderr] = help: Consider using `std::f64::NAN` if you would like a constant representing NaN [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_divided_by_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/funciones_practica1.rs:339:20 [INFO] [stderr] | [INFO] [stderr] 339 | for (_, va) in &arbol_atributos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 339 | for va in arbol_atributos.values() { [INFO] [stderr] | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/funciones_practica1.rs:339:20 [INFO] [stderr] | [INFO] [stderr] 339 | for (_, va) in &arbol_atributos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 339 | for va in arbol_atributos.values() { [INFO] [stderr] | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/practica1.rs:24:27 [INFO] [stderr] | [INFO] [stderr] 24 | let lista_algoritmos: Vec<(fn(&[knn::Dato], &mut _) -> Vec, &str)> = vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `Prácticas`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: Could not compile `Prácticas`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/practica3.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | let lista_algoritmos: Vec<(fn(&[knn::Dato], &mut _) -> Vec, &str)> = vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `Prácticas`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match self { [INFO] [stderr] 60 | | &Value::Numeric(f) => Some(f), [INFO] [stderr] 61 | | _ => None, [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 59 | match *self { [INFO] [stderr] 60 | Value::Numeric(f) => Some(f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &Value::Text(i) => Some(i), [INFO] [stderr] 68 | | _ => None, [INFO] [stderr] 69 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | Value::Text(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self { [INFO] [stderr] 74 | | &Value::String(ref s) => Some(s), [INFO] [stderr] 75 | | _ => None, [INFO] [stderr] 76 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 73 | match *self { [INFO] [stderr] 74 | Value::String(ref s) => Some(s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | / match self { [INFO] [stderr] 117 | | &AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] 118 | | _ => None, [INFO] [stderr] 119 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 116 | match *self { [INFO] [stderr] 117 | AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/knn/arff.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/knn/arff.rs:146:31 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Reading {}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | / match value { [INFO] [stderr] 170 | | &Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | | &Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | | &Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | | &Value::Missing => line.push('?'), [INFO] [stderr] 174 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *value { [INFO] [stderr] 170 | Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | Value::Missing => line.push('?'), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:229:17 [INFO] [stderr] | [INFO] [stderr] 229 | / match samples { [INFO] [stderr] 230 | | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &mut AttributeSamples::BadType => (), [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 229 | match *samples { [INFO] [stderr] 230 | AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | None => (), [INFO] [stderr] 233 | }, [INFO] [stderr] 234 | AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] | _____________________________________________________________________^ [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] 233 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(f) = value.num() { list.push((f, id)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:234:66 [INFO] [stderr] | [INFO] [stderr] 234 | &mut AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 235 | | Some(i) => list[i].0.push(id), [INFO] [stderr] 236 | | None => (), [INFO] [stderr] 237 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(i) = value.text() { list[i].0.push(id) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ help: try this: `if let &mut AttributeSamples::Numeric(ref mut list) = samples { list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 245 | match *samples { [INFO] [stderr] 246 | AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/knn/arff.rs:274:33 [INFO] [stderr] | [INFO] [stderr] 274 | if line.starts_with("%") { [INFO] [stderr] | ^^^ help: try using a char instead: `'%'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/knn/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | self.atributos_c.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.atributos_c.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn index<'a>(&'a self, index: usize) -> &'a f64 { [INFO] [stderr] 83 | | &self.atributos_f[index as usize] [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / fn index_mut<'a>(&'a mut self, index: usize) -> &'a mut f64 { [INFO] [stderr] 89 | | &mut self.atributos_f[index as usize] [INFO] [stderr] 90 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match self { [INFO] [stderr] 60 | | &Value::Numeric(f) => Some(f), [INFO] [stderr] 61 | | _ => None, [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 59 | match *self { [INFO] [stderr] 60 | Value::Numeric(f) => Some(f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &Value::Text(i) => Some(i), [INFO] [stderr] 68 | | _ => None, [INFO] [stderr] 69 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | Value::Text(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self { [INFO] [stderr] 74 | | &Value::String(ref s) => Some(s), [INFO] [stderr] 75 | | _ => None, [INFO] [stderr] 76 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 73 | match *self { [INFO] [stderr] 74 | Value::String(ref s) => Some(s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | / match self { [INFO] [stderr] 117 | | &AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] 118 | | _ => None, [INFO] [stderr] 119 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 116 | match *self { [INFO] [stderr] 117 | AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/knn/arff.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/knn/arff.rs:146:31 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Reading {}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | / match value { [INFO] [stderr] 170 | | &Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | | &Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | | &Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | | &Value::Missing => line.push('?'), [INFO] [stderr] 174 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *value { [INFO] [stderr] 170 | Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | Value::Missing => line.push('?'), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/evaluacion_pesos.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | vm.iter().filter(|m| m.id_categoria() == id).map(|m| *m).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vm.iter().filter(|m| m.id_categoria() == id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:229:17 [INFO] [stderr] | [INFO] [stderr] 229 | / match samples { [INFO] [stderr] 230 | | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &mut AttributeSamples::BadType => (), [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 229 | match *samples { [INFO] [stderr] 230 | AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | None => (), [INFO] [stderr] 233 | }, [INFO] [stderr] 234 | AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] | _____________________________________________________________________^ [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] 233 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(f) = value.num() { list.push((f, id)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:234:66 [INFO] [stderr] | [INFO] [stderr] 234 | &mut AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 235 | | Some(i) => list[i].0.push(id), [INFO] [stderr] 236 | | None => (), [INFO] [stderr] 237 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(i) = value.text() { list[i].0.push(id) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ help: try this: `if let &mut AttributeSamples::Numeric(ref mut list) = samples { list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 245 | match *samples { [INFO] [stderr] 246 | AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/knn/arff.rs:274:33 [INFO] [stderr] | [INFO] [stderr] 274 | if line.starts_with("%") { [INFO] [stderr] | ^^^ help: try using a char instead: `'%'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `cl_id` is used to index `distribucion` [INFO] [stderr] --> src/evaluacion_pesos.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for cl_id in 0..distribucion.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 103 | for (cl_id, ) in distribucion.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | for i in 0..n_fold { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 106 | for (i, ) in particion.iter_mut().enumerate().take(n_fold) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/evaluacion_pesos.rs:107:28 [INFO] [stderr] | [INFO] [stderr] 107 | let tomados = (distribucion[cl_id] as f64 /((n_fold-i) as f64)).round() as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(distribucion[cl_id])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:120:18 [INFO] [stderr] | [INFO] [stderr] 120 | for j in 0..n_fold { if j != i { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 120 | for (j, ) in particion.iter().enumerate().take(n_fold) { if j != i { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is used to index `medias` [INFO] [stderr] --> src/evaluacion_pesos.rs:137:18 [INFO] [stderr] | [INFO] [stderr] 137 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 137 | for (m, ) in medias.iter_mut().enumerate().take(4) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is only used to index `medias`. [INFO] [stderr] --> src/evaluacion_pesos.rs:142:14 [INFO] [stderr] | [INFO] [stderr] 142 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 142 | for in medias.iter_mut().take(4) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/knn/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | self.atributos_c.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.atributos_c.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn index<'a>(&'a self, index: usize) -> &'a f64 { [INFO] [stderr] 83 | | &self.atributos_f[index as usize] [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / fn index_mut<'a>(&'a mut self, index: usize) -> &'a mut f64 { [INFO] [stderr] 89 | | &mut self.atributos_f[index as usize] [INFO] [stderr] 90 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/funciones_practica1.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | let max = w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(max - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider comparing them within some error: `(nw[i] - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `/` [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: constant division of 0.0 with 0.0 will always result in NaN [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_divided_by_zero)] on by default [INFO] [stderr] = help: Consider using `std::f64::NAN` if you would like a constant representing NaN [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_divided_by_zero [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/evaluacion_pesos.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | vm.iter().filter(|m| m.id_categoria() == id).map(|m| *m).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vm.iter().filter(|m| m.id_categoria() == id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/funciones_practica1.rs:339:20 [INFO] [stderr] | [INFO] [stderr] 339 | for (_, va) in &arbol_atributos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 339 | for va in arbol_atributos.values() { [INFO] [stderr] | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica2.rs:27:28 [INFO] [stderr] | [INFO] [stderr] 27 | let valor = if a == b { [INFO] [stderr] | ^^^^^^ help: consider comparing them within some error: `(a - b).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica2.rs:27:28 [INFO] [stderr] | [INFO] [stderr] 27 | let valor = if a == b { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: the loop variable `cl_id` is used to index `distribucion` [INFO] [stderr] --> src/evaluacion_pesos.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for cl_id in 0..distribucion.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 103 | for (cl_id, ) in distribucion.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | for i in 0..n_fold { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 106 | for (i, ) in particion.iter_mut().enumerate().take(n_fold) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/evaluacion_pesos.rs:107:28 [INFO] [stderr] | [INFO] [stderr] 107 | let tomados = (distribucion[cl_id] as f64 /((n_fold-i) as f64)).round() as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(distribucion[cl_id])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:120:18 [INFO] [stderr] | [INFO] [stderr] 120 | for j in 0..n_fold { if j != i { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 120 | for (j, ) in particion.iter().enumerate().take(n_fold) { if j != i { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is used to index `medias` [INFO] [stderr] --> src/evaluacion_pesos.rs:137:18 [INFO] [stderr] | [INFO] [stderr] 137 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 137 | for (m, ) in medias.iter_mut().enumerate().take(4) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is only used to index `medias`. [INFO] [stderr] --> src/evaluacion_pesos.rs:142:14 [INFO] [stderr] | [INFO] [stderr] 142 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 142 | for in medias.iter_mut().take(4) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/funciones_practica1.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | let max = w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(max - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/funciones_practica2.rs:149:34 [INFO] [stderr] | [INFO] [stderr] 149 | let mut nueva_poblacion: Vec<(Option<(OrderedFloat, usize)>, Vec)> = Vec::with_capacity(TAMANO_GENERACIONAL); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider comparing them within some error: `(nw[i] - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `/` [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: constant division of 0.0 with 0.0 will always result in NaN [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_divided_by_zero)] on by default [INFO] [stderr] = help: Consider using `std::f64::NAN` if you would like a constant representing NaN [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_divided_by_zero [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica2.rs:421:72 [INFO] [stderr] | [INFO] [stderr] 421 | num_evaluaciones += 1 + cr.iter().filter(|w| **w != 0.0 && **w != 1.0).count(); [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(**w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica2.rs:421:72 [INFO] [stderr] | [INFO] [stderr] 421 | num_evaluaciones += 1 + cr.iter().filter(|w| **w != 0.0 && **w != 1.0).count(); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/funciones_practica1.rs:339:20 [INFO] [stderr] | [INFO] [stderr] 339 | for (_, va) in &arbol_atributos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 339 | for va in arbol_atributos.values() { [INFO] [stderr] | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/practica2.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | let lista_algoritmos: Vec<(fn(&[knn::Dato], &mut _) -> Vec, &str)> = vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `MAX_EVALUACIONES` [INFO] [stderr] --> src/funciones_practica1.rs:43:1 [INFO] [stderr] | [INFO] [stderr] 43 | const MAX_EVALUACIONES: usize = 15000; // Tope de evaluaciones de la función objetivo antes de terminar [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `MAX_CICLOS` [INFO] [stderr] --> src/funciones_practica1.rs:44:1 [INFO] [stderr] | [INFO] [stderr] 44 | const MAX_CICLOS: usize = 20; // Tope de veces que se explorará cada atributo sin que haya mejora [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_desde` [INFO] [stderr] --> src/funciones_practica1.rs:130:1 [INFO] [stderr] | [INFO] [stderr] 130 | pub fn busqueda_local_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local` [INFO] [stderr] --> src/funciones_practica1.rs:136:1 [INFO] [stderr] | [INFO] [stderr] 136 | pub fn busqueda_local(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_mut2_desde` [INFO] [stderr] --> src/funciones_practica1.rs:302:1 [INFO] [stderr] | [INFO] [stderr] 302 | pub fn busqueda_local_mut2_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_mut2` [INFO] [stderr] --> src/funciones_practica1.rs:308:1 [INFO] [stderr] | [INFO] [stderr] 308 | pub fn busqueda_local_mut2(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica2.rs:27:28 [INFO] [stderr] | [INFO] [stderr] 27 | let valor = if a == b { [INFO] [stderr] | ^^^^^^ help: consider comparing them within some error: `(a - b).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica2.rs:27:28 [INFO] [stderr] | [INFO] [stderr] 27 | let valor = if a == b { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_ordenada_desde` [INFO] [stderr] --> src/funciones_practica1.rs:317:1 [INFO] [stderr] | [INFO] [stderr] 317 | pub fn busqueda_local_ordenada_desde(entrenamiento: &[Dato], w_base: &[f64], vecino: &Fn(&[f64], usize, &mut Trng) -> Vec, max_evaluaciones: usize, max_ciclos: usize, rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden_desde` [INFO] [stderr] --> src/funciones_practica1.rs:374:1 [INFO] [stderr] | [INFO] [stderr] 374 | pub fn busqueda_local_orden_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden` [INFO] [stderr] --> src/funciones_practica1.rs:380:1 [INFO] [stderr] | [INFO] [stderr] 380 | pub fn busqueda_local_orden(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden_mut2_desde` [INFO] [stderr] --> src/funciones_practica1.rs:387:1 [INFO] [stderr] | [INFO] [stderr] 387 | pub fn busqueda_local_orden_mut2_desde(entrenamiento: &[Dato], w_base: &[f64], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `busqueda_local_orden_mut2` [INFO] [stderr] --> src/funciones_practica1.rs:394:1 [INFO] [stderr] | [INFO] [stderr] 394 | pub fn busqueda_local_orden_mut2(entrenamiento: &[Dato], rng: &mut Trng) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to 9 previous errors [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:59:9 [INFO] [stderr] | [INFO] [stderr] 59 | / match self { [INFO] [stderr] 60 | | &Value::Numeric(f) => Some(f), [INFO] [stderr] 61 | | _ => None, [INFO] [stderr] 62 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 59 | match *self { [INFO] [stderr] 60 | Value::Numeric(f) => Some(f), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &Value::Text(i) => Some(i), [INFO] [stderr] 68 | | _ => None, [INFO] [stderr] 69 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 66 | match *self { [INFO] [stderr] 67 | Value::Text(i) => Some(i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:73:9 [INFO] [stderr] | [INFO] [stderr] 73 | / match self { [INFO] [stderr] 74 | | &Value::String(ref s) => Some(s), [INFO] [stderr] 75 | | _ => None, [INFO] [stderr] 76 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 73 | match *self { [INFO] [stderr] 74 | Value::String(ref s) => Some(s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/funciones_practica2.rs:149:34 [INFO] [stderr] | [INFO] [stderr] 149 | let mut nueva_poblacion: Vec<(Option<(OrderedFloat, usize)>, Vec)> = Vec::with_capacity(TAMANO_GENERACIONAL); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:116:9 [INFO] [stderr] | [INFO] [stderr] 116 | / match self { [INFO] [stderr] 117 | | &AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] 118 | | _ => None, [INFO] [stderr] 119 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 116 | match *self { [INFO] [stderr] 117 | AttributeType::Text(ref tokens) => Some(tokens), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: Could not compile `Prácticas`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/knn/arff.rs:146:9 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: use of `expect` followed by a function call [INFO] [stderr] --> src/knn/arff.rs:146:31 [INFO] [stderr] | [INFO] [stderr] 146 | f64::from_str(s).ok().expect(&format!("Reading {}", s)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!("Reading {}", s))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::expect_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:169:13 [INFO] [stderr] | [INFO] [stderr] 169 | / match value { [INFO] [stderr] 170 | | &Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | | &Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | | &Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | | &Value::Missing => line.push('?'), [INFO] [stderr] 174 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 169 | match *value { [INFO] [stderr] 170 | Value::Numeric(f) => line.push_str(&format!("{}", f)), [INFO] [stderr] 171 | Value::Text(i) => line.push_str(&attr.att_type.tokens().unwrap()[i]), [INFO] [stderr] 172 | Value::String(ref s) => line.push_str(s), [INFO] [stderr] 173 | Value::Missing => line.push('?'), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:229:17 [INFO] [stderr] | [INFO] [stderr] 229 | / match samples { [INFO] [stderr] 230 | | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] ... | [INFO] [stderr] 238 | | &mut AttributeSamples::BadType => (), [INFO] [stderr] 239 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 229 | match *samples { [INFO] [stderr] 230 | AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] 231 | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | None => (), [INFO] [stderr] 233 | }, [INFO] [stderr] 234 | AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:230:69 [INFO] [stderr] | [INFO] [stderr] 230 | &mut AttributeSamples::Numeric(ref mut list) => match value.num() { [INFO] [stderr] | _____________________________________________________________________^ [INFO] [stderr] 231 | | Some(f) => list.push((f, id)), [INFO] [stderr] 232 | | None => (), [INFO] [stderr] 233 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(f) = value.num() { list.push((f, id)) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:234:66 [INFO] [stderr] | [INFO] [stderr] 234 | &mut AttributeSamples::Text(ref mut list) => match value.text() { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 235 | | Some(i) => list[i].0.push(id), [INFO] [stderr] 236 | | None => (), [INFO] [stderr] 237 | | }, [INFO] [stderr] | |_____________________^ help: try this: `if let Some(i) = value.text() { list[i].0.push(id) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ help: try this: `if let &mut AttributeSamples::Numeric(ref mut list) = samples { list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/knn/arff.rs:245:13 [INFO] [stderr] | [INFO] [stderr] 245 | / match samples { [INFO] [stderr] 246 | | &mut AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] 247 | | list.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap_or(Ordering::Equal)), [INFO] [stderr] 248 | | _ => (), [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 245 | match *samples { [INFO] [stderr] 246 | AttributeSamples::Numeric(ref mut list) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/knn/arff.rs:274:33 [INFO] [stderr] | [INFO] [stderr] 274 | if line.starts_with("%") { [INFO] [stderr] | ^^^ help: try using a char instead: `'%'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica2.rs:421:72 [INFO] [stderr] | [INFO] [stderr] 421 | num_evaluaciones += 1 + cr.iter().filter(|w| **w != 0.0 && **w != 1.0).count(); [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(**w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica2.rs:421:72 [INFO] [stderr] | [INFO] [stderr] 421 | num_evaluaciones += 1 + cr.iter().filter(|w| **w != 0.0 && **w != 1.0).count(); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/knn/mod.rs:70:9 [INFO] [stderr] | [INFO] [stderr] 70 | self.atributos_c.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.atributos_c.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | / fn index<'a>(&'a self, index: usize) -> &'a f64 { [INFO] [stderr] 83 | | &self.atributos_f[index as usize] [INFO] [stderr] 84 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/knn/mod.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | / fn index_mut<'a>(&'a mut self, index: usize) -> &'a mut f64 { [INFO] [stderr] 89 | | &mut self.atributos_f[index as usize] [INFO] [stderr] 90 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/practica2.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | let lista_algoritmos: Vec<(fn(&[knn::Dato], &mut _) -> Vec, &str)> = vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: aborting due to 9 previous errors [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/evaluacion_pesos.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | vm.iter().filter(|m| m.id_categoria() == id).map(|m| *m).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `vm.iter().filter(|m| m.id_categoria() == id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: the loop variable `cl_id` is used to index `distribucion` [INFO] [stderr] --> src/evaluacion_pesos.rs:103:18 [INFO] [stderr] | [INFO] [stderr] 103 | for cl_id in 0..distribucion.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 103 | for (cl_id, ) in distribucion.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:106:18 [INFO] [stderr] | [INFO] [stderr] 106 | for i in 0..n_fold { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 106 | for (i, ) in particion.iter_mut().enumerate().take(n_fold) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to f64 may become silently lossy if types change [INFO] [stderr] --> src/evaluacion_pesos.rs:107:28 [INFO] [stderr] | [INFO] [stderr] 107 | let tomados = (distribucion[cl_id] as f64 /((n_fold-i) as f64)).round() as u32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f64::from(distribucion[cl_id])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `particion` [INFO] [stderr] --> src/evaluacion_pesos.rs:120:18 [INFO] [stderr] | [INFO] [stderr] 120 | for j in 0..n_fold { if j != i { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 120 | for (j, ) in particion.iter().enumerate().take(n_fold) { if j != i { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is used to index `medias` [INFO] [stderr] --> src/evaluacion_pesos.rs:137:18 [INFO] [stderr] | [INFO] [stderr] 137 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 137 | for (m, ) in medias.iter_mut().enumerate().take(4) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `m` is only used to index `medias`. [INFO] [stderr] --> src/evaluacion_pesos.rs:142:14 [INFO] [stderr] | [INFO] [stderr] 142 | for m in 0..4 { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 142 | for in medias.iter_mut().take(4) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/funciones_practica1.rs:18:15 [INFO] [stderr] | [INFO] [stderr] 18 | let max = w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*w.iter().max_by_key(|x| OrderedFloat(**x)).unwrap()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: Could not compile `Prácticas`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ help: consider comparing them within some error: `(max - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::float_cmp)] on by default [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if max != 1.0 && max != 0.0 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider comparing them within some error: `(nw[i] - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:121:31 [INFO] [stderr] | [INFO] [stderr] 121 | if valor_previo == 1.0 && nw[i] != 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: equal expressions as operands to `/` [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::eq_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#eq_op [INFO] [stderr] [INFO] [stderr] warning: constant division of 0.0 with 0.0 will always result in NaN [INFO] [stderr] --> src/funciones_practica1.rs:158:39 [INFO] [stderr] | [INFO] [stderr] 158 | let wmax = w.iter().cloned().fold(0./0., f64::max); // Esto devuelve el máximo; es feo porque Rust tiene cuidado con los flotantes [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_divided_by_zero)] on by default [INFO] [stderr] = help: Consider using `std::f64::NAN` if you would like a constant representing NaN [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_divided_by_zero [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:186:25 [INFO] [stderr] | [INFO] [stderr] 186 | if *w >= 0.2 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ help: consider comparing them within some error: `(*w - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:214:25 [INFO] [stderr] | [INFO] [stderr] 214 | if *w != 0.0 && *w != 1.0 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] error: strict comparison of f32 or f64 [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error: `(valor_previo - 1.0).abs() < error` [INFO] [stderr] | [INFO] [stderr] note: std::f32::EPSILON and std::f64::EPSILON are available. [INFO] [stderr] --> src/funciones_practica1.rs:293:8 [INFO] [stderr] | [INFO] [stderr] 293 | if valor_previo == 1.0 || nw[i] > 1.0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#float_cmp [INFO] [stderr] [INFO] [stderr] warning: you seem to want to iterate on a map's values [INFO] [stderr] --> src/funciones_practica1.rs:339:20 [INFO] [stderr] | [INFO] [stderr] 339 | for (_, va) in &arbol_atributos { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::for_kv_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stderr] help: use the corresponding method [INFO] [stderr] | [INFO] [stderr] 339 | for va in arbol_atributos.values() { [INFO] [stderr] | ^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/practica3.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | let lista_algoritmos: Vec<(fn(&[knn::Dato], &mut _) -> Vec, &str)> = vec![ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] error: aborting due to 7 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `Prácticas`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "b4c23eb1f12deb063f525f565288d6e344d9abd643a69354f3e2cf114335f7f8"` [INFO] running `"docker" "rm" "-f" "b4c23eb1f12deb063f525f565288d6e344d9abd643a69354f3e2cf114335f7f8"` [INFO] [stdout] b4c23eb1f12deb063f525f565288d6e344d9abd643a69354f3e2cf114335f7f8