<commit_before>let
  # Niv based pinning of packages.
  # Uses nixpkgs-unstable and NixOS-QChem master
  sources = import ./nix/sources.nix;
  qchemOvl = import sources.NixOS-QChem;
  nixpkgs = import sources.nixpkgs;
  pkgs = nixpkgs {
    overlays = [ qchemOvl haskellOverlay ];
    config = {
      allowUnfree = true;
      qchem-config = {
        allowEnv = true;
        optAVX = false;
      };
    };
  };

  # Haskell packages are automatically generated from Hackage and
  # often require a minor fix. In this case ConClusion gets
  # massiv-0.6.1.0 from nixpkgs, but requires massiv-1.0.0.0.
  # The dependency is therefore overridden, to make the package
  # compile.
  haskellOverlay = self: super: {
    haskellPackages = super.haskellPackages.extend (hself: hsuper: {
      My_Massiv = hsuper.callHackageDirect {
        pkg = "massiv";
        ver = "1.0.0.0";
        sha256 = "v4CDf7m/VsVNgrKHC42L56ip9jvbbLcSurH8mGRK0Qo=";
      } { scheduler = hself.scheduler_2_0_0; };

      ConClusion = hsuper.callHackageDirect {
        pkg = "ConClusion";
        ver = "0.1.0";
        sha256 = "rFzkxzSOF+LTddt06ClXzSu6hJLAZQONVD/erdUlcu8=";
      } { massiv = hself.My_Massiv; };
    });
  };

  # Python environment with interpreter and bundled packages.
  # Provides also jupyter-lab and the Jupyter kernel.
  pythonWithPackages = pkgs.qchem.python3.withPackages (p: with p; [
    jupyterlab
    numpy
    ipympl
    pandas
    psi4
  ]);

  # Haskell environment with interpreter, compiler, and bundled packages.
  # Provides the Haskell iHaskell kernel for Jupyter.
  haskellWithPackages = pkgs.haskellPackages.ghcWithPackages (p: with p; [ihaskell] ++ [
    ihaskell
    ConClusion
    attoparsec
    rio
    Chart<commit_msg>jupyter example; removing double ihaskell<commit_after>let
  # Niv based pinning of packages.
  # Uses nixpkgs-unstable and NixOS-QChem master
  sources = import ./nix/sources.nix;
  qchemOvl = import sources.NixOS-QChem;
  nixpkgs = import sources.nixpkgs;
  pkgs = nixpkgs {
    overlays = [ qchemOvl haskellOverlay ];
    config = {
      allowUnfree = true;
      qchem-config = {
        allowEnv = true;
        optAVX = false;
      };
    };
  };

  # Haskell packages are automatically generated from Hackage and
  # often require a minor fix. In this case ConClusion gets
  # massiv-0.6.1.0 from nixpkgs, but requires massiv-1.0.0.0.
  # The dependency is therefore overridden, to make the package
  # compile.
  haskellOverlay = self: super: {
    haskellPackages = super.haskellPackages.extend (hself: hsuper: {
      My_Massiv = hsuper.callHackageDirect {
        pkg = "massiv";
        ver = "1.0.0.0";
        sha256 = "v4CDf7m/VsVNgrKHC42L56ip9jvbbLcSurH8mGRK0Qo=";
      } { scheduler = hself.scheduler_2_0_0; };

      ConClusion = hsuper.callHackageDirect {
        pkg = "ConClusion";
        ver = "0.1.0";
        sha256 = "rFzkxzSOF+LTddt06ClXzSu6hJLAZQONVD/erdUlcu8=";
      } { massiv = hself.My_Massiv; };
    });
  };

  # Python environment with interpreter and bundled packages.
  # Provides also jupyter-lab and the Jupyter kernel.
  pythonWithPackages = pkgs.qchem.python3.withPackages (p: with p; [
    jupyterlab
    numpy
    ipympl
    pandas
    psi4
  ]);

  # Haskell environment with interpreter, compiler, and bundled packages.
  # Provides the Haskell iHaskell kernel for Jupyter.
  haskellWithPackages = pkgs.haskellPackages.ghcWithPackages (p: with p; [
    ihaskell
    ConClusion
    attoparsec
    rio
    Chart
{'fraction_non_alphanumeric': 0.09337521416333523, 'fraction_numerical': 0.02227298686464877, 'mean_word_length': 2.803474484256243, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 6, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1848757', 'n_tokens_mistral': 1345, 'n_tokens_neox': 1254, 'n_words': 290}