Squashed 'src/Looping/' content from commit 3aa4825

git-subtree-dir: src/Looping
git-subtree-split: 3aa4825440f582609f7c3f4faface46a25f60193
This commit is contained in:
Valentin Boettcher 2023-03-10 13:59:25 -05:00
commit fb760bb48b
19 changed files with 1158 additions and 0 deletions

12
.envrc Normal file
View file

@ -0,0 +1,12 @@
watch_file flake.nix flake.lock
{
# create gc root dir -> .direnv
mkdir -p "$(direnv_layout_dir)"
eval "$(
nix print-dev-env \
--no-update-lock-file \
--no-write-lock-file \
--profile $(direnv_layout_dir)/flake-profile
)"
} || use nix

36
.github/workflows/CI.yml vendored Normal file
View file

@ -0,0 +1,36 @@
name: CI
on:
push:
branches:
- main
tags: ['*']
pull_request:
concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}
jobs:
test:
name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
version:
- '1.0'
- '1.8'
- 'nightly'
os:
- ubuntu-latest
arch:
- x64
steps:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@v1
with:
version: ${{ matrix.version }}
arch: ${{ matrix.arch }}
- uses: julia-actions/cache@v1
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1

16
.github/workflows/CompatHelper.yml vendored Normal file
View file

@ -0,0 +1,16 @@
name: CompatHelper
on:
schedule:
- cron: 0 0 * * *
workflow_dispatch:
jobs:
CompatHelper:
runs-on: ubuntu-latest
steps:
- name: Pkg.add("CompatHelper")
run: julia -e 'using Pkg; Pkg.add("CompatHelper")'
- name: CompatHelper.main()
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }}
run: julia -e 'using CompatHelper; CompatHelper.main()'

15
.github/workflows/TagBot.yml vendored Normal file
View file

@ -0,0 +1,15 @@
name: TagBot
on:
issue_comment:
types:
- created
workflow_dispatch:
jobs:
TagBot:
if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot'
runs-on: ubuntu-latest
steps:
- uses: JuliaRegistries/TagBot@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
ssh: ${{ secrets.DOCUMENTER_KEY }}

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
/Manifest.toml
/.direnv/
docs/build

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Valentin Boettcher
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

20
Project.toml Normal file
View file

@ -0,0 +1,20 @@
name = "Looping"
uuid = "5edfbbf5-67b9-46d9-8ca5-929143abcc11"
authors = ["Valentin Boettcher"]
version = "0.1.0"
[deps]
DifferentialEquations = "0c46a032-eb83-5123-abaf-570d42b7fbaa"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
LanguageServer = "2b0e0bc5-e4fd-59b4-8912-456d1b03d8d7"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
[compat]
julia = "1"
[extras]
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[targets]
test = ["Test"]

3
README.md Normal file
View file

@ -0,0 +1,3 @@
# Looping
[![Build Status](https://github.com/vale981/Looping.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/vale981/Looping.jl/actions/workflows/CI.yml?query=branch%3Amain)

7
docs/make.jl Normal file
View file

@ -0,0 +1,7 @@
push!(LOAD_PATH, "../src/")
using Documenter, Looping
DocMeta.setdocmeta!(Looping.Utilities, :DocTestSetup, :(using Looping.Utilities); recursive=true)
DocMeta.setdocmeta!(Looping.FloquetUtils, :DocTestSetup, :(using Looping.FloquetUtils); recursive=true)
makedocs(sitename="Looping Documentation", modules=[Looping.Utilities, Looping.FloquetUtils], draft=false, strict=:doctest)

4
docs/src/index.md Normal file
View file

@ -0,0 +1,4 @@
# Looping.jl Documentation
Some numerical tools and experiments for the fiber loop reservoir
engineering project.

View file

@ -0,0 +1,5 @@
# Floquet Utilities
```@autodocs
Modules = [Looping.FloquetUtils]
```

View file

@ -0,0 +1,5 @@
# Utilities
```@autodocs
Modules = [Looping.Utilities]
```

726
flake.lock generated Normal file
View file

@ -0,0 +1,726 @@
{
"nodes": {
"blank": {
"locked": {
"lastModified": 1625557891,
"narHash": "sha256-O8/MWsPBGhhyPoPLHZAuoZiiHo9q6FLlEeIDEXuj6T4=",
"owner": "divnix",
"repo": "blank",
"rev": "5a5d2684073d9f563072ed07c871d577a6c614a8",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "blank",
"type": "github"
}
},
"cells-lab": {
"inputs": {
"nixos": "nixos",
"nixpkgs": "nixpkgs",
"org-roam-book-template": "org-roam-book-template",
"std": "std",
"std-data-collection": "std-data-collection",
"xnlib": "xnlib"
},
"locked": {
"lastModified": 1676268445,
"narHash": "sha256-FjVVzu9pGQmpuyZwJlPgEGLePfDL94gR+M1PNM1gNKM=",
"owner": "gtrunsec",
"repo": "cells-lab",
"rev": "ab176d3030d2d742d48b9045f07564f5aeda936f",
"type": "github"
},
"original": {
"owner": "gtrunsec",
"repo": "cells-lab",
"type": "github"
}
},
"cortex": {
"flake": false,
"locked": {
"lastModified": 1643528409,
"narHash": "sha256-ldmenmCzCEuuBlMtaQYe79vYbcTORgkCXgYgGkOzkL8=",
"owner": "gtrunsec",
"repo": "cortex",
"rev": "ad9a963534e5be323a33eaf0f9aa3e914cca8093",
"type": "github"
},
"original": {
"owner": "gtrunsec",
"repo": "cortex",
"type": "github"
}
},
"devshell": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1677793770,
"narHash": "sha256-sPBZTh6MNV0R5cMe6It+3BP75PhfP4nXP0M9nRtUHVU=",
"owner": "numtide",
"repo": "devshell",
"rev": "a027fa50746d95abf0ea35847bed0e0bc2d7a9da",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"devshell_2": {
"inputs": {
"flake-utils": [
"julia2nix",
"cells-lab",
"std",
"flake-utils"
],
"nixpkgs": [
"julia2nix",
"cells-lab",
"std",
"nixpkgs"
]
},
"locked": {
"lastModified": 1663445644,
"narHash": "sha256-+xVlcK60x7VY1vRJbNUEAHi17ZuoQxAIH4S4iUFUGBA=",
"owner": "numtide",
"repo": "devshell",
"rev": "e3dc3e21594fe07bdb24bdf1c8657acaa4cb8f66",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"dmerge": {
"inputs": {
"nixlib": [
"julia2nix",
"cells-lab",
"std",
"nixpkgs"
],
"yants": [
"julia2nix",
"cells-lab",
"std",
"yants"
]
},
"locked": {
"lastModified": 1659548052,
"narHash": "sha256-fzI2gp1skGA8mQo/FBFrUAtY0GQkAIAaV/V127TJPyY=",
"owner": "divnix",
"repo": "data-merge",
"rev": "d160d18ce7b1a45b88344aa3f13ed1163954b497",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "data-merge",
"type": "github"
}
},
"emacs-overlay": {
"inputs": {
"flake-utils": "flake-utils_3",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1676258056,
"narHash": "sha256-LhXVnPc+IPHupy7QexUrzYuloSGXvXEgvIkAlhFs+yY=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "09ebba158540ba3171b5f319b71427b51db8794b",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "emacs-overlay",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"locked": {
"lastModified": 1642700792,
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": {
"lastModified": 1676283394,
"narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_4": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_5": {
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"incl": {
"inputs": {
"nixlib": [
"julia2nix",
"cells-lab",
"std",
"nixpkgs"
]
},
"locked": {
"lastModified": 1669263024,
"narHash": "sha256-E/+23NKtxAqYG/0ydYgxlgarKnxmDbg6rCMWnOBqn9Q=",
"owner": "divnix",
"repo": "incl",
"rev": "ce7bebaee048e4cd7ebdb4cee7885e00c4e2abca",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "incl",
"type": "github"
}
},
"julia2nix": {
"inputs": {
"cells-lab": "cells-lab",
"nix-filter": "nix-filter_2",
"nixpkgs": "nixpkgs_3",
"std": [
"julia2nix",
"cells-lab",
"std"
],
"std-data-collection": [
"julia2nix",
"cells-lab",
"std-data-collection"
]
},
"locked": {
"lastModified": 1677373375,
"narHash": "sha256-94y8UyaoSlQjsrSIsHdMrzOT7RBaGQFV2dlFqlK6x8g=",
"owner": "JuliaCN",
"repo": "Julia2Nix.jl",
"rev": "4dd90bedf3a3fbc36273670b3fbcfd1b63484142",
"type": "github"
},
"original": {
"owner": "JuliaCN",
"repo": "Julia2Nix.jl",
"type": "github"
}
},
"n2c": {
"inputs": {
"flake-utils": [
"julia2nix",
"cells-lab",
"std",
"flake-utils"
],
"nixpkgs": [
"julia2nix",
"cells-lab",
"std",
"nixpkgs"
]
},
"locked": {
"lastModified": 1665039323,
"narHash": "sha256-SAh3ZjFGsaCI8FRzXQyp56qcGdAqgKEfJWPCQ0Sr7tQ=",
"owner": "nlewo",
"repo": "nix2container",
"rev": "b008fe329ffb59b67bf9e7b08ede6ee792f2741a",
"type": "github"
},
"original": {
"owner": "nlewo",
"repo": "nix2container",
"type": "github"
}
},
"nix-filter": {
"locked": {
"lastModified": 1666547822,
"narHash": "sha256-razwnAybPHyoAyhkKCwXdxihIqJi1G6e1XP4FQOJTEs=",
"owner": "numtide",
"repo": "nix-filter",
"rev": "1a3b735e13e90a8d2fd5629f2f8363bd7ffbbec7",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "nix-filter",
"type": "github"
}
},
"nix-filter_2": {
"locked": {
"lastModified": 1666547822,
"narHash": "sha256-razwnAybPHyoAyhkKCwXdxihIqJi1G6e1XP4FQOJTEs=",
"owner": "numtide",
"repo": "nix-filter",
"rev": "1a3b735e13e90a8d2fd5629f2f8363bd7ffbbec7",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "nix-filter",
"type": "github"
}
},
"nix-std": {
"locked": {
"lastModified": 1671250799,
"narHash": "sha256-uPIakP98gOf6504NtrAb2/0O0BgRRXNShM0PTV8z+T0=",
"owner": "chessai",
"repo": "nix-std",
"rev": "b300fd6dfeae8cc331c7d8cde0e81b404d50d40c",
"type": "github"
},
"original": {
"owner": "chessai",
"repo": "nix-std",
"type": "github"
}
},
"nixago": {
"inputs": {
"flake-utils": [
"julia2nix",
"cells-lab",
"std",
"flake-utils"
],
"nixago-exts": [
"julia2nix",
"cells-lab",
"std",
"blank"
],
"nixpkgs": [
"julia2nix",
"cells-lab",
"std",
"nixpkgs"
]
},
"locked": {
"lastModified": 1676075813,
"narHash": "sha256-X/aIT8Qc8UCqnxJvaZykx3CJ0ZnDFvO+dqp/7fglZWo=",
"owner": "nix-community",
"repo": "nixago",
"rev": "9cab4dde31ec2f2c05d702ea8648ce580664e906",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixago",
"type": "github"
}
},
"nixlib": {
"locked": {
"lastModified": 1673743903,
"narHash": "sha256-sloY6KYyVOozJ1CkbgJPpZ99TKIjIvM+04V48C04sMQ=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "7555e2dfcbac1533f047021f1744ac8871150f9f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixos": {
"locked": {
"lastModified": 1676177817,
"narHash": "sha256-OQnBnuKkpwkfNY31xQyfU5hNpLs1ilWt+hVY6ztEEOM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1b82144edfcd0c86486d2e07c7298f85510e7fb8",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1675940568,
"narHash": "sha256-epG6pOT9V0kS+FUqd7R6/CWkgnZx2DMT5Veqo+y6G3c=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6ccc4a59c3f1b56d039d93da52696633e641bc71",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1673540789,
"narHash": "sha256-xqnxBOK3qctIeUVxecydrEDbEXjsvHCPGPbvsl63M/U=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0f213d0fee84280d8c3a97f7469b988d6fe5fcdf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1672428209,
"narHash": "sha256-eejhqkDz2cb2vc5VeaWphJz8UXNuoNoM8/Op8eWv2tQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "293a28df6d7ff3dec1e61e37cc4ee6e6c0fb0847",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1677655566,
"narHash": "sha256-I8G8Lmpp3YduYl4+pkiIJFGT1WKw+8ZMH2QwANkTu2U=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ae8bdd2de4c23b239b5a771501641d2ef5e027d0",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nosys": {
"locked": {
"lastModified": 1668010795,
"narHash": "sha256-JBDVBnos8g0toU7EhIIqQ1If5m/nyBqtHhL3sicdPwI=",
"owner": "divnix",
"repo": "nosys",
"rev": "feade0141487801c71ff55623b421ed535dbdefa",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "nosys",
"type": "github"
}
},
"org-roam-book-template": {
"inputs": {
"cortex": "cortex",
"emacs-overlay": "emacs-overlay",
"flake-compat": "flake-compat",
"flake-utils": "flake-utils_4",
"nix-filter": "nix-filter",
"nixpkgs": [
"julia2nix",
"cells-lab",
"nixpkgs"
],
"ox-hugo": "ox-hugo"
},
"locked": {
"lastModified": 1676267610,
"narHash": "sha256-rweyZN0cRYY9Uoeo/94Sa1DHgBI2NRXC+/iNdqypptc=",
"owner": "gtrunsec",
"repo": "org-roam-book-template",
"rev": "fd76272fb78c5fae39e7bd8e8c8165ca85fa2d1a",
"type": "github"
},
"original": {
"owner": "gtrunsec",
"repo": "org-roam-book-template",
"type": "github"
}
},
"ox-hugo": {
"flake": false,
"locked": {
"lastModified": 1669851508,
"narHash": "sha256-7m9B647uOBnSWYsxIfavlTCsT8loDm33v/epqYSUhLw=",
"owner": "kaushalmodi",
"repo": "ox-hugo",
"rev": "706b5f622d168bb8e0cf503e0525d2db9177c83e",
"type": "github"
},
"original": {
"owner": "kaushalmodi",
"repo": "ox-hugo",
"type": "github"
}
},
"paisano": {
"inputs": {
"nixpkgs": [
"julia2nix",
"cells-lab",
"std",
"nixpkgs"
],
"nosys": "nosys",
"yants": [
"julia2nix",
"cells-lab",
"std",
"yants"
]
},
"locked": {
"lastModified": 1676226775,
"narHash": "sha256-MiY0Y9JOo71wu0K9cSxW+N4gOCuS7taI3bSUMFGtbPI=",
"owner": "divnix",
"repo": "paisano",
"rev": "143afa3083274af3be808687ab23fddbbc9d22ed",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "paisano",
"type": "github"
}
},
"root": {
"inputs": {
"devshell": "devshell",
"flake-utils": "flake-utils_2",
"julia2nix": "julia2nix",
"nixpkgs": "nixpkgs_4"
}
},
"std": {
"inputs": {
"arion": [
"julia2nix",
"cells-lab",
"std",
"blank"
],
"blank": "blank",
"devshell": "devshell_2",
"dmerge": "dmerge",
"flake-utils": "flake-utils_5",
"incl": "incl",
"makes": [
"julia2nix",
"cells-lab",
"std",
"blank"
],
"microvm": [
"julia2nix",
"cells-lab",
"std",
"blank"
],
"n2c": "n2c",
"nixago": "nixago",
"nixpkgs": [
"julia2nix",
"cells-lab",
"nixpkgs"
],
"paisano": "paisano",
"yants": "yants"
},
"locked": {
"lastModified": 1676232625,
"narHash": "sha256-M9xLaFVhD58UwGKoodAzeZD1iBdrCTtAsqKwWX5mUXA=",
"owner": "divnix",
"repo": "std",
"rev": "b462198baa6b3a3c6f3f46662500f683e105a2fa",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "std",
"type": "github"
}
},
"std-data-collection": {
"inputs": {
"nixpkgs": [
"julia2nix",
"cells-lab",
"nixpkgs"
],
"std": [
"julia2nix",
"cells-lab",
"std"
]
},
"locked": {
"lastModified": 1676163535,
"narHash": "sha256-xofkWLBqU4zj5vzJhWor2Z9CyPGKt7UGkTchsCT48Po=",
"owner": "divnix",
"repo": "std-data-collection",
"rev": "f713d81a6197e1b0854fb201cc7acde5ef9e93d4",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "std-data-collection",
"type": "github"
}
},
"xnlib": {
"inputs": {
"nix-std": "nix-std",
"nixlib": "nixlib",
"std": [
"julia2nix",
"cells-lab",
"std"
]
},
"locked": {
"lastModified": 1674228201,
"narHash": "sha256-2ONv2b8TTkCAyOSO9LMp3wTzOS9BW6riEBxq5xwsvvc=",
"owner": "gtrunsec",
"repo": "xnlib",
"rev": "b9625c523d34617dc5aab311abb59590406fa8be",
"type": "github"
},
"original": {
"owner": "gtrunsec",
"repo": "xnlib",
"type": "github"
}
},
"yants": {
"inputs": {
"nixpkgs": [
"julia2nix",
"cells-lab",
"std",
"nixpkgs"
]
},
"locked": {
"lastModified": 1667096281,
"narHash": "sha256-wRRec6ze0gJHmGn6m57/zhz/Kdvp9HS4Nl5fkQ+uIuA=",
"owner": "divnix",
"repo": "yants",
"rev": "d18f356ec25cb94dc9c275870c3a7927a10f8c3c",
"type": "github"
},
"original": {
"owner": "divnix",
"repo": "yants",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

76
flake.nix Normal file
View file

@ -0,0 +1,76 @@
{
description = "Julia2Nix development environment";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
devshell.url = "github:numtide/devshell";
devshell.inputs.nixpkgs.follows = "nixpkgs";
julia2nix.url = "github:JuliaCN/Julia2Nix.jl";
};
outputs = inputs @ {
self,
julia2nix,
...
}:
(
inputs.flake-utils.lib.eachDefaultSystem
(system: let
pkgs = inputs.nixpkgs.legacyPackages.${system}.appendOverlays ([
self.overlays.default
inputs.devshell.overlays.default
]);
julia-wrapped = inputs.julia2nix.lib.${system}.julia-wrapped {
# package = pkgs.julia_17-bin;
package = julia2nix.packages.${system}.julia_18-bin;
enable = {
# only x86_64-linux is supported
GR = true;
python =
pkgs.python3.buildEnv.override
{
extraLibs = with pkgs.python3Packages; [xlrd matplotlib pyqt5];
# ignoreCollisions = true;
};
};
};
# run this command in your project: nix run github:JuliaCN/Julia2Nix.jl#packages.x86_64-linux.julia2nix
# we need to generate the julia2nix.toml first
project = inputs.julia2nix.lib.${system}.buildProject {
src = ./.;
name = "Looping";
package = julia-wrapped;
};
in {
packages = {
# make sure you have generated the julia2nix.toml
default = project;
};
devShells.default = pkgs.devshell.mkShell {
imports = [
# you can keep either one of them devshellProfiles.packages or julia-wrapped
# inputs.julia2nix.${pkgs.system}.julia2nix.devshellProfiles.packages
# add dev-tools in your devshell
inputs.julia2nix.${pkgs.system}.julia2nix.devshellProfiles.dev
# add nightly julia
# inputs.julia2nix.${pkgs.system}.julia2nix.devshellProfiles.nightly
];
commands = [
{
package = julia-wrapped;
help = julia2nix.packages.${pkgs.system}.julia_18-bin.meta.description;
}
];
};
})
)
// {
overlays.default = final: prev: {};
};
}

6
julia2nix.toml Normal file
View file

@ -0,0 +1,6 @@
[depot.x86_64-linux.fetchzip.registry-General]
name = "registries/General"
sha256 = "sha256-WfmgU1GuxVGn9yl/EQ7doYdnDUSMDi7SqCyEy8YamXY="
stripRoot = false
url = "https://pkg.julialang.org/registry/23338594-aafe-5451-b93e-139f81909106/93737299af624d55235fd13616742788b10c0ed3#registry.tar.gz"

132
src/FloquetUtils.jl Normal file
View file

@ -0,0 +1,132 @@
"""
This is a loose collection to naively calculate the time evolution
operator and Floquet Hamiltonian for a given time dependent
Hamiltonian `H(t)`.
"""
module FloquetUtils
import LinearAlgebra: I, eigvecs, eigen, Diagonal
import DifferentialEquations as de
export time_evolution_op
export floquet_hamiltonian
export KickOperator
using ..Utilities
"""
time_evolution_op(H, T, args...; kwargs...)
Calculate the time evolution operator for a Hamiltonian `H` up to a
total time `T`. The rest arguments are passed on to
[`de.solve`](@ref).
"""
function time_evolution_op(H::Function, T::Real, args...; kwargs...)
function u_step!(dU, U, _, t)
dU .= -1im * H(t) * U
end
N = size(H(0), 1)
u0 = Matrix{ComplexF64}(I, N, N)
tspan = (0.0, T)
prob = de.ODEProblem(u_step!, u0, tspan)
de.solve(prob, args...; kwargs...)
end
"""
floquet_hamiltonian(U::Matrix, T)
Returns the Floquet Hamiltonian given a unitary matrix `U` and a time
`T`.
"""
function floquet_hamiltonian(U::Matrix, T::Real)
1im / T * log(U)
end
"""
floquet_hamiltonian(H::Function, T)
Returns the Floquet Hamiltonian given a Hamiltionian `H` and a time
`T`. The rest arguments are passed on to
[`de.solve`](@ref).
"""
function floquet_hamiltonian(H::Function, T::Real, args...; kwargs...)
U = time_evolution_op(H, T, args...; kwargs...)
floquet_hamiltonian(U(T), T)
end
"""
trivial_floquet_hamiltonian(H, T, restrict_energies=false)
Returns the Floquet Hamiltonian for a Hamiltonain `H` that commutes
with itself at different times.
"""
function trivial_floquet_hamiltonian(H::Function, T::Real, restrict_energies::Bool=false)
function h_step!(dU, _, _, t)
dU .= H(t)
end
dimension = size(H(0), 1)
u0 = zeros(ComplexF64, dimension, dimension)
prob = de.ODEProblem(h_step!, u0, (0.0, T))
integrated_hamiltonian = de.solve(prob)
H_F = integrated_hamiltonian(T) / T
if restrict_energies
energies, vecs = eigen(H_F)
energies .= restrict_to_range.(energies, π / T)
H_F .= vecs * Diagonal(energies) * vecs'
end
H_F
end
struct KickOperator
U
H_F::Matrix
@doc """
KickOperator(U(t), H_F::Matrix)
Return the Kick operator Given the time evolution operator `U(t)` and the Floquet Hamiltonian
`H_F`.
"""
function KickOperator(U, H_F::Matrix)
if size(U(0)) != size(H_F)
throw(DimensionMismatch("`U` and `H_F` should have the same dimension."))
end
new(U, H_F)
end
end
"""
KickOperator(H(t), T)
Return the Kick operator Given the Hamiltonian `H(t)` and the total time ``T``.
"""
function KickOperator(H::Function, T::Real)
U = time_evolution_op(H, T)
H_F = floquet_hamiltonian(U(T), T)
KickOperator(U, H_F)
end
"""
K(t)
Return the Kick operator at time t.
"""
function (K::KickOperator)(t::Real)
K.U(t) * exp(1im * K.H_F * t)
end
end

4
src/Looping.jl Normal file
View file

@ -0,0 +1,4 @@
module Looping
include("Utilities.jl")
include("FloquetUtils.jl")
end

61
src/Utilities.jl Normal file
View file

@ -0,0 +1,61 @@
"""
Some common utilities that haven't yet made it into their own packagage.
"""
module Utilities
export periodic_distance
export restrict_to_range
"""
periodic_distance(m, n, N)
Calculate the distance `(m-n)`, but assuming periodic boundary
conditions for a chain of length `N`.
# Examples
```jldoctest
julia> periodic_distance(1, 4, 5)
2
julia> periodic_distance(1, 3, 5)
-2
```
"""
function periodic_distance(m::Integer, n::Integer, N::Integer)
diff = m - n
adiff = abs(diff)
if abs(diff + N) < adiff
diff + N
elseif abs(diff - N) < adiff
diff - N
else
diff
end
end
"""
restrict_to_range(x, border)
Returns the value `x` restricted to the range `[-border, border]` by
lettting it roll over to `+-border`.
# Examples
```jldoctest
julia> restrict_to_range(6, 5)
-4
julia> restrict_to_range(5, 5)
5
```
"""
function restrict_to_range(x::Real, border::Real)
sign = x border ? -1 : 1
while abs(x) > border
x += sign * border * 2
end
x
end
end

6
test/runtests.jl Normal file
View file

@ -0,0 +1,6 @@
using Looping
using Test
@testset "Looping.jl" begin
# Write your tests here.
end