From 3559fce27533b57db48fc2cc6fdd9f78889c38cc Mon Sep 17 00:00:00 2001
From: Smaug123 <3138005+Smaug123@users.noreply.github.com>
Date: Mon, 8 Sep 2025 23:10:15 +0100
Subject: [PATCH 1/5] Modernise
---
.envrc | 1 +
.gitignore | 2 +
...-complete.yml => all-checks-complete.yaml} | 0
.woodpecker/{.build.yml => build.yaml} | 0
Cargo.lock | 124 +++++++++----
Cargo.toml | 8 +
flake.lock | 98 ++++------
flake.nix | 175 +++++++++---------
little_learner/Cargo.toml | 4 +-
little_learner/src/decider.rs | 6 +-
little_learner/src/gradient_descent.rs | 4 +-
little_learner/src/lib.rs | 1 -
little_learner/src/scalar.rs | 4 +-
little_learner_app/Cargo.toml | 4 +-
little_learner_app/src/iris.rs | 2 +-
15 files changed, 227 insertions(+), 206 deletions(-)
create mode 100644 .envrc
rename .woodpecker/{.all-checks-complete.yml => all-checks-complete.yaml} (100%)
rename .woodpecker/{.build.yml => build.yaml} (100%)
diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..3550a30
--- /dev/null
+++ b/.envrc
@@ -0,0 +1 @@
+use flake
diff --git a/.gitignore b/.gitignore
index 3864e7b..723a8fc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@ target/
.vscode/
.profile*
.DS_Store
+.direnv/
+result
diff --git a/.woodpecker/.all-checks-complete.yml b/.woodpecker/all-checks-complete.yaml
similarity index 100%
rename from .woodpecker/.all-checks-complete.yml
rename to .woodpecker/all-checks-complete.yaml
diff --git a/.woodpecker/.build.yml b/.woodpecker/build.yaml
similarity index 100%
rename from .woodpecker/.build.yml
rename to .woodpecker/build.yaml
diff --git a/Cargo.lock b/Cargo.lock
index 923f5c7..e3aab9a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,18 +1,18 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
-version = 3
+version = 4
[[package]]
name = "arrayvec"
-version = "0.7.2"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "autocfg"
-version = "1.1.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "bitvec"
@@ -28,15 +28,15 @@ dependencies = [
[[package]]
name = "cfg-if"
-version = "1.0.0"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
[[package]]
name = "csv"
-version = "1.2.2"
+version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086"
+checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf"
dependencies = [
"csv-core",
"itoa",
@@ -46,9 +46,9 @@ dependencies = [
[[package]]
name = "csv-core"
-version = "0.1.10"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d"
dependencies = [
"memchr",
]
@@ -61,9 +61,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
[[package]]
name = "getrandom"
-version = "0.2.9"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
dependencies = [
"cfg-if",
"libc",
@@ -83,15 +83,15 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.6"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "libc"
-version = "0.2.142"
+version = "0.2.175"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
+checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
[[package]]
name = "little_learner"
@@ -115,24 +115,24 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
[[package]]
name = "num-traits"
-version = "0.2.15"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
[[package]]
name = "ordered-float"
-version = "3.6.0"
+version = "3.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13a384337e997e6860ffbaa83708b2ef329fd8c54cb67a5f64d421e0f943254f"
+checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc"
dependencies = [
"num-traits",
]
@@ -155,29 +155,32 @@ checksum = "9cd6706dfe50d53e0f6aa09e12c034c44faacd23e966ae5a209e8bdb8f179f98"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
name = "ppv-lite86"
-version = "0.2.17"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
[[package]]
name = "proc-macro2"
-version = "1.0.56"
+version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.26"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
@@ -220,15 +223,29 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.13"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "serde"
-version = "1.0.164"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.106",
+]
[[package]]
name = "syn"
@@ -241,6 +258,17 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "syn"
+version = "2.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
[[package]]
name = "tap"
version = "1.0.1"
@@ -249,15 +277,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
+version = "0.11.1+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wyz"
@@ -267,3 +295,23 @@ checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
dependencies = [
"tap",
]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.106",
+]
diff --git a/Cargo.toml b/Cargo.toml
index 4b703c3..2999968 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,3 +3,11 @@ members = [
"little_learner",
"little_learner_app"
]
+resolver = "3"
+
+[workspace.package]
+version = "0.1.0"
+edition = "2024"
+
+[workspace.metadata.crane]
+name = "little_learner"
diff --git a/flake.lock b/flake.lock
index f3f7ab2..a73111f 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,44 +1,30 @@
{
"nodes": {
- "crate2nix": {
- "flake": false,
+ "crane": {
"locked": {
- "lastModified": 1678820090,
- "narHash": "sha256-4FFeonajXNqiSP0PqUlC1wmTyPC8SX6SthEvgRjMupw=",
- "owner": "kolloch",
- "repo": "crate2nix",
- "rev": "4fd826e37bec90dfe26ca16cb6e632c617cc7c0d",
+ "lastModified": 1757183466,
+ "narHash": "sha256-kTdCCMuRE+/HNHES5JYsbRHmgtr+l9mOtf5dpcMppVc=",
+ "owner": "ipetkov",
+ "repo": "crane",
+ "rev": "d599ae4847e7f87603e7082d73ca673aa93c916d",
"type": "github"
},
"original": {
- "owner": "kolloch",
- "repo": "crate2nix",
- "type": "github"
- }
- },
- "flake-compat": {
- "flake": false,
- "locked": {
- "lastModified": 1673956053,
- "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
- "owner": "edolstra",
- "repo": "flake-compat",
- "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
- "type": "github"
- },
- "original": {
- "owner": "edolstra",
- "repo": "flake-compat",
+ "owner": "ipetkov",
+ "repo": "crane",
"type": "github"
}
},
"flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
"locked": {
- "lastModified": 1659877975,
- "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@@ -49,11 +35,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1679705136,
- "narHash": "sha256-MDlZUR7wJ3PlPtqwwoGQr3euNOe0vdSSteVVOef7tBY=",
+ "lastModified": 1757068644,
+ "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "8f40f2f90b9c9032d1b824442cfbbe0dbabd0dbd",
+ "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9",
"type": "github"
},
"original": {
@@ -63,42 +49,26 @@
"type": "github"
}
},
- "nixpkgs_2": {
- "locked": {
- "lastModified": 1679734080,
- "narHash": "sha256-z846xfGLlon6t9lqUzlNtBOmsgQLQIZvR6Lt2dImk1M=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "dbf5322e93bcc6cfc52268367a8ad21c09d76fea",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixpkgs-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
"root": {
"inputs": {
- "crate2nix": "crate2nix",
- "flake-compat": "flake-compat",
+ "crane": "crane",
+ "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
- "rust-overlay": "rust-overlay",
- "utils": "utils"
+ "rust-overlay": "rust-overlay"
}
},
"rust-overlay": {
"inputs": {
- "flake-utils": "flake-utils",
- "nixpkgs": "nixpkgs_2"
+ "nixpkgs": [
+ "nixpkgs"
+ ]
},
"locked": {
- "lastModified": 1679106165,
- "narHash": "sha256-03Opt2yu4E/AIFjvlgib0/nhMn6B4B/t/nvwS2bzOGw=",
+ "lastModified": 1757298987,
+ "narHash": "sha256-yuFSw6fpfjPtVMmym51ozHYpJQ7SzVOTkk7tUv2JA0U=",
"owner": "oxalica",
"repo": "rust-overlay",
- "rev": "7313c06ac334d6262ddfe30a38b3abc3da6bd565",
+ "rev": "cfd63776bde44438ff2936f0c9194c79dd407a5f",
"type": "github"
},
"original": {
@@ -107,18 +77,18 @@
"type": "github"
}
},
- "utils": {
+ "systems": {
"locked": {
- "lastModified": 1678901627,
- "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
- "owner": "numtide",
- "repo": "flake-utils",
+ "owner": "nix-systems",
+ "repo": "default",
"type": "github"
}
}
diff --git a/flake.nix b/flake.nix
index 363782e..77bd2bb 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,109 +3,106 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
- utils.url = "github:numtide/flake-utils";
- rust-overlay.url = "github:oxalica/rust-overlay";
- crate2nix = {
- url = "github:kolloch/crate2nix";
- flake = false;
+ flake-utils.url = "github:numtide/flake-utils";
+ rust-overlay = {
+ url = "github:oxalica/rust-overlay";
+ inputs.nixpkgs.follows = "nixpkgs";
};
- flake-compat = {
- url = "github:edolstra/flake-compat";
- flake = false;
+ crane = {
+ url = "github:ipetkov/crane";
};
};
- outputs = {
- self,
- nixpkgs,
- utils,
- rust-overlay,
- crate2nix,
- ...
- }: let
- name = "little_learner_app";
- in
- utils.lib.eachDefaultSystem
- (
- system: let
- # Imports
+ outputs = { self, nixpkgs, flake-utils, rust-overlay, crane }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
pkgs = import nixpkgs {
inherit system;
- overlays = [
- rust-overlay.overlays.default
- (self: super: {
- # Because rust-overlay bundles multiple rust packages into one
- # derivation, specify that mega-bundle here, so that crate2nix
- # will use them automatically.
- rustc = self.rust-bin.nightly.latest.default;
- cargo = self.rust-bin.nightly.latest.default;
- })
+ overlays = [ (import rust-overlay) ];
+ };
+
+ rustToolchain = pkgs.rust-bin.nightly.latest.default;
+
+ craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
+
+ # Common build inputs for all derivations
+ commonArgs = {
+ src = pkgs.lib.cleanSourceWith { src = ./.; name = "source"; filter = path: type: (builtins.match ".*csv$" path != null || craneLib.filterCargoSources path type); };
+ strictDeps = true;
+
+ buildInputs = with pkgs; [
+ openssl
+ ];
+
+ nativeBuildInputs = with pkgs; [
+ pkg-config
];
};
- inherit
- (import "${crate2nix}/tools.nix" {inherit pkgs;})
- generatedCargoNix
- ;
- # Create the cargo2nix project
- project =
- pkgs.callPackage
- (generatedCargoNix {
- inherit name;
- src = ./.;
- })
- {
- # Individual crate overrides go here
- # Example: https://github.com/balsoft/simple-osd-daemons/blob/6f85144934c0c1382c7a4d3a2bbb80106776e270/flake.nix#L28-L50
- defaultCrateOverrides =
- pkgs.defaultCrateOverrides
- // {
- # The app crate itself is overriden here. Typically we
- # configure non-Rust dependencies (see below) here.
- ${name} = oldAttrs:
- {
- inherit buildInputs nativeBuildInputs;
- }
- // buildEnvVars;
- };
+ # Build just the cargo dependencies
+ cargoArtifacts = craneLib.buildDepsOnly commonArgs;
+
+ # Build the actual package
+ little_learner_app = craneLib.buildPackage (commonArgs // {
+ inherit cargoArtifacts;
+ });
+ in
+ {
+ packages = {
+ default = little_learner_app;
+ little_learner_app = little_learner_app;
+ };
+
+ apps.default = flake-utils.lib.mkApp {
+ drv = little_learner_app;
+ };
+
+ devShells = {
+ default = craneLib.devShell {
+ # Inherit the build inputs from commonArgs
+ buildInputs = commonArgs.buildInputs;
+ nativeBuildInputs = commonArgs.nativeBuildInputs;
+
+ # Additional dev tools
+ packages = with pkgs; [
+ rustToolchain
+ rust-analyzer
+ ];
+
+ RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
};
- # Configuration for the non-Rust dependencies
- buildInputs = with pkgs; [openssl.dev];
- nativeBuildInputs = with pkgs; [rustc cargo pkgconfig];
- buildEnvVars = {
- PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig";
- };
- in rec {
- packages.${name} = project.workspaceMembers.${name}.build;
+ ci = pkgs.mkShell {
+ buildInputs = commonArgs.buildInputs ++ ([
+ pkgs.nodePackages.markdown-link-check
+ pkgs.nixpkgs-fmt
+ pkgs.rustToolchain
+ ]);
- # `nix build`
- defaultPackage = packages.${name};
+ nativeBuildInputs = commonArgs.nativeBuildInputs;
- # `nix run`
- apps.${name} = utils.lib.mkApp {
- inherit name;
- drv = packages.${name};
+ RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
+ };
};
- defaultApp = apps.${name};
- # `nix develop`
- devShells = {
- ci =
- pkgs.mkShell {
- inherit nativeBuildInputs;
- buildInputs = [pkgs.nodePackages.markdown-link-check pkgs.alejandra] ++ buildInputs;
- RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
- }
- // buildEnvVars;
- default =
- pkgs.mkShell
- {
- inherit buildInputs nativeBuildInputs;
- RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
- }
- // buildEnvVars;
+ checks = {
+ inherit little_learner_app;
+
+ # Run cargo fmt check
+ fmt = craneLib.cargoFmt {
+ inherit (commonArgs) src;
+ };
+
+ # Run clippy
+ clippy = craneLib.cargoClippy (commonArgs // {
+ inherit cargoArtifacts;
+ cargoClippyExtraArgs = "--all-targets -- --deny warnings";
+ });
+
+ # Run tests
+ tests = craneLib.cargoTest (commonArgs // {
+ inherit cargoArtifacts;
+ });
};
- }
- );
+ });
}
diff --git a/little_learner/Cargo.toml b/little_learner/Cargo.toml
index 16221cc..79c6fd9 100644
--- a/little_learner/Cargo.toml
+++ b/little_learner/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "little_learner"
-version = "0.1.0"
-edition = "2021"
+version.workspace = true
+edition.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
diff --git a/little_learner/src/decider.rs b/little_learner/src/decider.rs
index 9b97a0b..e47a63b 100644
--- a/little_learner/src/decider.rs
+++ b/little_learner/src/decider.rs
@@ -7,11 +7,7 @@ pub(crate) fn rectify(x: A) -> A
where
A: Zero + PartialOrd,
{
- if x < A::zero() {
- A::zero()
- } else {
- x
- }
+ if x < A::zero() { A::zero() } else { x }
}
fn linear(
diff --git a/little_learner/src/gradient_descent.rs b/little_learner/src/gradient_descent.rs
index 23bb89a..b8a47cf 100644
--- a/little_learner/src/gradient_descent.rs
+++ b/little_learner/src/gradient_descent.rs
@@ -1,4 +1,4 @@
-use crate::auto_diff::{grad, Differentiable, RankedDifferentiable};
+use crate::auto_diff::{Differentiable, RankedDifferentiable, grad};
use crate::hyper;
use crate::loss::l2_loss_2;
use crate::predictor::Predictor;
@@ -139,8 +139,8 @@ mod tests {
use crate::scalar::Scalar;
use crate::traits::Zero;
use ordered_float::NotNan;
- use rand::rngs::StdRng;
use rand::SeedableRng;
+ use rand::rngs::StdRng;
#[test]
fn test_iterate() {
diff --git a/little_learner/src/lib.rs b/little_learner/src/lib.rs
index 3cb333e..16e5e98 100644
--- a/little_learner/src/lib.rs
+++ b/little_learner/src/lib.rs
@@ -1,6 +1,5 @@
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]
-#![feature(array_methods)]
#![feature(closure_lifetime_binder)]
pub mod auto_diff;
diff --git a/little_learner/src/scalar.rs b/little_learner/src/scalar.rs
index 72ebc88..9bb966e 100644
--- a/little_learner/src/scalar.rs
+++ b/little_learner/src/scalar.rs
@@ -2,7 +2,7 @@ use crate::traits::{Exp, One, Sqrt, Zero};
use core::hash::Hash;
use std::cmp::Ordering;
use std::{
- collections::{hash_map::Entry, HashMap},
+ collections::{HashMap, hash_map::Entry},
fmt::Display,
iter::Sum,
ops::{Add, AddAssign, Div, Mul, Neg, Sub},
@@ -356,7 +356,7 @@ where
#[cfg(test)]
mod test_loss {
- use crate::auto_diff::{grad, Differentiable, RankedDifferentiable};
+ use crate::auto_diff::{Differentiable, RankedDifferentiable, grad};
use crate::scalar::Scalar;
use crate::traits::Sqrt;
use ordered_float::NotNan;
diff --git a/little_learner_app/Cargo.toml b/little_learner_app/Cargo.toml
index 33ae039..7413e52 100644
--- a/little_learner_app/Cargo.toml
+++ b/little_learner_app/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "little_learner_app"
-version = "0.1.0"
-edition = "2021"
+version.workspace = true
+edition.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
diff --git a/little_learner_app/src/iris.rs b/little_learner_app/src/iris.rs
index ea00024..ae3daa0 100644
--- a/little_learner_app/src/iris.rs
+++ b/little_learner_app/src/iris.rs
@@ -92,7 +92,7 @@ impl Iris {
#[cfg(test)]
mod test {
- use crate::iris::{import, Iris, IrisType};
+ use crate::iris::{Iris, IrisType, import};
const EXPECTED_FIRST: Iris = Iris {
class: IrisType::Setosa,
--
2.51.0
From 166f4bf4b95d18d97b3bced41f338659a3272a48 Mon Sep 17 00:00:00 2001
From: Smaug123 <3138005+Smaug123@users.noreply.github.com>
Date: Mon, 8 Sep 2025 23:18:44 +0100
Subject: [PATCH 2/5] Modernise
---
flake.nix | 16 ++++++++++------
little_learner/src/auto_diff.rs | 7 +++----
little_learner/src/block.rs | 1 +
3 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/flake.nix b/flake.nix
index 77bd2bb..e2803fb 100644
--- a/flake.nix
+++ b/flake.nix
@@ -27,7 +27,11 @@
# Common build inputs for all derivations
commonArgs = {
- src = pkgs.lib.cleanSourceWith { src = ./.; name = "source"; filter = path: type: (builtins.match ".*csv$" path != null || craneLib.filterCargoSources path type); };
+ src = pkgs.lib.cleanSourceWith {
+ src = ./.;
+ name = "source";
+ filter = path: type: (builtins.match ".*csv$" path != null || craneLib.filterCargoSources path type);
+ };
strictDeps = true;
buildInputs = with pkgs; [
@@ -64,20 +68,20 @@
nativeBuildInputs = commonArgs.nativeBuildInputs;
# Additional dev tools
- packages = with pkgs; [
+ packages = [
rustToolchain
- rust-analyzer
+ pkgs.rust-analyzer
];
RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
};
ci = pkgs.mkShell {
- buildInputs = commonArgs.buildInputs ++ ([
+ buildInputs = commonArgs.buildInputs ++ [
pkgs.nodePackages.markdown-link-check
pkgs.nixpkgs-fmt
- pkgs.rustToolchain
- ]);
+ rustToolchain
+ ];
nativeBuildInputs = commonArgs.nativeBuildInputs;
diff --git a/little_learner/src/auto_diff.rs b/little_learner/src/auto_diff.rs
index eede557..0ba0870 100644
--- a/little_learner/src/auto_diff.rs
+++ b/little_learner/src/auto_diff.rs
@@ -727,10 +727,10 @@ impl RankedDifferentiableTagged {
}
}
- pub fn map2_tagged<'a, 'b, B, C, Tag2, Tag3, F>(
+ pub fn map2_tagged<'a, B, C, Tag2, Tag3, F>(
self: &'a RankedDifferentiableTagged,
other: &'a RankedDifferentiableTagged,
- f: &'b mut F,
+ f: &mut F,
) -> RankedDifferentiableTagged
where
F: FnMut(&Scalar, Tag, &Scalar, Tag2) -> (Scalar, Tag3),
@@ -843,8 +843,7 @@ where
F: FnMut(
&[DifferentiableTagged; PARAM_RANK],
) -> RankedDifferentiableTagged,
- A: ?Sized
- + Clone
+ A: Clone
+ Hash
+ AddAssign
+ Add