diff --git a/.github/workflows/check-shell.yml b/.github/workflows/check-shell.yml index 18ec9780b56b9..316813879e81c 100644 --- a/.github/workflows/check-shell.yml +++ b/.github/workflows/check-shell.yml @@ -4,7 +4,7 @@ on: pull_request_target: paths: - 'shell.nix' - - './ci/**' + - 'ci/**' permissions: {} diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 6db53e64e92c4..c830dc6e7a110 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -13743,7 +13743,6 @@ github = "matthewpi"; githubId = 26559841; name = "Matthew Penner"; - keys = [ { fingerprint = "5118 F1CC B7B0 6C17 4DD1 5267 3131 1906 AD4C F6D6"; } ]; }; matthiasbenaets = { email = "matthias.benaets@gmail.com"; @@ -21203,12 +21202,6 @@ githubId = 1694705; name = "Sam Stites"; }; - stnley = { - email = "michael@stnley.io"; - github = "stnley"; - githubId = 64174376; - name = "Michael Stanley"; - }; strager = { email = "strager.nds@gmail.com"; github = "strager"; diff --git a/nixos/doc/manual/release-notes/rl-2505.section.md b/nixos/doc/manual/release-notes/rl-2505.section.md index 83ad39e636df4..83ec8b2de680f 100644 --- a/nixos/doc/manual/release-notes/rl-2505.section.md +++ b/nixos/doc/manual/release-notes/rl-2505.section.md @@ -14,6 +14,8 @@ - [Kimai](https://www.kimai.org/), a web-based multi-user time-tracking application. Available as [services.kimai](option.html#opt-services.kimai). +- [Omnom](https://github.com/asciimoo/omnom), a webpage bookmarking and snapshotting service. Available as [services.omnom](options.html#opt-services.omnom.enable). + - [Amazon CloudWatch Agent](https://github.com/aws/amazon-cloudwatch-agent), the official telemetry collector for AWS CloudWatch and AWS X-Ray. Available as [services.amazon-cloudwatch-agent](#opt-services.amazon-cloudwatch-agent.enable). - [agorakit](https://github.com/agorakit/agorakit), an organization tool for citizens' collectives. Available with [services.agorakit](#opt-services.agorakit.enable). @@ -49,6 +51,8 @@ [official website](https://www.nerdfonts.com/font-downloads) as the titles in preview images, with the "Nerd Font" suffix and any whitespaces trimmed. +- `gkraken` software and `hardware.gkraken.enable` option have been removed, use `coolercontrol` via `programs.coolercontrol.enable` option instead. + - the notmuch vim plugin now lives in a separate output of the `notmuch` package. Installing `notmuch` will not bring the notmuch vim package anymore, add `vimPlugins.notmuch-vim` to your (Neo)vim configuration if you want the diff --git a/nixos/modules/hardware/gkraken.nix b/nixos/modules/hardware/gkraken.nix deleted file mode 100644 index 90b0069e80c8a..0000000000000 --- a/nixos/modules/hardware/gkraken.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.hardware.gkraken; -in -{ - options.hardware.gkraken = { - enable = lib.mkEnableOption "gkraken's udev rules for NZXT AIO liquid coolers"; - }; - - config = lib.mkIf cfg.enable { - services.udev.packages = with pkgs; [ - gkraken - ]; - }; -} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index fdda9fad8ca61..1d6f11953e469 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -65,7 +65,6 @@ ./hardware/digitalbitbox.nix ./hardware/flipperzero.nix ./hardware/flirc.nix - ./hardware/gkraken.nix ./hardware/glasgow.nix ./hardware/gpgsmartcards.nix ./hardware/graphics.nix diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index c705966b6968d..e932353f89718 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -33,6 +33,10 @@ in systemd-logind API). Instead of using the module you can now simply add the brightnessctl package to environment.systemPackages. '') + (mkRemovedOptionModule [ "hardware" "gkraken" "enable" ] '' + gkraken was deprecated by coolercontrol and thus removed from nixpkgs. + Consider using programs.coolercontrol instead. + '') (mkRemovedOptionModule [ "hardware" "u2f" ] '' The U2F modules module was removed, as all it did was adding the udev rules from libu2f-host to the system. Udev gained native support diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix index 715425b0dc6dd..8ac6fda6a8756 100644 --- a/nixos/modules/system/boot/networkd.nix +++ b/nixos/modules/system/boot/networkd.nix @@ -672,10 +672,12 @@ let "IPv6AcceptRA" "IPv6DuplicateAddressDetection" "IPv6HopLimit" + "IPv6RetransmissionTimeSec" "IPv4ReversePathFilter" "IPv4AcceptLocal" "IPv4RouteLocalnet" "IPv4ProxyARP" + "IPv4ProxyARPPrivateVLAN" "IPv6ProxyNDP" "IPv6ProxyNDPAddress" "IPv6SendRA" @@ -726,10 +728,12 @@ let (assertMinimum "IPv6DuplicateAddressDetection" 0) (assertInt "IPv6HopLimit") (assertMinimum "IPv6HopLimit" 0) + (assertInt "IPv6RetransmissionTimeSec") (assertValueOneOf "IPv4ReversePathFilter" ["no" "strict" "loose"]) (assertValueOneOf "IPv4AcceptLocal" boolValues) (assertValueOneOf "IPv4RouteLocalnet" boolValues) (assertValueOneOf "IPv4ProxyARP" boolValues) + (assertValueOneof "IPv4ProxyARPPrivateVLAN" boolValues) (assertValueOneOf "IPv6ProxyNDP" boolValues) (assertValueOneOf "IPv6SendRA" boolValues) (assertValueOneOf "DHCPPrefixDelegation" boolValues) @@ -776,6 +780,7 @@ let "Priority" "IncomingInterface" "OutgoingInterface" + "L3MasterDevice" "SourcePort" "DestinationPort" "IPProtocol" @@ -790,6 +795,7 @@ let (assertRange "TypeOfService" 0 255) (assertRangeWithOptionalMask "FirewallMark" 1 4294967295) (assertInt "Priority") + (assertValueOneOf "L3MasterDevice" boolValues) (assertPortOrPortRange "SourcePort") (assertPortOrPortRange "DestinationPort") (assertValueOneOf "InvertRule" boolValues) @@ -1033,6 +1039,7 @@ let "BootServerName" "BootFilename" "IPv6OnlyPreferredSec" + "PersistLeases" ]) (assertInt "PoolOffset") (assertMinimum "PoolOffset" 0) @@ -1047,6 +1054,7 @@ let (assertValueOneOf "EmitRouter" boolValues) (assertValueOneOf "EmitTimezone" boolValues) (assertValueOneOf "BindToInterface" boolValues) + (assertValueOneOf "PersistLeases" boolValues) ]; sectionIPv6SendRA = checkUnitConfig "IPv6SendRA" [ diff --git a/pkgs/applications/networking/browsers/librewolf/src.json b/pkgs/applications/networking/browsers/librewolf/src.json index 6b0dbdde7a830..9fb2480943df0 100644 --- a/pkgs/applications/networking/browsers/librewolf/src.json +++ b/pkgs/applications/networking/browsers/librewolf/src.json @@ -1,11 +1,11 @@ { - "packageVersion": "132.0.2-1", + "packageVersion": "133.0-1", "source": { - "rev": "132.0.2-1", - "sha256": "7DB0QSQHNRw991yRR5+/Oo4fpXCR/Zklxb7ILRIH0WM=" + "rev": "133.0-1", + "sha256": "1xf7gx3xm3c7dhch9gwpb0xp11lcyim1nrbm8sjljxdcs7iq9jy4" }, "firefox": { - "version": "132.0.2", - "sha512": "nqldn7GpQaxaW1DaZ+Ik88z4xAHybLYbt0rX9OHocG1GnEtjJXFPLLnN9QwycQN31ryhjdZbVdssOe8rJ6V/rg==" + "version": "133.0", + "sha512": "b16f9898bee4121914caef48d4f7f44bf9d69aee168586b02bf1b4f4197844fd10179e1b63b273f52929fb348030df36328f24993cd666969da4ddc82562a90c" } } diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix index c19df29375399..80c5c79dea91f 100644 --- a/pkgs/build-support/docker/default.nix +++ b/pkgs/build-support/docker/default.nix @@ -919,10 +919,19 @@ rec { , includeStorePaths ? true , includeNixDB ? false , passthru ? {} - , + , # Pipeline used to produce docker layers. If not set, popularity contest + # algorithm is used. If set, maxLayers is ignored as the author of the + # pipeline can use one of the available functions (like "limit_layers") + # to control the amount of layers. + # See: pkgs/build-support/flatten-references-graph/src/flatten_references_graph/pipe.py + # for available functions, and it's test for how to use them. + # WARNING!! this interface is highly experimental and subject to change. + layeringPipeline ? null + , # Enables debug logging for the layering pipeline. + debug ? false }: assert - (lib.assertMsg (maxLayers > 1) + (lib.assertMsg (layeringPipeline == null -> maxLayers > 1) "the maxLayers argument of dockerTools.buildLayeredImage function must be greather than 1 (current value: ${toString maxLayers})"); assert (lib.assertMsg (enableFakechroot -> !stdenv.hostPlatform.isDarwin) '' @@ -999,18 +1008,23 @@ rec { ''; }; - closureRoots = lib.optionals includeStorePaths /* normally true */ ( - [ baseJson customisationLayer ] - ); - overallClosure = writeText "closure" (lib.concatStringsSep " " closureRoots); - - # These derivations are only created as implementation details of docker-tools, - # so they'll be excluded from the created images. - unnecessaryDrvs = [ baseJson overallClosure customisationLayer ]; + layersJsonFile = buildPackages.dockerMakeLayers { + inherit debug; + closureRoots = optionals includeStorePaths [ baseJson customisationLayer ]; + excludePaths = [ baseJson customisationLayer ]; + pipeline = + if layeringPipeline != null + then layeringPipeline + else import + ./popularity-contest-layering-pipeline.nix + { inherit lib jq runCommand; } + { inherit fromImage maxLayers; } + ; + }; conf = runCommand "${baseName}-conf.json" { - inherit fromImage maxLayers created mtime uid gid uname gname; + inherit fromImage created mtime uid gid uname gname layersJsonFile; imageName = lib.toLower name; preferLocalBuild = true; passthru.imageTag = @@ -1018,7 +1032,6 @@ rec { then tag else lib.head (lib.strings.splitString "-" (baseNameOf (builtins.unsafeDiscardStringContext conf.outPath))); - paths = buildPackages.referencesByPopularity overallClosure; nativeBuildInputs = [ jq ]; } '' ${if (tag == null) then '' @@ -1038,54 +1051,7 @@ rec { mtime="$(date -Iseconds -d "$mtime")" fi - paths() { - cat $paths ${lib.concatMapStringsSep " " - (path: "| (grep -v ${path} || true)") - unnecessaryDrvs} - } - - # Compute the number of layers that are already used by a potential - # 'fromImage' as well as the customization layer. Ensure that there is - # still at least one layer available to store the image contents. - usedLayers=0 - - # subtract number of base image layers - if [[ -n "$fromImage" ]]; then - (( usedLayers += $(tar -xOf "$fromImage" manifest.json | jq '.[0].Layers | length') )) - fi - - # one layer will be taken up by the customisation layer - (( usedLayers += 1 )) - - if ! (( $usedLayers < $maxLayers )); then - echo >&2 "Error: usedLayers $usedLayers layers to store 'fromImage' and" \ - "'extraCommands', but only maxLayers=$maxLayers were" \ - "allowed. At least 1 layer is required to store contents." - exit 1 - fi - availableLayers=$(( maxLayers - usedLayers )) - - # Create $maxLayers worth of Docker Layers, one layer per store path - # unless there are more paths than $maxLayers. In that case, create - # $maxLayers-1 for the most popular layers, and smush the remainaing - # store paths in to one final layer. - # - # The following code is fiddly w.r.t. ensuring every layer is - # created, and that no paths are missed. If you change the - # following lines, double-check that your code behaves properly - # when the number of layers equals: - # maxLayers-1, maxLayers, and maxLayers+1, 0 - paths | - jq -sR ' - rtrimstr("\n") | split("\n") - | (.[:$maxLayers-1] | map([.])) + [ .[$maxLayers-1:] ] - | map(select(length > 0)) - ' \ - --argjson maxLayers "$availableLayers" > store_layers.json - - # The index on $store_layers is necessary because the --slurpfile - # automatically reads the file as an array. - cat ${baseJson} | jq ' + jq ' . + { "store_dir": $store_dir, "from_image": $from_image, @@ -1101,7 +1067,7 @@ rec { } ' --arg store_dir "${storeDir}" \ --argjson from_image ${if fromImage == null then "null" else "'\"${fromImage}\"'"} \ - --slurpfile store_layers store_layers.json \ + --slurpfile store_layers "$layersJsonFile" \ --arg customisation_layer ${customisationLayer} \ --arg repo_tag "$imageName:$imageTag" \ --arg created "$created" \ @@ -1109,8 +1075,9 @@ rec { --arg uid "$uid" \ --arg gid "$gid" \ --arg uname "$uname" \ - --arg gname "$gname" | - tee $out + --arg gname "$gname" \ + ${baseJson} \ + | tee $out ''; result = runCommand "stream-${baseName}" diff --git a/pkgs/build-support/docker/make-layers.nix b/pkgs/build-support/docker/make-layers.nix new file mode 100644 index 0000000000000..0c13673ee7b0e --- /dev/null +++ b/pkgs/build-support/docker/make-layers.nix @@ -0,0 +1,50 @@ +{ + coreutils, + flattenReferencesGraph, + lib, + jq, + runCommand, +}: +{ + closureRoots, + excludePaths ? [ ], + # This could be a path to (or a derivation producing a path to) + # a json file containing the pipeline + pipeline ? [ ], + debug ? false, +}: +if closureRoots == [ ] then + builtins.toFile "docker-layers-empty" "[]" +else + runCommand "docker-layers" + { + __structuredAttrs = true; + # graph, exclude_paths and pipeline are expected by the + # flatten_references_graph executable. + exportReferencesGraph.graph = closureRoots; + exclude_paths = excludePaths; + inherit pipeline; + nativeBuildInputs = [ + coreutils + flattenReferencesGraph + jq + ]; + } + '' + . .attrs.sh + + flatten_references_graph_arg=.attrs.json + + echo "pipeline: $pipeline" + + if jq -e '.pipeline | type == "string"' .attrs.json; then + jq '. + { "pipeline": $pipeline[0] }' \ + --slurpfile pipeline "$pipeline" \ + .attrs.json > flatten_references_graph_arg.json + + flatten_references_graph_arg=flatten_references_graph_arg.json + fi + + ${lib.optionalString debug "export DEBUG=True"} + flatten_references_graph "$flatten_references_graph_arg" > ''${outputs[out]} + '' diff --git a/pkgs/build-support/docker/popularity-contest-layering-pipeline.nix b/pkgs/build-support/docker/popularity-contest-layering-pipeline.nix new file mode 100644 index 0000000000000..f4d77d78129c7 --- /dev/null +++ b/pkgs/build-support/docker/popularity-contest-layering-pipeline.nix @@ -0,0 +1,34 @@ +{ + lib, + runCommand, + jq, +}: +{ + maxLayers, + fromImage ? null, +}: +runCommand "popularity-contest-layering-pipeline.json" { inherit maxLayers; } '' + # Compute the number of layers that are already used by a potential + # 'fromImage' as well as the customization layer. Ensure that there is + # still at least one layer available to store the image contents. + # one layer will be taken up by the customisation layer + usedLayers=1 + + ${lib.optionalString (fromImage != null) '' + # subtract number of base image layers + baseImageLayersCount=$(tar -xOf "${fromImage}" manifest.json | ${lib.getExe jq} '.[0].Layers | length') + + (( usedLayers += baseImageLayersCount )) + ''} + + if ! (( $usedLayers < $maxLayers )); then + echo >&2 "Error: usedLayers $usedLayers layers to store 'fromImage' and" \ + "'extraCommands', but only maxLayers=$maxLayers were" \ + "allowed. At least 1 layer is required to store contents." + exit 1 + fi + availableLayers=$(( maxLayers - usedLayers )) + + # Produce pipeline which uses popularity_contest algo. + echo '[["popularity_contest"],["limit_layers",'$availableLayers']]' > $out +'' diff --git a/pkgs/by-name/al/alpaca/package.nix b/pkgs/by-name/al/alpaca/package.nix index e338cf83b54e2..5e98d5eb20c35 100644 --- a/pkgs/by-name/al/alpaca/package.nix +++ b/pkgs/by-name/al/alpaca/package.nix @@ -18,14 +18,14 @@ python3Packages.buildPythonApplication rec { pname = "alpaca"; - version = "2.8.0"; + version = "2.9.0"; pyproject = false; # Built with meson src = fetchFromGitHub { owner = "Jeffser"; repo = "Alpaca"; rev = "refs/tags/${version}"; - hash = "sha256-Wk7a5/fO87yl/TolzoonSRLkc2TGEZKgVCgXcUuhjQI="; + hash = "sha256-ionioPA69haDIyXjqU84nuTNtI32jOnhd6oCTRI6vcA="; }; nativeBuildInputs = [ diff --git a/pkgs/by-name/cr/cruft/package.nix b/pkgs/by-name/cr/cruft/package.nix new file mode 100644 index 0000000000000..496afcc4939da --- /dev/null +++ b/pkgs/by-name/cr/cruft/package.nix @@ -0,0 +1,62 @@ +{ + python3Packages, + fetchFromGitHub, + lib, +}: +python3Packages.buildPythonApplication rec { + pname = "cruft"; + version = "2.15.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "cruft"; + repo = "cruft"; + rev = version; + hash = "sha256-qIVyNMoI3LsoOV/6XPa60Y1vTRvkezesF7wF9WVSLGk="; + }; + + build-system = with python3Packages; [ + poetry-core + ]; + + nativeCheckInputs = with python3Packages; [ + pytest7CheckHook + ]; + + dependencies = with python3Packages; [ + click + cookiecutter + gitpython + typer + ]; + + pythonImportsCheck = "cruft"; + + # Unfortunately, some tests require internet access to fully clone + # https://github.com/cruft/cookiecutter-test (including all branches) + # which is possible to package, but is annoying and may be not always pure + # + # See https://discourse.nixos.org/t/keep-git-folder-in-when-fetching-a-git-repo/8590/6 + # + # There are only 13 tests which do not require internet access on moment of the writing. + # But some tests are better than none, right? + disabledTests = [ + "test_get_diff_with_add" + "test_get_diff_with_delete" + "test_get_diff_with_unicode" + ]; + + disabledTestPaths = [ + "tests/test_api.py" # only 2 tests pass, and 24 fail. I am going to ignore entire file + "tests/test_cli.py" + ]; + + meta = { + changelog = "https://github.com/cruft/cruft/blob/${version}/CHANGELOG.md"; + description = "Allows you to maintain all the necessary boilerplate for building projects"; + homepage = "https://github.com/cruft/cruft"; + license = lib.licenses.mit; + mainProgram = "cruft"; + maintainers = with lib.maintainers; [ perchun ]; + }; +} diff --git a/pkgs/by-name/cw/cwtch-ui/package.nix b/pkgs/by-name/cw/cwtch-ui/package.nix new file mode 100644 index 0000000000000..7a05aa76b53e1 --- /dev/null +++ b/pkgs/by-name/cw/cwtch-ui/package.nix @@ -0,0 +1,62 @@ +{ + cwtch, + fetchgit, + flutter, + lib, + tor, + zenity, +}: +let + runtimeBinDependencies = [ + tor + zenity + ]; +in +flutter.buildFlutterApplication rec { + pname = "cwtch-ui"; + version = "1.15.1"; + # This Gitea instance has archive downloads disabled, so: fetchgit + src = fetchgit { + url = "https://git.openprivacy.ca/cwtch.im/cwtch-ui"; + rev = "v${version}"; + hash = "sha256-+UtWhQMhm0UjY0kx3B5TwcBFhUfJma3rpeYls4XWy7I="; + }; + + # NOTE: The included pubspec.json does not exactly match the upstream + # pubspec.lock. With Flutter 3.24, a newer version of material_color_utilities + # is required than the upstream locked version. From a checkout of cwtch-ui + # 1.15.1, I ran `flutter pub upgrade material_color_utilities` on 2024-10-17. + # This upgraded material_color_utilities and its dependencies. + pubspecLock = lib.importJSON ./pubspec.json; + gitHashes = { + flutter_gherkin = "sha256-Y8tR84kkczQPBwh7cGhPFAAqrMZKRfGp/02huPaaQZg="; + }; + + flutterBuildFlags = [ + "--dart-define" + "BUILD_VER=${version}" + "--dart-define" + "BUILD_DATE=1980-01-01-00:00" + ]; + + # These things are added to LD_LIBRARY_PATH, but not PATH + runtimeDependencies = [ cwtch ]; + + extraWrapProgramArgs = "--prefix PATH : ${lib.makeBinPath runtimeBinDependencies}"; + + postInstall = '' + mkdir -p $out/share/applications + substitute linux/cwtch.template.desktop "$out/share/applications/cwtch.desktop" \ + --replace-fail PREFIX "$out" + ''; + + meta = { + description = "Messaging app built on the cwtch decentralized, privacy-preserving, multi-party messaging protocol"; + homepage = "https://cwtch.im/"; + changelog = "https://docs.cwtch.im/changelog"; + license = lib.licenses.mit; + mainProgram = "cwtch"; + platforms = [ "x86_64-linux" ]; + maintainers = [ lib.maintainers.gmacon ]; + }; +} diff --git a/pkgs/by-name/cw/cwtch-ui/pubspec.json b/pkgs/by-name/cw/cwtch-ui/pubspec.json new file mode 100644 index 0000000000000..77c46b3021386 --- /dev/null +++ b/pkgs/by-name/cw/cwtch-ui/pubspec.json @@ -0,0 +1,1245 @@ +{ + "packages": { + "_fe_analyzer_shared": { + "dependency": "transitive", + "description": { + "name": "_fe_analyzer_shared", + "sha256": "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "67.0.0" + }, + "analyzer": { + "dependency": "transitive", + "description": { + "name": "analyzer", + "sha256": "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "6.4.1" + }, + "archive": { + "dependency": "transitive", + "description": { + "name": "archive", + "sha256": "cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.6.1" + }, + "args": { + "dependency": "transitive", + "description": { + "name": "args", + "sha256": "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.5.0" + }, + "async": { + "dependency": "transitive", + "description": { + "name": "async", + "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.11.0" + }, + "boolean_selector": { + "dependency": "transitive", + "description": { + "name": "boolean_selector", + "sha256": "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.1" + }, + "build": { + "dependency": "transitive", + "description": { + "name": "build", + "sha256": "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.4.1" + }, + "build_config": { + "dependency": "transitive", + "description": { + "name": "build_config", + "sha256": "bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.1.1" + }, + "build_daemon": { + "dependency": "transitive", + "description": { + "name": "build_daemon", + "sha256": "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.0.2" + }, + "build_resolvers": { + "dependency": "transitive", + "description": { + "name": "build_resolvers", + "sha256": "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.4.2" + }, + "build_runner": { + "dependency": "direct dev", + "description": { + "name": "build_runner", + "sha256": "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.4.11" + }, + "build_runner_core": { + "dependency": "transitive", + "description": { + "name": "build_runner_core", + "sha256": "e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "7.3.1" + }, + "built_collection": { + "dependency": "transitive", + "description": { + "name": "built_collection", + "sha256": "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "5.1.1" + }, + "built_value": { + "dependency": "transitive", + "description": { + "name": "built_value", + "sha256": "c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "8.9.2" + }, + "characters": { + "dependency": "transitive", + "description": { + "name": "characters", + "sha256": "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.3.0" + }, + "checked_yaml": { + "dependency": "transitive", + "description": { + "name": "checked_yaml", + "sha256": "feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.0.3" + }, + "cli_util": { + "dependency": "transitive", + "description": { + "name": "cli_util", + "sha256": "c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.4.1" + }, + "clock": { + "dependency": "transitive", + "description": { + "name": "clock", + "sha256": "cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.1.1" + }, + "code_builder": { + "dependency": "transitive", + "description": { + "name": "code_builder", + "sha256": "f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.10.0" + }, + "collection": { + "dependency": "transitive", + "description": { + "name": "collection", + "sha256": "ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.18.0" + }, + "connectivity_plus": { + "dependency": "direct main", + "description": { + "path": "lib/third_party/connectivity_plus/connectivity_plus", + "relative": true + }, + "source": "path", + "version": "3.0.6" + }, + "connectivity_plus_platform_interface": { + "dependency": "transitive", + "description": { + "path": "lib/third_party/connectivity_plus/connectivity_plus_platform_interface", + "relative": true + }, + "source": "path", + "version": "1.2.4" + }, + "console": { + "dependency": "transitive", + "description": { + "name": "console", + "sha256": "e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.1.0" + }, + "convert": { + "dependency": "transitive", + "description": { + "name": "convert", + "sha256": "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.1.1" + }, + "crypto": { + "dependency": "direct main", + "description": { + "name": "crypto", + "sha256": "ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.0.3" + }, + "cupertino_icons": { + "dependency": "direct main", + "description": { + "name": "cupertino_icons", + "sha256": "ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.0.8" + }, + "dart_style": { + "dependency": "transitive", + "description": { + "name": "dart_style", + "sha256": "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.3.6" + }, + "dbus": { + "dependency": "direct main", + "description": { + "name": "dbus", + "sha256": "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.7.10" + }, + "fake_async": { + "dependency": "transitive", + "description": { + "name": "fake_async", + "sha256": "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.3.1" + }, + "ffi": { + "dependency": "direct main", + "description": { + "name": "ffi", + "sha256": "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.2" + }, + "file": { + "dependency": "transitive", + "description": { + "name": "file", + "sha256": "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "7.0.0" + }, + "file_picker": { + "dependency": "direct main", + "description": { + "name": "file_picker", + "sha256": "bdfa035a974a0c080576c4c8ed01cdf9d1b406a04c7daa05443ef0383a97bedc", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "5.3.4" + }, + "fixnum": { + "dependency": "transitive", + "description": { + "name": "fixnum", + "sha256": "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.1.0" + }, + "flutter": { + "dependency": "direct main", + "description": "flutter", + "source": "sdk", + "version": "0.0.0" + }, + "flutter_driver": { + "dependency": "transitive", + "description": "flutter", + "source": "sdk", + "version": "0.0.0" + }, + "flutter_gherkin": { + "dependency": "direct dev", + "description": { + "path": ".", + "ref": "main", + "resolved-ref": "f05e541bb23b15f140f5afc3d671ed1a11948297", + "url": "https://git.openprivacy.ca/openprivacy/flutter_gherkin" + }, + "source": "git", + "version": "3.0.0-rc.18" + }, + "flutter_local_notifications": { + "dependency": "direct main", + "description": { + "name": "flutter_local_notifications", + "sha256": "5f79a1be5e9fef9ddd7f494532d31851399099f9defc21ebcb1ae4539e8a37f1", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "14.1.5" + }, + "flutter_local_notifications_linux": { + "dependency": "transitive", + "description": { + "name": "flutter_local_notifications_linux", + "sha256": "33f741ef47b5f63cc7f78fe75eeeac7e19f171ff3c3df054d84c1e38bedb6a03", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.0.0+1" + }, + "flutter_local_notifications_platform_interface": { + "dependency": "transitive", + "description": { + "name": "flutter_local_notifications_platform_interface", + "sha256": "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "7.1.0" + }, + "flutter_localizations": { + "dependency": "direct main", + "description": "flutter", + "source": "sdk", + "version": "0.0.0" + }, + "flutter_plugin_android_lifecycle": { + "dependency": "transitive", + "description": { + "name": "flutter_plugin_android_lifecycle", + "sha256": "c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.0.20" + }, + "flutter_test": { + "dependency": "transitive", + "description": "flutter", + "source": "sdk", + "version": "0.0.0" + }, + "flutter_web_plugins": { + "dependency": "transitive", + "description": "flutter", + "source": "sdk", + "version": "0.0.0" + }, + "frontend_server_client": { + "dependency": "transitive", + "description": { + "name": "frontend_server_client", + "sha256": "f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.0.0" + }, + "fuchsia_remote_debug_protocol": { + "dependency": "transitive", + "description": "flutter", + "source": "sdk", + "version": "0.0.0" + }, + "get_it": { + "dependency": "transitive", + "description": { + "name": "get_it", + "sha256": "d85128a5dae4ea777324730dc65edd9c9f43155c109d5cc0a69cab74139fbac1", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "7.7.0" + }, + "gherkin": { + "dependency": "direct dev", + "description": { + "name": "gherkin", + "sha256": "c3e0c98b305a94ec8c015038529a1c8c6ea3b0953619514e76647407efb66d7f", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.1.0" + }, + "glob": { + "dependency": "direct main", + "description": { + "name": "glob", + "sha256": "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.2" + }, + "graphs": { + "dependency": "transitive", + "description": { + "name": "graphs", + "sha256": "aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.3.1" + }, + "http": { + "dependency": "transitive", + "description": { + "name": "http", + "sha256": "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.2.1" + }, + "http_multi_server": { + "dependency": "transitive", + "description": { + "name": "http_multi_server", + "sha256": "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.2.1" + }, + "http_parser": { + "dependency": "transitive", + "description": { + "name": "http_parser", + "sha256": "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.0.2" + }, + "image": { + "dependency": "transitive", + "description": { + "name": "image", + "sha256": "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.2.0" + }, + "integration_test": { + "dependency": "transitive", + "description": "flutter", + "source": "sdk", + "version": "0.0.0" + }, + "intl": { + "dependency": "direct main", + "description": { + "name": "intl", + "sha256": "d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.19.0" + }, + "io": { + "dependency": "transitive", + "description": { + "name": "io", + "sha256": "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.0.4" + }, + "js": { + "dependency": "transitive", + "description": { + "name": "js", + "sha256": "f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.6.7" + }, + "json_annotation": { + "dependency": "transitive", + "description": { + "name": "json_annotation", + "sha256": "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.9.0" + }, + "leak_tracker": { + "dependency": "transitive", + "description": { + "name": "leak_tracker", + "sha256": "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "10.0.5" + }, + "leak_tracker_flutter_testing": { + "dependency": "transitive", + "description": { + "name": "leak_tracker_flutter_testing", + "sha256": "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.0.5" + }, + "leak_tracker_testing": { + "dependency": "transitive", + "description": { + "name": "leak_tracker_testing", + "sha256": "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.0.1" + }, + "logging": { + "dependency": "transitive", + "description": { + "name": "logging", + "sha256": "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.2.0" + }, + "matcher": { + "dependency": "transitive", + "description": { + "name": "matcher", + "sha256": "d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.12.16+1" + }, + "material_color_utilities": { + "dependency": "transitive", + "description": { + "name": "material_color_utilities", + "sha256": "f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.11.1" + }, + "meta": { + "dependency": "transitive", + "description": { + "name": "meta", + "sha256": "bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.15.0" + }, + "mime": { + "dependency": "transitive", + "description": { + "name": "mime", + "sha256": "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.0.5" + }, + "msix": { + "dependency": "direct dev", + "description": { + "name": "msix", + "sha256": "519b183d15dc9f9c594f247e2d2339d855cf0eaacc30e19b128e14f3ecc62047", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.16.7" + }, + "nested": { + "dependency": "transitive", + "description": { + "name": "nested", + "sha256": "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.0.0" + }, + "package_config": { + "dependency": "transitive", + "description": { + "name": "package_config", + "sha256": "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.0" + }, + "package_info_plus": { + "dependency": "direct main", + "description": { + "name": "package_info_plus", + "sha256": "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.2.0" + }, + "package_info_plus_platform_interface": { + "dependency": "transitive", + "description": { + "name": "package_info_plus_platform_interface", + "sha256": "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.0.1" + }, + "path": { + "dependency": "direct main", + "description": { + "name": "path", + "sha256": "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.9.0" + }, + "path_provider": { + "dependency": "direct main", + "description": { + "name": "path_provider", + "sha256": "c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.3" + }, + "path_provider_android": { + "dependency": "transitive", + "description": { + "name": "path_provider_android", + "sha256": "bca87b0165ffd7cdb9cad8edd22d18d2201e886d9a9f19b4fb3452ea7df3a72a", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.2.6" + }, + "path_provider_foundation": { + "dependency": "transitive", + "description": { + "name": "path_provider_foundation", + "sha256": "f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.4.0" + }, + "path_provider_linux": { + "dependency": "transitive", + "description": { + "name": "path_provider_linux", + "sha256": "f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.2.1" + }, + "path_provider_platform_interface": { + "dependency": "transitive", + "description": { + "name": "path_provider_platform_interface", + "sha256": "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.2" + }, + "path_provider_windows": { + "dependency": "transitive", + "description": { + "name": "path_provider_windows", + "sha256": "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.2.1" + }, + "petitparser": { + "dependency": "transitive", + "description": { + "name": "petitparser", + "sha256": "c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "6.0.2" + }, + "platform": { + "dependency": "transitive", + "description": { + "name": "platform", + "sha256": "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.1.5" + }, + "plugin_platform_interface": { + "dependency": "transitive", + "description": { + "name": "plugin_platform_interface", + "sha256": "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.8" + }, + "pool": { + "dependency": "transitive", + "description": { + "name": "pool", + "sha256": "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.5.1" + }, + "process": { + "dependency": "transitive", + "description": { + "name": "process", + "sha256": "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "5.0.2" + }, + "provider": { + "dependency": "direct main", + "description": { + "name": "provider", + "sha256": "c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "6.1.2" + }, + "pub_semver": { + "dependency": "transitive", + "description": { + "name": "pub_semver", + "sha256": "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.4" + }, + "pubspec_parse": { + "dependency": "transitive", + "description": { + "name": "pubspec_parse", + "sha256": "c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.3.0" + }, + "qr": { + "dependency": "transitive", + "description": { + "name": "qr", + "sha256": "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.0.1" + }, + "qr_flutter": { + "dependency": "direct main", + "description": { + "name": "qr_flutter", + "sha256": "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "4.1.0" + }, + "screen_retriever": { + "dependency": "transitive", + "description": { + "name": "screen_retriever", + "sha256": "6ee02c8a1158e6dae7ca430da79436e3b1c9563c8cf02f524af997c201ac2b90", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.1.9" + }, + "scrollable_positioned_list": { + "dependency": "direct main", + "description": { + "name": "scrollable_positioned_list", + "sha256": "1b54d5f1329a1e263269abc9e2543d90806131aa14fe7c6062a8054d57249287", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.3.8" + }, + "shelf": { + "dependency": "transitive", + "description": { + "name": "shelf", + "sha256": "ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.4.1" + }, + "shelf_web_socket": { + "dependency": "transitive", + "description": { + "name": "shelf_web_socket", + "sha256": "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.0.0" + }, + "sky_engine": { + "dependency": "transitive", + "description": "flutter", + "source": "sdk", + "version": "0.0.99" + }, + "source_gen": { + "dependency": "transitive", + "description": { + "name": "source_gen", + "sha256": "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.5.0" + }, + "source_span": { + "dependency": "transitive", + "description": { + "name": "source_span", + "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.10.0" + }, + "stack_trace": { + "dependency": "transitive", + "description": { + "name": "stack_trace", + "sha256": "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.11.1" + }, + "stream_channel": { + "dependency": "transitive", + "description": { + "name": "stream_channel", + "sha256": "ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.2" + }, + "stream_transform": { + "dependency": "transitive", + "description": { + "name": "stream_transform", + "sha256": "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.0" + }, + "string_scanner": { + "dependency": "transitive", + "description": { + "name": "string_scanner", + "sha256": "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.2.0" + }, + "sync_http": { + "dependency": "transitive", + "description": { + "name": "sync_http", + "sha256": "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.3.1" + }, + "term_glyph": { + "dependency": "transitive", + "description": { + "name": "term_glyph", + "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.2.1" + }, + "test_api": { + "dependency": "transitive", + "description": { + "name": "test_api", + "sha256": "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.7.2" + }, + "timezone": { + "dependency": "transitive", + "description": { + "name": "timezone", + "sha256": "a6ccda4a69a442098b602c44e61a1e2b4bf6f5516e875bbf0f427d5df14745d5", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.9.3" + }, + "timing": { + "dependency": "transitive", + "description": { + "name": "timing", + "sha256": "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.0.1" + }, + "typed_data": { + "dependency": "transitive", + "description": { + "name": "typed_data", + "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.3.2" + }, + "url_launcher": { + "dependency": "direct main", + "description": { + "name": "url_launcher", + "sha256": "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "6.3.0" + }, + "url_launcher_android": { + "dependency": "transitive", + "description": { + "name": "url_launcher_android", + "sha256": "ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "6.3.3" + }, + "url_launcher_ios": { + "dependency": "transitive", + "description": { + "name": "url_launcher_ios", + "sha256": "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "6.3.0" + }, + "url_launcher_linux": { + "dependency": "transitive", + "description": { + "name": "url_launcher_linux", + "sha256": "ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.1.1" + }, + "url_launcher_macos": { + "dependency": "transitive", + "description": { + "name": "url_launcher_macos", + "sha256": "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.2.0" + }, + "url_launcher_platform_interface": { + "dependency": "transitive", + "description": { + "name": "url_launcher_platform_interface", + "sha256": "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.3.2" + }, + "url_launcher_web": { + "dependency": "transitive", + "description": { + "name": "url_launcher_web", + "sha256": "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.3.1" + }, + "url_launcher_windows": { + "dependency": "transitive", + "description": { + "name": "url_launcher_windows", + "sha256": "ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.1.1" + }, + "uuid": { + "dependency": "transitive", + "description": { + "name": "uuid", + "sha256": "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.0.7" + }, + "vector_math": { + "dependency": "transitive", + "description": { + "name": "vector_math", + "sha256": "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "2.1.4" + }, + "vm_service": { + "dependency": "transitive", + "description": { + "name": "vm_service", + "sha256": "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "14.2.5" + }, + "watcher": { + "dependency": "transitive", + "description": { + "name": "watcher", + "sha256": "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.1.0" + }, + "web": { + "dependency": "transitive", + "description": { + "name": "web", + "sha256": "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.5.1" + }, + "web_socket": { + "dependency": "transitive", + "description": { + "name": "web_socket", + "sha256": "24301d8c293ce6fe327ffe6f59d8fd8834735f0ec36e4fd383ec7ff8a64aa078", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.1.5" + }, + "web_socket_channel": { + "dependency": "transitive", + "description": { + "name": "web_socket_channel", + "sha256": "a2d56211ee4d35d9b344d9d4ce60f362e4f5d1aafb988302906bd732bc731276", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.0.0" + }, + "webdriver": { + "dependency": "transitive", + "description": { + "name": "webdriver", + "sha256": "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.0.3" + }, + "win32": { + "dependency": "transitive", + "description": { + "name": "win32", + "sha256": "a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "5.5.1" + }, + "win_toast": { + "dependency": "direct main", + "description": { + "name": "win_toast", + "sha256": "6349ef17a487d2ebf9caa51da1cb5a325f4cd7e5a601935ced456f3c00d1e64f", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.0.2" + }, + "window_manager": { + "dependency": "direct main", + "description": { + "name": "window_manager", + "sha256": "8699323b30da4cdbe2aa2e7c9de567a6abd8a97d9a5c850a3c86dcd0b34bbfbf", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "0.3.9" + }, + "xdg_directories": { + "dependency": "transitive", + "description": { + "name": "xdg_directories", + "sha256": "faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "1.0.4" + }, + "xml": { + "dependency": "transitive", + "description": { + "name": "xml", + "sha256": "b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "6.5.0" + }, + "yaml": { + "dependency": "direct main", + "description": { + "name": "yaml", + "sha256": "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5", + "url": "https://pub.dev" + }, + "source": "hosted", + "version": "3.1.2" + } + }, + "sdks": { + "dart": ">=3.4.0 <4.0.0", + "flutter": ">=3.22.0" + } +} diff --git a/pkgs/by-name/cw/cwtch/package.nix b/pkgs/by-name/cw/cwtch/package.nix new file mode 100644 index 0000000000000..bd0b0d836b488 --- /dev/null +++ b/pkgs/by-name/cw/cwtch/package.nix @@ -0,0 +1,52 @@ +{ + buildGoModule, + fetchgit, + lib, +}: +buildGoModule rec { + pname = "libcwtch"; + version = "0.1.3"; + # This Gitea instance has archive downloads disabled, so: fetchgit + src = fetchgit { + url = "https://git.openprivacy.ca/cwtch.im/autobindings.git"; + rev = "v${version}"; + hash = "sha256-Gp6JnyjKChB7w0fUHkreu81QRXQ3YdMb2ReD/VCkVOE="; + }; + + vendorHash = "sha256-UgG/yjupUFrfjPZ4E+OM1VsWi9MuMuHxcZ4yvz+q/Y0="; + overrideModAttrs = ( + old: { + preBuild = '' + make lib.go + ''; + } + ); + + postPatch = '' + substituteInPlace Makefile \ + --replace-fail '$(shell git describe --tags)' v${version} \ + --replace-fail '$(shell git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M)' 1980-01-01-00-00 + ''; + + buildPhase = '' + runHook preBuild + make linux + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + install -D build/linux/libCwtch.h -t $out/include + install -D build/linux/libCwtch.*.so $out/lib/libCwtch.so + runHook postInstall + ''; + + meta = { + description = "Decentralized, privacy-preserving, multi-party messaging protocol"; + homepage = "https://cwtch.im/"; + changelog = "https://docs.cwtch.im/changelog"; + license = lib.licenses.mit; + platforms = lib.platforms.linux; + maintainers = [ lib.maintainers.gmacon ]; + }; +} diff --git a/pkgs/by-name/em/emmet-language-server/package.nix b/pkgs/by-name/em/emmet-language-server/package.nix index bd7c142c61150..a41d6e24dea48 100644 --- a/pkgs/by-name/em/emmet-language-server/package.nix +++ b/pkgs/by-name/em/emmet-language-server/package.nix @@ -27,7 +27,7 @@ buildNpmPackage rec { homepage = "https://github.com/olrtg/emmet-language-server"; changelog = "https://github.com/olrtg/emmet-language-server/releases/tag/v${version}"; license = lib.licenses.mit; - maintainers = with lib.maintainers; [ stnley ]; + maintainers = [ ]; mainProgram = "emmet-language-server"; }; } diff --git a/pkgs/by-name/er/erigon/package.nix b/pkgs/by-name/er/erigon/package.nix index e8e5efd2452ee..bf65a3dce21bf 100644 --- a/pkgs/by-name/er/erigon/package.nix +++ b/pkgs/by-name/er/erigon/package.nix @@ -40,7 +40,7 @@ buildGoModule { # Enabling silkworm also breaks the build as it requires dynamically linked libraries. # If we need it in the future, we should consider packaging silkworm and silkworm-go # as depenedencies explicitly. - tags = "-tags=nosqlite,noboltdb,nosilkworm"; + tags = [ "nosqlite" "noboltdb" "nosilkworm" ]; passthru.updateScript = nix-update-script { }; diff --git a/pkgs/by-name/fl/flattenReferencesGraph/dev-shell.nix b/pkgs/by-name/fl/flattenReferencesGraph/dev-shell.nix new file mode 100644 index 0000000000000..fd04d00424a3e --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/dev-shell.nix @@ -0,0 +1,54 @@ +# Start this shell with: +# nix-shell path/to/root/of/nixpkgs -A flattenReferencesGraph.dev-shell +{ + mkShell, + callPackage, + python3Packages, +}: +let + helpers = callPackage (import ./helpers.nix) { }; +in +mkShell { + inputsFrom = [ (callPackage (import ./package.nix) { }) ]; + buildInputs = [ + helpers.format + helpers.lint + helpers.unittest + # This is needed to plot graphs when DEBUG_PLOT is set to True. + python3Packages.pycairo + # This can be used on linux to display the graphs. + # On other platforms the image viewer needs to be set with + # DEBUG_PLOT_IMAGE_VIEWER env var. + # pkgs.gwenview + ]; + shellHook = '' + echo ' + ********************************************************************** + ********************************************************************** + + Commands useful for development (should be executed from scr dir): + + + format + * formats all files in place using autopep8 + + lint + * lints all files using flake8 + + unittest + * runs all unit tests + + following env vars can be set to enable extra output in tests: + - DEBUG=True - enable debug logging + - DEBUG_PLOT=True - plot graphs processed by split_paths.py and + subcomponent.py + - DEBUG_PLOT_IMAGE_VIEWER=$PATH_OF_IMAGE_VIEWER_APP - app used to + display plots (default: gwenview) + - DEBUG_PLOT_SAVE_BASE_NAME=$SOME_NAME - if set, plots will be saved + to files instead of displayed with image viewer + + ********************************************************************** + ********************************************************************** + ' + ''; +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/helpers.nix b/pkgs/by-name/fl/flattenReferencesGraph/helpers.nix new file mode 100644 index 0000000000000..45e292b5af52e --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/helpers.nix @@ -0,0 +1,36 @@ +{ + bash, + writers, + python3Packages, +}: +let + writeCheckedBashBin = + name: + let + interpreter = "${bash}/bin/bash"; + in + writers.makeScriptWriter { + inherit interpreter; + check = "${interpreter} -n $1"; + } "/bin/${name}"; + + # Helpers used during build/development. + lint = writeCheckedBashBin "lint" '' + ${python3Packages.flake8}/bin/flake8 --show-source ''${@} + ''; + + unittest = writeCheckedBashBin "unittest" '' + if [ "$#" -eq 0 ]; then + set -- discover -p '*_test.py' + fi + + ${python3Packages.python}/bin/python -m unittest "''${@}" + ''; + + format = writeCheckedBashBin "format" '' + ${python3Packages.autopep8}/bin/autopep8 -r -i . "''${@}" + ''; +in +{ + inherit format lint unittest; +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/package.nix b/pkgs/by-name/fl/flattenReferencesGraph/package.nix new file mode 100644 index 0000000000000..9adb9a320e0c7 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/package.nix @@ -0,0 +1,38 @@ +{ + callPackage, + lib, + python3Packages, +}: +let + inherit (lib) fileset; + helpers = callPackage ./helpers.nix { }; + pythonPackages = python3Packages; +in +pythonPackages.buildPythonApplication { + version = "0.1.0"; + pname = "flatten-references-graph"; + + src = fileset.toSource { + root = ./src; + fileset = fileset.unions [ + ./src/.flake8 + ./src/flatten_references_graph + ./src/setup.py + ]; + }; + + propagatedBuildInputs = with pythonPackages; [ + igraph + toolz + ]; + + doCheck = true; + + checkPhase = '' + ${helpers.unittest}/bin/unittest + ''; + + passthru = { + dev-shell = callPackage ./dev-shell.nix { }; + }; +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/.flake8 b/pkgs/by-name/fl/flattenReferencesGraph/src/.flake8 new file mode 100644 index 0000000000000..43ab3f7273e30 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/.flake8 @@ -0,0 +1,4 @@ +[flake8] +max-line-length = 80 +[pep8] +aggressive = 1 diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/.gitignore b/pkgs/by-name/fl/flattenReferencesGraph/src/.gitignore new file mode 100644 index 0000000000000..bee8a64b79a99 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__init__.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main__.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main__.py new file mode 100644 index 0000000000000..5db025f72010d --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main__.py @@ -0,0 +1,48 @@ +import json as json +import sys as sys + +from .lib import debug, load_json +from .flatten_references_graph import flatten_references_graph + + +def main_impl(file_path): + debug(f"loading json from {file_path}") + + data = load_json(file_path) + + # These are required + references_graph = data["graph"] + pipeline = data["pipeline"] + + # This is optional + exclude_paths = data.get("exclude_paths") + + debug("references_graph", references_graph) + debug("pipeline", pipeline) + debug("exclude_paths", exclude_paths) + + result = flatten_references_graph( + references_graph, + pipeline, + exclude_paths=exclude_paths + ) + + debug("result", result) + + return json.dumps( + result, + # For reproducibility. + sort_keys=True, + indent=2, + # Avoid tailing whitespaces. + separators=(",", ": ") + ) + + +def main(): + file_path = sys.argv[1] + print(main_impl(file_path)) + + +if __name__ == "__main__": + main() diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main___test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main___test.py new file mode 100644 index 0000000000000..d04e44bd4af2f --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__main___test.py @@ -0,0 +1,52 @@ +import unittest +import inspect as inspect + +from .__main__ import main_impl +from .lib import path_relative_to_file + +if __name__ == "__main__": + unittest.main() + + +class TestMain(unittest.TestCase): + + def test_main_impl(self): + + file_path = path_relative_to_file( + __file__, + "__test_fixtures/flatten-references-graph-main-input.json" + ) + + result = main_impl(file_path) + + self.assertEqual( + result, + inspect.cleandoc( + """ + [ + [ + "B" + ], + [ + "C" + ], + [ + "A" + ] + ] + """ + ) + ) + + def test_main_impl2(self): + file_path = path_relative_to_file( + __file__, + "__test_fixtures/flatten-references-graph-main-input-no-paths.json" + ) + + result = main_impl(file_path) + + self.assertEqual( + result, + inspect.cleandoc("[]") + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/fake-references-graph.json b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/fake-references-graph.json new file mode 100644 index 0000000000000..56ab24c946c1c --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/fake-references-graph.json @@ -0,0 +1,31 @@ +[ + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 2, + "path": "A", + "references": [ + "A", + "B", + "C" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "C" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C" + ] + } +] diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input-no-paths.json b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input-no-paths.json new file mode 100644 index 0000000000000..7d838ebcbd965 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input-no-paths.json @@ -0,0 +1,23 @@ +{ + "graph": [ + { + "closureSize": 168, + "narHash": "sha256:0dl4kfhb493yz8a5wgh0d2z3kr61z65gp85vx33rqwa1m1lnymy8", + "narSize": 168, + "path": "/nix/store/fakehash000000000000000000000000-no-store-paths-base.json", + "references": [] + } + ], + "pipeline": [ + [ + "popularity_contest" + ], + [ + "limit_layers", + 99 + ] + ], + "exclude_paths": [ + "/nix/store/fakehash000000000000000000000000-no-store-paths-base.json" + ] +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input.json b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input.json new file mode 100644 index 0000000000000..da7d503be45ea --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/__test_fixtures/flatten-references-graph-main-input.json @@ -0,0 +1,36 @@ +{ + "graph": [ + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 2, + "path": "A", + "references": [ + "A", + "B", + "C" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "C" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C" + ] + } + ], + "pipeline": [ + ["split_paths", ["B"]] + ] +} diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph.py new file mode 100644 index 0000000000000..ac789022a32b0 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph.py @@ -0,0 +1,45 @@ +from toolz import curried as tlz + +from .lib import ( + flatten, + over, + references_graph_to_igraph +) + +from .pipe import pipe + +MAX_LAYERS = 127 + + +def create_list_of_lists_of_strings(deeply_nested_lists_or_dicts_of_graphs): + list_of_graphs = flatten(deeply_nested_lists_or_dicts_of_graphs) + + return list( + filter( + # remove empty layers + lambda xs: len(xs) > 0, + tlz.map( + lambda g: g.vs["name"], + list_of_graphs + ) + ) + ) + + +def flatten_references_graph(references_graph, pipeline, exclude_paths=None): + if exclude_paths is not None: + exclude_paths = frozenset(exclude_paths) + references_graph = tlz.compose( + tlz.map(over( + "references", + lambda xs: frozenset(xs).difference(exclude_paths) + )), + tlz.remove(lambda node: node["path"] in exclude_paths) + )(references_graph) + + igraph_graph = references_graph_to_igraph(references_graph) + + return create_list_of_lists_of_strings(pipe( + pipeline, + igraph_graph + )) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph_test.py new file mode 100644 index 0000000000000..c39c663d038e2 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/flatten_references_graph_test.py @@ -0,0 +1,121 @@ +import unittest +from .flatten_references_graph import flatten_references_graph +# from .lib import path_relative_to_file, load_json + +if __name__ == "__main__": + unittest.main() + +references_graph = [ + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 2, + "path": "A", + "references": [ + "A", + "C", + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "C", + "D" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C" + ] + }, + { + "closureSize": 7, + "narHash": "sha256:d", + "narSize": 8, + "path": "D", + "references": [ + "D" + ] + } +] + + +class Test(unittest.TestCase): + + def test_flatten_references_graph(self): + pipeline = [ + ["split_paths", ["B"]], + ] + + result = flatten_references_graph(references_graph, pipeline) + + self.assertEqual( + result, + [ + # B and it's exclusive deps + ["B", "D"], + # Common deps + ["C"], + # Rest (without common deps) + ["A"] + ] + ) + + pipeline = [ + ["split_paths", ["B"]], + ["over", "main", ["subcomponent_in", ["B"]]], + ] + + result = flatten_references_graph(references_graph, pipeline) + + self.assertEqual( + result, + [ + ["B"], + ["D"], + ["C"], + ["A"] + ] + ) + + def test_flatten_references_graph_exclude_paths(self): + pipeline = [ + ["split_paths", ["B"]], + ] + + result = flatten_references_graph( + references_graph, + pipeline, + exclude_paths=["A"] + ) + + self.assertEqual( + result, + [ + # A was excluded so there is no "rest" or "common" layer + ["B", "C", "D"] + ] + ) + + result = flatten_references_graph( + references_graph, + pipeline, + exclude_paths=["D"] + ) + + self.assertEqual( + result, + [ + # D removed from this layer + ["B"], + ["C"], + ["A"] + ] + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib.py new file mode 100644 index 0000000000000..e3277177f401a --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib.py @@ -0,0 +1,329 @@ +from collections.abc import Iterable +from pathlib import Path +from toolz import curried as tlz +from toolz import curry +import igraph as igraph +import itertools as itertools +import json as json +import os as os +import re as re +import sys + +DEBUG = os.environ.get("DEBUG", False) == "True" +DEBUG_PLOT = os.environ.get("DEBUG_PLOT", False) == "True" +# If this is set, the plots will be saved to files instead of being displayed +# with default image viewer. +DEBUG_PLOT_SAVE_BASE_NAME = os.environ.get("DEBUG_PLOT_SAVE_BASE_NAME") + +c = igraph.configuration.init() +# App used to open the plots when DEBUG_PLOT_SAVE_BASE_NAME is not set. +c["apps.image_viewer"] = os.environ.get("DEBUG_PLOT_IMAGE_VIEWER", "gwenview") + + +def debug(*args, **kwargs): + if DEBUG: + print(*args, file=sys.stderr, **kwargs) + + +def debug_plot(graph, name, **kwargs): + if not DEBUG_PLOT: + return + + vertex_label = [ + # remove /nix/store/HASH- prefix from labels + re.split("^/nix/store/[a-z0-9]{32}-", name)[-1] + for name in graph.vs["name"] + ] + + save_as = ( + None if DEBUG_PLOT_SAVE_BASE_NAME is None + else DEBUG_PLOT_SAVE_BASE_NAME + name + ".png" + ) + + igraph.plot( + graph, + save_as, + vertex_label=vertex_label, + **(tlz.merge( + { + # "bbox": (3840, 2160), + "bbox": (800, 600), + "margin": 100, + "vertex_label_dist": -5, + "edge_color": "orange", + "vertex_size": 20, + "vertex_label_size": 30, + "edge_arrow_size": 2 + }, + kwargs + )), + ) + + +def debug_plot_with_highligth(g, vs, layout): + debug_plot( + g, + layout=layout, + # layout=Layout(new_coords), + vertex_color=[ + "green" if v.index in vs else "red" + for v in g.vs + ] + ) + + +@curry +def pick_keys(keys, d): + return { + key: d[key] for key in keys if key in d + } + + +def unnest_iterable(xs): + return itertools.chain.from_iterable(xs) + + +def load_json(file_path): + with open(file_path) as f: + return json.load(f) + + +@curry +def sorted_by(key, xs): + return sorted(xs, key=lambda x: x[key]) + + +@curry +def find_vertex_by_name_or_none(graph, name): + try: + # NOTE: find by name is constant time. + return graph.vs.find(name) + # This will be thrown if vertex with given name is not found. + except ValueError: + return None + + +def subcomponent_multi(graph, vertices, mode="out"): + """Return concatenated subcomponents generated by the given list of + vertices. + """ + return tlz.mapcat( + lambda vertex: graph.subcomponent(vertex, mode=mode), + vertices + ) + + +@curry +def edges_for_reference_graph_node(path_to_size_dict, reference_graph_node): + source = reference_graph_node["path"] + return map( + lambda x: {"source": source, "target": x}, + sorted( + filter( + # references might contain source + lambda x: x != source, + reference_graph_node["references"] + ), + key=lambda x: 1 * path_to_size_dict[x] + ) + ) + + +reference_graph_node_keys_to_keep = [ + "closureSize", + "narSize" +] + +pick_reference_graph_node_keys = pick_keys(reference_graph_node_keys_to_keep) + + +def vertex_from_reference_graph_node(reference_graph_node): + return tlz.merge( + {"name": reference_graph_node["path"]}, + pick_reference_graph_node_keys(reference_graph_node) + ) + + +def references_graph_to_igraph(references_graph): + """ + Converts result of exportReferencesGraph into an igraph directed graph. + Uses paths as igraph node names, and sets closureSize and narSize as + properties of igraph nodes. + """ + debug('references_graph', references_graph) + references_graph = sorted(references_graph, key=lambda x: 1 * x["narSize"]) + + # Short circuit since DictList throws an error if first argument (vertices) + # contains no elements. + # The error is: KeyError: 'name' + # here: https://github.com/igraph/python-igraph/blob/da7484807f5152a2c18c55dd4154653de2c7f5f7/src/igraph/__init__.py#L3091 # noqa: E501 + # This looks like a bug. + if len(references_graph) == 0: + return empty_directed_graph() + + path_to_size_dict = { + node["path"]: node["narSize"] for node in references_graph + } + + debug('path_to_size_dict', path_to_size_dict) + + return igraph.Graph.DictList( + map(vertex_from_reference_graph_node, references_graph), + unnest_iterable(map( + edges_for_reference_graph_node(path_to_size_dict), + references_graph + )), + directed=True + ) + + +@curry +def graph_vertex_index_to_name(graph, index): + return graph.vs[index]["name"] + + +def igraph_to_reference_graph(igraph_instance): + return [ + tlz.merge( + { + "path": v["name"], + "references": list(map( + graph_vertex_index_to_name(igraph_instance), + igraph_instance.successors(v.index) + )) + }, + pick_reference_graph_node_keys(v.attributes()) + ) + for v in igraph_instance.vs + ] + + +def load_closure_graph(file_path): + return references_graph_to_igraph(load_json(file_path)) + + +def path_relative_to_file(file_path_from, file_path): + dir_path = Path(file_path_from).parent + return dir_path / file_path + + +def is_None(x): + return x is None + + +def not_None(x): + return x is not None + + +def print_layers(layers): + debug("\n::::LAYERS:::::") + for index, layer in enumerate(layers): + debug("") + debug("layer index:", index) + debug("[") + for v in layer.vs["name"]: + debug(" ", v) + debug("]") + + +def print_vs(graph): + for v in graph.vs: + debug(v) + + +def directed_graph(edges, vertices=None, vertex_attrs=[]): + graph = igraph.Graph.TupleList(edges, directed=True) + + # Add detached vertices (without edges) if any. + if vertices is not None: + graph = graph + vertices + + # Add vertex attributes if any. + for (name, attrs_dict) in vertex_attrs: + vertex = graph.vs.find(name) + + for (k, v) in attrs_dict.items(): + vertex[k] = v + + return graph + + +def empty_directed_graph(): + return directed_graph([]) + + +def graph_is_empty(graph): + return len(graph.vs) == 0 + + +def pick_attrs(attrs, x): + return {attr: getattr(x, attr) for attr in attrs} + + +def merge_graphs(graphs): + return tlz.reduce(lambda acc, g: acc + g, graphs, empty_directed_graph()) + + +# Functions below can be used in user defined pipeline (see pipe.py). +# All functions need to be curried, and the user needs to be able to +# provide values for all arguments apart from the last one from nix code. +@curry +def over(prop_name, func, dictionary): + value = dictionary[prop_name] + return tlz.assoc(dictionary, prop_name, func(value)) + + +# One argument functions also need to be curried to simplify processing of the +# pipeline. +@curry +def flatten(xs): + xs = xs.values() if isinstance(xs, dict) else xs + for x in xs: + if isinstance(x, Iterable) and not isinstance(x, (str, bytes)): + yield from flatten(x) + else: + yield x + + +@curry +def split_every(count, graph): + vs = graph.vs + return [ + graph.induced_subgraph(vs[x:x + count]) + for x in range(0, len(vs), count) + ] + + +@curry +def limit_layers(max_count, graphs): + assert max_count > 0, "max count needs to > 0" + + graphs_iterator = iter(graphs) + + return tlz.concat([ + tlz.take(max_count - 1, graphs_iterator), + # Merges all graphs remaining in the iterator, after initial + # max_count - 1 have been taken. + (lambda: (yield merge_graphs(graphs_iterator)))() + ]) + + +@curry +def remove_paths(paths, graph): + # Allow passing a single path. + if isinstance(paths, str): + paths = [paths] + + indices_to_remove = tlz.compose( + list, + tlz.map(lambda v: v.index), + tlz.remove(is_None), + tlz.map(find_vertex_by_name_or_none(graph)) + )(paths) + + return graph - indices_to_remove if len(indices_to_remove) > 0 else graph + + +@curry +def reverse(iterator): + return reversed(list(iterator)) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib_test.py new file mode 100644 index 0000000000000..49099e7f0b5b3 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/lib_test.py @@ -0,0 +1,199 @@ +import unittest + +from toolz import curried as tlz + +from . import test_helpers as th + +from .lib import ( + directed_graph, + igraph_to_reference_graph, + limit_layers, + pick_keys, + references_graph_to_igraph, + reference_graph_node_keys_to_keep +) + +if __name__ == "__main__": + unittest.main() + + +references_graph = [ + { + "closureSize": 3, + "narHash": "sha256:d", + "narSize": 0, + "path": "D", + "references": [ + "D" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:b", + "narSize": 4, + "path": "B", + "references": [ + "B" + ] + }, + { + "closureSize": 3, + "narHash": "sha256:e", + "narSize": 5, + "path": "E", + "references": [ + "E" + ] + }, + { + "closureSize": 1, + "narHash": "sha256:a", + "narSize": 10, + "path": "A", + "references": [ + # most of the time references contain self path, but not always. + "C", + "B", + ] + }, + { + "closureSize": 5, + "narHash": "sha256:c", + "narSize": 6, + "path": "C", + "references": [ + "C", + "E", + "D" + ] + }, + { + "closureSize": 5, + "narHash": "sha256:f", + "narSize": 2, + "path": "F", + "references": [ + "F" + ] + } +] + + +class TestLib(unittest.TestCase, th.CustomAssertions): + + def test_references_graph_to_igraph(self): + + graph = references_graph_to_igraph(references_graph) + + pick_preserved_keys = pick_keys(reference_graph_node_keys_to_keep) + + self.assertGraphEqual( + graph, + directed_graph( + [ + ("A", "B"), + ("A", "C"), + ("C", "E"), + ("C", "D"), + ], + ["F"], + # Add "narSize" and "closureSize" attributes to each node. + map( + lambda node: (node["path"], pick_preserved_keys(node)), + references_graph + ) + ) + ) + + def test_references_graph_to_igraph_one_node(self): + + references_graph = [ + { + 'closureSize': 168, + 'narHash': 'sha256:0dl4', + 'narSize': 168, + 'path': 'A', + 'references': [] + } + ] + + graph = references_graph_to_igraph(references_graph) + + pick_preserved_keys = pick_keys(reference_graph_node_keys_to_keep) + + self.assertGraphEqual( + graph, + directed_graph( + [], + ["A"], + # Add "narSize" and "closureSize" attributes to each node. + map( + lambda node: (node["path"], pick_preserved_keys(node)), + references_graph + ) + ) + ) + + def test_references_graph_to_igraph_zero_nodes(self): + + references_graph = [] + + graph = references_graph_to_igraph(references_graph) + + self.assertGraphEqual( + graph, + directed_graph( + [], + [], + [] + ) + ) + + def test_igraph_to_reference_graph(self): + + graph = references_graph_to_igraph(references_graph) + + nodes_by_path = { + node["path"]: node for node in references_graph + } + + result = igraph_to_reference_graph(graph) + + self.assertEqual( + len(result), + len(references_graph) + ) + + pick_preserved_keys = pick_keys([ + "path", + *reference_graph_node_keys_to_keep + ]) + + for node in result: + original_node = nodes_by_path[node["path"]] + + self.assertDictEqual( + pick_preserved_keys(original_node), + pick_preserved_keys(node) + ) + + revove_self_ref = tlz.remove(lambda a: a == node["path"]) + + self.assertListEqual( + sorted(node["references"]), + sorted(revove_self_ref(original_node["references"])) + ) + + def test_limit_layers_nothing_to_do(self): + graph = references_graph_to_igraph(references_graph) + + layers = [graph] + result = limit_layers(1, layers) + result_list = list(result) + + self.assertEqual( + len(result_list), + 1 + ) + + self.assertGraphEqual(graph, result_list[0]) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe.py new file mode 100644 index 0000000000000..f4d31397756c0 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe.py @@ -0,0 +1,80 @@ +from toolz import curried as tlz +from toolz import curry + +from . import lib as lib +from . import subcomponent as subcomponent +from .popularity_contest import popularity_contest +from .split_paths import split_paths + +from .lib import ( + # references_graph_to_igraph + debug, + pick_attrs +) + +funcs = tlz.merge( + pick_attrs( + [ + "flatten", + "over", + "split_every", + "limit_layers", + "remove_paths", + "reverse" + ], + lib + ), + pick_attrs( + [ + "subcomponent_in", + "subcomponent_out", + ], + subcomponent + ), + { + "split_paths": split_paths, + "popularity_contest": popularity_contest, + "map": tlz.map + } +) + + +@curry +def nth_or_none(index, xs): + try: + return xs[index] + except IndexError: + return None + + +def preapply_func(func_call_data): + [func_name, *args] = func_call_data + debug("func_name", func_name) + debug("args", args) + debug('func_name in ["over"]', func_name in ["over"]) + + # TODO: these could be handled in more generic way by defining, for each + # function, which of the args are expected to be functions which need + # pre-applying. + if func_name == "over": + [first_arg, second_arg] = args + args = [first_arg, preapply_func(second_arg)] + + elif func_name == "map": + args = [preapply_func(args[0])] + + return funcs[func_name](*args) + + +@curry +def pipe(pipeline, data): + debug("pipeline", pipeline) + partial_funcs = list(tlz.map(preapply_func, pipeline)) + debug('partial_funcs', partial_funcs) + return tlz.pipe( + data, + *partial_funcs + ) + + +funcs["pipe"] = pipe diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe_test.py new file mode 100644 index 0000000000000..ab03fa2db66d8 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/pipe_test.py @@ -0,0 +1,153 @@ +import unittest +from .pipe import pipe + +from . import test_helpers as th + +from .lib import ( + directed_graph, +) + + +if __name__ == "__main__": + unittest.main() + + +def make_test_graph(): + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "C"), + ("B", "D"), + ("B", "E"), + ("E", "F"), + ("B", "G"), + ("Root2", "B"), + ("Root3", "C"), + ] + + return directed_graph(edges) + + +class CustomAssertions: + def runAndAssertResult(self, graph, pipeline, expected_graph_args): + result = list(pipe(pipeline, graph)) + + for (index, expected_graph_arg) in enumerate(expected_graph_args): + + self.assertGraphEqual( + directed_graph(*expected_graph_arg), + result[index] + ) + + +if __name__ == "__main__": + unittest.main() + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_1(self): + pipeline = [ + ["split_paths", ["B"]], + [ + "over", + "main", + [ + "pipe", + [ + ["subcomponent_in", ["B"]], + [ + "over", + "rest", + ["popularity_contest"] + ] + ] + ] + ], + ["flatten"], + ["map", ["remove_paths", "Root3"]], + ["limit_layers", 5], + ] + + expected_graph_args = [ + # "B"" separated from the rest by "split_paths" and + # "subcomponent_in' stages. + ([], ["B"]), + # Deps of "B", split into individual layers by "popularity_contest", + # with "F" being most popular + ([], ["F"]), + ([], ["D"]), + ([], ["E"]), + # "rest" output of "split_paths" stage with "G" merged into it by + # "limit_layers" stage. + ( + [ + ("Root1", "A"), + ("A", "C") + ], + ["Root2", "G"] + ) + ] + + self.runAndAssertResult( + make_test_graph(), + pipeline, + expected_graph_args + ) + + def test_2(self): + graph = directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ], + ["Root2"] + ) + self.runAndAssertResult( + graph, + [ + ["popularity_contest"], + ], + [ + # Ordered from most to least popular + ([], ["B"]), + ([], ["A"]), + ([], ["Root1"]), + ([], ["Root2"]) + ] + ) + + self.runAndAssertResult( + graph, + [ + ["popularity_contest"], + ["limit_layers", 3], + ], + [ + # Most popular first + ([], ["B"]), + ([], ["A"]), + # Least popular combined + ([], ["Root1", "Root2"]), + ] + ) + + self.runAndAssertResult( + graph, + [ + ["popularity_contest"], + ["reverse"], + ["limit_layers", 3], + ], + [ + # Least popular first + ([], ["Root2"]), + ([], ["Root1"]), + # Most popular first + ([], ["A", "B"]) + ] + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest.py new file mode 100644 index 0000000000000..7ab7b3acb6b07 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest.py @@ -0,0 +1,398 @@ +# Using a simple algorithm, convert the references to a path in to a +# sorted list of dependent paths based on how often they're referenced +# and how deep in the tree they live. Equally-"popular" paths are then +# sorted by name. +# +# The existing writeReferencesToFile prints the paths in a simple +# ascii-based sorting of the paths. +# +# Sorting the paths by graph improves the chances that the difference +# between two builds appear near the end of the list, instead of near +# the beginning. This makes a difference for Nix builds which export a +# closure for another program to consume, if that program implements its +# own level of binary diffing. +# +# For an example, Docker Images. If each store path is a separate layer +# then Docker Images can be very efficiently transfered between systems, +# and we get very good cache reuse between images built with the same +# version of Nixpkgs. However, since Docker only reliably supports a +# small number of layers (42) it is important to pick the individual +# layers carefully. By storing very popular store paths in the first 40 +# layers, we improve the chances that the next Docker image will share +# many of those layers.* +# +# Given the dependency tree: +# +# A - B - C - D -\ +# \ \ \ \ +# \ \ \ \ +# \ \ - E ---- F +# \- G +# +# Nodes which have multiple references are duplicated: +# +# A - B - C - D - F +# \ \ \ +# \ \ \- E - F +# \ \ +# \ \- E - F +# \ +# \- G +# +# Each leaf node is now replaced by a counter defaulted to 1: +# +# A - B - C - D - (F:1) +# \ \ \ +# \ \ \- E - (F:1) +# \ \ +# \ \- E - (F:1) +# \ +# \- (G:1) +# +# Then each leaf counter is merged with its parent node, replacing the +# parent node with a counter of 1, and each existing counter being +# incremented by 1. That is to say `- D - (F:1)` becomes `- (D:1, F:2)`: +# +# A - B - C - (D:1, F:2) +# \ \ \ +# \ \ \- (E:1, F:2) +# \ \ +# \ \- (E:1, F:2) +# \ +# \- (G:1) +# +# Then each leaf counter is merged with its parent node again, merging +# any counters, then incrementing each: +# +# A - B - (C:1, D:2, E:2, F:5) +# \ \ +# \ \- (E:1, F:2) +# \ +# \- (G:1) +# +# And again: +# +# A - (B:1, C:2, D:3, E:4, F:8) +# \ +# \- (G:1) +# +# And again: +# +# (A:1, B:2, C:3, D:4, E:5, F:9, G:2) +# +# and then paths have the following "popularity": +# +# A 1 +# B 2 +# C 3 +# D 4 +# E 5 +# F 9 +# G 2 +# +# and the popularity contest would result in the paths being printed as: +# +# F +# E +# D +# C +# B +# G +# A +# +# * Note: People who have used a Dockerfile before assume Docker's +# Layers are inherently ordered. However, this is not true -- Docker +# layers are content-addressable and are not explicitly layered until +# they are composed in to an Image. + +import igraph as igraph + +from collections import defaultdict +from operator import eq +from toolz import curried as tlz +from toolz import curry + +from .lib import ( + debug, + directed_graph, + igraph_to_reference_graph, + over, + pick_keys, + reference_graph_node_keys_to_keep +) + +eq = curry(eq) + +pick_keys_to_keep = pick_keys(reference_graph_node_keys_to_keep) + + +# Find paths in the original dataset which are never referenced by +# any other paths +def find_roots(closures): + debug('closures', closures) + roots = [] + + for closure in closures: + path = closure['path'] + if not any_refer_to(path, closures): + roots.append(path) + + return roots + + +def any_refer_to(path, closures): + for closure in closures: + if path != closure['path']: + if path in closure['references']: + return True + return False + + +def all_paths(closures): + paths = [] + for closure in closures: + paths.append(closure['path']) + paths.extend(closure['references']) + paths.sort() + return list(set(paths)) + + +# Convert: +# +# [ +# { path: /nix/store/foo, references: [ /nix/store/foo, /nix/store/bar, /nix/store/baz ] }, # noqa: E501 +# { path: /nix/store/bar, references: [ /nix/store/bar, /nix/store/baz ] }, +# { path: /nix/store/baz, references: [ /nix/store/baz, /nix/store/tux ] }, +# { path: /nix/store/tux, references: [ /nix/store/tux ] } +# ] +# +# To: +# { +# /nix/store/foo: [ /nix/store/bar, /nix/store/baz ], +# /nix/store/bar: [ /nix/store/baz ], +# /nix/store/baz: [ /nix/store/tux ] }, +# /nix/store/tux: [ ] +# } +# +# Note that it drops self-references to avoid loops. + + +def make_lookup(closures): + return { + # remove self reference + node["path"]: over("references", tlz.remove(eq(node["path"])), node) + for node in closures + } + + +# Convert: +# +# /nix/store/foo with +# { +# /nix/store/foo: [ /nix/store/bar, /nix/store/baz ], +# /nix/store/bar: [ /nix/store/baz ], +# /nix/store/baz: [ /nix/store/tux ] }, +# /nix/store/tux: [ ] +# } +# +# To: +# +# { +# /nix/store/bar: { +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# }, +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# } + + +def make_graph_segment_from_root(subgraphs_cache, root, lookup): + children = {} + for ref in lookup[root]: + # make_graph_segment_from_root is a pure function, and will + # always return the same result based on a given input. Thus, + # cache computation. + # + # Python's assignment will use a pointer, preventing memory + # bloat for large graphs. + if ref not in subgraphs_cache: + debug("Subgraph Cache miss on {}".format(ref)) + subgraphs_cache[ref] = make_graph_segment_from_root( + subgraphs_cache, ref, lookup + ) + else: + debug("Subgraph Cache hit on {}".format(ref)) + children[ref] = subgraphs_cache[ref] + return children + + +# Convert a graph segment in to a popularity-counted dictionary: +# +# From: +# { +# /nix/store/foo: { +# /nix/store/bar: { +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# } +# /nix/store/baz: { +# /nix/store/tux: {} +# } +# } +# } +# +# to: +# [ +# /nix/store/foo: 1 +# /nix/store/bar: 2 +# /nix/store/baz: 4 +# /nix/store/tux: 6 +# ] + +def graph_popularity_contest(popularity_cache, full_graph): + popularity = defaultdict(int) + for path, subgraph in full_graph.items(): + popularity[path] += 1 + # graph_popularity_contest is a pure function, and will + # always return the same result based on a given input. Thus, + # cache computation. + # + # Python's assignment will use a pointer, preventing memory + # bloat for large graphs. + if path not in popularity_cache: + debug("Popularity Cache miss on", path) + popularity_cache[path] = graph_popularity_contest( + popularity_cache, subgraph + ) + else: + debug("Popularity Cache hit on", path) + + subcontest = popularity_cache[path] + for subpath, subpopularity in subcontest.items(): + debug("Calculating popularity for", subpath) + popularity[subpath] += subpopularity + 1 + + return popularity + +# Emit a list of packages by popularity, most first: +# +# From: +# [ +# /nix/store/foo: 1 +# /nix/store/bar: 1 +# /nix/store/baz: 2 +# /nix/store/tux: 2 +# ] +# +# To: +# [ /nix/store/baz /nix/store/tux /nix/store/bar /nix/store/foo ] + + +def order_by_popularity(paths): + paths_by_popularity = defaultdict(list) + popularities = [] + for path, popularity in paths.items(): + popularities.append(popularity) + paths_by_popularity[popularity].append(path) + + popularities = sorted(set(popularities)) + + flat_ordered = [] + for popularity in popularities: + paths = paths_by_popularity[popularity] + paths.sort(key=package_name) + + flat_ordered.extend(reversed(paths)) + return list(reversed(flat_ordered)) + + +def package_name(path): + parts = path.split('-') + start = parts.pop(0) + # don't throw away any data, so the order is always the same. + # even in cases where only the hash at the start has changed. + parts.append(start) + return '-'.join(parts) + + +@curry +def popularity_contest(graph): + # Data comes in as an igraph directed graph or in the format produced + # by nix's exportReferencesGraph: + # [ + # { path: /nix/store/foo, references: [ /nix/store/foo, /nix/store/bar, /nix/store/baz ] }, # noqa: E501 + # { path: /nix/store/bar, references: [ /nix/store/bar, /nix/store/baz ] }, # noqa: E501 + # { path: /nix/store/baz, references: [ /nix/store/baz, /nix/store/tux ] }, # noqa: E501 + # { path: /nix/store/tux, references: [ /nix/store/tux ] } + # ] + # + # We want to get out a list of paths ordered by how universally, + # important they are, ie: tux is referenced by every path, transitively + # so it should be #1 + # + # [ + # /nix/store/tux, + # /nix/store/baz, + # /nix/store/bar, + # /nix/store/foo, + # ] + # + # NOTE: the output is actually a list of igraph graphs with a single vertex + # with v["name"] == path, and some properties (defined in + # reference_graph_node_keys_to_keep) from the nodes of the input graph + # copied as vertex attributes. + debug('graph', graph) + + if isinstance(graph, igraph.Graph): + graph = igraph_to_reference_graph(graph) + + debug("Finding roots") + roots = find_roots(graph) + + debug("Making lookup") + lookup = make_lookup(graph) + + full_graph = {} + subgraphs_cache = {} + for root in roots: + debug("Making full graph for", root) + full_graph[root] = make_graph_segment_from_root( + subgraphs_cache, + root, + tlz.valmap( + tlz.get("references"), + lookup + ) + ) + + debug("Running contest") + contest = graph_popularity_contest({}, full_graph) + + debug("Ordering by popularity") + ordered = order_by_popularity(contest) + + debug("Checking for missing paths") + missing = [] + + for path in all_paths(graph): + if path not in ordered: + missing.append(path) + + ordered.extend(missing) + + return map( + # Turn each path into a graph with 1 vertex. + lambda path: directed_graph( + # No edges + [], + # One vertex, with name=path + [path], + # Setting desired attributes on the vertex. + [(path, pick_keys_to_keep(lookup[path]))] + ), + ordered + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest_test.py new file mode 100644 index 0000000000000..5ed58eee41969 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/popularity_contest_test.py @@ -0,0 +1,335 @@ +import unittest +from toolz import curry +from toolz import curried as tlz + +from . import test_helpers as th + +from .popularity_contest import ( + all_paths, + any_refer_to, + find_roots, + graph_popularity_contest, + make_graph_segment_from_root, + make_lookup, + popularity_contest, + order_by_popularity +) + +from .lib import ( + directed_graph, + igraph_to_reference_graph, + over +) + + +if __name__ == "__main__": + unittest.main() + + +class CustomAssertions: + @curry + def assertResultKeys(self, keys, result): + self.assertListEqual( + list(result.keys()), + keys + ) + + return result + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_empty_graph(self): + def test_empty(graph): + self.assertListEqual( + list(popularity_contest(graph)), + [] + ) + + # popularity_contest works with igraph graph or refurence_graph in + # form a list of dicts (as returned by nix's exportReferencesGraph) + test_empty(directed_graph([])) + test_empty([]) + + def test_popularity_contest(self): + # Making sure vertex attrs are preserved. + vertex_props_dict = { + "Root1": {"narSize": 1, "closureSize": 2}, + "B": {"narSize": 3, "closureSize": 4}, + "X": {"narSize": 5, "closureSize": 6}, + } + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "D"), + ("D", "E"), + ("B", "D"), + ("B", "F"), + ("Root2", "B"), + ("Root3", "C") + ] + detached_vertices = ["X"] + vertex_props = vertex_props_dict.items() + + def test(graph): + result = list(popularity_contest(graph)) + + expected_paths = [ + 'E', + 'D', + 'F', + 'B', + 'A', + 'C', + 'Root1', + 'Root2', + 'Root3', + 'X' + ] + + self.assertEqual( + len(result), + len(expected_paths) + ) + + for (index, path) in enumerate(expected_paths): + path_props = vertex_props_dict.get(path) or {} + + self.assertGraphEqual( + result[index], + directed_graph([], [path], [(path, path_props)]) + ) + + graph = directed_graph(edges, detached_vertices, vertex_props) + + test(graph) + test(igraph_to_reference_graph(graph)) + + +class TestFindRoots(unittest.TestCase): + def test_find_roots(self): + self.assertCountEqual( + find_roots([ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + { + "path": "/nix/store/bar", + "references": [ + "/nix/store/bar", + "/nix/store/tux" + ] + }, + { + "path": "/nix/store/hello", + "references": [ + ] + } + ]), + ["/nix/store/foo", "/nix/store/hello"] + ) + + +class TestAnyReferTo(unittest.TestCase): + def test_has_references(self): + self.assertTrue( + any_refer_to( + "/nix/store/bar", + [ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/bar" + ] + }, + ] + ), + ) + + def test_no_references(self): + self.assertFalse( + any_refer_to( + "/nix/store/foo", + [ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + ] + ), + ) + + +class TestAllPaths(unittest.TestCase): + def test_returns_all_paths(self): + self.assertCountEqual( + all_paths([ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + { + "path": "/nix/store/bar", + "references": [ + "/nix/store/bar", + "/nix/store/tux" + ] + }, + { + "path": "/nix/store/hello", + "references": [ + ] + } + ]), + ["/nix/store/foo", "/nix/store/bar", + "/nix/store/hello", "/nix/store/tux", ] + ) + + def test_no_references(self): + self.assertFalse( + any_refer_to( + "/nix/store/foo", + [ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar" + ] + }, + ] + ), + ) + + +class TestMakeLookup(unittest.TestCase): + def test_returns_lookp(self): + self.assertDictEqual( + # "references" in the result are iterators so we need + # to convert them to a list before asserting. + tlz.valmap(over("references", list), make_lookup([ + { + "path": "/nix/store/foo", + "references": [ + "/nix/store/foo", + "/nix/store/bar", + "/nix/store/hello" + ] + }, + { + "path": "/nix/store/bar", + "references": [ + "/nix/store/bar", + "/nix/store/tux" + ] + }, + { + "path": "/nix/store/hello", + "references": [ + ] + } + ])), + { + "/nix/store/foo": { + "path": "/nix/store/foo", + "references": [ + "/nix/store/bar", + "/nix/store/hello" + ] + }, + "/nix/store/bar": { + "path": "/nix/store/bar", + "references": [ + "/nix/store/tux" + ] + }, + "/nix/store/hello": { + "path": "/nix/store/hello", + "references": [ + ] + } + } + ) + + +class TestMakeGraphSegmentFromRoot(unittest.TestCase): + def test_returns_graph(self): + self.assertDictEqual( + make_graph_segment_from_root({}, "/nix/store/foo", { + "/nix/store/foo": ["/nix/store/bar"], + "/nix/store/bar": ["/nix/store/tux"], + "/nix/store/tux": [], + "/nix/store/hello": [], + }), + { + "/nix/store/bar": { + "/nix/store/tux": {} + } + } + ) + + def test_returns_graph_tiny(self): + self.assertDictEqual( + make_graph_segment_from_root({}, "/nix/store/tux", { + "/nix/store/foo": ["/nix/store/bar"], + "/nix/store/bar": ["/nix/store/tux"], + "/nix/store/tux": [], + }), + {} + ) + + +class TestGraphPopularityContest(unittest.TestCase): + def test_counts_popularity(self): + self.assertDictEqual( + graph_popularity_contest({}, { + "/nix/store/foo": { + "/nix/store/bar": { + "/nix/store/baz": { + "/nix/store/tux": {} + } + }, + "/nix/store/baz": { + "/nix/store/tux": {} + } + } + }), + { + "/nix/store/foo": 1, + "/nix/store/bar": 2, + "/nix/store/baz": 4, + "/nix/store/tux": 6, + } + ) + + +class TestOrderByPopularity(unittest.TestCase): + def test_returns_in_order(self): + self.assertEqual( + order_by_popularity({ + "/nix/store/foo": 1, + "/nix/store/bar": 1, + "/nix/store/baz": 2, + "/nix/store/tux": 2, + }), + [ + "/nix/store/baz", + "/nix/store/tux", + "/nix/store/bar", + "/nix/store/foo" + ] + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths.py new file mode 100644 index 0000000000000..31595c950c9ac --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths.py @@ -0,0 +1,227 @@ +from toolz import curried as tlz +from toolz import curry + +from .lib import ( + debug, + debug_plot, + DEBUG_PLOT, + find_vertex_by_name_or_none, + graph_is_empty, + is_None, + subcomponent_multi, + unnest_iterable +) + + +@curry +def coerce_to_singly_rooted_graph(fake_root_name, graph): + """Add single root to the graph connected to all existing roots. + + If graph has only one root, return the graph unchanged and the name + of the root vertex. + + Otherwise return a modified graph (copy) and a name of the added root + vertex. + """ + roots = graph.vs.select(lambda v: len(graph.predecessors(v)) == 0) + root_names = roots["name"] + + if len(root_names) == 1: + return graph, root_names[0] + else: + edges = [(fake_root_name, v) for v in root_names] + graph_with_root = graph + fake_root_name + edges + return graph_with_root, fake_root_name + + +@curry +def remove_vertex(vertex_name, graph): + """Remove vertex with given name, returning copy of input graph if vertex + with given name is found in the graph + """ + vertex = find_vertex_by_name_or_none(graph)(vertex_name) + + return graph - vertex_name if vertex else graph + + +def get_children_of(graph, vertex_names): + return unnest_iterable(map( + graph.successors, + tlz.remove( + is_None, + map( + find_vertex_by_name_or_none(graph), + vertex_names + ) + ) + )) + + +def as_list(x): + return x if isinstance(x, list) else [x] + + +@curry +def split_path_spec_to_indices(graph, split_path_spec): + debug("split_path_spec", split_path_spec) + if isinstance(split_path_spec, dict): + if "children_of" in split_path_spec: + children_of = split_path_spec["children_of"] + + return get_children_of(graph, as_list(children_of)) + else: + raise Exception( + "Unexpected split path spec: dict with invalid keys." + "Valid: [\"children_of\"]" + ) + else: + vertex = find_vertex_by_name_or_none(graph)(split_path_spec) + return [] if is_None(vertex) else [vertex.index] + + +call_count = 0 + + +@curry +def split_paths(split_paths, graph_in): + debug("____") + debug("split_paths:", split_paths) + debug("graph_in:", graph_in) + + if DEBUG_PLOT: + global call_count + graph_name_prefix = f"split_paths_{call_count}_" + call_count += 1 + + # Convert list of split_paths into list of vertex indices. Ignores + # split_paths which don"t match any vertices in the graph. + # All edges pointing at the indices will be deleted from the graph. + split_path_indices = list(unnest_iterable(map( + split_path_spec_to_indices(graph_in), + split_paths + ))) + + debug("split_path_indices:", split_path_indices) + + # Short circuit if there is nothing to do (split_paths didn"t match any + # vertices in the graph). + if len(split_path_indices) == 0: + if DEBUG_PLOT: + layout = graph_in.layout('tree') + debug_plot(graph_in, f"{graph_name_prefix}input", layout=layout) + debug_plot(graph_in, f"{graph_name_prefix}result", layout=layout) + + return {"rest": graph_in} + + # If graph has multiple roots, add a single one connecting all existing + # roots to make it easy to split the graph into 2 sets of vertices after + # deleting edges pointing at split_path_indices. + fake_root_name = "__root__" + graph, root_name = coerce_to_singly_rooted_graph(fake_root_name, graph_in) + + debug("root_name", root_name) + + if ( + find_vertex_by_name_or_none(graph)(root_name).index + in split_path_indices + ): + if DEBUG_PLOT: + layout = graph_in.layout('tree') + debug_plot(graph_in, f"{graph_name_prefix}input", layout=layout) + debug_plot( + graph_in, + f"{graph_name_prefix}result", + layout=layout, + vertex_color="green" + ) + + return {"main": graph_in} + + # Copy graph if coerce_to_singly_rooted_graph has not already created + # a copy, since we are going to mutate the graph and don"t want to + # mutate a function argument. + graph = graph if graph is not graph_in else graph.copy() + + if DEBUG_PLOT: + layout = graph.layout('tree') + debug_plot(graph, f"{graph_name_prefix}input", layout=layout) + + # Get incidences of all vertices which can be reached split_path_indices + # (including split_path_indices). This is a set of all split_paths and their + # dependencies. + split_off_vertex_indices = frozenset( + subcomponent_multi(graph, split_path_indices)) + debug("split_off_vertex_indices", split_off_vertex_indices) + + # Delete edges which point at any of the vertices in split_path_indices. + graph.delete_edges(_target_in=split_path_indices) + + if DEBUG_PLOT: + debug_plot(graph, f"{graph_name_prefix}deleted_edges", layout=layout) + + # Get incidences of all vertices which can be reached from the root. Since + # edges pointing at split_path_indices have been deleted, none of the + # split_path_indices will be included. Dependencies of rest_with_common will + # only be included if they can be reached from any vertex which is itself + # not in split_off_vertex_indices. + rest_with_common = frozenset(graph.subcomponent(root_name, mode="out")) + debug("rest_with_common", rest_with_common) + + # Get a set of all dependencies common to split_path_indices and the rest + # of the graph. + common = split_off_vertex_indices.intersection(rest_with_common) + debug("common", common) + + # Get a set of vertices which cannot be reached from split_path_indices. + rest_without_common = rest_with_common.difference(common) + debug("rest_without_common", rest_without_common) + + # Get a set of split_path_indices and their dependencies which cannot be + # reached from the rest of the graph. + split_off_without_common = split_off_vertex_indices.difference(common) + debug("split_off_without_common", split_off_without_common) + + if DEBUG_PLOT: + def choose_color(index): + if (index in split_off_without_common): + return "green" + elif (index in rest_without_common): + return "red" + else: + return "purple" + + vertex_color = [choose_color(v.index) for v in graph.vs] + + debug_plot( + graph, + f"{graph_name_prefix}result", + layout=layout, + vertex_color=vertex_color + ) + + # Return subgraphs based on calculated sets of vertices. + + result_keys = ["main", "common", "rest"] + result_values = [ + # Split paths and their deps (unreachable from rest of the graph). + graph.induced_subgraph(split_off_without_common), + # Dependencies of split paths which can be reached from the rest of the + # graph. + graph.induced_subgraph(common), + # Rest of the graph (without dependencies common with split paths). + graph.induced_subgraph(rest_without_common), + ] + + debug('result_values', result_values[0].vs["name"]) + + return tlz.valfilter( + tlz.complement(graph_is_empty), + dict(zip( + result_keys, + ( + result_values if root_name != fake_root_name + # If root was added, remove it + else tlz.map(remove_vertex(fake_root_name), result_values) + ) + )) + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths_test.py new file mode 100644 index 0000000000000..a3c129f7b3826 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/split_paths_test.py @@ -0,0 +1,184 @@ +import unittest +from toolz import curry + +from . import test_helpers as th + +from .split_paths import ( + split_paths +) + +from .lib import ( + directed_graph, + pick_keys +) + + +if __name__ == "__main__": + unittest.main() + + +# Making sure vertex attrs are preserved. +vertex_props_dict = { + "Root1": {"a": 1, "b": 1}, + "B": {"b": 2}, + "X": {"x": 3} +} + + +def make_test_graph(): + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "D"), + ("D", "E"), + ("B", "D"), + ("B", "F"), + ("Root2", "B"), + ("Root3", "C") + ] + + detached_vertices = ["X"] + + vertex_props = vertex_props_dict.items() + + return directed_graph(edges, detached_vertices, vertex_props) + + +class CustomAssertions: + @curry + def assertResultKeys(self, keys, result): + self.assertListEqual( + list(result.keys()), + keys + ) + + return result + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_empty_paths(self): + input_graph = make_test_graph() + + result = self.assertResultKeys( + ["rest"], + split_paths([], input_graph) + ) + + self.assertGraphEqual( + result["rest"], + input_graph + ) + + def test_empty_graph(self): + empty_graph = directed_graph([]) + + def test_empty(paths): + result = self.assertResultKeys( + ["rest"], + split_paths(paths, empty_graph) + ) + + self.assertGraphEqual( + result["rest"], + empty_graph + ) + + test_empty([]) + test_empty(["B"]) + + def test_split_paths_single(self): + result = self.assertResultKeys( + ["main", "common", "rest"], + split_paths(["B"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "F") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [ + ("Root1", "A"), + ("Root3", "C") + ], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["common"], + directed_graph([("D", "E")]) + ) + + def test_split_paths_multi(self): + result = self.assertResultKeys( + ["main", "common", "rest"], + split_paths(["B", "Root3"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "F"), + ("Root3", "C") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [("Root1", "A")], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["common"], + directed_graph([("D", "E")]) + ) + + def test_split_no_common(self): + result = self.assertResultKeys( + ["main", "rest"], + split_paths(["D"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph([("D", "E")]) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ("B", "F"), + ("Root2", "B"), + ("Root3", "C"), + ], + ["X"], + pick_keys(["Root1", "B", "X"], vertex_props_dict).items() + ) + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent.py new file mode 100644 index 0000000000000..8c32127cb93dc --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent.py @@ -0,0 +1,67 @@ +from toolz import curry +from toolz import curried as tlz +from operator import attrgetter + +from .lib import ( + debug, + debug_plot, + DEBUG_PLOT, + find_vertex_by_name_or_none, + is_None, + subcomponent_multi +) + + +call_counts = { + "in": 0, + "out": 0 +} + + +@curry +def subcomponent(mode, paths, graph): + if DEBUG_PLOT: + global call_counts + graph_name_prefix = f"subcomponent_{mode}_{call_counts[mode]}_" + call_counts[mode] += 1 + + layout = graph.layout('tree') + debug_plot(graph, f"{graph_name_prefix}input", layout=layout) + + path_indices = tlz.compose( + tlz.map(attrgetter('index')), + tlz.remove(is_None), + tlz.map(find_vertex_by_name_or_none(graph)) + )(paths) + + debug("path_indices", path_indices) + + main_indices = list(subcomponent_multi(graph, path_indices, mode)) + + debug('main_indices', main_indices) + + if DEBUG_PLOT: + def choose_color(index): + if (index in main_indices): + return "green" + else: + return "red" + + vertex_color = [choose_color(v.index) for v in graph.vs] + + debug_plot( + graph, + f"{graph_name_prefix}result", + layout=layout, + vertex_color=vertex_color + ) + + return { + "main": graph.induced_subgraph(main_indices), + "rest": graph - main_indices + } + + +subcomponent_in = subcomponent("in") + +subcomponent_out = subcomponent("out") diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent_test.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent_test.py new file mode 100644 index 0000000000000..1a6138af0ba1c --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/subcomponent_test.py @@ -0,0 +1,219 @@ +import unittest + +from . import test_helpers as th + +from .subcomponent import ( + subcomponent_out, + subcomponent_in +) + +from .lib import ( + pick_keys, + directed_graph, + empty_directed_graph +) + + +if __name__ == "__main__": + unittest.main() + + +# Making sure vertex attrs are preserved. +vertex_props_dict = { + "Root1": {"a": 1, "b": 1}, + "B": {"b": 2}, + "X": {"x": 3} +} + + +def make_test_graph(): + edges = [ + ("Root1", "A"), + ("A", "B"), + ("A", "C"), + ("B", "D"), + ("B", "E"), + ("Root2", "B"), + ("Root3", "C"), + ] + + detached_vertices = ["X"] + + vertex_props = vertex_props_dict.items() + + return directed_graph(edges, detached_vertices, vertex_props) + + +class CustomAssertions: + def assertResultKeys(self, result): + self.assertListEqual( + list(result.keys()), + ["main", "rest"] + ) + + return result + + +class Test( + unittest.TestCase, + CustomAssertions, + th.CustomAssertions +): + + def test_empty_paths(self): + def test(func): + input_graph = make_test_graph() + + result = self.assertResultKeys( + func([], input_graph) + ) + + self.assertGraphEqual( + result["main"], + empty_directed_graph() + ) + + self.assertGraphEqual( + result["rest"], + input_graph + ) + + test(subcomponent_out) + test(subcomponent_in) + + def test_empty_graph(self): + def test(func): + empty_graph = empty_directed_graph() + + def test_empty(paths): + result = self.assertResultKeys( + func(paths, empty_graph) + ) + + self.assertGraphEqual( + result["main"], + empty_graph + ) + + self.assertGraphEqual( + result["rest"], + empty_graph + ) + + test_empty([]) + test_empty(["B"]) + + test(subcomponent_out) + test(subcomponent_in) + + def test_subcomponent_out(self): + result = self.assertResultKeys( + subcomponent_out(["B"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "D"), + ("B", "E") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [ + ("Root1", "A"), + ("A", "C"), + ("Root3", "C") + ], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + def test_subcomponent_out_multi(self): + result = self.assertResultKeys( + subcomponent_out(["B", "Root3"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("B", "D"), + ("B", "E"), + ("Root3", "C") + ], + None, + pick_keys(["B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [("Root1", "A")], + ["Root2", "X"], + pick_keys(["Root1", "X"], vertex_props_dict).items() + ) + ) + + def test_subcomponent_in(self): + result = self.assertResultKeys( + subcomponent_in(["B"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ("Root2", "B") + ], + None, + pick_keys(["Root1", "B"], vertex_props_dict).items() + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [("Root3", "C")], + ["D", "E", "X"], + pick_keys(["X"], vertex_props_dict).items() + ) + ) + + def test_subcomponent_in_multi(self): + result = self.assertResultKeys( + subcomponent_in(["B", "Root3"], make_test_graph()) + ) + + self.assertGraphEqual( + result["main"], + directed_graph( + [ + ("Root1", "A"), + ("A", "B"), + ("Root2", "B"), + ], + ["Root3"], + pick_keys(["Root1", "B"], vertex_props_dict).items() + + ) + ) + + self.assertGraphEqual( + result["rest"], + directed_graph( + [], + ["C", "D", "E", "X"], + pick_keys(["X"], vertex_props_dict).items() + ) + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/test_helpers.py b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/test_helpers.py new file mode 100644 index 0000000000000..8bbe48a4c4e12 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/flatten_references_graph/test_helpers.py @@ -0,0 +1,37 @@ +from toolz import curried as tlz + +from .lib import ( + not_None, + graph_vertex_index_to_name +) + + +def edges_as_set(graph): + return frozenset( + ( + graph_vertex_index_to_name(graph, e.source), + graph_vertex_index_to_name(graph, e.target) + ) for e in graph.es + ) + + +class CustomAssertions: + def assertGraphEqual(self, g1, g2): + self.assertSetEqual( + frozenset(g1.vs["name"]), + frozenset(g2.vs["name"]) + ) + + self.assertSetEqual( + edges_as_set(g1), + edges_as_set(g2) + ) + + for name in g1.vs["name"]: + def get_vertex_attrs(g): + return tlz.valfilter(not_None, g.vs.find(name).attributes()) + + self.assertDictEqual( + get_vertex_attrs(g1), + get_vertex_attrs(g2), + ) diff --git a/pkgs/by-name/fl/flattenReferencesGraph/src/setup.py b/pkgs/by-name/fl/flattenReferencesGraph/src/setup.py new file mode 100644 index 0000000000000..6e862d64c4f76 --- /dev/null +++ b/pkgs/by-name/fl/flattenReferencesGraph/src/setup.py @@ -0,0 +1,17 @@ +from setuptools import setup + +setup( + name="flatten_references_graph", + version="0.1.0", + author="Adrian Gierakowski", + packages=["flatten_references_graph"], + install_requires=[ + "igraph", + "toolz" + ], + entry_points={ + "console_scripts": [ + "flatten_references_graph=flatten_references_graph.__main__:main" + ] + } +) diff --git a/pkgs/by-name/gi/git-graph/package.nix b/pkgs/by-name/gi/git-graph/package.nix index e801cb0e23bf0..3cfda78c3af18 100644 --- a/pkgs/by-name/gi/git-graph/package.nix +++ b/pkgs/by-name/gi/git-graph/package.nix @@ -6,23 +6,23 @@ rustPlatform.buildRustPackage rec { pname = "git-graph"; - version = "unstable-2023-01-14"; + version = "0.6.0"; src = fetchFromGitHub { owner = "mlange-42"; repo = pname; - rev = "9bd54eb0aed6f108364bce9ad0bdff12077038fc"; - hash = "sha256-tMM/mpt9yzZYSpnOGBuGLM0XTJiiyChfUrERMuyn3mQ="; + rev = "refs/tags/${version}"; + hash = "sha256-xYUpLujePO1MS0c25UJX5rRdmPzkaFgF5zJonzQOJqM="; }; - cargoHash = "sha256-ZLF/l2HnIbmkayWXhjYr01M6lGaGiK2UYyp654ncxgo="; + cargoHash = "sha256-y5tVjWj/LczblkL793878vzDG0Gtj3kIo2jZlRA6GJE="; meta = with lib; { description = "Command line tool to show clear git graphs arranged for your branching model"; homepage = "https://github.com/mlange-42/git-graph"; license = licenses.mit; broken = stdenv.hostPlatform.isDarwin; - maintainers = with maintainers; [ cafkafk ]; + maintainers = with maintainers; [ cafkafk matthiasbeyer ]; mainProgram = "git-graph"; }; } diff --git a/pkgs/by-name/gk/gkraken/package.nix b/pkgs/by-name/gk/gkraken/package.nix deleted file mode 100644 index 9866c049fa7aa..0000000000000 --- a/pkgs/by-name/gk/gkraken/package.nix +++ /dev/null @@ -1,87 +0,0 @@ -{ python3Packages -, lib -, fetchFromGitLab -, meson -, pkg-config -, glib -, ninja -, desktop-file-utils -, gobject-introspection -, gtk3 -, libnotify -, dbus -, wrapGAppsHook3 -}: - -python3Packages.buildPythonApplication rec { - pname = "gkraken"; - version = "1.2.0"; - - src = fetchFromGitLab { - owner = "leinardi"; - repo = "gkraken"; - rev = version; - sha256 = "0hxlh0319rl28iba02917z3n6d5cq2qcgpj2ng31bkjjhlvvfm2g"; - }; - - format = "other"; - - postPatch = '' - patchShebangs scripts/meson_post_install.py - ''; - - nativeBuildInputs = [ - meson - pkg-config - gobject-introspection - glib - ninja - gtk3 - desktop-file-utils - wrapGAppsHook3 - ]; - - buildInputs = [ - glib - gtk3 - libnotify - dbus - ]; - - propagatedBuildInputs = with python3Packages; [ - pygobject3 - peewee - rx - injector - liquidctl - pyxdg - requests - matplotlib - dbus-python - ]; - - dontWrapGApps = true; - - # Extract udev rules from python code - postInstall = '' - mkdir -p $out/lib/udev/rules.d - sed -e '/\s*\(from\|@singleton\|@inject\)/d' $src/gkraken/interactor/udev_interactor.py > udev_interactor.py - python -c 'from udev_interactor import _UDEV_RULE; print(_UDEV_RULE)' > $out/lib/udev/rules.d/60-gkraken.rules - ''; - - preFixup = '' - makeWrapperArgs+=( - "''${gappsWrapperArgs[@]}" - ) - ''; - - meta = with lib; { - description = "GUI that allows to control the cooling (fan and/or pump profiles) of NZXT Kraken AIO liquid coolers from Linux"; - homepage = "https://gitlab.com/leinardi/gkraken"; - changelog = "https://gitlab.com/leinardi/gkraken/-/tags/${version}"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ OPNA2608 ]; - platforms = platforms.linux; - mainProgram = "gkraken"; - }; -} diff --git a/pkgs/by-name/go/gose/package.nix b/pkgs/by-name/go/gose/package.nix new file mode 100644 index 0000000000000..747d054878e75 --- /dev/null +++ b/pkgs/by-name/go/gose/package.nix @@ -0,0 +1,80 @@ +{ + buildGoModule, + buildNpmPackage, + nix-update-script, + versionCheckHook, + fetchFromGitHub, + lib, +}: +let + version = "0.8.0"; + rev = "a1e92b4bcdaf81d5b5e8f3edab60e33549e9009b"; + + src = fetchFromGitHub { + repo = "gose"; + owner = "stv0g"; + inherit rev; + hash = "sha256-Vcp9gMJ296KS8OFOIcWvvYrS+LrOVlN3KN20yJxoo5U="; + }; + + frontend = buildNpmPackage { + pname = "gose-frontend"; + inherit version; + src = "${src}/frontend"; + + npmDepsHash = "sha256-p24s2SgCL8E9vUoZEyWSrd15IdkprneAXS7dwb7UbyA="; + + installPhase = '' + runHook preInstall + find ./dist + mkdir $out + cp -r dist/* $out/ + runHook postInstall + ''; + }; +in +buildGoModule { + pname = "gose"; + inherit version; + inherit src; + + vendorHash = "sha256-U/umJ6McCuD0HARVMj1JXHOpVxcph16z7Y7i47Nf3cg="; + + CGO_ENABLED = 0; + + postInstall = '' + mv $out/bin/cmd $out/bin/gose + ''; + + tags = [ "embed" ]; + ldflags = [ + "-s" + "-w" + "-X main.version=${version}" + "-X main.commit=${rev}" + "-X main.builtBy=Nix" + ]; + + # Skipping test which relies on internet services. + checkFlags = "-skip TestShortener"; + + nativeInstallCheckInputs = [ + versionCheckHook + ]; + versionCheckProgramArg = "-version"; + doInstallCheck = true; + + prePatch = '' + cp -r ${frontend} frontend/dist + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Modern and scalable file-uploader focusing on scalability and simplicity"; + homepage = "https://github.com/stv0g/gose"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ stv0g ]; + mainProgram = "gose"; + }; +} diff --git a/pkgs/by-name/me/melonDS/package.nix b/pkgs/by-name/me/melonDS/package.nix index d08bd3c5af835..e7788eec987d9 100644 --- a/pkgs/by-name/me/melonDS/package.nix +++ b/pkgs/by-name/me/melonDS/package.nix @@ -27,13 +27,13 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "melonDS"; - version = "0.9.5-unstable-2024-09-29"; + version = "1.0rc-unstable-2024-11-27"; src = fetchFromGitHub { owner = "melonDS-emu"; repo = "melonDS"; - rev = "e9446fa9dc3ba64c22f8e5bb611ad394b5729eda"; - hash = "sha256-0YNF9NPKaaKzC3d8cXG4Od3AUc1zxVtuB5u2Q8ruwr0="; + rev = "cba838dd52a8d163c59e312d75f451a04cea9b48"; + hash = "sha256-0Pv2ARbQkYaGDQ7AMLlMdK1MjnsctPIIWxGz2XNTNmI="; }; nativeBuildInputs = [ diff --git a/pkgs/by-name/me/meteo-qt/package.nix b/pkgs/by-name/me/meteo-qt/package.nix index 33df8b4095b5d..66b70d6638b7a 100644 --- a/pkgs/by-name/me/meteo-qt/package.nix +++ b/pkgs/by-name/me/meteo-qt/package.nix @@ -29,6 +29,10 @@ python3Packages.buildPythonApplication rec { pyqt5 ]; + postFixup = '' + mv $out/${python3Packages.python.sitePackages}/usr/share $out/share + ''; + pythonImportsCheck = [ "meteo_qt" ]; makeWrapperArgs = [ "\${qtWrapperArgs[@]}" ]; diff --git a/pkgs/by-name/mi/mistral-rs/Cargo.lock b/pkgs/by-name/mi/mistral-rs/Cargo.lock deleted file mode 100644 index d3b1750c50b3f..0000000000000 --- a/pkgs/by-name/mi/mistral-rs/Cargo.lock +++ /dev/null @@ -1,5005 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "accelerate-src" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "415ed64958754dbe991900f3940677e6a7eefb4d7367afd70d642677b0c7d19d" - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "akin" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1763692fc1416554cf051efc56a3de5595eca47299d731cc5c2b583adf8b4d2f" - -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.6.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" - -[[package]] -name = "anstyle-parse" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" -dependencies = [ - "anstyle", - "windows-sys 0.59.0", -] - -[[package]] -name = "anyhow" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" -dependencies = [ - "backtrace", -] - -[[package]] -name = "arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "as-any" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a30a44e99a1c83ccb2a6298c563c888952a1c9134953db26876528f84c93a" - -[[package]] -name = "async-trait" -version = "0.1.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - -[[package]] -name = "axum" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" -dependencies = [ - "async-trait", - "axum-core", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "tokio", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper 1.0.1", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide 0.8.0", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "bindgen_cuda" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8489af5b7d17a81bffe37e0f4d6e1e4de87c87329d05447f22c35d95a1227d" -dependencies = [ - "glob", - "num_cpus", - "rayon", -] - -[[package]] -name = "bindgen_cuda" -version = "0.1.6" -source = "git+https://github.com/guoqingbao/bindgen_cuda.git#fb7ed75f3901b146aa1ba460baaeed5b494f2e0d" -dependencies = [ - "glob", - "num_cpus", - "rayon", -] - -[[package]] -name = "bit_field" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "buildstructor" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3907aac66c65520545ae3cb3c195306e20d5ed5c90bfbb992e061cf12a104d0" -dependencies = [ - "lazy_static", - "proc-macro2", - "quote", - "str_inflector", - "syn 2.0.85", - "thiserror", - "try_match", -] - -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "bytemuck" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "byteorder-lite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" - -[[package]] -name = "bytes" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" - -[[package]] -name = "candle-core" -version = "0.7.2" -source = "git+https://github.com/EricLBuehler/candle.git?rev=629ec72#629ec72d08953f79eae6af3f260e090397b29646" -dependencies = [ - "accelerate-src", - "byteorder", - "candle-kernels", - "candle-metal-kernels", - "cudarc", - "float8", - "gemm", - "half", - "intel-mkl-src", - "libc", - "memmap2", - "metal 0.27.0", - "num-traits", - "num_cpus", - "rand", - "rand_distr", - "rayon", - "safetensors", - "thiserror", - "ug", - "ug-cuda", - "ug-metal", - "yoke", - "zip", -] - -[[package]] -name = "candle-flash-attn" -version = "0.7.2" -source = "git+https://github.com/EricLBuehler/candle.git?rev=629ec72#629ec72d08953f79eae6af3f260e090397b29646" -dependencies = [ - "anyhow", - "bindgen_cuda 0.1.5", - "candle-core", - "half", -] - -[[package]] -name = "candle-kernels" -version = "0.7.2" -source = "git+https://github.com/EricLBuehler/candle.git?rev=629ec72#629ec72d08953f79eae6af3f260e090397b29646" -dependencies = [ - "bindgen_cuda 0.1.5", -] - -[[package]] -name = "candle-metal-kernels" -version = "0.7.2" -source = "git+https://github.com/EricLBuehler/candle.git?rev=629ec72#629ec72d08953f79eae6af3f260e090397b29646" -dependencies = [ - "metal 0.27.0", - "once_cell", - "thiserror", - "tracing", -] - -[[package]] -name = "candle-nn" -version = "0.7.2" -source = "git+https://github.com/EricLBuehler/candle.git?rev=629ec72#629ec72d08953f79eae6af3f260e090397b29646" -dependencies = [ - "accelerate-src", - "candle-core", - "candle-metal-kernels", - "half", - "intel-mkl-src", - "metal 0.27.0", - "num-traits", - "rayon", - "safetensors", - "serde", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" -dependencies = [ - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "cfgrammar" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6026d8cd82ada8bbcfe337805dd1eb6afdc9e80fa4d57e977b3a36315e0c5525" -dependencies = [ - "indexmap", - "lazy_static", - "num-traits", - "regex", - "serde", - "vob", -] - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-targets 0.52.6", -] - -[[package]] -name = "chrono-tz" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" -dependencies = [ - "chrono", - "chrono-tz-build", - "phf", -] - -[[package]] -name = "chrono-tz-build" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" -dependencies = [ - "parse-zoneinfo", - "phf", - "phf_codegen", -] - -[[package]] -name = "clap" -version = "4.5.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim 0.11.1", - "terminal_size", -] - -[[package]] -name = "clap_derive" -version = "4.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "clap_lex" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" - -[[package]] -name = "cli-table" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53f9241f288a7b12c56565f04aaeaeeab6b8923d42d99255d4ca428b4d97f89" -dependencies = [ - "cli-table-derive", - "csv", - "termcolor", - "unicode-width", -] - -[[package]] -name = "cli-table-derive" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e83a93253aaae7c74eb7428ce4faa6e219ba94886908048888701819f82fb94" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colorchoice" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" - -[[package]] -name = "console" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.52.0", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crossterm" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" -dependencies = [ - "bitflags 1.3.2", - "crossterm_winapi", - "libc", - "mio 0.8.11", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "csv" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" -dependencies = [ - "memchr", -] - -[[package]] -name = "ctrlc" -version = "3.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" -dependencies = [ - "nix", - "windows-sys 0.59.0", -] - -[[package]] -name = "cudarc" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38cd60a9a42ec83a2ed7effb0b1f073270264ea99da7acfc44f7e8d74dee0384" -dependencies = [ - "half", - "libloading", -] - -[[package]] -name = "darling" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbffa8f8e38810422f320ca457a93cf1cd0056dc9c06c556b867558e0d471463" -dependencies = [ - "darling_core 0.11.0", - "darling_macro 0.11.0", -] - -[[package]] -name = "darling" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" -dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", -] - -[[package]] -name = "darling_core" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e172685d94b7b83800e3256a63261537b9d6129e10f21c8e13ddf9dba8c64d" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.11.1", - "syn 2.0.85", -] - -[[package]] -name = "darling_macro" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0618ac802792cebd1918ac6042a6ea1eeab92db34b35656afaa577929820788" -dependencies = [ - "darling_core 0.11.0", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" -dependencies = [ - "darling_core 0.20.10", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "data-url" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" - -[[package]] -name = "defmac" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafbece59594ed57696a1a69e8bb3ca1683fbc9cdb41d5c02726070b2cd8f19d" - -[[package]] -name = "derive-new" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "derive_arbitrary" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling 0.20.10", - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn 2.0.85", -] - -[[package]] -name = "derive_more" -version = "0.99.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "directories" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "dyn-stack" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e53799688f5632f364f8fb387488dd05db9fe45db7011be066fc20e7027f8b" -dependencies = [ - "bytemuck", - "reborrow", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -dependencies = [ - "serde", -] - -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "esaxx-rs" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6" -dependencies = [ - "cc", -] - -[[package]] -name = "exr" -version = "1.72.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" -dependencies = [ - "bit_field", - "flume", - "half", - "lebe", - "miniz_oxide 0.7.4", - "rayon-core", - "smallvec", - "zune-inflate", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fastrand" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" - -[[package]] -name = "fdeflate" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "filetime" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] - -[[package]] -name = "flate2" -version = "1.0.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" -dependencies = [ - "crc32fast", - "miniz_oxide 0.8.0", -] - -[[package]] -name = "float8" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c3475274d374d263c4c40c43ad854c5bdf733c7db775bbd3c1ca2ad7427978" -dependencies = [ - "cudarc", - "half", - "num-traits", - "rand", - "rand_distr", -] - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared 0.1.1", -] - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared 0.3.1", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "galil-seiferas" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794ac25cfda3fa11d2b07ff8c65889c6c03411646df54e59e606878d899e1d5a" -dependencies = [ - "defmac", - "unchecked-index", -] - -[[package]] -name = "gemm" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab24cc62135b40090e31a76a9b2766a501979f3070fa27f689c27ec04377d32" -dependencies = [ - "dyn-stack", - "gemm-c32", - "gemm-c64", - "gemm-common", - "gemm-f16", - "gemm-f32", - "gemm-f64", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-c32" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9c030d0b983d1e34a546b86e08f600c11696fde16199f971cd46c12e67512c0" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-c64" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb5f2e79fefb9693d18e1066a557b4546cd334b226beadc68b11a8f9431852a" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-common" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e7ea062c987abcd8db95db917b4ffb4ecdfd0668471d8dc54734fdff2354e8" -dependencies = [ - "bytemuck", - "dyn-stack", - "half", - "num-complex", - "num-traits", - "once_cell", - "paste", - "pulp", - "raw-cpuid", - "rayon", - "seq-macro", - "sysctl", -] - -[[package]] -name = "gemm-f16" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca4c06b9b11952071d317604acb332e924e817bd891bec8dfb494168c7cedd4" -dependencies = [ - "dyn-stack", - "gemm-common", - "gemm-f32", - "half", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "rayon", - "seq-macro", -] - -[[package]] -name = "gemm-f32" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9a69f51aaefbd9cf12d18faf273d3e982d9d711f60775645ed5c8047b4ae113" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "gemm-f64" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa397a48544fadf0b81ec8741e5c0fba0043008113f71f2034def1935645d2b0" -dependencies = [ - "dyn-stack", - "gemm-common", - "num-complex", - "num-traits", - "paste", - "raw-cpuid", - "seq-macro", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "getset" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f636605b743120a8d32ed92fc27b6cde1a769f8f936c065151eb66f88ded513c" -dependencies = [ - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "gif" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "bytemuck", - "cfg-if", - "crunchy", - "num-traits", - "rand", - "rand_distr", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hashbrown" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hf-hub" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b780635574b3d92f036890d8373433d6f9fc7abb320ee42a5c25897fc8ed732" -dependencies = [ - "dirs", - "indicatif", - "log", - "native-tls", - "rand", - "serde", - "serde_json", - "thiserror", - "ureq", -] - -[[package]] -name = "http" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" -dependencies = [ - "bytes", - "futures-util", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" -dependencies = [ - "futures-util", - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "image" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc144d44a31d753b02ce64093d532f55ff8dc4ebf2ffb8a63c0dda691385acae" -dependencies = [ - "bytemuck", - "byteorder-lite", - "color_quant", - "exr", - "gif", - "image-webp", - "num-traits", - "png", - "qoi", - "tiff", - "zune-core", - "zune-jpeg", -] - -[[package]] -name = "image-webp" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" -dependencies = [ - "byteorder-lite", - "quick-error", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" -dependencies = [ - "equivalent", - "hashbrown 0.15.0", - "serde", -] - -[[package]] -name = "indicatif" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" -dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "rayon", - "unicode-width", -] - -[[package]] -name = "indoc" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "intel-mkl-src" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee70586cd5b3e772a8739a1bd43eaa90d4f4bf0fb2a4edc202e979937ee7f5e" -dependencies = [ - "anyhow", - "intel-mkl-tool", - "ocipkg", -] - -[[package]] -name = "intel-mkl-tool" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "887a16b4537d82227af54d3372971cfa5e0cde53322e60f57584056c16ada1b4" -dependencies = [ - "anyhow", - "log", - "walkdir", -] - -[[package]] -name = "ipnet" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "jpeg-decoder" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" - -[[package]] -name = "js-sys" -version = "0.3.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "libc" -version = "0.2.161" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" - -[[package]] -name = "libloading" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" -dependencies = [ - "cfg-if", - "windows-targets 0.52.6", -] - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.6.0", - "libc", - "redox_syscall", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - -[[package]] -name = "lrtable" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d42d2752cb50a171efadda0cb6fa97432e8bf05accfff3eed320b87e80a2f69e" -dependencies = [ - "cfgrammar", - "fnv", - "num-traits", - "sparsevec", - "vob", -] - -[[package]] -name = "macro_rules_attribute" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13" -dependencies = [ - "macro_rules_attribute-proc_macro", - "paste", -] - -[[package]] -name = "macro_rules_attribute-proc_macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" -dependencies = [ - "libc", - "stable_deref_trait", -] - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "metal" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" -dependencies = [ - "bitflags 2.6.0", - "block", - "core-graphics-types", - "foreign-types 0.5.0", - "log", - "objc", - "paste", -] - -[[package]] -name = "metal" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" -dependencies = [ - "bitflags 2.6.0", - "block", - "core-graphics-types", - "foreign-types 0.5.0", - "log", - "objc", - "paste", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minijinja" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9ca8daf4b0b4029777f1bc6e1aedd1aec7b74c276a43bc6f620a8e1a1c0a90e" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "minijinja-contrib" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ffd46ee854be23604a20efd6c9655374fefbe4d44b949dc0f907305d92873a" -dependencies = [ - "minijinja", - "serde", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mio" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" -dependencies = [ - "hermit-abi", - "libc", - "wasi", - "windows-sys 0.52.0", -] - -[[package]] -name = "mistralrs" -version = "0.3.2" -dependencies = [ - "anyhow", - "candle-core", - "either", - "futures", - "image", - "indexmap", - "mistralrs-core", - "rand", - "reqwest", - "serde", - "serde_json", - "tokio", -] - -[[package]] -name = "mistralrs-bench" -version = "0.3.2" -dependencies = [ - "anyhow", - "candle-core", - "clap", - "cli-table", - "mistralrs-core", - "serde", - "serde_json", - "tokio", - "tracing", -] - -[[package]] -name = "mistralrs-core" -version = "0.3.2" -dependencies = [ - "accelerate-src", - "akin", - "anyhow", - "as-any", - "async-trait", - "base64 0.22.1", - "bindgen_cuda 0.1.5", - "buildstructor", - "bytemuck", - "bytemuck_derive", - "candle-core", - "candle-flash-attn", - "candle-nn", - "cfgrammar", - "chrono", - "clap", - "csv", - "derive-new", - "derive_more", - "dirs", - "either", - "float8", - "futures", - "galil-seiferas", - "half", - "hf-hub", - "image", - "indexmap", - "indicatif", - "intel-mkl-src", - "itertools 0.13.0", - "lrtable", - "minijinja", - "minijinja-contrib", - "mistralrs-paged-attn", - "mistralrs-quant", - "mistralrs-vision", - "once_cell", - "pyo3", - "radix_trie", - "rand", - "rand_isaac", - "rayon", - "regex", - "regex-automata 0.4.8", - "reqwest", - "rustc-hash", - "safetensors", - "schemars", - "serde", - "serde_json", - "serde_plain", - "serde_yaml", - "strum", - "sysinfo", - "thiserror", - "tokenizers", - "tokio", - "tokio-rayon", - "toml", - "tqdm", - "tracing", - "tracing-subscriber", - "uuid 1.11.0", - "variantly", - "vob", -] - -[[package]] -name = "mistralrs-paged-attn" -version = "0.3.2" -dependencies = [ - "anyhow", - "bindgen_cuda 0.1.6", - "candle-core", - "float8", - "half", -] - -[[package]] -name = "mistralrs-pyo3" -version = "0.3.2" -dependencies = [ - "accelerate-src", - "anyhow", - "base64 0.22.1", - "candle-core", - "data-url", - "either", - "futures", - "image", - "indexmap", - "intel-mkl-src", - "mistralrs-core", - "pyo3", - "pyo3-build-config", - "reqwest", - "serde", - "serde_json", - "tokio", - "url", -] - -[[package]] -name = "mistralrs-quant" -version = "0.3.2" -dependencies = [ - "bindgen_cuda 0.1.5", - "byteorder", - "candle-core", - "candle-nn", - "float8", - "half", - "lazy_static", - "once_cell", - "paste", - "rayon", - "serde", - "tracing", -] - -[[package]] -name = "mistralrs-server" -version = "0.3.2" -dependencies = [ - "accelerate-src", - "anyhow", - "axum", - "candle-core", - "clap", - "ctrlc", - "data-url", - "either", - "futures", - "image", - "indexmap", - "intel-mkl-src", - "mistralrs-core", - "once_cell", - "reqwest", - "serde", - "serde_json", - "tokio", - "tower-http", - "tracing", - "url", - "utoipa", - "utoipa-swagger-ui", -] - -[[package]] -name = "mistralrs-vision" -version = "0.3.2" -dependencies = [ - "candle-core", - "image", -] - -[[package]] -name = "monostate" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d208407d7552cd041d8cdb69a1bc3303e029c598738177a3d87082004dc0e1e" -dependencies = [ - "monostate-impl", - "serde", -] - -[[package]] -name = "monostate-impl" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "bytemuck", - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "object" -version = "0.36.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] - -[[package]] -name = "oci-spec" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf88ddc01cc6bccbe1044adb6a29057333f523deadcb4953c011a73158cfa5e" -dependencies = [ - "derive_builder", - "getset", - "serde", - "serde_json", - "strum", - "strum_macros", - "thiserror", -] - -[[package]] -name = "ocipkg" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb3293021f06540803301af45e7ab81693d50e89a7398a3420bdab139e7ba5e" -dependencies = [ - "base16ct", - "base64 0.22.1", - "chrono", - "directories", - "flate2", - "lazy_static", - "log", - "oci-spec", - "regex", - "serde", - "serde_json", - "sha2", - "tar", - "thiserror", - "toml", - "ureq", - "url", - "uuid 1.11.0", - "walkdir", -] - -[[package]] -name = "once_cell" -version = "1.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" - -[[package]] -name = "onig" -version = "6.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" -dependencies = [ - "bitflags 1.3.2", - "libc", - "once_cell", - "onig_sys", -] - -[[package]] -name = "onig_sys" -version = "69.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "openssl" -version = "0.10.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types 0.3.2", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "packedvec" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde3c690ec20e4a2b4fb46f0289a451181eb50011a1e2acc8d85e2fde9062a45" -dependencies = [ - "num-traits", - "serde", -] - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "parse-zoneinfo" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" -dependencies = [ - "regex", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared", - "rand", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" - -[[package]] -name = "png" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide 0.8.0", -] - -[[package]] -name = "portable-atomic" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "proc-macro-crate" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "proc-macro2" -version = "1.0.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "pulp" -version = "0.18.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0a01a0dc67cf4558d279f0c25b0962bd08fc6dec0137699eae304103e882fe6" -dependencies = [ - "bytemuck", - "libm", - "num-complex", - "reborrow", -] - -[[package]] -name = "pyo3" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d922163ba1f79c04bc49073ba7b32fd5a8d3b76a87c955921234b8e77333c51" -dependencies = [ - "anyhow", - "cfg-if", - "chrono", - "chrono-tz", - "either", - "eyre", - "hashbrown 0.14.5", - "indexmap", - "indoc", - "libc", - "memoffset", - "num-bigint", - "num-complex", - "num-rational", - "once_cell", - "portable-atomic", - "pyo3-build-config", - "pyo3-ffi", - "pyo3-macros", - "rust_decimal", - "serde", - "smallvec", - "unindent", -] - -[[package]] -name = "pyo3-build-config" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc38c5feeb496c8321091edf3d63e9a6829eab4b863b4a6a65f26f3e9cc6b179" -dependencies = [ - "once_cell", - "target-lexicon", -] - -[[package]] -name = "pyo3-ffi" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94845622d88ae274d2729fcefc850e63d7a3ddff5e3ce11bd88486db9f1d357d" -dependencies = [ - "libc", - "pyo3-build-config", -] - -[[package]] -name = "pyo3-macros" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e655aad15e09b94ffdb3ce3d217acf652e26bbc37697ef012f5e5e348c716e5e" -dependencies = [ - "proc-macro2", - "pyo3-macros-backend", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "pyo3-macros-backend" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1e3f09eecd94618f60a455a23def79f79eba4dc561a97324bf9ac8c6df30ce" -dependencies = [ - "heck", - "proc-macro2", - "pyo3-build-config", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - -[[package]] -name = "quinn" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" -dependencies = [ - "bytes", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "quinn-proto" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" -dependencies = [ - "bytes", - "rand", - "ring", - "rustc-hash", - "rustls", - "slab", - "thiserror", - "tinyvec", - "tracing", -] - -[[package]] -name = "quinn-udp" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" -dependencies = [ - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "rand_isaac" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac4373cd91b4f55722c553fb0f286edbb81ef3ff6eec7b99d1898a4110a0b28" -dependencies = [ - "rand_core", -] - -[[package]] -name = "raw-cpuid" -version = "10.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-cond" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059f538b55efd2309c9794130bc149c6a553db90e9d99c2030785c82f0bd7df9" -dependencies = [ - "either", - "itertools 0.11.0", - "rayon", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "reborrow" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" - -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.8", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "reqwest" -version = "0.12.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" -dependencies = [ - "base64 0.22.1", - "bytes", - "encoding_rs", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-tls", - "hyper-util", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pemfile", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "system-configuration", - "tokio", - "tokio-native-tls", - "tokio-rustls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "windows-registry", -] - -[[package]] -name = "ring" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom", - "libc", - "spin", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rust-embed" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn 2.0.85", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" -dependencies = [ - "sha2", - "walkdir", -] - -[[package]] -name = "rust_decimal" -version = "1.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" -dependencies = [ - "arrayvec", - "num-traits", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc-hash" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.38.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.23.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" - -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "safetensors" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44560c11236a6130a46ce36c836a62936dc81ebf8c36a37947423571be0e55b6" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "schemars" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.85", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" - -[[package]] -name = "seq-macro" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" - -[[package]] -name = "serde" -version = "1.0.213" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.213" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "serde_json" -version = "1.0.132" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" -dependencies = [ - "itoa", - "serde", -] - -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_spanned" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" -dependencies = [ - "libc", - "mio 0.8.11", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "sparsevec" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35df5d2e580b29f3f7ec5b4ed49b0ab3acf7f3624122b3e823cafb9630f293b8" -dependencies = [ - "num-traits", - "packedvec", - "serde", - "vob", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spm_precompiled" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326" -dependencies = [ - "base64 0.13.1", - "nom", - "serde", - "unicode-segmentation", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "str_inflector" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0b848d5a7695b33ad1be00f84a3c079fe85c9278a325ff9159e6c99cef4ef7" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.85", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "sync_wrapper" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "sysctl" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7dddc5f0fee506baf8b9fdb989e242f17e4b11c61dfbb0635b705217199eea" -dependencies = [ - "bitflags 2.6.0", - "byteorder", - "enum-as-inner", - "libc", - "thiserror", - "walkdir", -] - -[[package]] -name = "sysinfo" -version = "0.30.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" -dependencies = [ - "cfg-if", - "core-foundation-sys", - "libc", - "ntapi", - "once_cell", - "rayon", - "windows", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.6.0", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tar" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - -[[package]] -name = "tempfile" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" -dependencies = [ - "cfg-if", - "fastrand", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "terminal_size" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef" -dependencies = [ - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "thiserror" -version = "1.0.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "tiff" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokenizers" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e500fad1dd3af3d626327e6a3fe5050e664a6eaa4708b8ca92f1794aaf73e6fd" -dependencies = [ - "aho-corasick", - "derive_builder", - "esaxx-rs", - "getrandom", - "indicatif", - "itertools 0.12.1", - "lazy_static", - "log", - "macro_rules_attribute", - "monostate", - "onig", - "paste", - "rand", - "rayon", - "rayon-cond", - "regex", - "regex-syntax 0.8.5", - "serde", - "serde_json", - "spm_precompiled", - "thiserror", - "unicode-normalization-alignments", - "unicode-segmentation", - "unicode_categories", -] - -[[package]] -name = "tokio" -version = "1.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio 1.0.2", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rayon" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf33a76e0b1dd03b778f83244137bd59887abf25c0e87bc3e7071105f457693" -dependencies = [ - "rayon", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls", - "rustls-pki-types", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.22.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 0.1.2", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" -dependencies = [ - "bitflags 2.6.0", - "bytes", - "http", - "http-body", - "http-body-util", - "pin-project-lite", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tqdm" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2d2932240205a99b65f15d9861992c95fbb8c9fb280b3a1f17a92db6dc611f" -dependencies = [ - "anyhow", - "crossterm", - "once_cell", -] - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "try_match" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b065c869a3f832418e279aa4c1d7088f9d5d323bde15a60a08e20c2cd4549082" -dependencies = [ - "try_match_inner", -] - -[[package]] -name = "try_match_inner" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9c81686f7ab4065ccac3df7a910c4249f8c0f3fb70421d6ddec19b9311f63f9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "ug" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4eef2ebfc18c67a6dbcacd9d8a4d85e0568cc58c82515552382312c2730ea13" -dependencies = [ - "half", - "num", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "ug-cuda" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4dcab280ad0ef3957e153a82dcad608c954d02cf253b695322f502d1f8902e" -dependencies = [ - "cudarc", - "half", - "serde", - "serde_json", - "thiserror", - "ug", -] - -[[package]] -name = "ug-metal" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4ed1df2c20a1a138f993041f650cc84ff27aaefb4342b7f986e77d00e80799" -dependencies = [ - "half", - "metal 0.29.0", - "objc", - "serde", - "serde_json", - "thiserror", - "ug", -] - -[[package]] -name = "unchecked-index" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeba86d422ce181a719445e51872fa30f1f7413b62becb52e95ec91aa262d85c" - -[[package]] -name = "unicase" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" - -[[package]] -name = "unicode-bidi" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" - -[[package]] -name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-normalization-alignments" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de" -dependencies = [ - "smallvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - -[[package]] -name = "unindent" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" - -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "ureq" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" -dependencies = [ - "base64 0.22.1", - "flate2", - "log", - "native-tls", - "once_cell", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "url", - "webpki-roots", -] - -[[package]] -name = "url" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "utoipa" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5afb1a60e207dca502682537fefcfd9921e71d0b83e9576060f09abc6efab23" -dependencies = [ - "indexmap", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "4.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c24e8ab68ff9ee746aad22d39b5535601e6416d1b0feeabf78be986a5c4392" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "regex", - "syn 2.0.85", -] - -[[package]] -name = "utoipa-swagger-ui" -version = "7.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943e0ff606c6d57d410fd5663a4d7c074ab2c5f14ab903b9514565e59fa1189e" -dependencies = [ - "axum", - "mime_guess", - "regex", - "reqwest", - "rust-embed", - "serde", - "serde_json", - "url", - "utoipa", - "zip", -] - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom", -] - -[[package]] -name = "uuid" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" -dependencies = [ - "getrandom", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "variantly" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a332341ba79a179d9e9b33c0d72fbf3dc2c80e1be79416401a08d2b820ef56" -dependencies = [ - "Inflector", - "darling 0.11.0", - "proc-macro2", - "quote", - "syn 1.0.109", - "uuid 0.8.2", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vob" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c058f4c41e71a043c67744cb76dcc1ae63ece328c1732a72489ccccc2dec23e6" -dependencies = [ - "num-traits", - "rustc_version", - "serde", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" -dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.85", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" - -[[package]] -name = "web-sys" -version = "0.3.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.26.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "weezl" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-registry" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" -dependencies = [ - "windows-result", - "windows-strings", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winnow" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" -dependencies = [ - "memchr", -] - -[[package]] -name = "xattr" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" -dependencies = [ - "libc", - "linux-raw-sys", - "rustix", -] - -[[package]] -name = "yoke" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - -[[package]] -name = "zerofrom" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" - -[[package]] -name = "zip" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc23c04387f4da0374be4533ad1208cbb091d5c11d070dfef13676ad6497164" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap", - "num_enum", - "thiserror", -] - -[[package]] -name = "zune-core" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" - -[[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "zune-jpeg" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" -dependencies = [ - "zune-core", -] diff --git a/pkgs/by-name/mi/mistral-rs/package.nix b/pkgs/by-name/mi/mistral-rs/package.nix index eb13f546c82c2..943a1c1e4e6d6 100644 --- a/pkgs/by-name/mi/mistral-rs/package.nix +++ b/pkgs/by-name/mi/mistral-rs/package.nix @@ -92,13 +92,8 @@ rustPlatform.buildRustPackage rec { hash = "sha256-aflzpJZ48AFBqNTssZl2KxkspQb662nGkEU6COIluxk="; }; - cargoLock = { - lockFile = ./Cargo.lock; - outputHashes = { - "bindgen_cuda-0.1.6" = "sha256-OWGcQxT+x5HyIFskNVWpPr6Qfkh6Mv/g4PVSm5oA27g="; - "candle-core-0.7.2" = "sha256-OovBzD1gEYToa3HT8oQtbY6sDy0heRwAH2cK7gz5Jm0="; - }; - }; + useFetchCargoVendor = true; + cargoHash = "sha256-USp8siEXVjtkPoCHfQjDYPtgLfNHcy02LSUNdwDbxgs="; nativeBuildInputs = [ pkg-config diff --git a/pkgs/by-name/no/nodeinfo/package.nix b/pkgs/by-name/no/nodeinfo/package.nix index 76577fd154c90..1d86aaa00226d 100644 --- a/pkgs/by-name/no/nodeinfo/package.nix +++ b/pkgs/by-name/no/nodeinfo/package.nix @@ -17,7 +17,7 @@ buildGoModule rec { }; modRoot = "./cli"; - tags = "extension"; + tags = [ "extension" ]; ldflags = [ "-s" "-w" diff --git a/pkgs/by-name/oo/ooniprobe-cli/package.nix b/pkgs/by-name/oo/ooniprobe-cli/package.nix index 66987f0215295..d1ed1447c1a80 100644 --- a/pkgs/by-name/oo/ooniprobe-cli/package.nix +++ b/pkgs/by-name/oo/ooniprobe-cli/package.nix @@ -5,16 +5,16 @@ buildGoModule rec { pname = "ooniprobe-cli"; - version = "3.23.0"; + version = "3.24.0"; src = fetchFromGitHub { owner = "ooni"; repo = "probe-cli"; rev = "v${version}"; - hash = "sha256-ey71XA/ZtN6AI/DyjqFGcY5XW9H0RoOjrmjDEIgJMkM="; + hash = "sha256-jg09yIX3jHMp0PwSwy2RMwYhZm0haJFTmpwcyTc5I0A="; }; - vendorHash = "sha256-wuCqyr7JuzRHJE8ct1DRi9aFJWeHdF1sxUjvQiBMa6I="; + vendorHash = "sha256-QH5PyCvfJWWDhjH6Jo8O3wBq3MwfpHWKSuYMmpaqjWk="; subPackages = [ "cmd/ooniprobe" ]; diff --git a/pkgs/by-name/pa/pappl/package.nix b/pkgs/by-name/pa/pappl/package.nix index 2e9ecc8150cab..780f8f32c8671 100644 --- a/pkgs/by-name/pa/pappl/package.nix +++ b/pkgs/by-name/pa/pappl/package.nix @@ -16,13 +16,13 @@ stdenv.mkDerivation rec { pname = "pappl"; - version = "1.4.7"; + version = "1.4.8"; src = fetchFromGitHub { owner = "michaelrsweet"; repo = "pappl"; rev = "refs/tags/v${version}"; - hash = "sha256-Npry3H+QbAH19hoqAZuOwjpZwCPhOLewD8uKZlo4gdQ="; + hash = "sha256-vp0DQvsQzuiXb5QAXVEcXNvyDJeRM99aO9/baZw9QwA="; }; outputs = [ diff --git a/pkgs/by-name/ra/rattler-build/package.nix b/pkgs/by-name/ra/rattler-build/package.nix new file mode 100644 index 0000000000000..02fe37a3dcab6 --- /dev/null +++ b/pkgs/by-name/ra/rattler-build/package.nix @@ -0,0 +1,51 @@ +{ + lib, + fetchFromGitHub, + rustPlatform, + versionCheckHook, + + openssl, + pkg-config, +}: + +rustPlatform.buildRustPackage rec { + pname = "rattler-build"; + version = "0.29.0"; + + src = fetchFromGitHub { + owner = "prefix-dev"; + repo = "rattler-build"; + rev = "refs/tags/v${version}"; + hash = "sha256-MTCtDE0oX9vUIwO62sKkCGleooHU28Lq8eXzwiNPDMo="; + }; + + useFetchCargoVendor = true; + cargoHash = "sha256-QONzLC1LvKkbslXZQTqxb6RHgsoUX21MXXyLVtTSvxc="; + + doCheck = false; # test requires network access + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + openssl + ]; + + doInstallCheck = true; + + nativeInstallCheckInputs = [ + versionCheckHook + ]; + + versionCheckProgramArg = [ "-V" ]; + + meta = { + description = "Universal package builder for Windows, macOS and Linux"; + homepage = "https://github.com/prefix-dev/rattler-build"; + changelog = "https://github.com/prefix-dev/rattler-build/releases/tag/v${version}"; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ genga898 ]; + mainProgram = "rattler-build"; + }; +} diff --git a/pkgs/by-name/ty/typstyle/package.nix b/pkgs/by-name/ty/typstyle/package.nix index 32d26fd50d1c5..c4b1810ffac0d 100644 --- a/pkgs/by-name/ty/typstyle/package.nix +++ b/pkgs/by-name/ty/typstyle/package.nix @@ -8,17 +8,17 @@ rustPlatform.buildRustPackage rec { pname = "typstyle"; - version = "0.12.4"; + version = "0.12.5"; src = fetchFromGitHub { owner = "Enter-tainer"; repo = "typstyle"; rev = "refs/tags/v${version}"; - hash = "sha256-PMx7vo0HPknrZUQooehuFYRTfiWSpLYw03zcfVuNNEc="; + hash = "sha256-28+B7lov2sUBDZUGHKBL1XzOM9q43idllQ0CPlZEdOw="; }; useFetchCargoVendor = true; - cargoHash = "sha256-ughfZ9+oR7vjlBW7jl0w99FM8eEUYODh6jJ0no8tNvI="; + cargoHash = "sha256-rSPXfGZXwrnCeG9RgjQdKQkacI4phzRF3AwfKu17Yvc="; # Disabling tests requiring network access checkFlags = [ diff --git a/pkgs/development/libraries/enchant/2.x.nix b/pkgs/development/libraries/enchant/2.x.nix index dbd7cefacb678..d2f6036437fbe 100644 --- a/pkgs/development/libraries/enchant/2.x.nix +++ b/pkgs/development/libraries/enchant/2.x.nix @@ -28,7 +28,7 @@ stdenv.mkDerivation rec { outputs = [ "out" "dev" ]; src = fetchurl { - url = "https://github.com/AbiWord/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz"; + url = "https://github.com/rrthomas/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz"; hash = "sha256-2aWhDcmzikOzoPoix27W67fgnrU1r/YpVK/NvUDv/2s="; }; @@ -75,7 +75,7 @@ stdenv.mkDerivation rec { meta = with lib; { description = "Generic spell checking library"; - homepage = "https://abiword.github.io/enchant/"; + homepage = "https://rrthomas.github.io/enchant/"; license = licenses.lgpl21Plus; # with extra provision for non-free checkers maintainers = with maintainers; [ jtojnar ]; platforms = platforms.unix; diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 6fdda136f76da..6f2e33f5c4821 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -455,6 +455,7 @@ mapAliases { topGit = top-git; }; # Added 2021-01-14 + gkraken = throw "'gkraken' has been deprecated by upstream. Consider using the replacement 'coolercontrol' instead."; # Added 2024-11-22 glew-egl = lib.warn "'glew-egl' is now provided by 'glew' directly" glew; # Added 2024-08-11 glfw-wayland = glfw; # Added 2024-04-19 glfw-wayland-minecraft = glfw3-minecraft; # Added 2024-05-08 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 27331b8f8b4f6..cb6abfac3d74d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -779,6 +779,8 @@ with pkgs; referencesByPopularity = callPackage ../build-support/references-by-popularity { }; + dockerMakeLayers = callPackage ../build-support/docker/make-layers.nix { }; + removeReferencesTo = callPackage ../build-support/remove-references-to { inherit (darwin) signingUtils; };