From f79213eeb3fe2bf725f7b42855fbc1314d594be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Sun, 9 Jul 2023 21:21:33 +0700 Subject: [PATCH 01/26] Create main.yml --- .github/workflows/main.yml | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..0f3fa28ef --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,41 @@ +# Deploy Jekyll to GitHub Pages +name: Build and deploy Jekyll site + +# πŸ’Ž Runs on workflow_run.conclusion +on: # push + workflow_run: + types: [completed] #requested + workflows: ["pages-build-deployment"] + +# πŸͺ‚ Allow only one concurrent deployment across the branches +concurrency: + group: "pages" + cancel-in-progress: true + +# Sets global environtment variables +env: + OWNER: ${{ github.repository_owner }} + TOKEN: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + +jobs: + # Build job + github-pages: + if: github.event.workflow_run.conclusion == 'success' + runs-on: ${{ github.ref_name != 'main' && 'ubuntu-latest' || 'windows-latest' }} + steps: + - name: πŸ“‚ Checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: πŸ’Ž Build on Linux + if: runner.os == 'Linux' + uses: eq19/feed@v3 + with: + pre_build_commands: 'make build' + + - name: πŸ’Ž Build on Windows + if: runner.os == 'Windows' + uses: eq19/maps@v1 + with: + dotnet-version: '3.1.x' From e5a20ca361f1d38caf0034781978a496e827bddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Sun, 9 Jul 2023 21:46:54 +0700 Subject: [PATCH 02/26] Update main.yml --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0f3fa28ef..f338074f0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,8 +14,9 @@ concurrency: # Sets global environtment variables env: + CFG: ./.github/_config.yml OWNER: ${{ github.repository_owner }} - TOKEN: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.JEKYLL_GITHUB_TOKEN }} jobs: # Build job From 382522ded7d4b3df4c800d6c3c2dc03ad3e72725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Sun, 9 Jul 2023 22:02:01 +0700 Subject: [PATCH 03/26] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f338074f0..82b706238 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ concurrency: env: CFG: ./.github/_config.yml OWNER: ${{ github.repository_owner }} - GITHUB_TOKEN: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + JEKYLL_TOKEN: ${{ secrets.JEKYLL_GITHUB_TOKEN }} jobs: # Build job From ba3572a30297547d1580d266b8b4b96b63834d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Sun, 9 Jul 2023 22:20:25 +0700 Subject: [PATCH 04/26] Update main.yml --- .github/workflows/main.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 82b706238..7bddaf846 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,9 +14,8 @@ concurrency: # Sets global environtment variables env: - CFG: ./.github/_config.yml OWNER: ${{ github.repository_owner }} - JEKYLL_TOKEN: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + JEKYLL_CFG: ./.github/_config.yml jobs: # Build job @@ -28,15 +27,18 @@ jobs: uses: actions/checkout@v3 with: submodules: recursive + token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} - name: πŸ’Ž Build on Linux if: runner.os == 'Linux' uses: eq19/feed@v3 with: pre_build_commands: 'make build' + token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} - name: πŸ’Ž Build on Windows if: runner.os == 'Windows' uses: eq19/maps@v1 with: dotnet-version: '3.1.x' + token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} From 4e9c7a3a463ea688176978a696fe225f8ba8a743 Mon Sep 17 00:00:00 2001 From: eq19 Date: Sun, 9 Jul 2023 10:23:20 -0500 Subject: [PATCH 05/26] update workflow --- .github/CODEOWNERS | 1 + .github/CODE_OF_CONDUCT.md | 49 ++ .github/CONTRIBUTING.md | 16 + .github/FUNDING.yml | 1 + .github/ISSUE_TEMPLATE/bug_report.md | 32 ++ .github/ISSUE_TEMPLATE/config.yml | 5 + .github/ISSUE_TEMPLATE/feature_request.md | 16 + .github/PULL_REQUEST_TEMPLATE.md | 29 ++ .github/__config.yml | 239 +++++++++ .github/_config.yml | 39 ++ .github/csc.json | 18 + .../workflows/reserves/basic-validation.yml | 17 + .github/workflows/reserves/check-dist.yml | 17 + .github/workflows/reserves/ci.yml | 83 +++ .../workflows/reserves/codeql-analysis.yml | 48 ++ .github/workflows/reserves/codeql.yml | 70 +++ .github/workflows/reserves/config.yml | 20 + .github/workflows/reserves/conformance.yml | 53 ++ .github/workflows/reserves/dependabot.yml | 21 + .github/workflows/reserves/distribution.yml | 128 +++++ .github/workflows/reserves/e2e-tests.yml | 483 ++++++++++++++++++ .github/workflows/reserves/e2e.yml | 39 ++ .github/workflows/reserves/fossa.yml | 22 + .github/workflows/reserves/licensed.yml | 15 + .github/workflows/reserves/main.yml | 44 ++ .github/workflows/reserves/matching.yml | 83 +++ .github/workflows/reserves/matrix-go.yml | 128 +++++ .github/workflows/reserves/matrix-ruby.yml | 90 ++++ .github/workflows/reserves/no-response.yml | 13 + .../reserves/release-new-action-version.yml | 29 ++ .github/workflows/reserves/settings.yml | 31 ++ .github/workflows/reserves/stale.yml | 27 + .github/workflows/reserves/test-dotnet.yml | 35 ++ .../reserves/test_of_push_and_pull.yml | 37 ++ .../reserves/test_of_validate_package.yml | 29 ++ .../reserves/update-config-files.yml | 11 + .github/workflows/reserves/update.yml | 34 ++ .github/workflows/reserves/validate.yml | 35 ++ .github/workflows/reserves/validate_links.yml | 28 + 39 files changed, 2115 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/__config.yml create mode 100644 .github/_config.yml create mode 100644 .github/csc.json create mode 100644 .github/workflows/reserves/basic-validation.yml create mode 100644 .github/workflows/reserves/check-dist.yml create mode 100644 .github/workflows/reserves/ci.yml create mode 100644 .github/workflows/reserves/codeql-analysis.yml create mode 100644 .github/workflows/reserves/codeql.yml create mode 100644 .github/workflows/reserves/config.yml create mode 100644 .github/workflows/reserves/conformance.yml create mode 100644 .github/workflows/reserves/dependabot.yml create mode 100644 .github/workflows/reserves/distribution.yml create mode 100644 .github/workflows/reserves/e2e-tests.yml create mode 100644 .github/workflows/reserves/e2e.yml create mode 100644 .github/workflows/reserves/fossa.yml create mode 100644 .github/workflows/reserves/licensed.yml create mode 100644 .github/workflows/reserves/main.yml create mode 100644 .github/workflows/reserves/matching.yml create mode 100644 .github/workflows/reserves/matrix-go.yml create mode 100644 .github/workflows/reserves/matrix-ruby.yml create mode 100644 .github/workflows/reserves/no-response.yml create mode 100644 .github/workflows/reserves/release-new-action-version.yml create mode 100644 .github/workflows/reserves/settings.yml create mode 100644 .github/workflows/reserves/stale.yml create mode 100644 .github/workflows/reserves/test-dotnet.yml create mode 100644 .github/workflows/reserves/test_of_push_and_pull.yml create mode 100644 .github/workflows/reserves/test_of_validate_package.yml create mode 100644 .github/workflows/reserves/update-config-files.yml create mode 100644 .github/workflows/reserves/update.yml create mode 100644 .github/workflows/reserves/validate.yml create mode 100644 .github/workflows/reserves/validate_links.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..ca56653dc --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @actions/setup-actions-team diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..fa1504469 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,49 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello+community@mirumee.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000..004fb79d1 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Installation + +1. Install a full [Ruby development environment](https://jekyllrb.com/docs/installation/) +2. Change into your new directory + +```sh +make +``` + +4. Build the site and make it available on a local server + +```sh +make server +``` + +5. Browse to [http://localhost:4000](http://localhost:4000) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..79693d22b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ["https://git.io/JJAW8"] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..2746c6959 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,32 @@ +--- +name: Bug report +about: Create a bug report +title: '' +labels: bug, needs triage +assignees: '' + +--- + +**Description:** +A clear and concise description of what the bug is. + +**Task version:** +Specify the task version + +**Platform:** +- [ ] Ubuntu +- [ ] macOS +- [ ] Windows + +**Runner type:** +- [ ] Hosted +- [ ] Self-hosted + +**Repro steps:** +A description with steps to reproduce the issue. If your have a public example or repo to share, please provide the link. + +**Expected behavior:** +A description of what you expected to happen. + +**Actual behavior:** +A description of what is actually happening. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..2a4873918 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: .NET issues + url: https://github.com/dotnet/runtime#filing-issues + about: Issues with the runtime, class libraries, frameworks, and SDK should be addressed directly with the .NET team. Documentation on filing issues can be found here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..2c9d47d9c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,16 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: feature request, needs triage +assignees: '' +--- + +**Description:** +Describe your proposal. + +**Justification:** +Justification or a use case for your proposal. + +**Are you willing to submit a PR?** + \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..9a76d57fa --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,29 @@ +### Summary + +Main Code: []() +``` + +``` + +### Checklist + +1. [ ] Privileged views and APIs are guarded by proper permission checks. +1. [ ] All visible strings are translated with proper context. +1. [ ] All data-formatting is locale-aware (dates, numbers, and so on). +1. [ ] Database queries are optimized and the number of queries is constant. +1. [ ] Database migration files are up to date. +1. [ ] The changes are tested. +1. [ ] The code is documented (docstrings, project documentation). +1. [ ] GraphQL schema and type definitions are up to date. +1. [ ] Changes are mentioned in the changelog. + +### Reference + + +- []() +- []() +- []() + +### Screenshots + diff --git a/.github/__config.yml b/.github/__config.yml new file mode 100644 index 000000000..b14ad628c --- /dev/null +++ b/.github/__config.yml @@ -0,0 +1,239 @@ +# General Settings +# https://jekyllrb.com/docs/configuration/ +# https://jekyllrb.com/docs/configuration/options/ +# https://learn.cloudcannon.com/jekyll-cheat-sheet/ + +input_types: +- text +- date +- email +- radio +- submit +- number +- checkbox +- textarea + +form_engines: +- formspree +- formbucket +- cloudcannon + +debug: + dist: false + compress: true + shortcodes: true + +# Repository Settings +# https://blog.webjeda.com/jekyll-redirect/ +# https://github.com/ethanresnick/json-api-1/blob/gh-pages/_config.yml +# https://github.com/daattali/beautiful-jekyll/blob/master/_config.yml + +include: + - app.js + - feed.xml + - feed.json + - .htaccess + +exclude: + - src/ + - docs/ + - dist/ + - assets/ + - .babelrc + - Gemfile + - Makefile + - yarn.lock + - Dockerfile + - update.sh + - Gemfile.lock + - Gemfile.lock + - vendor/ruby/ + - vendor/gems/ + - vendor/cache/ + - vendor/bundle/ + - package-lock.json + - webpack.config.js + - docker_compose.yml + - requirements.txt + - node_modules/ + - package.json + - package-lock.json + - webpack.config.js + - jekyll-rtd-theme.gemspec + +encoding: utf-8 +livereload: true +limit_posts: 1000 +collections_dir: maps +timezone: Asia/Jakarta +remote_theme: eQ19/parser +excerpt_separator: + +# Plugins Setting +# https://pages.github.com/versions/ +# https://github.com/jekyll/jekyll-feed +# https://en.wikipedia.org/wiki/CoffeeScript +# https://github.com/jekyll/jekyll-redirect-from + +plugins: + - jemoji + - jekyll-gist + - jekyll-feed + - jekyll-avatar + - jekyll-sitemap + - jekyll-paginate + - jekyll-mentions + - jekyll-remote-theme + - jekyll-coffeescript + - jekyll-readme-index + - jekyll-redirect-from + - jekyll-relative-links + - jekyll-default-layout + - jekyll-github-metadata + - jekyll-titles-from-headings + - jekyll-optional-front-matter + +# Jekyll Tag Pages Generator +# https://jekyllrb.com/docs/liquid/tags/ +# https://github.com/pattex/jekyll-tagging +# https://jekyllrb.com/docs/plugins/generators/ + +# tag_page_dir: tagz +# tag_feed_layout: tag_feed +# tag_page_layout: tag_page + +# Default Setting +# https://stackoverflow.com/a/49428493 +# https://jekyllrb.com/docs/collections/ +# https://jekyllrb.com/docs/configuration/front-matter-defaults + +defaults: + - + scope: + path: "" + type: feeds + values: + layout: feeds + - + scope: + path: "" + type: maps + values: + layout: redirect + - + scope: + path: "" + type: categories + values: + layout: base + permalink: /sitemap/:category.xml + +# Permalinks +# https://jekyllrb.com/docs/permalinks/ +# https://stackoverflow.com/a/28754526/4058484 +# https://github.com/NiklasEi/jekyll_custom_permalink +# https://github.com/avillafiorita/jekyll-datapage_gen + +collections: + maps: + output: true + permalink: /sitemap/index_:categories:output_ext + feeds: + output: true + permalink: /sitemap/index_:categories:output_ext + posts: + output: true + permalink: /sitemap/:year/:y_day/:month/:title:output_ext + +# Feed and Submodul Setting +# https://stackoverflow.com/a/55885186/4058484 +# https://github.com/jekyll/jekyll-feed/issues/2 +# https://www.w3schools.com/xml/xsl_elementref.asp +# https://github.com/jekyll/jekyll-feed/issues/207#issuecomment-787490785 + +feed: + tags: true + posts_limit: 1000 + excerpt_only: true + collections: + maps: + path: /leads.xml # https://eq19.github.io/grammar/leads.xml + feeds: + categories: + - main # https://eq19.github.io/grammar/feed/feeds/main.xml + - user # https://eq19.github.io/grammar/feed/feeds/user.xml + - diagram # https://eq19.github.io/grammar/feed/feeds/diagram.xml + - section # https://eq19.github.io/grammar/feed/feeds/section.xml + path: /feeds.xml # https://eq19.github.io/grammar/feeds.xml + posts: + path: /posts.xml # https://eq19.github.io/grammar/posts.xml + +# Kramdown Options +# https://kramdown.gettalong.org/options.html +# https://jekyllrb.com/docs/configuration/markdown/ + +highlighter: rouge +markdown: kramdown + +kramdown: + html_to_native: true + syntax_highlighter: pygments + math_engine_opts configuration: mathjax + +excerpt_separator: + +# Custom Headers +# https://shopify.github.io/liquid/ +# https://jekyllrb.com/docs/configuration/webrick/ +# https://en.wikipedia.org/wiki/Content_Security_Policy + +google: + gtag: GTM-PGWT4RS + #adsense: ca-pub-3677197599836940 +webrick: + headers: + Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self'; + #My-Other-Header: My-Other-Value +#sumo: 2b0c75104f236f75954a2d200c80651a1ebf311e7f2c868ac12d7284ecd4fbd4 + +# Tags Setting +# http://codinfox.github.io/blog/tags/ +# https://longqian.me/2017/02/09/github-jekyll-tag/ +# https://github.com/chetabahana/chetabahana.github.io/tags + +case_labels: +- Buka Toko +- Stok Barang +- Merchant Center +- Peluang Terbaik +- Portfolio +- Network + +flow_labels: +- Optimasi +- Cloud-Task-API +- Cloud-Site-API +- Google-Ads-API +- Google-Trend-API +- eShop SEO + +# Site Setting +# https://jekyllrb.com/docs/variables/ +# https://stackoverflow.com/a/55094996/4058484 +# https://stackoverflow.com/a/17260660/4058484 +# https://stackoverflow.com/a/30828197/4058484 + +basedir: _feeds +organization: marketleader +repository: eq19/eq19.github.io + +# Site Metadata +# https://docs.github.com/en/pages +# https://help.github.com/articles/repository-metadata-on-github-pages/ +# https://www.google.com/search?q=tortoisegit+keep+asking+password+site%3Astackoverflow.com +# https://stackoverflow.com/questions/3490505/is-there-a-notepad-with-github-plugin/41884020 +# https://stackoverflow.com/questions/14000173/tortoisegit-save-user-authentication-credentials + +slogan: β‚ Quantum Project | A Unique Mapping System +disclaimer: The definite key to identify whether you use our concept is when there a kind of development item lies a unified assignment in hexagonal form by six (6) corresponding sets while each sets pick a combination of six (6) routes with a pairing of six (6) to six (6) of all channels. +license: Apache License, Version 2.0 diff --git a/.github/_config.yml b/.github/_config.yml new file mode 100644 index 000000000..b12f7f683 --- /dev/null +++ b/.github/_config.yml @@ -0,0 +1,39 @@ +description: Just another documentation theme compatible with GitHub Pages + +# debug: +# dist: false +# compress: true +# shortcodes: true + +lsi: false +theme: null +source: /maps +incremental: false +highlighter: rouge +gist: + noscript: false +kramdown: + math_engine: mathjax + syntax_highlighter: rouge +readme_index: + with_frontmatter: true + +exclude: + - CNAME + - LICENSE + - action.yml + - Dockerfile + +plugins: + - jemoji + - jekyll-gist + - jekyll-avatar + - jekyll-mentions + - jekyll-paginate + - jekyll-coffeescript + - jekyll-readme-index + - jekyll-default-layout + - jekyll-relative-links + - jekyll-github-metadata + - jekyll-titles-from-headings + - jekyll-optional-front-matter diff --git a/.github/csc.json b/.github/csc.json new file mode 100644 index 000000000..d2888fd15 --- /dev/null +++ b/.github/csc.json @@ -0,0 +1,18 @@ +{ + "problemMatcher": [ + { + "owner": "csc", + "pattern": [ + { + "regexp": "^([^\\s].*)\\((\\d+)(?:,\\d+|,\\d+,\\d+)?\\):\\s+(error|warning)\\s+([a-zA-Z]+(? action.changelog.md + sed -i "s/${LAST_TAG:1}/${VERSION}/g" jekyll-rtd-theme.gemspec + sed -i "s/${LAST_TAG:1}/${VERSION}/g" _includes/rest/defaults.liquid + + - name: Prettier check and Build theme assets! + run: | + npm install + npm run format && npm run build + + - name: Save changes! + run: | + git remote set-url origin "https://${GITHUB_ACTOR}:${{ secrets.AUTH_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git" + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + git add . + git commit -m "πŸ’Ž v${VERSION}" && git push + + - name: Create release! + uses: actions/create-release@main + with: + release_name: ${{ needs.checkout.outputs.version }} + tag_name: v${{ needs.checkout.outputs.version }} + commitish: ${{ github.ref }} + body_path: action.changelog.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure gem credentials and Build gemspec! + run: | + CONFIG=${HOME}/.gem/credentials + mkdir -p ${HOME}/.gem && touch ${CONFIG} && chmod 0600 ${CONFIG} + echo "---" > ${CONFIG} + echo ":github: Bearer ${GITHUB_TOKEN}" >> ${CONFIG} + echo ":rubygems_api_key: ${RUBYGEMS_AUTH_TOKEN}" >> ${CONFIG} + gem build *.gemspec + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUBYGEMS_AUTH_TOKEN: ${{ secrets.RUBYGEMS_AUTH_TOKEN }} + + - name: Publish rubygems! + run: | + gem push *.gem + gem push --KEY github --host https://rubygems.pkg.github.com/${{ github.repository_owner }} *.gem diff --git a/.github/workflows/reserves/codeql-analysis.yml b/.github/workflows/reserves/codeql-analysis.yml new file mode 100644 index 000000000..97780796d --- /dev/null +++ b/.github/workflows/reserves/codeql-analysis.yml @@ -0,0 +1,48 @@ +name: CodeQL + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + schedule: + - cron: '0 12 * * 6' + push: + branches: + - 'main' + - 'release/*' + tags: + - 'v*' + pull_request: + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + language: + - go + steps: + - + name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 2 + - + name: Checkout HEAD on PR + if: ${{ github.event_name == 'pull_request' }} + run: | + git checkout HEAD^2 + - + name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + - + name: Autobuild + uses: github/codeql-action/autobuild@v2 + - + name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/reserves/codeql.yml b/.github/workflows/reserves/codeql.yml new file mode 100644 index 000000000..0071d2003 --- /dev/null +++ b/.github/workflows/reserves/codeql.yml @@ -0,0 +1,70 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ main ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ main ] + schedule: + - cron: '38 3 * * 1' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript', 'ruby' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://git.io/codeql-language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # πŸ“š https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/reserves/config.yml b/.github/workflows/reserves/config.yml new file mode 100644 index 000000000..ebe993a70 --- /dev/null +++ b/.github/workflows/reserves/config.yml @@ -0,0 +1,20 @@ +# Behaviorbot config. See https://github.com/behaviorbot/ for more information. +# Note: Please Don't edit this file directly. +# Edit https://github.com/pages-themes/maintenance-scripts instead. + +# Configuration for update-docs - https://github.com/behaviorbot/update-docs +updateDocsComment: "Thanks for the pull request! If you are making any changes to the user-facing functionality, please be sure to update the documentation in the `README` or `docs/` folder alongside your change. :heart:" + +# Configuration for request-info - https://github.com/behaviorbot/request-info +requestInfoReplyComment: Thanks for this. Do you mind providing a bit more information about what problem you're trying to solve? +requestInfoLabelToAdd: more-information-needed + +# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome +#newIssueWelcomeComment: > +# Welcome! + +# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome +newPRWelcomeComment: Welcome! Congrats on your first pull request to the Tactile theme. If you haven't already, please be sure to check out [the contributing guidelines](https://github.com/pages-themes/tactile/blob/master/docs/CONTRIBUTING.md). + +# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge +firstPRMergeComment: "Congrats on getting your first pull request to the Tactile theme merged! Without amazing humans like you submitting pull requests, we couldn’t run this project. You rock! :tada:

If you're interested in tackling another bug or feature, take a look at [the open issues](https://github.com/pages-themes/tactile/issues), especially those [labeled `help wanted`](https://github.com/pages-themes/tactile/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)." diff --git a/.github/workflows/reserves/conformance.yml b/.github/workflows/reserves/conformance.yml new file mode 100644 index 000000000..5eadc897d --- /dev/null +++ b/.github/workflows/reserves/conformance.yml @@ -0,0 +1,53 @@ +name: conformance + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + pull_request: + push: + +jobs: + run-conformance-test: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - + name: Build image + uses: docker/bake-action@v2 + with: + targets: image-local + - + name: Start distribution server + run: | + IP=`hostname -I | awk '{print $1}'` + echo "IP=$IP" >> $GITHUB_ENV + echo "OCI_ROOT_URL=http://$IP:5000" >> $GITHUB_ENV + DISTRIBUTION_REF="registry:local" + docker run --rm -p 5000:5000 -e REGISTRY_STORAGE_DELETE_ENABLED=true -idt "registry:local" + - + name: Run OCI Distribution Spec conformance tests + uses: opencontainers/distribution-spec@main + env: + OCI_ROOT_URL: ${{ env.OCI_ROOT_URL }} + OCI_NAMESPACE: oci-conformance/distribution-test + OCI_TEST_PULL: 1 + OCI_TEST_PUSH: 1 + OCI_TEST_CONTENT_DISCOVERY: 1 + OCI_TEST_CONTENT_MANAGEMENT: 1 + OCI_HIDE_SKIPPED_WORKFLOWS: 1 + - + name: Move test results + run: mkdir -p .out/ && mv {report.html,junit.xml} .out/ + - + name: Upload test results + uses: actions/upload-artifact@v3 + with: + name: oci-test-results-${{ github.sha }} + path: .out/ + if-no-files-found: error diff --git a/.github/workflows/reserves/dependabot.yml b/.github/workflows/reserves/dependabot.yml new file mode 100644 index 000000000..fc3044f7a --- /dev/null +++ b/.github/workflows/reserves/dependabot.yml @@ -0,0 +1,21 @@ +version: 2 + +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" + target-branch: "develop" + versioning-strategy: "lockfile-only" + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + target-branch: "develop" + versioning-strategy: "increase" + - package-ecosystem: "bundler" + directory: "/" + schedule: + interval: "daily" + target-branch: "develop" + versioning-strategy: "increase" diff --git a/.github/workflows/reserves/distribution.yml b/.github/workflows/reserves/distribution.yml new file mode 100644 index 000000000..152c7918c --- /dev/null +++ b/.github/workflows/reserves/distribution.yml @@ -0,0 +1,128 @@ +name: distribution + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - 'main' + - 'release/*' + tags: + - 'v*' + pull_request: + +env: + DOCKERHUB_SLUG: distribution/distribution + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + go: + - 1.18 + - 1.19 + steps: + - + name: Checkout + uses: actions/checkout@v3 + - + name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.go }} + - + name: Test + run: | + make coverage + - + name: Codecov + uses: codecov/codecov-action@v3 + with: + directory: ./ + + build: + runs-on: ubuntu-latest + needs: + - test + steps: + - + name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - + name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ${{ env.DOCKERHUB_SLUG }} + ### versioning strategy + ### push semver tag v3.2.1 on main (default branch) + # distribution/distribution:3.2.1 + # distribution/distribution:3.2 + # distribution/distribution:3 + # distribution/distribution:latest + ### push semver prelease tag v3.0.0-beta.1 on main (default branch) + # distribution/distribution:3.0.0-beta.1 + ### push on main + # distribution/distribution:edge + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=ref,event=pr + type=edge + labels: | + org.opencontainers.image.title=Distribution + org.opencontainers.image.description=The toolkit to pack, ship, store, and deliver container content + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - + name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build artifacts + uses: docker/bake-action@v2 + with: + targets: artifact-all + - + name: Move artifacts + run: | + mv ./bin/**/* ./bin/ + - + name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: registry + path: ./bin/* + if-no-files-found: error + - + name: Build image + uses: docker/bake-action@v2 + with: + files: | + ./docker-bake.hcl + ${{ steps.meta.outputs.bake-file }} + targets: image-all + push: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') }} + - + name: GitHub Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + draft: true + files: | + bin/*.tar.gz + bin/*.sha256 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/reserves/e2e-tests.yml b/.github/workflows/reserves/e2e-tests.yml new file mode 100644 index 000000000..332eebccb --- /dev/null +++ b/.github/workflows/reserves/e2e-tests.yml @@ -0,0 +1,483 @@ +name: e2e tests + +on: + pull_request: + paths-ignore: + - '**.md' + push: + branches: + - main + - releases/* + paths-ignore: + - '**.md' + +jobs: + test-setup-multiple-versions: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup dotnet 2.2.402, 3.1.404 and 3.0.x + uses: ./ + with: + dotnet-version: | + 2.2.402 + 3.1.404 + 3.0.x + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^2.2.402$", "^3.1.404$", "^3.0" + + test-setup-full-version: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + # Side-by-side install of 2.2 and 3.1 used for the test project + - name: Setup dotnet 2.2.402 + uses: ./ + with: + dotnet-version: 2.2.402 + - name: Setup dotnet 3.1.201 + uses: ./ + with: + dotnet-version: 3.1.201 + # We are including this variable to force the generation of the nuget config file to verify that it is created in the correct place + source-url: https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: NOTATOKEN + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$", "^2.2.402$" -CheckNugetConfig + + test-setup-without-patch-version: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + # 2.0, 3.0, 5.0 needs to be in single quotes to interpret as a string instead of as an integer + - name: Setup dotnet '3.1' + uses: ./ + with: + dotnet-version: '3.1' + - name: Setup dotnet '2.2' + uses: ./ + with: + dotnet-version: '2.2' + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^3.1", "^2.2" + + test-setup-prerelease-version: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup dotnet '3.1.100-preview1-014459' + uses: ./ + with: + dotnet-version: '3.1.100-preview1-014459' + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "3.1.100-preview1-014459" + + test-setup-latest-patch-version: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup dotnet 3.1.x + uses: ./ + with: + dotnet-version: 3.1.x + - name: Setup dotnet 2.2.X + uses: ./ + with: + dotnet-version: 2.2.X + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^2.2", "^3.1" + + test-ABCxx-syntax: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + + - name: Setup dotnet 6.0.4xx + uses: ./ + with: + dotnet-version: '6.0.4xx' + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^6\.0\.4\d{2}" + + test-setup-with-wildcard: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup dotnet 3.1.* + uses: ./ + with: + dotnet-version: 3.1.* + - name: Setup dotnet 2.2.* + uses: ./ + with: + dotnet-version: 2.2.* + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^3.1", "^2.2" + + test-setup-global-json-specified-and-version: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Write global.json + shell: bash + run: | + mkdir subdirectory + echo '{"sdk":{"version": "2.2.207","rollForward": "latestFeature"}}' > ./subdirectory/global.json + - name: Setup dotnet + uses: ./ + with: + dotnet-version: 3.1 + global-json-file: ./subdirectory/global.json + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^2.2", "^3.1" + + test-setup-global-json-only: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Write global.json + shell: bash + run: | + mkdir subdirectory + echo '{"sdk":{"version": "2.2.207","rollForward": "latestFeature"}}' > ./subdirectory/global.json + - name: Setup dotnet + uses: ./ + with: + global-json-file: ./subdirectory/global.json + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^2.2" + + test-global-json-with-comments: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Write global.json + shell: bash + run: | + mkdir subdirectory + echo '/* should support comments */ {"sdk":{"version": "2.2.207","rollForward": "latestFeature"}} // should support comments' > ./subdirectory/global.json + - name: Setup dotnet + uses: ./ + with: + global-json-file: ./subdirectory/global.json + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^2.2" + + test-setup-with-dotnet-quality: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + + - name: Setup dotnet 7.0 with preview quality + uses: ./ + with: + dotnet-version: '7.0' + dotnet-quality: 'preview' + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^7\.0\.\d+-" + + test-setup-with-cache: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macos-latest] + env: + NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Copy NuGet lock file to root + shell: bash + run: cp ./__tests__/e2e-test-csproj/packages.lock.json ./packages.lock.json + - name: Setup .NET Core 3.1 + id: setup-dotnet + uses: ./ + with: + dotnet-version: 3.1 + cache: true + - name: Verify Cache + if: steps.setup-dotnet.outputs.cache-hit == 'true' + shell: bash + run: if [[ -e ${NUGET_PACKAGES} ]]; then exit 0; else exit 1; fi + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^3.1" + + test-setup-with-cache-dependency-path: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macos-latest] + env: + NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup .NET Core 3.1 + id: setup-dotnet + uses: ./ + with: + dotnet-version: 3.1 + cache: true + cache-dependency-path: './__tests__/e2e-test-csproj/packages.lock.json' + - name: Verify Cache + if: steps.setup-dotnet.outputs.cache-hit == 'true' + shell: bash + run: if [[ -e ${NUGET_PACKAGES} ]]; then exit 0; else exit 1; fi + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^3.1" + + test-dotnet-version-output-during-single-version-installation: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + + - name: Setup dotnet 6.0.401 + uses: ./ + id: step1 + with: + dotnet-version: '6.0.401' + + - name: Verify value of the dotnet-version output + shell: pwsh + run: | + $version = & dotnet --version + Write-Host "Installed version: $version" + if (-not ($version -eq '${{steps.step1.outputs.dotnet-version}}')) { throw "Unexpected output value" } + + test-dotnet-version-output-during-multiple-version-installation: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + + - name: Setup dotnet 6.0.401, 5.0.408, 7.0.100-rc.1.22431.12 + uses: ./ + id: step2 + with: + dotnet-version: | + 7.0.100-rc.1.22431.12 + 6.0.401 + 5.0.408 + + - name: Verify value of the dotnet-version output + shell: pwsh + run: | + $version = "7.0.100-rc.1.22431.12" + if (-not ($version -eq '${{steps.step2.outputs.dotnet-version}}')) { throw "Unexpected output value" } + + test-proxy: + runs-on: ubuntu-latest + container: + image: ubuntu:latest + options: --dns 127.0.0.1 + services: + squid-proxy: + image: ubuntu/squid:latest + ports: + - 3128:3128 + env: + https_proxy: http://squid-proxy:3128 + http_proxy: http://squid-proxy:3128 + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Install Powershell + run: | + apt-get update + apt-get install -y wget apt-transport-https software-properties-common + wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" + dpkg -i packages-microsoft-prod.deb + rm packages-microsoft-prod.deb + apt-get update + apt-get install -y powershell + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup dotnet 6.0 + uses: ./ + with: + dotnet-version: 6.0 + source-url: https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: NOTATOKEN + - name: Verify dotnet + shell: pwsh + run: | + __tests__/verify-dotnet.ps1 -Patterns "^6.0" -CheckNugetConfig + + test-bypass-proxy: + runs-on: ubuntu-latest + env: + https_proxy: http://no-such-proxy:3128 + no_proxy: github.com,dotnetcli.blob.core.windows.net,download.visualstudio.microsoft.com,api.nuget.org,dotnetcli.azureedge.net + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup dotnet 3.1.201 + uses: ./ + with: + dotnet-version: 3.1.201 + source-url: https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: NOTATOKEN + - name: Verify dotnet + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$" -CheckNugetConfig + + test-sequential-version-installation: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + lower-version: ['3.1.426'] + higher-version: ['7.0.203'] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + # Install one version, use it for something, then switch to next version + - name: Setup dotnet (lower version) + uses: ./ + with: + dotnet-version: ${{ matrix.lower-version }} + - name: Verify dotnet (lower version) + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^${{ matrix.lower-version }}$" + - name: Setup dotnet (higher version) + uses: ./ + with: + dotnet-version: ${{ matrix.higher-version }} + - name: Verify dotnet (higher version) + shell: pwsh + run: __tests__/verify-dotnet.ps1 -Patterns "^${{ matrix.lower-version }}$", "^${{ matrix.higher-version }}$" diff --git a/.github/workflows/reserves/e2e.yml b/.github/workflows/reserves/e2e.yml new file mode 100644 index 000000000..dc4495083 --- /dev/null +++ b/.github/workflows/reserves/e2e.yml @@ -0,0 +1,39 @@ +name: e2e + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - 'main' + - 'release/*' + pull_request: + +jobs: + run-e2e-test: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - + name: Build image + uses: docker/bake-action@v2 + with: + targets: image-local + - + name: Start distribution server + run: | + IP=`hostname -I | awk '{print $1}'` + echo "IP=$IP" >> $GITHUB_ENV + echo '{"insecure-registries" : ["'$IP':5000"]}' | sudo tee /etc/docker/daemon.json + sudo service docker restart + docker run --rm -p 5000:5000 -p 5001:5001 -idt "registry:local" + - + name: Tests + run: | + bash ./tests/push.sh $IP diff --git a/.github/workflows/reserves/fossa.yml b/.github/workflows/reserves/fossa.yml new file mode 100644 index 000000000..025260896 --- /dev/null +++ b/.github/workflows/reserves/fossa.yml @@ -0,0 +1,22 @@ +name: FOSSA License Scanning + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + - pull_request + - push + +jobs: + scan-license: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Run FOSSA scan and upload build data + uses: fossa-contrib/fossa-action@v1 + with: + fossa-api-key: cac3dc8d4f2ba86142f6c0f2199a160f diff --git a/.github/workflows/reserves/licensed.yml b/.github/workflows/reserves/licensed.yml new file mode 100644 index 000000000..37f1560c3 --- /dev/null +++ b/.github/workflows/reserves/licensed.yml @@ -0,0 +1,15 @@ +name: Licensed + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + call-licensed: + name: Licensed + uses: actions/reusable-workflows/.github/workflows/licensed.yml@main diff --git a/.github/workflows/reserves/main.yml b/.github/workflows/reserves/main.yml new file mode 100644 index 000000000..071d77be2 --- /dev/null +++ b/.github/workflows/reserves/main.yml @@ -0,0 +1,44 @@ +# Deploy Jekyll to GitHub Pages +name: Build and deploy Jekyll site + +# πŸ’Ž Runs on workflow_run.conclusion +on: # push + workflow_run: + types: [completed] #requested + workflows: ["pages-build-deployment"] + +# πŸͺ‚ Allow only one concurrent deployment across the branches +concurrency: + group: "pages" + cancel-in-progress: true + +# Sets global environtment variables +env: + OWNER: ${{ github.repository_owner }} + JEKYLL_CFG: /maps/_config.yml + +jobs: + # Build job + github-pages: + if: github.event.workflow_run.conclusion == 'success' + runs-on: ${{ github.ref_name != 'main' && 'ubuntu-latest' || 'windows-latest' }} + steps: + - name: πŸ“‚ Checkout + uses: actions/checkout@v3 + with: + submodules: recursive + token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + + - name: πŸ’Ž Build on Linux + if: runner.os == 'Linux' + uses: eq19/feed@v3 + with: + pre_build_commands: 'make build' + token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + + - name: πŸ’Ž Build on Windows + if: runner.os == 'Windows' + uses: eq19/maps@v1 + with: + dotnet-version: '3.1.x' + token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} diff --git a/.github/workflows/reserves/matching.yml b/.github/workflows/reserves/matching.yml new file mode 100644 index 000000000..940f7a924 --- /dev/null +++ b/.github/workflows/reserves/matching.yml @@ -0,0 +1,83 @@ +name: CI + +on: + push: + branches: [develop] + pull_request: + branches: [develop] + +jobs: + checkout: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.matching.outputs.version }} + steps: + - uses: actions/checkout@main + - uses: rundocs/checkout@master + - name: Match the commit message whether to Release! + run: | + MESSAGE=$(git log -1 --format="%s") + if [[ ${MESSAGE} =~ ^v[0-9]+\.[0-9]+\.[0-9]+ ]]; then + echo "::set-output name=version::${MESSAGE:1}" + fi + id: matching + if: ${{ github.event_name == 'push' }} + release: + runs-on: ubuntu-latest + needs: checkout + if: ${{ needs.checkout.outputs.version }} + env: + VERSION: ${{ needs.checkout.outputs.version }} + steps: + - uses: actions/checkout@main + with: + fetch-depth: 0 + - uses: actions/setup-node@main + - uses: actions/setup-ruby@main + + - name: Generate changelog and Auto update version! + run: | + LAST_TAG=$(git describe --tags --abbrev=0) + git log ${LAST_TAG}..HEAD --no-merges --format="- %h %s @%an" > action.changelog.md + sed -i "s/${LAST_TAG:1}/${VERSION}/g" jekyll-rtd-theme.gemspec + sed -i "s/${LAST_TAG:1}/${VERSION}/g" _includes/rest/defaults.liquid + + - name: Prettier check and Build theme assets! + run: | + npm install + npm run format && npm run build + + - name: Save changes! + run: | + git remote set-url origin "https://${GITHUB_ACTOR}:${{ secrets.AUTH_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git" + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + git add . + git commit -m "πŸ’Ž v${VERSION}" && git push + + - name: Create release! + uses: actions/create-release@main + with: + release_name: ${{ needs.checkout.outputs.version }} + tag_name: v${{ needs.checkout.outputs.version }} + commitish: ${{ github.ref }} + body_path: action.changelog.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure gem credentials and Build gemspec! + run: | + CONFIG=${HOME}/.gem/credentials + mkdir -p ${HOME}/.gem && touch ${CONFIG} && chmod 0600 ${CONFIG} + echo "---" > ${CONFIG} + echo ":github: Bearer ${GITHUB_TOKEN}" >> ${CONFIG} + echo ":rubygems_api_key: ${RUBYGEMS_AUTH_TOKEN}" >> ${CONFIG} + gem build *.gemspec + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUBYGEMS_AUTH_TOKEN: ${{ secrets.RUBYGEMS_AUTH_TOKEN }} + + - name: Publish rubygems! + run: | + gem push *.gem + gem push --KEY github --host https://rubygems.pkg.github.com/${{ github.repository_owner }} *.gem diff --git a/.github/workflows/reserves/matrix-go.yml b/.github/workflows/reserves/matrix-go.yml new file mode 100644 index 000000000..152c7918c --- /dev/null +++ b/.github/workflows/reserves/matrix-go.yml @@ -0,0 +1,128 @@ +name: distribution + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - 'main' + - 'release/*' + tags: + - 'v*' + pull_request: + +env: + DOCKERHUB_SLUG: distribution/distribution + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + go: + - 1.18 + - 1.19 + steps: + - + name: Checkout + uses: actions/checkout@v3 + - + name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.go }} + - + name: Test + run: | + make coverage + - + name: Codecov + uses: codecov/codecov-action@v3 + with: + directory: ./ + + build: + runs-on: ubuntu-latest + needs: + - test + steps: + - + name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - + name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ${{ env.DOCKERHUB_SLUG }} + ### versioning strategy + ### push semver tag v3.2.1 on main (default branch) + # distribution/distribution:3.2.1 + # distribution/distribution:3.2 + # distribution/distribution:3 + # distribution/distribution:latest + ### push semver prelease tag v3.0.0-beta.1 on main (default branch) + # distribution/distribution:3.0.0-beta.1 + ### push on main + # distribution/distribution:edge + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=ref,event=pr + type=edge + labels: | + org.opencontainers.image.title=Distribution + org.opencontainers.image.description=The toolkit to pack, ship, store, and deliver container content + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - + name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build artifacts + uses: docker/bake-action@v2 + with: + targets: artifact-all + - + name: Move artifacts + run: | + mv ./bin/**/* ./bin/ + - + name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: registry + path: ./bin/* + if-no-files-found: error + - + name: Build image + uses: docker/bake-action@v2 + with: + files: | + ./docker-bake.hcl + ${{ steps.meta.outputs.bake-file }} + targets: image-all + push: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') }} + - + name: GitHub Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + draft: true + files: | + bin/*.tar.gz + bin/*.sha256 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/reserves/matrix-ruby.yml b/.github/workflows/reserves/matrix-ruby.yml new file mode 100644 index 000000000..608a834ba --- /dev/null +++ b/.github/workflows/reserves/matrix-ruby.yml @@ -0,0 +1,90 @@ +name: Build +on: + - push + - pull_request + +jobs: + build: + name: Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + strategy: + fail-fast: false + matrix: + ruby: + - jruby-9.2.16.0 + - truffleruby + - "3.1" + - "3.0" + - "2.7" + - "2.6" + - "2.5" + rails: + - "5.0" + - "5.1" + - "5.2" + - "6.0" + - "6.1" + - "7.0" + - main + exclude: + - ruby: 2.5 + rails: "7.0" + - ruby: 2.5 + rails: main + - ruby: 2.6 + rails: "7.0" + - ruby: 2.6 + rails: main + - ruby: jruby-9.2.16.0 + rails: "7.0" + - ruby: jruby-9.2.16.0 + rails: main + - ruby: "3.0" + rails: "5.0" + - ruby: "3.0" + rails: "5.1" + - ruby: "3.0" + rails: "5.2" + - ruby: truffleruby + rails: "5.0" + - ruby: truffleruby + rails: "5.1" + - ruby: truffleruby + rails: "5.2" + - ruby: "3.1" + rails: "5.0" + - ruby: "3.1" + rails: "5.1" + - ruby: "3.1" + rails: "5.2" + - ruby: "3.1" + rails: "6.0" + + runs-on: 'ubuntu-latest' + + env: + BUNDLE_GEMFILE: gemfiles/${{ matrix.rails }}.gemfile + RUBYOPT: "--disable-error_highlight" + + steps: + - uses: actions/checkout@v2 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + - name: Setup project + run: bundle install + - name: Run test + run: bundle exec rake all_specs + + standard: + name: Run standard + runs-on: 'ubuntu-latest' + steps: + - uses: actions/checkout@v3 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.1" + - name: Setup project + run: bundle install + - name: Run test + run: bundle exec rake standard diff --git a/.github/workflows/reserves/no-response.yml b/.github/workflows/reserves/no-response.yml new file mode 100644 index 000000000..7193eaa3b --- /dev/null +++ b/.github/workflows/reserves/no-response.yml @@ -0,0 +1,13 @@ +# Configuration for probot-no-response - https://github.com/probot/no-response + +# Number of days of inactivity before an Issue is closed for lack of response +daysUntilClose: 14 +# Label requiring a response +responseRequiredLabel: more-information-needed +# Comment to post when closing an Issue for lack of response. Set to `false` to disable +closeComment: > + This issue has been automatically closed because there has been no response + to our request for more information from the original author. With only the + information that is currently in the issue, we don't have enough information + to take action. Please reach out if you have or find the answers we need so + that we can investigate further. diff --git a/.github/workflows/reserves/release-new-action-version.yml b/.github/workflows/reserves/release-new-action-version.yml new file mode 100644 index 000000000..e584e46f6 --- /dev/null +++ b/.github/workflows/reserves/release-new-action-version.yml @@ -0,0 +1,29 @@ +name: Release new action version + +on: + release: + types: [released] + workflow_dispatch: + inputs: + TAG_NAME: + description: 'Tag name that the major tag will point to' + required: true + +env: + TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} +permissions: + contents: write + +jobs: + update_tag: + name: Update the major tag to include the ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} changes + environment: + name: releaseNewActionVersion + runs-on: ubuntu-latest + steps: + - name: Update the ${{ env.TAG_NAME }} tag + id: update-major-tag + uses: actions/publish-action@v0.2.2 + with: + source-tag: ${{ env.TAG_NAME }} + slack-webhook: ${{ secrets.SLACK_WEBHOOK }} diff --git a/.github/workflows/reserves/settings.yml b/.github/workflows/reserves/settings.yml new file mode 100644 index 000000000..7c1b11592 --- /dev/null +++ b/.github/workflows/reserves/settings.yml @@ -0,0 +1,31 @@ +# Repository settings set via https://github.com/probot/settings + +repository: + has_issues: true + has_wiki: false + has_projects: false + has_downloads: false + +labels: + - name: help wanted + oldname: help-wanted + color: 0e8a16 + - name: more-information-needed + color: d93f0b + - name: bug + color: b60205 + - name: feature + color: 1d76db + - name: good first issue + color: "5319e7" + +# Not currently implemented by probot/settings, but manually implemented in script/deploy +branch_protection: + restrictions: null + enforce_admins: false + required_status_checks: + strict: true + contexts: + - "script/cibuild" # GitHub Actions CI workflow + required_pull_request_reviews: + require_code_owner_reviews: true diff --git a/.github/workflows/reserves/stale.yml b/.github/workflows/reserves/stale.yml new file mode 100644 index 000000000..a1aa17e58 --- /dev/null +++ b/.github/workflows/reserves/stale.yml @@ -0,0 +1,27 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 60 + +# Number of days of inactivity before a stale Issue or Pull Request is closed +daysUntilClose: 7 + +# Issues or Pull Requests with these labels will never be considered stale +exemptLabels: + - pinned + - security + +# Label to use when marking as stale +staleLabel: wontfix + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. + +# Comment to post when closing a stale Issue or Pull Request. Set to `false` to disable +closeComment: false + +# Limit to only `issues` or `pulls` +# only: issues diff --git a/.github/workflows/reserves/test-dotnet.yml b/.github/workflows/reserves/test-dotnet.yml new file mode 100644 index 000000000..03b9a294b --- /dev/null +++ b/.github/workflows/reserves/test-dotnet.yml @@ -0,0 +1,35 @@ +name: Validate dotnet + +on: + pull_request: + paths-ignore: + - '**.md' + push: + branches: + - main + - releases/* + paths-ignore: + - '**.md' + +jobs: + setup-version: + runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false + matrix: + operating-system: [ubuntu-latest, windows-latest, macOS-latest] + dotnet-version: ['2.1', '2.2', '3.0', '3.1', '5.0', '6.0', '7.0', '8.0'] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Clear toolcache + shell: pwsh + run: __tests__/clear-toolcache.ps1 ${{ runner.os }} + - name: Setup dotnet ${{ matrix.dotnet-version }} + uses: ./ + with: + dotnet-version: ${{ matrix.dotnet-version }} + - name: Verify installed version + shell: pwsh + run: | + __tests__/verify-dotnet.ps1 -Patterns "^${{ matrix.dotnet-version }}" diff --git a/.github/workflows/reserves/test_of_push_and_pull.yml b/.github/workflows/reserves/test_of_push_and_pull.yml new file mode 100644 index 000000000..4ee1316f9 --- /dev/null +++ b/.github/workflows/reserves/test_of_push_and_pull.yml @@ -0,0 +1,37 @@ +name: "Tests of push & pull" + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +env: + FILENAME: README.md + +jobs: + tests: + name: 'Validate README.md changes' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.8' + + - name: Install dependencies + run: python -m pip install -r scripts/requirements.txt + + - name: Validate Markdown format + run: python scripts/validate/format.py ${FILENAME} + + - name: Validate pull request changes + run: scripts/github_pull_request.sh ${{ github.repository }} ${{ github.event.pull_request.number }} ${FILENAME} + if: github.event_name == 'pull_request' + + - name: Checking if push changes are duplicated + run: python scripts/validate/links.py ${FILENAME} --only_duplicate_links_checker + if: github.event_name == 'push' diff --git a/.github/workflows/reserves/test_of_validate_package.yml b/.github/workflows/reserves/test_of_validate_package.yml new file mode 100644 index 000000000..f739df81d --- /dev/null +++ b/.github/workflows/reserves/test_of_validate_package.yml @@ -0,0 +1,29 @@ +name: "Tests of validate package" + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + unittest: + name: 'Run tests of validate package' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.8' + + - name: Install dependencies + run: python -m pip install -r scripts/requirements.txt + + - name: Run Unittest + run: | + cd scripts + python -m unittest discover tests/ --verbose diff --git a/.github/workflows/reserves/update-config-files.yml b/.github/workflows/reserves/update-config-files.yml new file mode 100644 index 000000000..87af50042 --- /dev/null +++ b/.github/workflows/reserves/update-config-files.yml @@ -0,0 +1,11 @@ +name: Update configuration files + +on: + schedule: + - cron: '0 3 * * 0' + workflow_dispatch: + +jobs: + call-update-configuration-files: + name: Update configuration files + uses: actions/reusable-workflows/.github/workflows/update-config-files.yml@main diff --git a/.github/workflows/reserves/update.yml b/.github/workflows/reserves/update.yml new file mode 100644 index 000000000..642beb674 --- /dev/null +++ b/.github/workflows/reserves/update.yml @@ -0,0 +1,34 @@ +name: Update dependencies + +on: + schedule: + - cron: "0 0 * * 0" + workflow_dispatch: {} + +jobs: + update: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - uses: ruby/setup-ruby@v1 + with: + bundler-cache: true + + - uses: actions/setup-node@v2 + with: + node-version: '14' + cache: 'npm' + + - name: script/update + run: script/update + + - name: script/build + run: script/build + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v3 + with: + commit-message: Update dependencies + title: Update dependencies \ No newline at end of file diff --git a/.github/workflows/reserves/validate.yml b/.github/workflows/reserves/validate.yml new file mode 100644 index 000000000..98035af24 --- /dev/null +++ b/.github/workflows/reserves/validate.yml @@ -0,0 +1,35 @@ +name: validate + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - 'main' + - 'release/*' + tags: + - 'v*' + pull_request: + +jobs: + validate: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + target: + - lint + - validate-vendor + - validate-git + steps: + - + name: Checkout + uses: actions/checkout@v3 + - + name: Run + run: | + make ${{ matrix.target }} + env: + COMMIT_RANGE: ${{ format('{0}..{1}', github.sha, 'HEAD') }} diff --git a/.github/workflows/reserves/validate_links.yml b/.github/workflows/reserves/validate_links.yml new file mode 100644 index 000000000..33fef0887 --- /dev/null +++ b/.github/workflows/reserves/validate_links.yml @@ -0,0 +1,28 @@ +name: "Validate links" + +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * *' + +env: + FILENAME: README.md + +jobs: + validate_links: + name: 'Check all links are working' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.8' + + - name: Install dependencies + run: python -m pip install -r scripts/requirements.txt + + - name: Validate all links from README.md + run: python scripts/validate/links.py ${FILENAME} From 3fa9fbb1ffc04bd63cb25bcee5b68acdeeabb19a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Tue, 11 Jul 2023 02:42:11 +0700 Subject: [PATCH 06/26] Update main.yml --- .github/workflows/main.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7bddaf846..95742ed45 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,7 +15,6 @@ concurrency: # Sets global environtment variables env: OWNER: ${{ github.repository_owner }} - JEKYLL_CFG: ./.github/_config.yml jobs: # Build job @@ -31,7 +30,7 @@ jobs: - name: πŸ’Ž Build on Linux if: runner.os == 'Linux' - uses: eq19/feed@v3 + uses: eq19/feed@v2 with: pre_build_commands: 'make build' token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} From 63f6d11112f6b286835fba690b2a55438d9dda5d Mon Sep 17 00:00:00 2001 From: eq19 Date: Mon, 10 Jul 2023 15:23:28 -0500 Subject: [PATCH 07/26] update workflow --- .github/_config.yml | 39 ------------------- .github/{ => workflows/reserves}/__config.yml | 0 2 files changed, 39 deletions(-) delete mode 100644 .github/_config.yml rename .github/{ => workflows/reserves}/__config.yml (100%) diff --git a/.github/_config.yml b/.github/_config.yml deleted file mode 100644 index b12f7f683..000000000 --- a/.github/_config.yml +++ /dev/null @@ -1,39 +0,0 @@ -description: Just another documentation theme compatible with GitHub Pages - -# debug: -# dist: false -# compress: true -# shortcodes: true - -lsi: false -theme: null -source: /maps -incremental: false -highlighter: rouge -gist: - noscript: false -kramdown: - math_engine: mathjax - syntax_highlighter: rouge -readme_index: - with_frontmatter: true - -exclude: - - CNAME - - LICENSE - - action.yml - - Dockerfile - -plugins: - - jemoji - - jekyll-gist - - jekyll-avatar - - jekyll-mentions - - jekyll-paginate - - jekyll-coffeescript - - jekyll-readme-index - - jekyll-default-layout - - jekyll-relative-links - - jekyll-github-metadata - - jekyll-titles-from-headings - - jekyll-optional-front-matter diff --git a/.github/__config.yml b/.github/workflows/reserves/__config.yml similarity index 100% rename from .github/__config.yml rename to .github/workflows/reserves/__config.yml From dfa5255795a1fe789a3aa7ae9132367044de61f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Thu, 20 Jul 2023 22:08:20 +0700 Subject: [PATCH 08/26] Update main.yml --- .github/workflows/main.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 95742ed45..37258064b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,13 +14,16 @@ concurrency: # Sets global environtment variables env: + USER: ${{ github.actor }} + REPO: ${{ github.repository }} OWNER: ${{ github.repository_owner }} jobs: # Build job github-pages: if: github.event.workflow_run.conclusion == 'success' - runs-on: ${{ github.ref_name != 'main' && 'ubuntu-latest' || 'windows-latest' }} + runs-on: ${{ github.ref_name != 'main' && 'ubuntu-latest' || ( + github.repository_owner != 'FeedMapping' && 'windows-latest' || 'self-hosted') }} steps: - name: πŸ“‚ Checkout uses: actions/checkout@v3 From 46e418046ee69710b2395814b92bffad54932358 Mon Sep 17 00:00:00 2001 From: eq19 Date: Fri, 21 Jul 2023 12:04:11 -0500 Subject: [PATCH 09/26] update workflow --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 37258064b..be39dc9dd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,8 +22,8 @@ jobs: # Build job github-pages: if: github.event.workflow_run.conclusion == 'success' - runs-on: ${{ github.ref_name != 'main' && 'ubuntu-latest' || ( - github.repository_owner != 'FeedMapping' && 'windows-latest' || 'self-hosted') }} + runs-on: ${{ github.actor != github.repository_owner && 'self-hosted' || ( + github.ref_name != 'main' && 'ubuntu-latest' || 'windows-latest') }} steps: - name: πŸ“‚ Checkout uses: actions/checkout@v3 From 89b7b19c2ca01d136db88e1c044bb7a8c3d965c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Mon, 24 Jul 2023 07:34:52 +0700 Subject: [PATCH 10/26] Update main.yml --- .github/workflows/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index be39dc9dd..8b401c1e5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,5 @@ -# Deploy Jekyll to GitHub Pages -name: Build and deploy Jekyll site +# Deploy GitHub Pages +name: Build and deploy β‚ Quantum site # πŸ’Ž Runs on workflow_run.conclusion on: # push @@ -7,7 +7,7 @@ on: # push types: [completed] #requested workflows: ["pages-build-deployment"] -# πŸͺ‚ Allow only one concurrent deployment across the branches +# πŸͺ‚ Allow only one concurrent deployment concurrency: group: "pages" cancel-in-progress: true @@ -22,8 +22,8 @@ jobs: # Build job github-pages: if: github.event.workflow_run.conclusion == 'success' - runs-on: ${{ github.actor != github.repository_owner && 'self-hosted' || ( - github.ref_name != 'main' && 'ubuntu-latest' || 'windows-latest') }} + runs-on: ${{github.actor != github.repository_owner && 'ubuntu-latest' || ( + github.ref_name != 'main' && 'windows-latest' || 'self-hosted') }} steps: - name: πŸ“‚ Checkout uses: actions/checkout@v3 From cf2786fb9eada03a0446d549a6cc283090c1da4f Mon Sep 17 00:00:00 2001 From: eq19 Date: Sun, 23 Jul 2023 20:41:48 -0500 Subject: [PATCH 11/26] update workflow --- .github/CODEOWNERS | 14 +++++++++++++- .github/workflows/main.yml | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ca56653dc..f82824ad5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1,13 @@ -* @actions/setup-actions-team +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. + +# These owners will be the default owners for everything in the repo. +* @eq19 + +# Order is important. The last matching pattern has the most precedence. +# So if a pull request only touches javascript files, only these owners +# will be requested to review. +# *.js @octocat @github/js + +# You can also use email addresses if you prefer. +# .github/* docs@example.com diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8b401c1e5..c2b031721 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,7 +2,7 @@ name: Build and deploy β‚ Quantum site # πŸ’Ž Runs on workflow_run.conclusion -on: # push +on: workflow_run: types: [completed] #requested workflows: ["pages-build-deployment"] From 9aa08291ff94c97fc7790bc4976b9ab177b6a5f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=82=A0Quantum?= Date: Mon, 24 Jul 2023 21:51:18 +0700 Subject: [PATCH 12/26] Update main.yml --- .github/workflows/main.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c2b031721..72b33e3f8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,13 +11,17 @@ on: concurrency: group: "pages" cancel-in-progress: true - + +# Set GITHUB_TOKEN scopes +permissions: write-all + # Sets global environtment variables env: USER: ${{ github.actor }} REPO: ${{ github.repository }} OWNER: ${{ github.repository_owner }} - + ACTOR: ${{ github.triggering_actor }} + jobs: # Build job github-pages: @@ -37,10 +41,11 @@ jobs: with: pre_build_commands: 'make build' token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + owner: ${{ secrets.JEKYLL_GITHUB_OWNER }} - name: πŸ’Ž Build on Windows if: runner.os == 'Windows' uses: eq19/maps@v1 with: dotnet-version: '3.1.x' - token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} + owner: ${{ secrets.JEKYLL_GITHUB_OWNER }} From c2ea75c195750f37a7dbf3928f30ec2870da2954 Mon Sep 17 00:00:00 2001 From: chetabahana Date: Sat, 6 Jan 2024 13:04:42 -0600 Subject: [PATCH 13/26] update workflow --- .github/workflows/main.yml | 2 +- .github/workflows/reserves/__config.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 72b33e3f8..90291c87d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,5 @@ # Deploy GitHub Pages -name: Build and deploy β‚ Quantum site +name: Build and deploy eQuantum site # πŸ’Ž Runs on workflow_run.conclusion on: diff --git a/.github/workflows/reserves/__config.yml b/.github/workflows/reserves/__config.yml index b14ad628c..8920eb42c 100644 --- a/.github/workflows/reserves/__config.yml +++ b/.github/workflows/reserves/__config.yml @@ -234,6 +234,6 @@ repository: eq19/eq19.github.io # https://stackoverflow.com/questions/3490505/is-there-a-notepad-with-github-plugin/41884020 # https://stackoverflow.com/questions/14000173/tortoisegit-save-user-authentication-credentials -slogan: β‚ Quantum Project | A Unique Mapping System +slogan: eQuantum Project | A Unique Mapping System disclaimer: The definite key to identify whether you use our concept is when there a kind of development item lies a unified assignment in hexagonal form by six (6) corresponding sets while each sets pick a combination of six (6) routes with a pairing of six (6) to six (6) of all channels. license: Apache License, Version 2.0 From 01b712f9eee49913fe427437eabf300f97634e1a Mon Sep 17 00:00:00 2001 From: chetabahana Date: Fri, 26 Apr 2024 09:55:57 -0500 Subject: [PATCH 14/26] update workflow --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 90291c87d..d40f38d21 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: github.ref_name != 'main' && 'windows-latest' || 'self-hosted') }} steps: - name: πŸ“‚ Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: recursive token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} From 16d37d110ff98c8e6e89635b5398a9d322ba1897 Mon Sep 17 00:00:00 2001 From: eQuantum <8466209+eq19@users.noreply.github.com> Date: Thu, 1 May 2025 08:33:26 +0000 Subject: [PATCH 15/26] Update file --- .github/workflows/main.yml | 191 ++++++++++++++++++++++++++++++------- 1 file changed, 157 insertions(+), 34 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d40f38d21..bf9624429 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,51 +1,174 @@ -# Deploy GitHub Pages -name: Build and deploy eQuantum site +# πŸ’Ž Main Workflow: eQuantum MEC30 +name: COmpendium of RElations – Modulo 6 -# πŸ’Ž Runs on workflow_run.conclusion on: + #push: workflow_run: - types: [completed] #requested + types: [completed] workflows: ["pages-build-deployment"] + repository_dispatch: + types: [trigger_action, retry_workflow] -# πŸͺ‚ Allow only one concurrent deployment +# πŸ•ΈοΈ Allow concurrent concurrency: group: "pages" cancel-in-progress: true -# Set GITHUB_TOKEN scopes +# ⚠️ Set token permissions permissions: write-all - -# Sets global environtment variables + +# πŸ•ΈοΈ Global Environment env: - USER: ${{ github.actor }} - REPO: ${{ github.repository }} - OWNER: ${{ github.repository_owner }} - ACTOR: ${{ github.triggering_actor }} - + GH_TOKEN: ${{ secrets.ACCESS_TOKEN }} + RUNNER_TITLE: "Google-optimized-instance" + TARGET_REPOSITORY: ${{ vars.TARGET_REPOSITORY }} + jobs: - # Build job - github-pages: - if: github.event.workflow_run.conclusion == 'success' - runs-on: ${{github.actor != github.repository_owner && 'ubuntu-latest' || ( - github.ref_name != 'main' && 'windows-latest' || 'self-hosted') }} + lexering: + strategy: + max-parallel: 1 + fail-fast: true + matrix: + config: + - { os: ubuntu-latest, jobs_id: 1 } + - { os: macos-latest, jobs_id: 2 } + env: + JOBS_ID: ${{ matrix.config.jobs_id }} + PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} + DOC: '${{ vars.TARGET_REPOSITORY }}.wiki' + + # πŸ”§ Commutation relations + runs-on: ${{ matrix.config.os }} + continue-on-error: ${{ matrix.config.jobs_id != 1 && false || true }} + steps: - name: πŸ“‚ Checkout uses: actions/checkout@v4 with: submodules: recursive - token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} - - - name: πŸ’Ž Build on Linux - if: runner.os == 'Linux' - uses: eq19/feed@v2 - with: - pre_build_commands: 'make build' - token: ${{ secrets.JEKYLL_GITHUB_TOKEN }} - owner: ${{ secrets.JEKYLL_GITHUB_OWNER }} - - - name: πŸ’Ž Build on Windows - if: runner.os == 'Windows' - uses: eq19/maps@v1 - with: - dotnet-version: '3.1.x' - owner: ${{ secrets.JEKYLL_GITHUB_OWNER }} + token: ${{ secrets.ACCESS_TOKEN }} + repository: ${{ env.JOBS_ID != 1 && env.DOC || '' }} + + - name: βš™οΈ Build Maps + uses: eq19/maps@v8 + id: build-parser + with: + token: ${{ secrets.ACCESS_TOKEN }} + chat_id: ${{ secrets.MESSAGE_API }} + api_key: ${{ secrets.ACCESS_API }} + api_secret: ${{ secrets.ACCESS_KEY }} + pypi_token: ${{ secrets.PYPI_TOKEN }} + bot_token: ${{ secrets.MONITOR_TOKEN }} + logs_token: ${{ secrets.WARNING_TOKEN }} + credentials: ${{ secrets.GCP_CREDENTIALS }} + docker_hub_token: ${{ secrets.DOCKER_HUB_TOKEN }} + docker_hub_password: ${{ secrets.DOCKER_HUB_PASSWORD }} + initiate_pauli_sum: ${{ toJSON(steps.build-parser.outputs) }} + + - name: πŸͺ‚ Feed Mapping + uses: eq19/feed@v6 + id: feed-mapping + with: + token: ${{ secrets.ACCESS_TOKEN }} + chat_id: ${{ secrets.MESSAGE_API }} + api_key: ${{ secrets.ACCESS_API }} + api_secret: ${{ secrets.ACCESS_KEY }} + pypi_token: ${{ secrets.PYPI_TOKEN }} + bot_token: ${{ secrets.MONITOR_TOKEN }} + logs_token: ${{ secrets.WARNING_TOKEN }} + credentials: ${{ secrets.GCP_CREDENTIALS }} + docker_hub_token: ${{ secrets.DOCKER_HUB_TOKEN }} + docker_hub_password: ${{ secrets.DOCKER_HUB_PASSWORD }} + initiate_pauli_sum: ${{ toJSON(steps.build-parser.outputs) }} + + - name: πŸƒβ€β™‚οΈ Lexering Runner + uses: eq19/lexer@v4 + id: set-lexering + with: + token: ${{ secrets.ACCESS_TOKEN }} + config: ${{ secrets.CONFIG_JSON }} + credentials: ${{ secrets.GCP_CREDENTIALS }} + docker_hub_token: ${{ secrets.DOCKER_HUB_TOKEN }} + docker_hub_password: ${{ secrets.DOCKER_HUB_PASSWORD }} + initiate_pauli_sum: ${{ toJSON(steps.feed-mapping.outputs) }} + + - name: πŸ“‹ Generate Outputs + id: gen_outputs + shell: bash + run: | + output=${{ env.JOBS_ID == 1 && + steps.feed-mapping.outputs.addition || + steps.set-lexering.outputs.multiplication }} + echo "output_${id}=${output}" >> "${GITHUB_OUTPUT}" + + outputs: + # ♻️ Simulate Gell-Mann Matrices + target: ${{ steps.gen_outputs.outputs.output_1 }} + address: ${{ steps.gen_outputs.outputs.output_2 }} + function: ${{ steps.set-lexering.outputs.function }} + + parsering: + strategy: + matrix: + config: + - { os: self-hosted, jobs_id: 3 } + - { os: windows-latest, jobs_id: 4 } + + # πŸ’’ Completeness relations + max-parallel: 1 + fail-fast: true + + env: + JOBS_ID: ${{ matrix.config.jobs_id }} + IP_ADDRESS: '${{ needs.lexering.outputs.address }}' + PASS: ${{ contains(needs.lexering.result, 'success') }} + + ## βœ”οΈ Completeness status + needs: lexering + runs-on: ${{ matrix.config.os }} + #if: ${{ (needs.lexering.result == 'success') }} + continue-on-error: ${{ matrix.config.jobs_id == 3 && true || false }} + + steps: + - name: πŸ“‚ Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + token: ${{ secrets.ACCESS_TOKEN }} + repository: ${{ env.TARGET_REPOSITORY }} + ref: ${{ env.JOBS_ID == 3 && 'gh-source' || 'gh-pages' }} + + - name: πŸš€ Setup Parser + if: ${{ env.PASS == 'true' }} + uses: eq19/parser@v2 + id: set-parser + with: + token: ${{ secrets.ACCESS_TOKEN }} + credentials: ${{ secrets.GCP_CREDENTIALS }} + pauli_sum: ${{ needs.lexering.outputs.function }} + failure_status: ${{ contains(steps.*.conclusion, 'failure') || + (env.JOBS_ID == 4 && contains(needs.*.result, 'failure')) }} + + - name: πŸŒ€ Evaluate Syntax + if: ${{ env.PASS == 'true' }} + uses: eq19/syntax@v2 + id: eval-syntax + with: + token: ${{ secrets.ACCESS_TOKEN }} + api_key: ${{ secrets.ACCESS_API }} + api_secret: ${{ secrets.ACCESS_KEY }} + credentials: ${{ secrets.GCP_CREDENTIALS }} + pauli_sum: ${{ toJSON(steps.set-parser.outputs) }} + failure_status: ${{ contains(steps.*.conclusion, 'failure') || + (env.JOBS_ID == 4 && contains(needs.*.result, 'failure')) }} + + - name: ⚧️ Set Grammar Rules + uses: eq19/grammar@v1 + id: grammar-rules + if: always() + with: + token: ${{ secrets.ACCESS_TOKEN }} + credentials: ${{ secrets.GCP_CREDENTIALS }} + pauli_sum: ${{ toJSON(steps.eval-syntax.outputs) }} + failure_status: ${{ contains(steps.*.conclusion, 'failure') || + (env.JOBS_ID == 4 && contains(needs.*.result, 'failure')) }} From cd164d1f3e524d637a1adf57f4af710730538827 Mon Sep 17 00:00:00 2001 From: eq19 Date: Thu, 1 May 2025 09:30:37 +0000 Subject: [PATCH 16/26] update workflows --- .github/ISSUE_TEMPLATE/config.yml | 5 - .github/actions/1-addition/1-maps/action.yml | 199 + .github/actions/1-addition/2-feed/action.yml | 184 + .github/actions/1-addition/3-lexer/action.yml | 134 + .../2-multiplication/1-maps/action.yml | 155 + .../2-multiplication/2-feed/action.yml | 224 + .../2-multiplication/3-lexer/action.yml | 166 + .../3-exponentiation/4-parser/action.yml | 97 + .../3-exponentiation/5-syntax/action.yml | 122 + .../3-exponentiation/6-grammar/action.yml | 135 + .../actions/4-identition/4-parser/action.yml | 89 + .../actions/4-identition/5-syntax/action.yml | 113 + .../actions/4-identition/6-grammar/action.yml | 200 + .github/actions/reserves/ubuntu/README.md | 4 + .../ubuntu/download-rootfs/action.yaml | 103 + .../download-rootfs/download-rootfs.ps1 | 110 + .../reserves/ubuntu/wsl-bash/action.yaml | 60 + .../reserves/ubuntu/wsl-checkout/action.yaml | 38 + .../reserves/ubuntu/wsl-install/action.yaml | 57 + .github/dco.yml | 4 + .github/dependabot.yml | 10 + .github/entrypoint/artifact.sh | 180 + .github/entrypoint/artifact/BosonJet.c | 326 + .github/entrypoint/artifact/BosonJet.h | 92 + .github/entrypoint/artifact/BosonJetBorn.c | 10 + .github/entrypoint/artifact/BosonJetBorn.h | 9 + .github/entrypoint/artifact/BosonJetCSS.c | 133 + .github/entrypoint/artifact/BosonJetCSS.h | 33 + .github/entrypoint/artifact/BosonJetLL.c | 42 + .github/entrypoint/artifact/BosonJetLL.h | 23 + .github/entrypoint/artifact/BosonJetLO.c | 198 + .github/entrypoint/artifact/BosonJetLO.h | 31 + .github/entrypoint/artifact/BosonJetNLL.c | 210 + .github/entrypoint/artifact/BosonJetNLL.h | 55 + .github/entrypoint/artifact/BosonJetResum.c | 280 + .github/entrypoint/artifact/BosonJetResum.h | 78 + .github/entrypoint/artifact/ElectroWeak.c | 27 + .github/entrypoint/artifact/ElectroWeak.h | 20 + .github/entrypoint/artifact/Makefile | 99 + .github/entrypoint/artifact/Particle.c | 30 + .github/entrypoint/artifact/Particle.h | 26 + .github/entrypoint/artifact/QCD.c | 122 + .github/entrypoint/artifact/QCD.h | 39 + .github/entrypoint/artifact/README.md | 3 + .github/entrypoint/artifact/StandardModel.h | 19 + .github/entrypoint/artifact/born.c | 52 + .github/entrypoint/artifact/css.c | 72 + .github/entrypoint/artifact/main.c | 114 + .github/entrypoint/artifact/nllR.c | 67 + .github/entrypoint/artifact/python/LICENSE | 21 + .github/entrypoint/artifact/python/README.md | 32 + .../artifact/python/colour_matrices.py | 123 + .../entrypoint/artifact/python/gellmann.ipynb | 815 ++ .../entrypoint/artifact/python/gellmann.py | 92 + .../entrypoint/artifact/python/inventory.py | 218 + .../entrypoint/artifact/python/keywords.lst | 7614 +++++++++++++++++ .../entrypoint/artifact/python/particle.ipynb | 374 + .../entrypoint/artifact/python/pyproject.toml | 29 + .github/entrypoint/artifact/python/setup.py | 29 + .../artifact/python/src/lgt/__init__.py | 0 .../artifact/python/src/lgt/group/__init__.py | 0 .../python/src/lgt/group/generators.py | 55 + .../artifact/python/src/lgt/group/group.py | 403 + .../python/src/lgt/lattice/__init__.py | 0 .../src/lgt/lattice/su3/numpy/__init__.py | 0 .../src/lgt/lattice/su3/numpy/lattice.py | 178 + .../src/lgt/lattice/su3/pytorch/__init__.py | 0 .../lgt/lattice/su3/tensorflow/__init__.py | 0 .../src/lgt/lattice/su3/tensorflow/lattice.py | 169 + .../python/src/lgt/lattice/u1/__init__.py | 0 .../src/lgt/lattice/u1/numpy/__init__.py | 0 .../src/lgt/lattice/u1/numpy/lattice.py | 204 + .../src/lgt/lattice/u1/pytorch/__init__.py | 0 .../src/lgt/lattice/u1/pytorch/lattice.py | 258 + .../src/lgt/lattice/u1/tensorflow/__init__.py | 0 .../src/lgt/lattice/u1/tensorflow/lattice.py | 263 + .../artifact/python/src/params/spaces.json | 54 + .github/entrypoint/artifact/resum.c | 100 + .github/entrypoint/artifact/resumLL.c | 88 + .github/entrypoint/artifact/test_qcd.c | 19 + .github/entrypoint/artifact/tot.c | 54 + .github/entrypoint/cleanup_bundler.rb | 10 + .github/entrypoint/config.sh | 14 + .github/entrypoint/dockerfile/Doxyfile | 2473 ++++++ .github/entrypoint/dockerfile/conf/Dockerfile | 226 + .github/entrypoint/dockerfile/conf/README.md | 5 + .../00-copy-config-file.sh | 3 + .../10-create-tables.sh | 53 + .../11-fill-data.sh | 39 + .../entrypoint/dockerfile/conf/init-db.sql | 17 + .../entrypoint/dockerfile/conf/package.json | 109 + .../entrypoint/dockerfile/conf/pg_hba.conf | 10 + .../dockerfile/conf/postgresql.conf | 800 ++ .../dockerfile/conf/postgresql.conf.init | 11 + .../entrypoint/dockerfile/conf/query-db.sql | 1 + .../entrypoint/dockerfile/conf/run_future.sh | 21 + .../dockerfile/conf/supervisord.conf | 24 + .../dockerfile/conf/supervisord.conf.base | 19 + .github/entrypoint/dockerfile/conf/t.sh | 12 + .github/entrypoint/dockerfile/hooks/index.js | 6318 ++++++++++++++ .../dockerfile/hooks/job_completed.sh | 41 + .../dockerfile/hooks/job_started.sh | 97 + .github/entrypoint/dockerfile/index.js | 139 + .github/entrypoint/dockerfile/package.json | 33 + .../entrypoint/dockerfile/requirements.apt | 45 + .../entrypoint/dockerfile/scripts/compound.js | 109 + .../entrypoint/dockerfile/scripts/doxygen.sh | 44 + .../dockerfile/scripts/entrypoint.sh | 75 + .../dockerfile/scripts/exitpoint.sh | 83 + .../entrypoint/dockerfile/scripts/helpers.js | 72 + .../dockerfile/scripts/jekyll_site.sh | 45 + .../entrypoint/dockerfile/scripts/logger.js | 62 + .github/entrypoint/dockerfile/scripts/main.js | 81 + .../entrypoint/dockerfile/scripts/markdown.js | 30 + .../entrypoint/dockerfile/scripts/parser.js | 497 ++ .github/entrypoint/dockerfile/scripts/post.js | 39 + .../entrypoint/dockerfile/scripts/runner.sh | 16 + .../dockerfile/scripts/templates.js | 101 + .../dockerfile/templates/cpp/class.md | 48 + .../dockerfile/templates/cpp/index.md | 27 + .../dockerfile/templates/cpp/namespace.md | 33 + .../dockerfile/templates/cpp/page.md | 34 + .../dockerfile/templates/doxygen/doc/.gitkeep | 0 .../templates/doxygen/doc/api-bicycle.md | 40 + .../templates/doxygen/doc/api-mountainbike.md | 48 + .../templates/doxygen/doc/api-racingbike.md | 40 + .../templates/doxygen/doc/page-changelog.md | 10 + .../templates/doxygen/doc/page-overview.md | 8 + .../templates/doxygen/src/CMakeLists.txt | 12 + .../templates/doxygen/src/gettingStarted.cpp | 127 + .../templates/doxygen/src/sample2HDM.cpp | 46 + .../templates/doxygen/src/samplePMSSM.cpp | 20 + .../templates/doxygen/src/sampleQCDSextet.cpp | 83 + .../templates/doxygen/src/sampleQED.cpp | 40 + .../templates/doxygen/src/sampleSQED.cpp | 46 + .../templates/doxygen/src/sampleScalar.cpp | 43 + .../templates/doxygen/xml/bicycle_8cpp.xml | 43 + .../templates/doxygen/xml/bicycle_8h.xml | 33 + .../templates/doxygen/xml/changelog.xml | 17 + .../templates/doxygen/xml/changelog_8md.xml | 22 + .../doxygen/xml/classtransport_1_1Bicycle.xml | 80 + .../xml/classtransport_1_1MountainBike.xml | 87 + .../xml/classtransport_1_1RacingBike.xml | 72 + .../templates/doxygen/xml/combine.xslt | 15 + .../templates/doxygen/xml/compound.xsd | 1131 +++ .../dir_68267d1309a1af8e8297ef4c3efbcdba.xml | 18 + .../templates/doxygen/xml/group__bicycle.xml | 12 + .../doxygen/xml/group__mountainbike.xml | 12 + .../doxygen/xml/group__racingbike.xml | 12 + .../templates/doxygen/xml/index.xml | 53 + .../templates/doxygen/xml/index.xsd | 66 + .../doxygen/xml/mountainbike_8cpp.xml | 40 + .../templates/doxygen/xml/mountainbike_8h.xml | 54 + .../doxygen/xml/namespacetransport.xml | 14 + .../templates/doxygen/xml/overview.xml | 12 + .../templates/doxygen/xml/overview_8md.xml | 20 + .../templates/doxygen/xml/racingbike_8cpp.xml | 44 + .../templates/doxygen/xml/racingbike_8h.xml | 47 + .../templates/doxygen/xml/transport_8h.xml | 102 + .github/entrypoint/entrypoint_.sh | 202 + .github/entrypoint/front.sh | 41 + .github/entrypoint/gcp_access.py | 102 + .github/entrypoint/gcp_token.py | 101 + .github/entrypoint/gist.sh | 54 + .github/entrypoint/idle.sh | 12 + .github/entrypoint/init.sh | 178 + .github/entrypoint/pinned_repos.rb | 31 + .github/entrypoint/prime_list.py | 47 + .github/entrypoint/remote.sh | 47 + .github/entrypoint/restore.sh | 24 + .github/entrypoint/sort.sh | 34 + .github/entrypoint/startup.sh | 7 + .github/entrypoint/sync.sh | 96 + .github/entrypoint/test.py | 322 + .github/{ => templates}/CODE_OF_CONDUCT.md | 0 .github/{ => templates}/CONTRIBUTING.md | 0 .../{ => templates}/PULL_REQUEST_TEMPLATE.md | 0 .github/templates/blank_issue.yml | 14 + .../bug_report.md | 0 .github/templates/bug_report.yml | 58 + .../feature_request.md | 0 .github/templates/feature_request.yml | 38 + .github/templates/mapping-errors.md | 14 + .github/templates/other-issues.md | 10 + .../templates/standards-change-proposal.md | 10 + .../workflows/reserves/account/blog-posts.yml | 27 + .../workflows/reserves/account/star-fork.yml | 23 + .../workflows/reserves/account/starred.yml | 32 + .../reserves/account/topFollowers.yml | 35 + .../workflows/reserves/account/wakatime.yml | 19 + .../workflows/reserves/algorithms/build.yml | 36 + .../reserves/algorithms/directory_writer.yml | 25 + .../reserves/algorithms/project_euler.yml | 35 + .../workflows/reserves/algorithms/ruff.yml | 16 + .../workflows/reserves/algorithms/sphinx.yml | 50 + .github/workflows/reserves/build.yml | 111 + .../reserves/cloud-init/alpine-unittests.yml | 74 + .../reserves/cloud-init/check_format.yml | 114 + .github/workflows/reserves/cloud-init/cla.yml | 40 + .../reserves/cloud-init/doc-autolabel.yml | 12 + .../reserves/cloud-init/integration.yml | 89 + .../reserves/cloud-init/linkcheck.yml | 39 + .../reserves/cloud-init/scheduled.yml | 59 + .../workflows/reserves/cloud-init/stale.yml | 24 + .../workflows/reserves/cloud-init/unit.yml | 45 + .../workflows/reserves/codeql-analysis.yml | 93 +- .github/workflows/reserves/dependabot.yml | 30 +- .../reserves/devcontainer-cli/build-chat.yml | 56 + .../devcontainer-cli/dev-containers.yml | 122 + .../publish-dev-containers.yml | 46 + .../test-plan-item-validator.yml | 25 + .../devcontainer-cli/test-windows.yml | 63 + .../reserves/devcontainer/ci_branch.yml | 33 + .../reserves/devcontainer/ci_common.yml | 1188 +++ .../reserves/devcontainer/ci_main.yml | 22 + .../reserves/devcontainer/clean_tags.sh | 75 + .../reserves/devcontainer/clean_untagged.sh | 34 + .../reserves/devcontainer/codeql-analysis.yml | 71 + .../reserves/devcontainer/pr-bot.yml | 81 + .../reserves/devcontainer/pr-closed.yml | 26 + .../reserves/devcontainer/pr_auto.yml | 26 + .../devcontainer/untagged-image-cleanup.yml | 23 + .github/workflows/reserves/elixir-ci.yml | 127 + .../reserves/github-script/check-dist.yml | 42 + .../workflows/reserves/github-script/ci.yml | 16 + .../github-script/codeql-analysis.yml | 72 + .../reserves/github-script/integration.yml | 325 + .../reserves/github-script/licensed.yml | 24 + .../github-script/pull-request-test.yml | 45 + .../reserves/github-script/stale.yml | 31 + .../iree/ARTIFACT_SUMMARY_TEMPLATE.md | 47 + .github/workflows/reserves/iree/benchmark.yml | 296 + .../reserves/iree/benchmark_compilation.yml | 114 + .../reserves/iree/benchmark_execution.yml | 186 + .../reserves/iree/benchmark_large.yml | 138 + .../reserves/iree/benchmark_trigger.yml | 144 + .github/workflows/reserves/iree/build_all.yml | 124 + .../reserves/iree/build_benchmark_tools.yml | 132 + .../iree/build_e2e_test_artifacts.yml | 145 + .../workflows/reserves/iree/build_package.yml | 320 + .../reserves/iree/bump_torch_mlir.yml | 75 + .github/workflows/reserves/iree/ci.yml | 408 + .../reserves/iree/ci_linux_arm64_clang.yml | 62 + .../reserves/iree/ci_linux_x64_clang.yml | 67 + .../reserves/iree/ci_linux_x64_clang_asan.yml | 78 + .../iree/ci_linux_x64_clang_byollvm.yml | 40 + .../iree/ci_linux_x64_clang_debug.yml | 61 + .../reserves/iree/ci_linux_x64_clang_tsan.yml | 57 + .../reserves/iree/ci_linux_x64_gcc.yml | 48 + .../reserves/iree/ci_macos_x64_clang.yml | 58 + .../reserves/iree/ci_windows_x64_msvc.yml | 52 + .github/workflows/reserves/iree/lint.yml | 23 + .../iree/oneshot_candidate_release.yml | 54 + .github/workflows/reserves/iree/pkgci.yml | 87 + .../reserves/iree/pkgci_build_packages.yml | 144 + .../reserves/iree/pkgci_regression_test.yml | 376 + .../reserves/iree/pkgci_test_amd_mi250.yml | 69 + .../reserves/iree/pkgci_test_amd_mi300.yml | 74 + .../reserves/iree/pkgci_test_amd_w7900.yml | 63 + .../reserves/iree/pkgci_test_android.yml | 91 + .../reserves/iree/pkgci_test_nvidia_t4.yml | 77 + .../iree/pkgci_test_tensorflow_cpu.yml | 49 + .../reserves/iree/pkgci_unit_test.yml | 62 + .../reserves/iree/post_benchmark_comment.yaml | 69 + .../reserves/iree/publish_website.yml | 77 + .github/workflows/reserves/iree/samples.yml | 90 + .../iree/schedule_candidate_release.yml | 78 + .github/workflows/reserves/iree/setup.yml | 116 + .../iree/validate_and_publish_release.yml | 137 + .../reserves/kernel/check-coverage.ps1 | 54 + .../reserves/kernel/close-inactive-issues.yml | 22 + .../reserves/kernel/codeql-analysis.yml | 79 + .../reserves/kernel/dotnet-build-and-test.yml | 176 + .../workflows/reserves/kernel/dotnet-ci.yml | 127 + .../reserves/kernel/dotnet-format.yml | 93 + .../kernel/dotnet-integration-tests.yml | 65 + .../kernel/generate-pr-description.yml | 61 + .../workflows/reserves/kernel/java-build.yml | 92 + .../kernel/java-integration-tests.yml | 92 + .../reserves/kernel/label-issues.yml | 54 + .../workflows/reserves/kernel/label-pr.yml | 21 + .../reserves/kernel/label-title-prefix.yml | 73 + .../kernel/markdown-link-check-config.json | 39 + .../reserves/kernel/markdown-link-check.yml | 23 + .../reserves/kernel/merge-gatekeeper.yml | 32 + .../reserves/kernel/python-build-wheel.yml | 45 + .../kernel/python-integration-tests.yml | 269 + .../workflows/reserves/kernel/python-lint.yml | 28 + .../reserves/kernel/python-test-coverage.yml | 65 + .../reserves/kernel/python-unit-tests.yml | 57 + .github/workflows/reserves/kernel/typos.yaml | 29 + .../reserves/kernel/update-version.sh | 107 + .../workflows/reserves/llvm-project/README.md | 1 + .../llvm-project/build-ci-container.yml | 112 + .../ci-post-commit-analyzer-run.py | 34 + .../llvm-project/ci-post-commit-analyzer.yml | 95 + .../reserves/llvm-project/clang-tests.yml | 38 + .../llvm-project/commit-access-review.py | 418 + .../llvm-project/commit-access-review.yml | 34 + .../github-action-ci/bootstrap.patch | 13 + .../github-action-ci/stage1.Dockerfile | 42 + .../github-action-ci/stage2.Dockerfile | 29 + .../containers/github-action-ci/storage.conf | 4 + .../workflows/reserves/llvm-project/docs.yml | 169 + .../reserves/llvm-project/email-check.yaml | 46 + .../llvm-project/get-llvm-version/action.yml | 26 + .../llvm-project/issue-release-workflow.yml | 69 + .../llvm-project/issue-subscriber.yml | 37 + .../reserves/llvm-project/issue-write.yml | 157 + .../llvm-project/libclang-abi-tests.yml | 168 + .../llvm-project/libclang-python-tests.yml | 41 + .../reserves/llvm-project/libclc-tests.yml | 39 + .../llvm-project/libcxx-build-and-test.yaml | 278 + .../libcxx-check-generated-files.yml | 24 + .../libcxx-restart-preempted-jobs.yaml | 132 + .../reserves/llvm-project/lld-tests.yml | 38 + .../reserves/llvm-project/lldb-tests.yml | 39 + .../reserves/llvm-project/llvm-bugs.yml | 63 + .../llvm-project/llvm-project-tests.yml | 148 + .../llvm-project-workflow-tests.yml | 32 + .../reserves/llvm-project/llvm-tests.yml | 192 + .../reserves/llvm-project/merged-prs.yml | 41 + .../reserves/llvm-project/new-issues.yml | 23 + .../reserves/llvm-project/new-prs.yml | 75 + .../reserves/llvm-project/pr-code-format.yml | 101 + .../llvm-project/pr-request-release-note.yml | 49 + .../reserves/llvm-project/pr-subscriber.yml | 34 + .../llvm-project/release-asset-audit.py | 66 + .../llvm-project/release-asset-audit.yml | 54 + .../llvm-project/release-binaries-all.yml | 98 + .../release-binaries-save-stage/action.yml | 44 + .../release-binaries-setup-stage/action.yml | 59 + .../llvm-project/release-binaries.yml | 481 ++ .../llvm-project/release-documentation.yml | 88 + .../reserves/llvm-project/release-doxygen.yml | 72 + .../reserves/llvm-project/release-lit.yml | 79 + .../reserves/llvm-project/release-sources.yml | 108 + .../reserves/llvm-project/release-tasks.yml | 123 + .../reserves/llvm-project/scorecard.yml | 62 + .../set-release-binary-outputs.sh | 34 + .../reserves/llvm-project/spirv-tests.yml | 29 + .../unprivileged-download-artifact/action.yml | 81 + .../reserves/llvm-project/version-check.py | 36 + .../reserves/llvm-project/version-check.yml | 31 + .../workflows/reserves/major-release-num.yml | 23 + .github/workflows/reserves/marty.yml | 140 + .github/workflows/reserves/math/Benchmark.yml | 32 + .github/workflows/reserves/math/CPPBuild.yml | 94 + .github/workflows/reserves/math/CPPTest.yml | 99 + .../workflows/reserves/math/CSharpBuild.yml | 30 + .../workflows/reserves/math/CSharpTest.yml | 75 + .../reserves/math/EverythingBuild.yml | 39 + .../workflows/reserves/math/FSharpBuild.yml | 38 + .../workflows/reserves/math/FSharpTest.yml | 43 + .../reserves/math/IntegrationTest.yml | 116 + .../reserves/math/InteractiveBuild.yml | 38 + .../reserves/math/InteractiveTest.yml | 45 + .github/workflows/reserves/math/Nuget.yml | 57 + .../reserves/math/TerminalNightly.yml | 61 + .../reserves/project-euler/build.yml | 34 + .../project-euler/directory_writer.yml | 25 + .../reserves/project-euler/project_euler.yml | 39 + .../workflows/reserves/project-euler/ruff.yml | 16 + .../setup-dotnet/basic-validation.yml | 19 + .../reserves/setup-dotnet/check-dist.yml | 19 + .../reserves/setup-dotnet/codeql-analysis.yml | 14 + .../reserves/setup-dotnet/e2e-tests.yml | 483 ++ .../reserves/setup-dotnet/licensed.yml | 15 + .../release-new-action-version.yml | 29 + .../reserves/setup-dotnet/test-dotnet.yml | 35 + .../setup-dotnet/update-config-files.yml | 11 + .../reserves/setup-gcloud/dependabot.yml | 10 + .../reserves/setup-gcloud/draft-release.yml | 24 + .../reserves/setup-gcloud/integration.yml | 125 + .../reserves/setup-gcloud/release.yml | 13 + .../workflows/reserves/setup-gcloud/unit.yml | 49 + .../setup-wsl/check-action-typing.main.kts | 53 + .../setup-wsl/check-action-typing.yaml | 51 + .../check-dependency-versions.main.kts | 73 + .../setup-wsl/check-dependency-versions.yaml | 63 + .../reserves/setup-wsl/test.main.kts | 1084 +++ .../workflows/reserves/setup-wsl/test.yaml | 1738 ++++ .../validate-gradle-wrapper.main.kts | 53 + .../setup-wsl/validate-gradle-wrapper.yaml | 51 + .../workflow-with-copyright.main.kts | 59 + .github/workflows/reserves/stale.yml | 43 +- .../workflows/reserves/tensorflow-io/api.yml | 150 + .../reserves/tensorflow-io/benchmarks.yml | 96 + .../reserves/tensorflow-io/build.arm64.yml | 145 + .../reserves/tensorflow-io/build.bazel.sh | 101 + .../reserves/tensorflow-io/build.gpu.sh | 82 + .../tensorflow-io/build.instruction.py | 24 + .../reserves/tensorflow-io/build.space.sh | 9 + .../reserves/tensorflow-io/build.wheel.sh | 54 + .../reserves/tensorflow-io/build.yml | 873 ++ .../reserves/tensorflow-io/release.note.yml | 34 + .../reserves/tensorflow-io/release.yml | 82 + .../reserves/tensorflow-io/reviewdog.yml | 59 + .../reserves/tensorflow-io/scorecard.yml | 64 + .../reserves/ubuntu-wsl/build-pr.yaml | 64 + .../reserves/ubuntu-wsl/build-wsl.yaml | 359 + .../ubuntu-wsl/detect-update-releases.yaml | 62 + .../workflows/reserves/ubuntu-wsl/e2e.yaml | 112 + .../reserves/ubuntu-wsl/sync-gh-jira.yaml | 12 + .../reserves/ubuntu-wsl/wsl-example.yaml | 75 + .../workflows-call/component-build.yml | 88 + .../reserves/workflows-call/component-ci.yml | 92 + .../workflows-call/component-ci_no-docker.yml | 46 + .../workflows-call/component-deploy.yml | 70 + .../workflows-call/component-package.yml | 30 + .github/workflows/retry.yml | 18 + 411 files changed, 53674 insertions(+), 81 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/actions/1-addition/1-maps/action.yml create mode 100644 .github/actions/1-addition/2-feed/action.yml create mode 100644 .github/actions/1-addition/3-lexer/action.yml create mode 100644 .github/actions/2-multiplication/1-maps/action.yml create mode 100644 .github/actions/2-multiplication/2-feed/action.yml create mode 100644 .github/actions/2-multiplication/3-lexer/action.yml create mode 100644 .github/actions/3-exponentiation/4-parser/action.yml create mode 100644 .github/actions/3-exponentiation/5-syntax/action.yml create mode 100644 .github/actions/3-exponentiation/6-grammar/action.yml create mode 100644 .github/actions/4-identition/4-parser/action.yml create mode 100644 .github/actions/4-identition/5-syntax/action.yml create mode 100644 .github/actions/4-identition/6-grammar/action.yml create mode 100644 .github/actions/reserves/ubuntu/README.md create mode 100644 .github/actions/reserves/ubuntu/download-rootfs/action.yaml create mode 100644 .github/actions/reserves/ubuntu/download-rootfs/download-rootfs.ps1 create mode 100644 .github/actions/reserves/ubuntu/wsl-bash/action.yaml create mode 100644 .github/actions/reserves/ubuntu/wsl-checkout/action.yaml create mode 100644 .github/actions/reserves/ubuntu/wsl-install/action.yaml create mode 100644 .github/dco.yml create mode 100644 .github/dependabot.yml create mode 100755 .github/entrypoint/artifact.sh create mode 100644 .github/entrypoint/artifact/BosonJet.c create mode 100644 .github/entrypoint/artifact/BosonJet.h create mode 100644 .github/entrypoint/artifact/BosonJetBorn.c create mode 100644 .github/entrypoint/artifact/BosonJetBorn.h create mode 100644 .github/entrypoint/artifact/BosonJetCSS.c create mode 100644 .github/entrypoint/artifact/BosonJetCSS.h create mode 100644 .github/entrypoint/artifact/BosonJetLL.c create mode 100644 .github/entrypoint/artifact/BosonJetLL.h create mode 100644 .github/entrypoint/artifact/BosonJetLO.c create mode 100644 .github/entrypoint/artifact/BosonJetLO.h create mode 100644 .github/entrypoint/artifact/BosonJetNLL.c create mode 100644 .github/entrypoint/artifact/BosonJetNLL.h create mode 100644 .github/entrypoint/artifact/BosonJetResum.c create mode 100644 .github/entrypoint/artifact/BosonJetResum.h create mode 100644 .github/entrypoint/artifact/ElectroWeak.c create mode 100644 .github/entrypoint/artifact/ElectroWeak.h create mode 100644 .github/entrypoint/artifact/Makefile create mode 100644 .github/entrypoint/artifact/Particle.c create mode 100644 .github/entrypoint/artifact/Particle.h create mode 100644 .github/entrypoint/artifact/QCD.c create mode 100644 .github/entrypoint/artifact/QCD.h create mode 100644 .github/entrypoint/artifact/README.md create mode 100644 .github/entrypoint/artifact/StandardModel.h create mode 100644 .github/entrypoint/artifact/born.c create mode 100644 .github/entrypoint/artifact/css.c create mode 100644 .github/entrypoint/artifact/main.c create mode 100644 .github/entrypoint/artifact/nllR.c create mode 100644 .github/entrypoint/artifact/python/LICENSE create mode 100644 .github/entrypoint/artifact/python/README.md create mode 100644 .github/entrypoint/artifact/python/colour_matrices.py create mode 100644 .github/entrypoint/artifact/python/gellmann.ipynb create mode 100644 .github/entrypoint/artifact/python/gellmann.py create mode 100644 .github/entrypoint/artifact/python/inventory.py create mode 100644 .github/entrypoint/artifact/python/keywords.lst create mode 100644 .github/entrypoint/artifact/python/particle.ipynb create mode 100644 .github/entrypoint/artifact/python/pyproject.toml create mode 100644 .github/entrypoint/artifact/python/setup.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/group/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/group/generators.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/group/group.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/lattice.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/su3/pytorch/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/lattice.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/u1/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/lattice.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/lattice.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/__init__.py create mode 100644 .github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/lattice.py create mode 100644 .github/entrypoint/artifact/python/src/params/spaces.json create mode 100644 .github/entrypoint/artifact/resum.c create mode 100644 .github/entrypoint/artifact/resumLL.c create mode 100644 .github/entrypoint/artifact/test_qcd.c create mode 100644 .github/entrypoint/artifact/tot.c create mode 100644 .github/entrypoint/cleanup_bundler.rb create mode 100755 .github/entrypoint/config.sh create mode 100644 .github/entrypoint/dockerfile/Doxyfile create mode 100644 .github/entrypoint/dockerfile/conf/Dockerfile create mode 100644 .github/entrypoint/dockerfile/conf/README.md create mode 100755 .github/entrypoint/dockerfile/conf/docker-entrypoint-initdb.d/00-copy-config-file.sh create mode 100755 .github/entrypoint/dockerfile/conf/docker-entrypoint-initdb.d/10-create-tables.sh create mode 100755 .github/entrypoint/dockerfile/conf/docker-entrypoint-initdb.d/11-fill-data.sh create mode 100644 .github/entrypoint/dockerfile/conf/init-db.sql create mode 100644 .github/entrypoint/dockerfile/conf/package.json create mode 100644 .github/entrypoint/dockerfile/conf/pg_hba.conf create mode 100644 .github/entrypoint/dockerfile/conf/postgresql.conf create mode 100644 .github/entrypoint/dockerfile/conf/postgresql.conf.init create mode 100644 .github/entrypoint/dockerfile/conf/query-db.sql create mode 100644 .github/entrypoint/dockerfile/conf/run_future.sh create mode 100644 .github/entrypoint/dockerfile/conf/supervisord.conf create mode 100644 .github/entrypoint/dockerfile/conf/supervisord.conf.base create mode 100644 .github/entrypoint/dockerfile/conf/t.sh create mode 100644 .github/entrypoint/dockerfile/hooks/index.js create mode 100755 .github/entrypoint/dockerfile/hooks/job_completed.sh create mode 100755 .github/entrypoint/dockerfile/hooks/job_started.sh create mode 100644 .github/entrypoint/dockerfile/index.js create mode 100644 .github/entrypoint/dockerfile/package.json create mode 100644 .github/entrypoint/dockerfile/requirements.apt create mode 100644 .github/entrypoint/dockerfile/scripts/compound.js create mode 100755 .github/entrypoint/dockerfile/scripts/doxygen.sh create mode 100755 .github/entrypoint/dockerfile/scripts/entrypoint.sh create mode 100755 .github/entrypoint/dockerfile/scripts/exitpoint.sh create mode 100644 .github/entrypoint/dockerfile/scripts/helpers.js create mode 100755 .github/entrypoint/dockerfile/scripts/jekyll_site.sh create mode 100644 .github/entrypoint/dockerfile/scripts/logger.js create mode 100644 .github/entrypoint/dockerfile/scripts/main.js create mode 100644 .github/entrypoint/dockerfile/scripts/markdown.js create mode 100644 .github/entrypoint/dockerfile/scripts/parser.js create mode 100644 .github/entrypoint/dockerfile/scripts/post.js create mode 100755 .github/entrypoint/dockerfile/scripts/runner.sh create mode 100644 .github/entrypoint/dockerfile/scripts/templates.js create mode 100644 .github/entrypoint/dockerfile/templates/cpp/class.md create mode 100644 .github/entrypoint/dockerfile/templates/cpp/index.md create mode 100644 .github/entrypoint/dockerfile/templates/cpp/namespace.md create mode 100644 .github/entrypoint/dockerfile/templates/cpp/page.md create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/doc/.gitkeep create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/doc/api-bicycle.md create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/doc/api-mountainbike.md create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/doc/api-racingbike.md create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/doc/page-changelog.md create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/doc/page-overview.md create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/CMakeLists.txt create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/gettingStarted.cpp create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/sample2HDM.cpp create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/samplePMSSM.cpp create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/sampleQCDSextet.cpp create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/sampleQED.cpp create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/sampleSQED.cpp create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/src/sampleScalar.cpp create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/bicycle_8cpp.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/bicycle_8h.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/changelog.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/changelog_8md.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/classtransport_1_1Bicycle.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/classtransport_1_1MountainBike.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/classtransport_1_1RacingBike.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/combine.xslt create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/compound.xsd create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/dir_68267d1309a1af8e8297ef4c3efbcdba.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/group__bicycle.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/group__mountainbike.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/group__racingbike.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/index.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/index.xsd create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/mountainbike_8cpp.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/mountainbike_8h.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/namespacetransport.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/overview.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/overview_8md.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/racingbike_8cpp.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/racingbike_8h.xml create mode 100644 .github/entrypoint/dockerfile/templates/doxygen/xml/transport_8h.xml create mode 100755 .github/entrypoint/entrypoint_.sh create mode 100755 .github/entrypoint/front.sh create mode 100644 .github/entrypoint/gcp_access.py create mode 100644 .github/entrypoint/gcp_token.py create mode 100755 .github/entrypoint/gist.sh create mode 100755 .github/entrypoint/idle.sh create mode 100755 .github/entrypoint/init.sh create mode 100755 .github/entrypoint/pinned_repos.rb create mode 100644 .github/entrypoint/prime_list.py create mode 100755 .github/entrypoint/remote.sh create mode 100755 .github/entrypoint/restore.sh create mode 100755 .github/entrypoint/sort.sh create mode 100755 .github/entrypoint/startup.sh create mode 100755 .github/entrypoint/sync.sh create mode 100644 .github/entrypoint/test.py rename .github/{ => templates}/CODE_OF_CONDUCT.md (100%) rename .github/{ => templates}/CONTRIBUTING.md (100%) rename .github/{ => templates}/PULL_REQUEST_TEMPLATE.md (100%) create mode 100644 .github/templates/blank_issue.yml rename .github/{ISSUE_TEMPLATE => templates}/bug_report.md (100%) create mode 100644 .github/templates/bug_report.yml rename .github/{ISSUE_TEMPLATE => templates}/feature_request.md (100%) create mode 100644 .github/templates/feature_request.yml create mode 100644 .github/templates/mapping-errors.md create mode 100644 .github/templates/other-issues.md create mode 100644 .github/templates/standards-change-proposal.md create mode 100644 .github/workflows/reserves/account/blog-posts.yml create mode 100644 .github/workflows/reserves/account/star-fork.yml create mode 100644 .github/workflows/reserves/account/starred.yml create mode 100644 .github/workflows/reserves/account/topFollowers.yml create mode 100644 .github/workflows/reserves/account/wakatime.yml create mode 100644 .github/workflows/reserves/algorithms/build.yml create mode 100644 .github/workflows/reserves/algorithms/directory_writer.yml create mode 100644 .github/workflows/reserves/algorithms/project_euler.yml create mode 100644 .github/workflows/reserves/algorithms/ruff.yml create mode 100644 .github/workflows/reserves/algorithms/sphinx.yml create mode 100644 .github/workflows/reserves/build.yml create mode 100644 .github/workflows/reserves/cloud-init/alpine-unittests.yml create mode 100644 .github/workflows/reserves/cloud-init/check_format.yml create mode 100644 .github/workflows/reserves/cloud-init/cla.yml create mode 100644 .github/workflows/reserves/cloud-init/doc-autolabel.yml create mode 100644 .github/workflows/reserves/cloud-init/integration.yml create mode 100644 .github/workflows/reserves/cloud-init/linkcheck.yml create mode 100644 .github/workflows/reserves/cloud-init/scheduled.yml create mode 100644 .github/workflows/reserves/cloud-init/stale.yml create mode 100644 .github/workflows/reserves/cloud-init/unit.yml create mode 100644 .github/workflows/reserves/devcontainer-cli/build-chat.yml create mode 100644 .github/workflows/reserves/devcontainer-cli/dev-containers.yml create mode 100644 .github/workflows/reserves/devcontainer-cli/publish-dev-containers.yml create mode 100644 .github/workflows/reserves/devcontainer-cli/test-plan-item-validator.yml create mode 100644 .github/workflows/reserves/devcontainer-cli/test-windows.yml create mode 100644 .github/workflows/reserves/devcontainer/ci_branch.yml create mode 100644 .github/workflows/reserves/devcontainer/ci_common.yml create mode 100644 .github/workflows/reserves/devcontainer/ci_main.yml create mode 100755 .github/workflows/reserves/devcontainer/clean_tags.sh create mode 100755 .github/workflows/reserves/devcontainer/clean_untagged.sh create mode 100644 .github/workflows/reserves/devcontainer/codeql-analysis.yml create mode 100644 .github/workflows/reserves/devcontainer/pr-bot.yml create mode 100644 .github/workflows/reserves/devcontainer/pr-closed.yml create mode 100644 .github/workflows/reserves/devcontainer/pr_auto.yml create mode 100644 .github/workflows/reserves/devcontainer/untagged-image-cleanup.yml create mode 100644 .github/workflows/reserves/elixir-ci.yml create mode 100644 .github/workflows/reserves/github-script/check-dist.yml create mode 100644 .github/workflows/reserves/github-script/ci.yml create mode 100644 .github/workflows/reserves/github-script/codeql-analysis.yml create mode 100644 .github/workflows/reserves/github-script/integration.yml create mode 100644 .github/workflows/reserves/github-script/licensed.yml create mode 100644 .github/workflows/reserves/github-script/pull-request-test.yml create mode 100644 .github/workflows/reserves/github-script/stale.yml create mode 100644 .github/workflows/reserves/iree/ARTIFACT_SUMMARY_TEMPLATE.md create mode 100644 .github/workflows/reserves/iree/benchmark.yml create mode 100644 .github/workflows/reserves/iree/benchmark_compilation.yml create mode 100644 .github/workflows/reserves/iree/benchmark_execution.yml create mode 100644 .github/workflows/reserves/iree/benchmark_large.yml create mode 100644 .github/workflows/reserves/iree/benchmark_trigger.yml create mode 100644 .github/workflows/reserves/iree/build_all.yml create mode 100644 .github/workflows/reserves/iree/build_benchmark_tools.yml create mode 100644 .github/workflows/reserves/iree/build_e2e_test_artifacts.yml create mode 100644 .github/workflows/reserves/iree/build_package.yml create mode 100644 .github/workflows/reserves/iree/bump_torch_mlir.yml create mode 100644 .github/workflows/reserves/iree/ci.yml create mode 100644 .github/workflows/reserves/iree/ci_linux_arm64_clang.yml create mode 100644 .github/workflows/reserves/iree/ci_linux_x64_clang.yml create mode 100644 .github/workflows/reserves/iree/ci_linux_x64_clang_asan.yml create mode 100644 .github/workflows/reserves/iree/ci_linux_x64_clang_byollvm.yml create mode 100644 .github/workflows/reserves/iree/ci_linux_x64_clang_debug.yml create mode 100644 .github/workflows/reserves/iree/ci_linux_x64_clang_tsan.yml create mode 100644 .github/workflows/reserves/iree/ci_linux_x64_gcc.yml create mode 100644 .github/workflows/reserves/iree/ci_macos_x64_clang.yml create mode 100644 .github/workflows/reserves/iree/ci_windows_x64_msvc.yml create mode 100644 .github/workflows/reserves/iree/lint.yml create mode 100644 .github/workflows/reserves/iree/oneshot_candidate_release.yml create mode 100644 .github/workflows/reserves/iree/pkgci.yml create mode 100644 .github/workflows/reserves/iree/pkgci_build_packages.yml create mode 100644 .github/workflows/reserves/iree/pkgci_regression_test.yml create mode 100644 .github/workflows/reserves/iree/pkgci_test_amd_mi250.yml create mode 100644 .github/workflows/reserves/iree/pkgci_test_amd_mi300.yml create mode 100644 .github/workflows/reserves/iree/pkgci_test_amd_w7900.yml create mode 100644 .github/workflows/reserves/iree/pkgci_test_android.yml create mode 100644 .github/workflows/reserves/iree/pkgci_test_nvidia_t4.yml create mode 100644 .github/workflows/reserves/iree/pkgci_test_tensorflow_cpu.yml create mode 100644 .github/workflows/reserves/iree/pkgci_unit_test.yml create mode 100644 .github/workflows/reserves/iree/post_benchmark_comment.yaml create mode 100644 .github/workflows/reserves/iree/publish_website.yml create mode 100644 .github/workflows/reserves/iree/samples.yml create mode 100644 .github/workflows/reserves/iree/schedule_candidate_release.yml create mode 100644 .github/workflows/reserves/iree/setup.yml create mode 100644 .github/workflows/reserves/iree/validate_and_publish_release.yml create mode 100644 .github/workflows/reserves/kernel/check-coverage.ps1 create mode 100644 .github/workflows/reserves/kernel/close-inactive-issues.yml create mode 100644 .github/workflows/reserves/kernel/codeql-analysis.yml create mode 100644 .github/workflows/reserves/kernel/dotnet-build-and-test.yml create mode 100644 .github/workflows/reserves/kernel/dotnet-ci.yml create mode 100644 .github/workflows/reserves/kernel/dotnet-format.yml create mode 100644 .github/workflows/reserves/kernel/dotnet-integration-tests.yml create mode 100644 .github/workflows/reserves/kernel/generate-pr-description.yml create mode 100644 .github/workflows/reserves/kernel/java-build.yml create mode 100644 .github/workflows/reserves/kernel/java-integration-tests.yml create mode 100644 .github/workflows/reserves/kernel/label-issues.yml create mode 100644 .github/workflows/reserves/kernel/label-pr.yml create mode 100644 .github/workflows/reserves/kernel/label-title-prefix.yml create mode 100644 .github/workflows/reserves/kernel/markdown-link-check-config.json create mode 100644 .github/workflows/reserves/kernel/markdown-link-check.yml create mode 100644 .github/workflows/reserves/kernel/merge-gatekeeper.yml create mode 100644 .github/workflows/reserves/kernel/python-build-wheel.yml create mode 100644 .github/workflows/reserves/kernel/python-integration-tests.yml create mode 100644 .github/workflows/reserves/kernel/python-lint.yml create mode 100644 .github/workflows/reserves/kernel/python-test-coverage.yml create mode 100644 .github/workflows/reserves/kernel/python-unit-tests.yml create mode 100644 .github/workflows/reserves/kernel/typos.yaml create mode 100755 .github/workflows/reserves/kernel/update-version.sh create mode 100644 .github/workflows/reserves/llvm-project/README.md create mode 100644 .github/workflows/reserves/llvm-project/build-ci-container.yml create mode 100644 .github/workflows/reserves/llvm-project/ci-post-commit-analyzer-run.py create mode 100644 .github/workflows/reserves/llvm-project/ci-post-commit-analyzer.yml create mode 100644 .github/workflows/reserves/llvm-project/clang-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/commit-access-review.py create mode 100644 .github/workflows/reserves/llvm-project/commit-access-review.yml create mode 100644 .github/workflows/reserves/llvm-project/containers/github-action-ci/bootstrap.patch create mode 100644 .github/workflows/reserves/llvm-project/containers/github-action-ci/stage1.Dockerfile create mode 100644 .github/workflows/reserves/llvm-project/containers/github-action-ci/stage2.Dockerfile create mode 100644 .github/workflows/reserves/llvm-project/containers/github-action-ci/storage.conf create mode 100644 .github/workflows/reserves/llvm-project/docs.yml create mode 100644 .github/workflows/reserves/llvm-project/email-check.yaml create mode 100644 .github/workflows/reserves/llvm-project/get-llvm-version/action.yml create mode 100644 .github/workflows/reserves/llvm-project/issue-release-workflow.yml create mode 100644 .github/workflows/reserves/llvm-project/issue-subscriber.yml create mode 100644 .github/workflows/reserves/llvm-project/issue-write.yml create mode 100644 .github/workflows/reserves/llvm-project/libclang-abi-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/libclang-python-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/libclc-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/libcxx-build-and-test.yaml create mode 100644 .github/workflows/reserves/llvm-project/libcxx-check-generated-files.yml create mode 100644 .github/workflows/reserves/llvm-project/libcxx-restart-preempted-jobs.yaml create mode 100644 .github/workflows/reserves/llvm-project/lld-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/lldb-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/llvm-bugs.yml create mode 100644 .github/workflows/reserves/llvm-project/llvm-project-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/llvm-project-workflow-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/llvm-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/merged-prs.yml create mode 100644 .github/workflows/reserves/llvm-project/new-issues.yml create mode 100644 .github/workflows/reserves/llvm-project/new-prs.yml create mode 100644 .github/workflows/reserves/llvm-project/pr-code-format.yml create mode 100644 .github/workflows/reserves/llvm-project/pr-request-release-note.yml create mode 100644 .github/workflows/reserves/llvm-project/pr-subscriber.yml create mode 100644 .github/workflows/reserves/llvm-project/release-asset-audit.py create mode 100644 .github/workflows/reserves/llvm-project/release-asset-audit.yml create mode 100644 .github/workflows/reserves/llvm-project/release-binaries-all.yml create mode 100644 .github/workflows/reserves/llvm-project/release-binaries-save-stage/action.yml create mode 100644 .github/workflows/reserves/llvm-project/release-binaries-setup-stage/action.yml create mode 100644 .github/workflows/reserves/llvm-project/release-binaries.yml create mode 100644 .github/workflows/reserves/llvm-project/release-documentation.yml create mode 100644 .github/workflows/reserves/llvm-project/release-doxygen.yml create mode 100644 .github/workflows/reserves/llvm-project/release-lit.yml create mode 100644 .github/workflows/reserves/llvm-project/release-sources.yml create mode 100644 .github/workflows/reserves/llvm-project/release-tasks.yml create mode 100644 .github/workflows/reserves/llvm-project/scorecard.yml create mode 100644 .github/workflows/reserves/llvm-project/set-release-binary-outputs.sh create mode 100644 .github/workflows/reserves/llvm-project/spirv-tests.yml create mode 100644 .github/workflows/reserves/llvm-project/unprivileged-download-artifact/action.yml create mode 100755 .github/workflows/reserves/llvm-project/version-check.py create mode 100644 .github/workflows/reserves/llvm-project/version-check.yml create mode 100644 .github/workflows/reserves/major-release-num.yml create mode 100644 .github/workflows/reserves/marty.yml create mode 100644 .github/workflows/reserves/math/Benchmark.yml create mode 100644 .github/workflows/reserves/math/CPPBuild.yml create mode 100644 .github/workflows/reserves/math/CPPTest.yml create mode 100644 .github/workflows/reserves/math/CSharpBuild.yml create mode 100644 .github/workflows/reserves/math/CSharpTest.yml create mode 100644 .github/workflows/reserves/math/EverythingBuild.yml create mode 100644 .github/workflows/reserves/math/FSharpBuild.yml create mode 100644 .github/workflows/reserves/math/FSharpTest.yml create mode 100644 .github/workflows/reserves/math/IntegrationTest.yml create mode 100644 .github/workflows/reserves/math/InteractiveBuild.yml create mode 100644 .github/workflows/reserves/math/InteractiveTest.yml create mode 100644 .github/workflows/reserves/math/Nuget.yml create mode 100644 .github/workflows/reserves/math/TerminalNightly.yml create mode 100644 .github/workflows/reserves/project-euler/build.yml create mode 100644 .github/workflows/reserves/project-euler/directory_writer.yml create mode 100644 .github/workflows/reserves/project-euler/project_euler.yml create mode 100644 .github/workflows/reserves/project-euler/ruff.yml create mode 100644 .github/workflows/reserves/setup-dotnet/basic-validation.yml create mode 100644 .github/workflows/reserves/setup-dotnet/check-dist.yml create mode 100644 .github/workflows/reserves/setup-dotnet/codeql-analysis.yml create mode 100644 .github/workflows/reserves/setup-dotnet/e2e-tests.yml create mode 100644 .github/workflows/reserves/setup-dotnet/licensed.yml create mode 100644 .github/workflows/reserves/setup-dotnet/release-new-action-version.yml create mode 100644 .github/workflows/reserves/setup-dotnet/test-dotnet.yml create mode 100644 .github/workflows/reserves/setup-dotnet/update-config-files.yml create mode 100644 .github/workflows/reserves/setup-gcloud/dependabot.yml create mode 100644 .github/workflows/reserves/setup-gcloud/draft-release.yml create mode 100644 .github/workflows/reserves/setup-gcloud/integration.yml create mode 100644 .github/workflows/reserves/setup-gcloud/release.yml create mode 100644 .github/workflows/reserves/setup-gcloud/unit.yml create mode 100755 .github/workflows/reserves/setup-wsl/check-action-typing.main.kts create mode 100644 .github/workflows/reserves/setup-wsl/check-action-typing.yaml create mode 100755 .github/workflows/reserves/setup-wsl/check-dependency-versions.main.kts create mode 100644 .github/workflows/reserves/setup-wsl/check-dependency-versions.yaml create mode 100755 .github/workflows/reserves/setup-wsl/test.main.kts create mode 100644 .github/workflows/reserves/setup-wsl/test.yaml create mode 100755 .github/workflows/reserves/setup-wsl/validate-gradle-wrapper.main.kts create mode 100644 .github/workflows/reserves/setup-wsl/validate-gradle-wrapper.yaml create mode 100644 .github/workflows/reserves/setup-wsl/workflow-with-copyright.main.kts create mode 100644 .github/workflows/reserves/tensorflow-io/api.yml create mode 100644 .github/workflows/reserves/tensorflow-io/benchmarks.yml create mode 100644 .github/workflows/reserves/tensorflow-io/build.arm64.yml create mode 100755 .github/workflows/reserves/tensorflow-io/build.bazel.sh create mode 100644 .github/workflows/reserves/tensorflow-io/build.gpu.sh create mode 100644 .github/workflows/reserves/tensorflow-io/build.instruction.py create mode 100644 .github/workflows/reserves/tensorflow-io/build.space.sh create mode 100755 .github/workflows/reserves/tensorflow-io/build.wheel.sh create mode 100644 .github/workflows/reserves/tensorflow-io/build.yml create mode 100644 .github/workflows/reserves/tensorflow-io/release.note.yml create mode 100644 .github/workflows/reserves/tensorflow-io/release.yml create mode 100644 .github/workflows/reserves/tensorflow-io/reviewdog.yml create mode 100644 .github/workflows/reserves/tensorflow-io/scorecard.yml create mode 100644 .github/workflows/reserves/ubuntu-wsl/build-pr.yaml create mode 100644 .github/workflows/reserves/ubuntu-wsl/build-wsl.yaml create mode 100644 .github/workflows/reserves/ubuntu-wsl/detect-update-releases.yaml create mode 100644 .github/workflows/reserves/ubuntu-wsl/e2e.yaml create mode 100644 .github/workflows/reserves/ubuntu-wsl/sync-gh-jira.yaml create mode 100644 .github/workflows/reserves/ubuntu-wsl/wsl-example.yaml create mode 100644 .github/workflows/reserves/workflows-call/component-build.yml create mode 100644 .github/workflows/reserves/workflows-call/component-ci.yml create mode 100644 .github/workflows/reserves/workflows-call/component-ci_no-docker.yml create mode 100644 .github/workflows/reserves/workflows-call/component-deploy.yml create mode 100644 .github/workflows/reserves/workflows-call/component-package.yml create mode 100644 .github/workflows/retry.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 2a4873918..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: .NET issues - url: https://github.com/dotnet/runtime#filing-issues - about: Issues with the runtime, class libraries, frameworks, and SDK should be addressed directly with the .NET team. Documentation on filing issues can be found here. diff --git a/.github/actions/1-addition/1-maps/action.yml b/.github/actions/1-addition/1-maps/action.yml new file mode 100644 index 000000000..9291e73ae --- /dev/null +++ b/.github/actions/1-addition/1-maps/action.yml @@ -0,0 +1,199 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + api_key: + description: The key of api application + required: true + api_secret: + description: The secret of api application + required: true + pypi_token: + description: The pypi token + required: true + bot_token: + description: The monitor token + required: true + logs_token: + description: The warning token + required: true + chat_id: + description: The telegram chat id + required: true + +outputs: + artifact: + description: Collect artifact outputs + value: ${{ toJSON(steps.artifact.outputs) }} + variables: + description: Collect variables outputs + value: ${{ toJSON(steps.variables.outputs) }} + +runs: + using: composite + steps: + - name: Remove Existing Connection + shell: bash + env: + RUN: ${{ github.run_id }} + USER: ${{ github.actor }} + REPO: ${{ github.repository }} + ACTOR: ${{ github.triggering_actor }} + OWNER: ${{ github.repository_owner }} + run: | + gh variable set RERUN_RUNNER --body "false" + + HEADER="Accept: application/vnd.github+json" + RESPONSE=$(gh api -H "${HEADER}" repos/${{ github.repository }}/actions/runners) + TOTAL_COUNT=$(gh api -H "${HEADER}" /repos/${{ github.repository }}/actions/runners --jq '.total_count') + STATUS=$(echo "$RESPONSE" | jq -r --arg NAME "${{ env.RUNNER_TITLE }}" '.runners[] | select(.name == $NAME).status') + + if [[ "$TOTAL_COUNT" -eq 0 ]]; then + export "RUNNER_COUNT=$TOTAL_COUNT" + gh variable set RERUN_RUNNER --body "true" + elif [[ "$STATUS" == "offline" ]]; then + export "RUNNER_STATUS=$STATUS" + gh variable set RERUN_RUNNER --body "true" + RUNNER_ID=$(gh api -H "${HEADER}" /repos/${{ github.repository }}/actions/runners --jq '.runners.[].id') + gh api --method DELETE -H "${HEADER}" /repos/${{ github.repository }}/actions/runners/${RUNNER_ID} + fi + + /home/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/init.sh ${{ inputs.action_path }} + mv -f /home/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/dockerfile/* ${{ inputs.action_path }}/ + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) + + #- uses: actions/setup-python@v5 + #with: + #python-version: 3.12 + #allow-prereleases: true + + #- uses: actions/cache@v4 + #with: + #path: ~/.cache/pip + #key: ${{ runner.os }}-pip + + - name: Install dependencies + shell: bash + env: + ACCESS_API: ${{ inputs.api_key }} + ACCESS_KEY: ${{ inputs.api_secret }} + ACCESS_TOKEN: ${{ inputs.token }} + MESSAGE_API: ${{ inputs.chat_id }} + MONITOR_TOKEN: ${{ inputs.bot_token }} + WARNING_TOKEN: ${{ inputs.logs_token }} + PYPI_TOKEN: ${{ inputs.pypi_token }} + DOCKER_HUB_TOKEN: ${{ inputs.hub_token }} + DOCKER_HUB_PASSWORD: ${{ inputs.hub_password }} + GCP_CREDENTIALS: ${{ inputs.credentials }} + run: | + # Get all secrets from source repository + secrets=$(curl -s -H "Authorization: token $GH_TOKEN" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/actions/secrets" | jq -r '.secrets[].name') + for secret in $secrets; do gh secret set $secret --repo ${{ env.TARGET_REPOSITORY }} --body "${!secret}"; done + + #python -m pip -q install --upgrade pip + #python -m pip -q install -r ${{ inputs.action_path }}/dataFile/requirements.txt + + ##python -m pip -q install -e ./.github/entrypoint/artifact/python + ##iree-compile --iree-llvmcpu-list-targets && iree-run-module --list_drivers + + ##Ref: https://github.com/iree-org/iree-experimental + ##python ${{ inputs.action_path }}/pythonCode/testIREE.py + + ##Ref: https://github.com/tsoding/JelloVM + #cd ${{ inputs.action_path }} && javac javaCode/Main.java + + ##Ref: https://github.com/eq19/maps/tree/v3/pythonCode + ##python ${{ github.workspace }}/.github/entrypoint/artifact/python/gellmann.py + ##cd ${{ inputs.action_path }}/pythonCode && python npreader.py -h && python map.py -h + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ inputs.hub_username }} + password: ${{ inputs.hub_token }} + + - name: πŸš€ Initiate Lexer + uses: devcontainers/ci@v0.3 + with: + runCmd: ls -al / + skipContainerUserIdUpdate: true + imageName: ${{ inputs.image_name }} + imageTag: target-${{ github.run_number }} + configFile: ${{ inputs.action_path }}/.devcontainer.json + push: ${{ env.RERUN_RUNNER == 'true' && 'always' || 'never' }} + + - name: πŸ—‘οΈ Delete Docker Tags AND Images + id: delete_images + shell: bash + env: + IMAGE_NAME: "${{ inputs.image_name }}" + HUB_USERNAME: "${{ inputs.hub_username }}" + HUB_PASSWORD: "${{ inputs.hub_password }}" + MAX_DELETIONS: 15 + run: | + ./.github/entrypoint/remote.sh diff --git a/.github/actions/1-addition/2-feed/action.yml b/.github/actions/1-addition/2-feed/action.yml new file mode 100644 index 000000000..004648db4 --- /dev/null +++ b/.github/actions/1-addition/2-feed/action.yml @@ -0,0 +1,184 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + api_key: + description: The key of api application + required: true + api_secret: + description: The secret of api application + required: true + pypi_token: + description: The pypi token + required: true + bot_token: + description: The monitor token + required: true + logs_token: + description: The warning token + required: true + chat_id: + description: The telegram chat id + required: true + +outputs: + artifact: + description: Collect artifact outputs + value: ${{ toJSON(steps.artifact.outputs.repo) }} + set_output: + description: Collect set_output outputs + value: ${{ toJSON(steps.set_output.outputs) }} + +runs: + using: composite + steps: + - name: πŸ’Ž Set ID Token + id: 'auth' + uses: 'google-github-actions/auth@v2' + with: + token_format: 'id_token' + create_credentials_file: false + credentials_json: ${{ inputs.credentials }} + id_token_audience: 'https://us-central1-feedmapping.cloudfunctions.net/function' + + - name: πŸ’Ž Set Artifact + id: artifact + shell: bash + run: | + shopt -s dotglob + rm -rf ${{ inputs.action_path }}/.git + + mv -f ${{ runner.temp }}/.env ${{ inputs.action_path }}/ + mv -f ${{ runner.temp }}/_config.yml ${{ inputs.action_path }}/ + + mkdir -p ${{ inputs.action_path }}/_data + mv -f ${{ runner.temp }}/*.json ${{ inputs.action_path }}/_data/ + + mv -f ${{ inputs.action_path }} ${{ github.workspace }}/_site + mkdir -p ${{ inputs.action_path }} && cp -R ${{ github.workspace }}/_site/. ${{ inputs.action_path }}/ + + - uses: ikalnytskyi/action-setup-postgres@v7 + id: postgres + with: + username: yoda + password: GrandMaster + database: jedi_order + port: 34837 + postgres-version: "17" + ssl: true + + - name: πŸͺ‚ Test postgres + env: + CONNECTION_URI: ${{ steps.postgres.outputs.connection-uri }} + SERVICE_NAME: ${{ steps.postgres.outputs.service-name }} + CERTIFICATE_PATH: ${{ steps.postgres.outputs.certificate-path }} + EXPECTED_CONNECTION_URI: postgresql://yoda:GrandMaster@localhost:34837/jedi_order?sslmode=verify-ca&sslrootcert=${{ steps.postgres.outputs.certificate-path }} + EXPECTED_SERVICE_NAME: yoda + EXPECTED_SERVER_VERSION: 17 + EXPECTED_SSL: true + shell: bash + run: | + ##cd /home/runner/work/_actions/eq19/eq19/v2/integrations/tensorflow + ##pip install -e python_projects/* && iree-import-tflite -h && iree-import-tf -h + + ##cd /home/runner/work/_actions/eq19/eq19/v2/integrations/pjrt + ##pip install -e ctstools python_packages/iree_cpu_plugin + + ##pip install -r requirements.txt && cd python_packages/iree_cpu_plugin/build/cmake && ninja + ##JAX_PLATFORMS=iree-cpu pytest -n4 --max-worker-restart=9999 -p openxla_pjrt_artifacts --openxla-pjrt-artifact-dir=/tmp/foobar test/test_simple.py + + #cp ${{ github.workspace }}/.github/entrypoint/test.py . && python3 -m pytest -vv test.py + #python ${{ github.workspace }}/web_programming/cc_exchanges.py + + - name: πŸš€ Initiate Feed Container + if: runner.os != 'Windows' + uses: devcontainers/ci@v0.3 + id: set_output + with: + imageTag: spin-${{ env.ID }} + skipContainerUserIdUpdate: true + imageName: ${{ inputs.image_name }} + configFile: _site/.devcontainer.json + env: | + ID=${{ env.ID }} + GH_TOKEN=${{ env.GH_TOKEN }} + REMOTE_REPO=${{ env.REMOTE_REPO }} + BEARER=${{ steps.auth.outputs.id_token }} + TARGET_REPOSITORY=${{ env.TARGET_REPOSITORY }} + push: ${{ env.RERUN_RUNNER == 'true' && 'always' || 'never' }} + runCmd: bash user_data/ft_client/test_client/test_rest_client.sh + + - name: πŸͺ‚ Remove existing images + id: variables + shell: bash + run: | + BASE_NAME=$(basename ${{ inputs.image_name }}) + IFS=', '; array=($(curl -L -s 'https://registry.hub.docker.com/v2/repositories/${{ inputs.image_name }}/tags?page_size=1024' | jq -rc '."results"[]["name"]' | yq eval -P | sed "s/ /, /g")) + for ((i=0; i < ${#array[@]}; i++)); do + if [[ "${array[$i]}" != "latest" ]]; then + HUB_TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "{\"username\": \"${{ inputs.hub_username }}\", \"password\": \"${{ inputs.hub_password }}\"}" https://hub.docker.com/v2/users/login/ | jq -r .token) + curl -s -i -X DELETE -H "Accept: application/json" -H "Authorization: JWT $HUB_TOKEN" https://hub.docker.com/v2/namespaces/${{ inputs.hub_username }}/repositories/$BASE_NAME/tags/${array[$i]} + echo "deleted: ${{ inputs.image_name }}:${array[$i]}" + fi + done diff --git a/.github/actions/1-addition/3-lexer/action.yml b/.github/actions/1-addition/3-lexer/action.yml new file mode 100644 index 000000000..12fd5794d --- /dev/null +++ b/.github/actions/1-addition/3-lexer/action.yml @@ -0,0 +1,134 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'green' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + +outputs: + artifact: + description: Collect artifact outputs + value: ${{ toJSON(steps.artifact.outputs) }} + variables: + description: Collect variables outputs + value: ${{ toJSON(steps.variables.outputs) }} + +runs: + using: composite + steps: + - name: πŸͺ‚ Adapt feed mapping + shell: bash + run: | + mv -f .github/entrypoint/dockerfile/* ${{ inputs.action_path }}/ + cd ${{ github.workspace }}/_site && rm -rf .git .devcontainer.json Dockerfile* + git clone --single-branch -b gh-pages ${REMOTE_REPO} ${{ inputs.action_path }}/_site &>/dev/null + + cd ${{ inputs.action_path }}/_site + shopt -s dotglob && rm -rf ${RUNNER_TEMP}/* + [[ -d docs ]] && mv -f docs ${RUNNER_TEMP}/ + [[ -d .sass-cache ]] && mv -f .sass-cache ${RUNNER_TEMP}/ + [[ -f .jekyll-metadata ]] && mv -f .jekyll-metadata ${RUNNER_TEMP}/ + + rm -rf * + #git rm -rfq . + #git clean -fxd + mv -f ${RUNNER_TEMP}/* . + mv -f ${{ github.workspace }}/_site/* . + cat ${{ inputs.action_path }}/Dockerfile + + - name: πŸš€ Initiate Lexer + uses: devcontainers/ci@v0.3 + id: artifact + with: + imageTag: id-${{ env.ID }} + skipContainerUserIdUpdate: true + runCmd: ls -alR /home/runner/_site + imageName: ${{ inputs.image_name }} + configFile: ${{ inputs.action_path }}/.devcontainer.json + push: ${{ env.RERUN_RUNNER == 'true' && 'always' || 'never' }} + env: | + CXX=clang++ + CC=clang + FC=gfortran + TARGET_REPOSITORY=${{ env.TARGET_REPOSITORY }} + LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib + + - name: πŸ’Ž Variables + id: variables + shell: bash + env: + id: ${{ inputs.id }} + TARGET_REPOSITORY: ${{ env.TARGET_REPOSITORY }} + run: | + BASE_NAME=$(basename ${{ inputs.image_name }}) + echo 'output_${id}='${TARGET_REPOSITORY} >> ${GITHUB_OUTPUT} + IFS=', '; array=($(curl -L -s 'https://registry.hub.docker.com/v2/repositories/${{ inputs.image_name }}/tags?page_size=1024' | jq -rc '."results"[]["name"]' | yq eval -P | sed "s/ /, /g")) + for ((i=0; i < ${#array[@]}; i++)); do + if [ "${array[$i]}" != "latest" ]; then + HUB_TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "{\"username\": \"${{ inputs.hub_username }}\", \"password\": \"${{ inputs.hub_password }}\"}" https://hub.docker.com/v2/users/login/ | jq -r .token) + curl -s -i -X DELETE -H "Accept: application/json" -H "Authorization: JWT $HUB_TOKEN" https://hub.docker.com/v2/namespaces/${{ inputs.hub_username }}/repositories/$BASE_NAME/tags/${array[$i]} + echo "deleted: ${{ inputs.image_name }}:${array[$i]}" + fi + done diff --git a/.github/actions/2-multiplication/1-maps/action.yml b/.github/actions/2-multiplication/1-maps/action.yml new file mode 100644 index 000000000..59cfec0a3 --- /dev/null +++ b/.github/actions/2-multiplication/1-maps/action.yml @@ -0,0 +1,155 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: "Name for the container to be created. Example: nginx" + required: false + image_tag: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + build_args: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + chat_id: + description: 'The telegram chat id' + required: false + bot_token: + description: 'The monitor token' + required: false + logs_token: + description: 'The warning token' + required: false + action_path: + description: 'The action path' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + initiate_pauli_sum: + description: Build args + required: false + default: "" + +branding: + icon: 'command' + color: 'yellow' + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + using: composite + steps: + - name: Login to DockerHub + uses: docker/login-action@v3 + if: runner.os == '-Windows' + with: + username: ${{ inputs.hub_username }} + password: ${{ inputs.hub_token }} + + - name: πŸ’Ž Set ID Token + uses: 'google-github-actions/auth@v2' + with: + credentials_json: ${{ inputs.credentials }} + + - name: πŸ’Ž Setup Gcloud + uses: 'google-github-actions/setup-gcloud@v2' + #with: + #install_components: 'alpha,cloud-datastore-emulator' + + # Ref: https://cloud.google.com/compute/docs/instances/create-start-instance + - name: πŸ’Ž Remove Existing Self-Hosted Runner + shell: bash + run: | + /Users/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/init.sh + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) + + - name: Set Docker Hub description + uses: peter-evans/dockerhub-description@v4 + with: + enable-url-completion: true + password: ${{ inputs.hub_token }} + username: ${{ inputs.hub_username }} + repository: ${{ inputs.image_name }} + readme-filepath: ${{ inputs.action_path }}/README.md + short-description: ${{ github.event.repository.description }} + + - name: Build and Push my_awesome_microservice + uses: mr-smithers-excellent/docker-build-push@v5 + if: runner.os == '-Windows' + with: + image: my_awesome_microservice + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ inputs.token }} + platform: windows/amd64 + tags: development-latest + + # Ref: https://cloud.google.com/compute/docs/instances/create-start-instance + - name: πŸ’Ž Remove Existing Self-Hosted Runner + if: env.RERUN_RUNNER == 'true' + shell: bash + run: | + for instance_uri in $(gcloud compute instances list --uri 2> /dev/null); do + instance_name=${instance_uri##*/} + instance_zone_uri=${instance_uri/\/instances\/${instance_name}/} + instance_zone=${instance_zone_uri##*/} + gcloud compute instances update "${instance_name}" --zone "${instance_zone}" --no-deletion-protection + if [ -n "${instance_name}" ] && [ -n "${instance_zone}" ] && gcloud compute instances delete ${instance_name} --zone ${instance_zone} --quiet; then + echo "deleted: ${instance_zone}/${instance_name}" + fi + done diff --git a/.github/actions/2-multiplication/2-feed/action.yml b/.github/actions/2-multiplication/2-feed/action.yml new file mode 100644 index 000000000..3b7a81317 --- /dev/null +++ b/.github/actions/2-multiplication/2-feed/action.yml @@ -0,0 +1,224 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: "Name for the container to be created. Example: nginx" + required: false + image_tag: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + build_args: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + chat_id: + description: 'The telegram chat id' + required: false + bot_token: + description: 'The monitor token' + required: false + logs_token: + description: 'The warning token' + required: false + action_path: + description: 'The action path' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + initiate_pauli_sum: + description: Build args + required: false + default: "" + +outputs: + variables: + description: Collect variables outputs + value: ${{ toJSON(steps.variables.outputs) }} + metadata: + description: Collect metadata outputs + value: ${{ toJSON(steps.metadata.outputs) }} + +runs: + using: composite + steps: + - name: πŸͺ‚ Get tag of dependencies + id: variables + shell: bash + run: | + brew update --quiet + brew install --quiet coreutils doxygen pandoc gsl cmake ninja lcov gcc@12 qt@5 texlive + brew info qt@5 && brew info gsl + IFS=', '; array=($(curl -L -s 'https://registry.hub.docker.com/v2/repositories/${{ inputs.image_name }}/tags?page_size=1024' | jq -rc '."results"[]["name"]' | yq eval -P | sed "s/ /, /g")) + for ((i=0; i < ${#array[@]}; i++)); do + if [[ "${array[$i]}" != "latest" ]]; then + image_tag="${array[$i]}" + echo 'IMAGE_TAG='${image_tag##*-} >> ${GITHUB_ENV} + fi + done + + # See https://github.com/thesofproject/sof/blob/main/zephyr/docker-run.sh + - name: πŸͺ‚ Cloud Config + if: env.RERUN_RUNNER == 'true' + id: metadata + shell: bash + run: | + cat << EOL >> cloud-config + #cloud-config + users: + - default + - uid: 1000 + name: runner + groups: admin,adm,video,docker,google-sudoers + + write_files: + - path: /etc/systemd/system/firewall.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=Configures the host firewall + + [Service] + Type=oneshot + RemainAfterExit=true + ExecStart=/sbin/iptables -A INPUT -p tcp --match multiport --dports 80,5432,6379,8080 -j ACCEPT + + - path: /etc/systemd/system/runner1.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=Runner service + After=docker.service firewall.service + Wants=docker.service firewall.service + + [Service] + RestartSec=5s + Restart=on-failure + Environment="HOME=/home/runner" + ExecStop=/usr/bin/docker stop runner1 + ExecStopPost=/usr/bin/docker rm runner1 + ExecStartPre=/usr/bin/docker-credential-gcr configure-docker + ExecStart=/usr/bin/docker run --rm -e RUNNER_REPLACE_EXISTING=true -e RUNNER_NAME=${{ env.RUNNER_TITLE }} -e RUNNER_REPOSITORY_URL=https://github.com/${{ env.TARGET_REPOSITORY }} -e GITHUB_ACCESS_TOKEN=${{ inputs.token }} -e CONTAINER_NAME=runner1 -v /home/runner/.docker:/home/runner/.docker -v /mnt:/mnt -v /var/log:/host/var/log -v /etc/systemd:/host/etc/systemd -v /var/run/docker.sock:/var/run/docker.sock --name runner1 --pull=always eq19/maps:target-${{ github.run_number }} + + - path: /etc/systemd/system/mydb.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=MyDB service + After=runner1.service + Wants=runner1.service + + [Service] + Restart=always + Environment="HOME=/home/runner" + ExecStop=/usr/bin/docker exec mydb -s quit + ExecStartPre=/usr/bin/docker-credential-gcr configure-docker + ExecStart=/usr/bin/docker run --rm -e POSTGRES_DB=postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e TELEGRAM_CHAT_ID=${{ inputs.chat_id }} -e MONITOR_BOT_TOKEN=${{ inputs.bot_token }} -e WARNING_BOT_TOKEN=${{ inputs.logs_token }} -v /mnt:/mnt --memory=512M --memory-swap=1G --name=mydb -p 5432:5432 --pull=always eq19/feed:spin-${{ env.IMAGE_TAG }} + + - path: /etc/systemd/system/runner2.service + permissions: "0644" + owner: root + content: | + [Unit] + Description=gcloud compute + Wants=mydb.service + After=mydb.service + + [Service] + RestartSec=5s + Restart=on-failure + Environment="HOME=/home/runner" + ExecStop=/usr/bin/docker stop runner2 + ExecStopPost=/usr/bin/docker rm runner2 + ExecStartPre=/usr/bin/docker-credential-gcr configure-docker + ExecStart=/usr/bin/docker run --rm -e RUNNER_REPLACE_EXISTING=true -e RUNNER_NAME=${{ env.RUNNER_TITLE }} -e RUNNER_REPOSITORY_URL=https://github.com/${{ inputs.repository }} -e GITHUB_ACCESS_TOKEN=${{ inputs.token }} -e CONTAINER_NAME=runner2 -v /home/runner/.docker:/home/runner/.docker -v /mnt:/mnt -v /var/log:/host/var/log -v /etc/systemd:/host/etc/systemd -v /var/run/docker.sock:/var/run/docker.sock --name runner2 --pull=always eq19/lexer:id-${{ env.IMAGE_TAG }} + + bootcmd: + - fsck.ext4 -tvy /dev/sdb1 + - mkdir -p /mnt/disks/deeplearning + - mount -o nosuid,nodev,commit=30,defaults -t ext4 /dev/sdb1 /mnt/disks/deeplearning + + runcmd: + - systemctl stop docker + - fallocate -l 2G /mnt/disks/deeplearning/swapfile || dd if=/dev/zero of=/mnt/disks/deeplearning/swapfile bs=1M count=2048 + - chmod 600 /mnt/disks/deeplearning/swapfile + - mkswap /mnt/disks/deeplearning/swapfile + - swapon /mnt/disks/deeplearning/swapfile + - echo '/mnt/disks/deeplearning/swapfile none swap sw 0 0' >> /etc/fstab + - mkdir -p /mnt/disks/deeplearning/var/lib/docker/cos + - mv /var/lib/docker/* /mnt/disks/deeplearning/var/lib/docker/cos/ || true + - find /var/lib/docker -mindepth 1 -delete + - rmdir /var/lib/docker || true + - chattr +i /var/lib/docker + - mount --bind /mnt/disks/deeplearning/var/lib/docker/cos /var/lib/docker + - systemctl daemon-reload + - systemctl start docker + - systemctl start runner2.service + EOL + + # Ref: https://stackoverflow.com/a/47018417/4058484 + - name: πŸͺ‚ Setup Runner by Gcloud + if: env.RERUN_RUNNER == 'true' + id: instances + shell: bash + run: > + gcloud compute instances create grid-${{ env.IMAGE_TAG }} + --service-account=project-owner@feedmapping.iam.gserviceaccount.com + --scopes=https://www.googleapis.com/auth/cloud-platform --deletion-protection + --zone=us-central1-a --machine-type=e2-micro --enable-display-device --tags=https-server + --boot-disk-device-name=cos --image-project cos-cloud --image-family cos-stable --metadata-from-file=user-data=cloud-config + --create-disk=boot=no,auto-delete=yes,name=tensorflow,device-name=deeplearning,mode=rw,size=50,type=pd-standard,image=projects/ml-images/global/images/c1-deeplearning-tf-2-11-cu113-v20230925-debian-10-py37 diff --git a/.github/actions/2-multiplication/3-lexer/action.yml b/.github/actions/2-multiplication/3-lexer/action.yml new file mode 100644 index 000000000..349ff9bb8 --- /dev/null +++ b/.github/actions/2-multiplication/3-lexer/action.yml @@ -0,0 +1,166 @@ +name: 'Docker Deploy Action' + +description: > + πŸͺ‚ A Github Action to deploy pages conveniently + +branding: + icon: 'command' + color: 'green' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + default: ${{ github.action_repository }} + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + initiate_pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + config: + description: The config of secrets variables + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + repository: + description: 'The deploy repository' + default: ${{ github.repository }} + required: false + +outputs: + describe: + description: Collect describe outputs + value: ${{ steps.describe.outputs.ip }} + compute: + description: Collect compute outputs + value: ${{ steps.describe.outputs.function }} + +runs: + using: composite + steps: + - name: configure + if: env.RERUN_RUNNER == 'true' + shell: bash + env: + CXX: g++-12 + CC: gcc-12 + FC: gfortran-12 + run: | + mkdir ${{ inputs.action_path }}/build + cd ${{ inputs.action_path }}/build + echo "GSL prefix: $(brew --prefix gsl)" + echo "Content of GSL prefix:" + ls $(brew --prefix gsl) + export PATH=$PATH:/usr/local/bin + export CPATH=$CPATH:/usr/local/include:$(brew --prefix gsl)/include + export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include:$(brew --prefix gsl)/include + export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib:$(brew --prefix gsl)/lib + export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:/usr/local/lib:$(brew --prefix gsl)/lib + cmake .. -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)/lib/cmake + make && sudo make install && ctest --output-on-failure + + #Ref: https://gist.github.com/xtrmstep/92aab2d465e348ce1c07ed903ca0dfb8 + - id: describe + if: runner.os == 'Windows' + shell: bash + #env: + #CONFIG_JSON: ${{ inputs.config }} + run: | + #echo -n "$CONFIG_JSON" > config.json + cd ${{ inputs.action_path }} && doxygen > /dev/null 2>&1 + rm -rf ${{ github.workspace }}/xml && mv -f xml ${{ github.workspace }}/ + + COMMIT="${{ env.LATEST_COMMIT }}" + cd ${{ github.workspace }} && rm -rf cloud-config + + # Remove double quotes using parameter extension + git add . && git commit --allow-empty -m "${COMMIT//\"/}" && git push + + #ssh-keygen -t rsa -b 3072 -N '' -f $HOME/.ssh/google_compute_engine -C root + #sed -i.backup "1s|^|runner: |" $HOME/.ssh/google_compute_engine.pub && gh secret set GCP_ID_RSA < $HOME/.ssh/google_compute_engine + + # Ref: https://console.cloud.google.com/security/secret-manager?hl=en&project=feedmapping + #gcloud secrets describe freqtrade-config --project feedmapping || \ + #gcloud secrets create freqtrade-config --project feedmapping --data-file=config.json + #gcloud secrets versions add freqtrade-config --project feedmapping --data-file=config.json + + gcloud compute instances add-metadata grid-${{ env.IMAGE_TAG }} --zone=us-central1-a \ + --metadata=startup-script=/home/runner/work/_actions/eq19/eq19/v2/.github/entrypoint/startup.sh + + #gcloud compute instances describe grid-${{ env.IMAGE_TAG }} --zone=us-central1-a --format='value(metadata.items)' + #gcloud compute scp ${{ github.workspace }}/.github/entrypoint/artifact/python/manual_v2.ipynb grid-${{ env.IMAGE_TAG }}:/home/runner/.docker --zone=us-central1-a + + echo $(gcloud compute instances describe grid-${{ env.IMAGE_TAG }} --zone=us-central1-a --format json) > instance + echo 'ip='$(gcloud compute instances describe grid-${{ env.IMAGE_TAG }} --zone=us-central1-a --format='value(networkInterfaces.accessConfigs[0].natIP)') >> ${GITHUB_OUTPUT} + echo 'function='$(curl -s -X POST https://us-central1-feedmapping.cloudfunctions.net/function -H "Authorization: Bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" --data @instance | base64) >> ${GITHUB_OUTPUT} + + #Ref: https://blog.benoitblanchon.fr/github-action-run-ssh-commands/ + - name: Configure SSH + if: runner.os == 'Windows' + id: compute + shell: bash + env: + IP: ${{ steps.describe.outputs.ip }} + run: | + #localedef -i en_US -f UTF-8 en_US.UTF-8 + ssh-keyscan -t rsa $IP >> $HOME/.ssh/known_hosts + chmod 600 $HOME/.ssh/id_rsa + cat << EOL >> $HOME/.ssh/config + Host staging + HostName $IP + User runner + IdentityFile $HOME/.ssh/id_rsa + StrictHostKeyChecking no + EOL + #Ref: https://github.com/cloudkite-io/google-container-optimized-os-tools + ssh staging 'sudo whoami && \ + sudo echo ${{ steps.setup_runner.outputs.function }} > /home/runner/.ssh/function.json && \ + sudo chown root:root /home/runner/.ssh/*.json && sudo mv -f /home/runner/.ssh/*.json /home/runner/.docker/' + if [ $? -eq 0 ]; then + ssh staging 'sudo ls -alR /home/runner' + else + exit 1 + fi diff --git a/.github/actions/3-exponentiation/4-parser/action.yml b/.github/actions/3-exponentiation/4-parser/action.yml new file mode 100644 index 000000000..f8a006810 --- /dev/null +++ b/.github/actions/3-exponentiation/4-parser/action.yml @@ -0,0 +1,97 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + failure_status: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: πŸ’Ž Reinvented + shell: bash + env: + BASE: "https://github.com/eq19/eq19.github.io.wiki.git" + WIKI: "https://github.com/${{ env.TARGET_REPOSITORY }}.wiki.git" + run: | + if [ -d /mnt/disks/deeplearning/usr/local/sbin ]; then + export PAULI_SUM=$(echo -n "${{ inputs.pauli_sum }}" | base64 --decode); + export PATH=/home/runner/_work/_actions/eq19/eq19/v2/.github/entrypoint:$PATH && init.sh + else + exit 1 + fi + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) + + - name: πŸ—οΈ Collect outputs + uses: mathiasvr/command-output@v2.0.0 + id: command + with: + run: | + date +'%Y-%m-%d' diff --git a/.github/actions/3-exponentiation/5-syntax/action.yml b/.github/actions/3-exponentiation/5-syntax/action.yml new file mode 100644 index 000000000..172d4307c --- /dev/null +++ b/.github/actions/3-exponentiation/5-syntax/action.yml @@ -0,0 +1,122 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + api_key: + description: 'The api key' + required: true + api_secret: + description: 'The api secret' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + #Fill in metadata with ${{ steps.artifact.outputs.orgs_json }} + - name: Run identity + shell: bash + run: | + TOKEN=$(/mnt/disks/deeplearning/usr/bin/gcloud auth print-identity-token) + curl -s -X POST https://us-central1-feedmapping.cloudfunctions.net/function \ + -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" \ + --data @${{ github.workspace }}/docs/data.json | jq '.' + + # Bring GitHub Env Variables in to the config file on another container usong docker from the attached deeplearning image + /mnt/disks/deeplearning/usr/bin/docker exec mydb sed -i "s|your_exchange_key|${{ inputs.api_key }}|g" /home/runner/user_data/config.json + /mnt/disks/deeplearning/usr/bin/docker exec mydb sed -i "s|your_exchange_secret|${{ inputs.api_secret }}|g" /home/runner/user_data/config.json + + - name: πŸ’Ž Connect to Redis + # Runs a script that creates a Redis client, populates + # the client with data, and retrieves data + if: runner.os == 'Redis' + env: + # The hostname used to communicate with the Redis client service container + # Ref: https://gitlab.com/NamingThingsIsHard/crypto/freqtrade/clients + # Ref: https://stackoverflow.com/a/48547074/4058484 + REDIS_PORT: 6379 + REDIS_HOST: 172.17.0.1 + shell: bash + run: | + npm run test + echo '${{ inputs.pauli_sum }}' + + - name: πŸ’Ž Connect to postgres + if: env.RERUN_RUNNER == 'true' + env: + # use the internal host here because we have specified a container for the job. + # If we were running the job on the VM this would be localhost + POSTGRES_PORT: 5432 + POSTGRES_HOST: 172.17.0.1 + shell: bash + run: | + node /home/runner/scripts/post.js + echo '${{ inputs.pauli_sum }}' diff --git a/.github/actions/3-exponentiation/6-grammar/action.yml b/.github/actions/3-exponentiation/6-grammar/action.yml new file mode 100644 index 000000000..a5a75c7d1 --- /dev/null +++ b/.github/actions/3-exponentiation/6-grammar/action.yml @@ -0,0 +1,135 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: ⏩ Next wiki's jobs on applying + shell: bash + env: + BASE: "D:/a/_actions/eq19/eq19/v2/.github" + run: | + if [[ '${{ inputs.failure_status }}' == 'false' ]]; then + + TARGET_WIKI="https://${{ github.actor }}:${{ inputs.token }}@github.com/$TARGET_REPOSITORY.wiki.git" + git clone $TARGET_WIKI ${{ inputs.runner_temp }}/wiki + cd ${{ inputs.runner_temp }}/wiki + cat _Sidebar.md + + #ls -alR /home/runner/xml + #ls -alR /home/runner/templates/doxygen/doc + + fi + + - name: βͺ Rewind all jobs on failure + shell: bash + run: | + if [[ '${{ inputs.failure_status }}' == 'true' ]]; then + + git config --global user.name "$GITHUB_ACTOR" + git config --global --add safe.directory "$GITHUB_WORKSPACE" + git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com" + + REMOTE_REPO="https://$GITHUB_ACTOR:$GH_TOKEN@github.com/$GITHUB_REPOSITORY.git" + git clone --single-branch --branch gh-pages $REMOTE_REPO gh-pages && cd gh-pages + git add . && git commit --allow-empty -m "rerun due to job failure" && git push + + else + + cd /home/runner/_site && rm -rf .git .github .env .ssh .cache node-modules + + cd ${{ github.workspace }} + find -not -path "./.git/*" -not -name ".git" | grep git + find -not -path "./.git/*" -not -name ".git" -delete + shopt -s dotglob && mv -f /home/runner/_site/* . + + # Assign the environment variable correctly + #COMMIT="${{ env.LATEST_COMMIT }}" + + # Remove double quotes + MESSAGE=$(echo "$LATEST_COMMIT" | tr -d '"') + + # Debug output to verify + echo "Original: $LATEST_COMMIT" + echo "Processed: $MESSAGE" + + # Commit and push changes + git add . + git commit --allow-empty -m "$MESSAGE" + git push + + fi diff --git a/.github/actions/4-identition/4-parser/action.yml b/.github/actions/4-identition/4-parser/action.yml new file mode 100644 index 000000000..4d6feb0a9 --- /dev/null +++ b/.github/actions/4-identition/4-parser/action.yml @@ -0,0 +1,89 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + runner_temp: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: Run identity + shell: bash + run: | + /d/a/_actions/eq19/eq19/v2/.github/entrypoint/init.sh + + - name: View context attributes + uses: actions/github-script@v7 + with: + script: console.log(context) diff --git a/.github/actions/4-identition/5-syntax/action.yml b/.github/actions/4-identition/5-syntax/action.yml new file mode 100644 index 000000000..526a70895 --- /dev/null +++ b/.github/actions/4-identition/5-syntax/action.yml @@ -0,0 +1,113 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + # See: https://github.com/svopper/munaiah-analyser/blob/18cb09be3a343a051239d5b6378ed7524dad3147/out/groonga/grntest/.github_workflows_windows.yml#L50 + - name: πŸ’Ž Setup Ruby + uses: ruby/setup-ruby@v1 + if: runner.os == 'Windows' + with: + cache-version: 1 + rubygems: default + bundler-cache: true + ruby-version: '3.3.4' + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: πŸ’Ž Set ID Token + id: 'auth' + uses: 'google-github-actions/auth@v2' + with: + token_format: 'id_token' + create_credentials_file: false + credentials_json: ${{ inputs.credentials }} + id_token_audience: 'https://us-central1-feedmapping.cloudfunctions.net/function' + + #Fill in metadata with ${{ steps.artifact.outputs.orgs_json }} + - name: Run identity + shell: bash + env: + GCP_TOKEN: ${{ steps.auth.outputs.id_token }} + run: | + curl -s -X POST https://us-central1-feedmapping.cloudfunctions.net/function \ + -H "Authorization: Bearer ${GCP_TOKEN}" -H "Content-Type: application/json" \ + --data @${{ inputs.workspace }}/_data/orgs.json | jq '.' diff --git a/.github/actions/4-identition/6-grammar/action.yml b/.github/actions/4-identition/6-grammar/action.yml new file mode 100644 index 000000000..474c7b840 --- /dev/null +++ b/.github/actions/4-identition/6-grammar/action.yml @@ -0,0 +1,200 @@ +name: 'Jekyll Deploy Action' + +description: > + A Github Action to deploy the Jekyll site conveniently for GitHub Pages + +branding: + icon: 'command' + color: 'red' + +inputs: + id: + description: The deploy id + required: false + hub_username: + description: Username for Docker Hub + default: ${{ github.actor }} + required: true + hub_password: + description: Docker Hub authentication token + required: true + hub_token: + description: Docker Hub authentication token + required: true + action_path: + description: Path to the dockerfile from which to build the image + required: true + credentials: + description: 'The gcloud credentials' + required: true + image_name: + description: Tag to use for the new image + required: true + dockerfile_path: + description: Path to the dockerfile from which to build the image + required: true + pauli_sum: + description: Build args + required: false + default: "" + docker_hub_repo_short_description: + description: Short description text for the docker hub repo + required: true + docker_hub_repo_readme_file_path: + description: | + Path of the md file which will be used as the docker hub repo readme + required: true + cache_src: + description: Path for the docker cache source + required: false + default: /tmp/.buildx-cache + cache_dest: + description: Path for the docker cache destination + required: false + default: /tmp/.buildx-cache-new + provider: + description: 'The deploy provider' + required: true + owner: + description: 'The deploy owner' + required: false + token: + description: 'The deploy token' + required: false + workspace: + description: 'The deploy repository' + required: false + failure_status: + description: 'The deploy branch' + required: false + runner_temp: + description: 'The deploy branch' + required: false + +outputs: + all_outputs: + description: Collect all outputs + value: ${{ toJSON(steps.*.outputs) }} + +runs: + #using: 'node20' + #main: '.github/run/main.js' + #post: '.github/run/post.js' + #post-if: 'success()' + using: composite + + steps: + - name: βͺ Rewind all jobs on failure + shell: bash + env: + GH_TOKEN: ${{ inputs.token }} + BASE: "D:/a/_actions/eq19/eq19/v2/.github" + run: | + if [[ '${{ inputs.failure_status }}' == 'true' ]]; then + + git config --global user.name "$GITHUB_ACTOR" + git config --global --add safe.directory "$GITHUB_WORKSPACE" + git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com" + + REMOTE_REPO="https://$GITHUB_ACTOR:$GH_TOKEN@github.com/$GITHUB_REPOSITORY.git" + git clone --single-branch --branch gh-pages $REMOTE_REPO gh-pages && cd gh-pages + git add . && git commit --allow-empty -m "rerun due to job failure" && git push + + else + + cd ${GITHUB_WORKSPACE//\\//} + + echo -e "\n$hr\nConfig\n$hr" + cat _config.yml + + echo -e "\n$hr\nSource Pages\n$hr" + rm -rf _user && ls -al . + + FILE=$(find . -name "plugin_manager.rb") + sed -i 's|unless site.safe|if site.safe|g' $FILE + sed -i 's|plugins_path.each|Array(["./_plugins"]).each|g' $FILE + + echo -e "\n$hr\nBuild Pages\n$hr" + #Jekyll Quick Reference https://gist.github.com/DrOctogon/bfb6e392aa5654c63d12 + JEKYLL_GITHUB_TOKEN=${{ inputs.token }} DISABLE_WHITELIST=true bundle exec jekyll build --profile --trace -t -d ./docs + + if [[ "${TARGET_REPOSITORY}" == "eq19/eq19.github.io" ]]; then echo "www.eq19.com" > ./docs/CNAME; fi + rm -rf ./docs/.nojekyll && touch ./docs/.nojekyll + + echo -e "\n$hr\nFinal Pages\n$hr" + ls -al ./docs + + # Assign the environment variable correctly + #COMMIT="${{ env.LATEST_COMMIT }}" + + # Remove double quotes + MESSAGE=$(echo "$LATEST_COMMIT" | tr -d '"') + + # Debug output to verify + echo "Original: $LATEST_COMMIT" + echo "Processed: $MESSAGE" + + # Commit and push changes + git add . && git commit --allow-empty -m "$MESSAGE" && git push + + echo -e "\n$hr\nFinal Status\n$hr" + # Fetch all branches + git fetch --all + + # Check if any branches (exclude tags) with 'v' suffix exist + if ! git branch -a | grep -E 'remotes/origin/v[0-9]*$' | grep -v 'HEAD'; then + # Get default branch name (usually main or master) + set -e # Exit on error + + DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@') + + git checkout $DEFAULT_BRANCH + git pull origin $DEFAULT_BRANCH + + # Delete local v0 branch if it exists + git branch -D v0 || true + + # Create new v0 branch + git checkout -b v0 + + # Update .github directory + rm -rf .github + cp -r /d/a/_actions/eq19/eq19/v2/.github . + + git add . + git commit --allow-empty -m "Update GitHub workflows and configurations" + git push origin v0 + + #Change the setting of default brance + curl -s -X PATCH \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/$TARGET_REPOSITORY \ + -d '{"default_branch":"v0"}' > /dev/null + echo "Created v0 branch and set it as default" + fi + + if [[ "$TARGET_REPOSITORY" != *"eq19/"* ]]; then + # Unpublish existing GitHub Pages + curl -s -X DELETE \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/$TARGET_REPOSITORY/pages > /dev/null + + # Disable GitHub Pages + curl -s -X PATCH \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/$TARGET_REPOSITORY/pages \ + -d '{"build_type":"legacy","source":null}' > /dev/null + + # Trigger a dispaches action + curl -s -X POST \ + -H "Authorization: token $GH_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/$TARGET_REPOSITORY/dispatches \ + -d '{"event_type": "trigger_action", "client_payload": {"env": "prod", "version": "1.0"}}' + echo -e "\nDispatched to https://github.com/${{ env.TARGET_REPOSITORY }}/actions" + fi + + fi diff --git a/.github/actions/reserves/ubuntu/README.md b/.github/actions/reserves/ubuntu/README.md new file mode 100644 index 000000000..cf195015b --- /dev/null +++ b/.github/actions/reserves/ubuntu/README.md @@ -0,0 +1,4 @@ +# Github actions for WSL +This page has been moved to our documentation + +https://canonical-ubuntu-wsl.readthedocs-hosted.com/en/latest/ diff --git a/.github/actions/reserves/ubuntu/download-rootfs/action.yaml b/.github/actions/reserves/ubuntu/download-rootfs/action.yaml new file mode 100644 index 000000000..ac58e3643 --- /dev/null +++ b/.github/actions/reserves/ubuntu/download-rootfs/action.yaml @@ -0,0 +1,103 @@ +name: Download Ubuntu WSL Rootfs +description: Download the latest Rootfs for a particular release of Ubuntu WSL + +inputs: + distros: + description: Space-separated list of distros to download + required: true + default: "Ubuntu" + path: + description: Directory to store the rootfs in (${path}\${distro}.tar.gz) + required: true + default: "Ubuntu" + +runs: + using: "composite" + steps: + - name: Check out repo + uses: actions/checkout@v3 + - name: Install python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Install dependencies + shell: powershell + run: python -m pip install launchpadlib + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: "1.21.4" + - name: Generate WSL release info + shell: powershell + # Repository root + working-directory: ${{ github.action_path }}\..\..\..\ + run: | + # Prepare environment + + # Install PowerShell + winget install --id Microsoft.Powershell --silent --accept-package-agreements --accept-source-agreements --source winget + + Write-Output "::group::Build wsl release info generator" + go build .\wsl-builder\release-info\ + if ( "${LastExitCode}" -ne "0" ) { + Write-Output "::endgroup::" + Exit(1) + } + Write-Output "::endgroup::" + + Write-Output "::group::Fetch release info" + python .\wsl-builder\lp-distro-info -o "${{ inputs.path }}\ubuntu-releases.csv" + Get-Content "${{ inputs.path }}\ubuntu-releases.csv" + Write-Output "::endgroup::" + + Write-Output "::group::Filter release info" + if(!(Test-Path "${{ inputs.path }}")) { + New-Item -Type Directory -Path "${{ inputs.path }}" + } + .\release-info.exe "${{ inputs.path }}\ubuntu-releases.csv" ${{ inputs.distros }} --rootfs amd64 --short 1> "${{ inputs.path }}\wsl-releases.csv" + Write-Output "::endgroup::" + + # Check for success + if (Test-Path "${{ inputs.path }}\wsl-releases.csv") { + Exit(0) + } + Write-Error "Did not write WSL releases file" + Exit(1) + - name: Download Ubuntu rootfs + shell: powershell + run: | + # Download rootfs + cd "${{ inputs.path }}" + + $releaseList = $(Get-Content "wsl-releases.csv") -split "\n" + $allSuccess = $true + + foreach ($release in $releaseList) { + $data = $release -split "\s+" + + # $name is the one in inputs.distros + $name = $data[0] + $file = ".\${name}.tar.gz" + $url = $data[1] + + & ${{ github.action_path }}\download-rootfs.ps1 -Path "${file}" -URL "$url" + if ( ! $? ) { + $allSuccess = $false + Write-Output "Error: Could not download ${name}" + } + + Write-Output "::endgroup::" + } + + if ( "${allSuccess}" -eq "$false" ) { + Exit(1) + } + Exit(0) + - name: Cleanup + if: always() + shell: powershell + run: | + # Cleanup + Remove-Item "${{ inputs.path }}\ubuntu-releases.csv" 2>&1 | Out-Null + Remove-Item "${{ inputs.path }}\wsl-releases.csv" 2>&1 | Out-Null + Exit(0) diff --git a/.github/actions/reserves/ubuntu/download-rootfs/download-rootfs.ps1 b/.github/actions/reserves/ubuntu/download-rootfs/download-rootfs.ps1 new file mode 100644 index 000000000..d37e6e2e8 --- /dev/null +++ b/.github/actions/reserves/ubuntu/download-rootfs/download-rootfs.ps1 @@ -0,0 +1,110 @@ +param ( + [Parameter(Mandatory = $true, HelpMessage = "The path where to download the tarball")] + [string]$Path, + [Parameter(Mandatory = $true, HelpMessage = "The URL of the tarball")] + [Uri]$URL +) + +# Global variables +$RootFS = "${Path}" +$Directory = Split-Path -Path "${RootFS}" -Parent +$Checksums = "${Directory}\SHA256SUMS" + +# Helper functions + +function Get-URIParent { + param ( + [Parameter(Mandatory=$true)] [Uri]$URI + ) + + $segments = $URI.Segments + $end = $segments.Length - 2 + $trailing = [string]::Join("", $segments[0..$end]) + + return "$($URI.Scheme)://$($URI.Authority)${trailing}" +} + +function Remove-File { + param ( + [Parameter(Mandatory=$true)] [string]$Path + ) + if (!(Test-Path -Path $Path)) { + return + } + Remove-Item -Path "${Path}" -Force 2>&1 | Out-Null +} + +# Test-Checksums returns true if the current rootfs checksum matches the remote one. +# Returns false otherwise, or if any error arises. +function Test-Checksums { + # Get Hash of the current RootFS + if (!(Test-Path -Path ${RootFS})) { + return $false + } + + $oldSHA256 = (Get-FileHash "${Rootfs}" -Algorithm SHA256).Hash + if ($oldSHA256 -eq "") { + Write-Warning "Could not compute hash of ${Rootfs}" + return $false + } + + # Download remote checksum + $checksumURL = "$(Get-URIParent -URI "${URL}")SHA256SUMS" + pwsh.exe -Command pwsh.exe -Command Invoke-WebRequest -Uri "${checksumURL}" -OutFile "${Checksums}" -Resume -MaximumRetryCount 5 -RetryIntervalSec 2 + if (! $?) { + Write-Warning "Could not download checksums" + return $false + } + + if (!(Test-Path "${Checksums}")) { + Write-Warning "Could not download checksums" + return $false + } + + # Parse checksum file + $image = $URL.Segments[$Url.Segments.Length - 1] + $pattern = "(\w+) ${image}" + + $newSHA256 = (Select-String -Pattern "${pattern}" -Path "${Checksums}").Matches[0].Groups[1] + if ($newSHA256 -eq "") { + Write-Warning "Could not find $image in checksums file" + return $false + } + + # Compare checksums + if ($oldSHA256 -ne $newSHA256) { + return $false + } + return $true +} + +function main { + New-Item -Type Directory -Force "${Directory}" 2>&1 | Out-Null + + # Validate checksum + if ( Test-Checksums ) { + Write-Warning "Cache hit: skipping download" + return 0 + } + + # Download Rootfs into temp file + pwsh.exe -Command Invoke-WebRequest -Uri "${URL}" -OutFile "${RootFS}.tmp" -Resume -MaximumRetryCount 5 -RetryIntervalSec 2 + if ( ! $? ) { + Write-Error "Error: Failed download" + return 1 + } + + # Move downloaded tmp file into position + Move-Item -Force "${RootFS}.tmp" "${RootFS}" + return 0 +} + +# Main function +$exitCode = main + +# Clean artefacts +Remove-File -Path "${RootFS}.tmp" +Remove-File -Path "${Checksums}" + +Exit($exitCode) + diff --git a/.github/actions/reserves/ubuntu/wsl-bash/action.yaml b/.github/actions/reserves/ubuntu/wsl-bash/action.yaml new file mode 100644 index 000000000..efc56f725 --- /dev/null +++ b/.github/actions/reserves/ubuntu/wsl-bash/action.yaml @@ -0,0 +1,60 @@ +name: Azure WSL script runner +description: 'Runs scripts on WSL in Azure machines.' + +inputs: + exec: + description: Script to run on WSL + required: true + working-dir: + description: The WSL directory to run the script in. Must be absolute, but ~ is allowed. + required: false + default: "~" + distro: + description: Which (installed) distro to run the script on. Use the name as shown in 'wsl -l -v'. + required: false + default: Ubuntu + +runs: + using: 'composite' + steps: + - name: Copy script into WSL + shell: powershell + env: + exec: ${{ inputs.exec }} + scriptDir: C:\Temp\Ubuntu-WSL-actions\${{github.run_number}}_${{github.run_attempt}} + run: | + Write-Output '::group::Storage of script into WSL' + + New-Item -Force -Path "${{ env.scriptDir }}" -ItemType Directory | Out-Null + + # The following function is used because: + # - It does not write the BOM (0xff 0xfe at file start) + # - It does not write \r at line ends + # - Overwrites a pre-existing file if there was one + [IO.File]::WriteAllText( "${{ env.scriptDir }}\script.sh" , "${env:exec}") + $exit=$? + + Write-Output '::endgroup::' + if ( "${exit}" -eq "$False" ) { Exit(1) } + - name: Run linux script + shell: powershell + env: + scriptDir: C:\Temp\Ubuntu-WSL-actions\${{github.run_number}}_${{github.run_attempt}} + WSL_UTF8: "1" + run: | + # Run script + + # We use this --cd trick otherwise bash gets confused with the \ path separators + $linuxPath = wsl.exe -d "${{ inputs.distro }}" --cd "${{ env.scriptDir }}" -- wslpath -ua . + + wsl.exe -d ${{ inputs.distro }} --cd '${{ inputs.working-dir }}' -- bash "$linuxPath/script.sh" + if ( ! $? ) { Exit(1) } + - name: Cleanup + if: always() + shell: powershell + env: + scriptDir: C:\Temp\Ubuntu-WSL-actions\${{github.run_number}}_${{github.run_attempt}} + run: | + if(Test-Path -Path "${{ env.scriptDir }}") { + Remove-Item -Recurse -Force -Path "${{ env.scriptDir }}" + } \ No newline at end of file diff --git a/.github/actions/reserves/ubuntu/wsl-checkout/action.yaml b/.github/actions/reserves/ubuntu/wsl-checkout/action.yaml new file mode 100644 index 000000000..241fcf267 --- /dev/null +++ b/.github/actions/reserves/ubuntu/wsl-checkout/action.yaml @@ -0,0 +1,38 @@ +name: Azure WSL repo clone +description: 'Clones your repo into WSL.' + +inputs: + distro: + description: Which (installed) distro to use. Use the name as shown in 'wsl -l -v'. + required: true + working-dir: + description: Where the repo should be cloned + required: false + default: "." + submodules: + description: Whether to fetch submodules or not + required: false + default: "false" + +runs: + using: 'composite' + steps: + - name: Clone repo + uses: ubuntu/WSL/.github/actions/wsl-bash@main + with: + distro: ${{ inputs.distro }} + exec: | + set -eu + + export GIT_TERMINAL_PROMPT=0 + + mkdir -p ${{ inputs.working-dir }} + git clone --quiet --depth 1 https://github.com/${{ github.repository }}.git ${{ inputs.working-dir }} + + cd ${{ inputs.working-dir }} + git fetch --quiet --depth 1 --no-tags --prune --update-head-ok origin +${{ github.sha }}:${{ github.ref }} + git checkout --quiet ${{ github.sha }} + + if [ "${{ inputs.submodules }}" = true ] ; then + git submodule --quiet update --init --recursive --depth 1 + fi \ No newline at end of file diff --git a/.github/actions/reserves/ubuntu/wsl-install/action.yaml b/.github/actions/reserves/ubuntu/wsl-install/action.yaml new file mode 100644 index 000000000..a41594b33 --- /dev/null +++ b/.github/actions/reserves/ubuntu/wsl-install/action.yaml @@ -0,0 +1,57 @@ +name: Install Ubuntu WSL +description: 'Install WSL from the store' + +inputs: + distro: + description: Distro name as shown in 'wsl -l -v'. Leave blank to install no distro. + required: false + default: "" + +runs: + using: 'composite' + steps: + - name: Install WSL + shell: powershell + continue-on-error: true + run: | + Write-Output "::group::Install Windows Subsystem for Linux" + winget install --name 'Windows Subsystem for Linux' --accept-source-agreements --accept-package-agreements --silent --verbose + Write-Output "::endgroup::" + + - name: Install the new distro + if: ${{ inputs.distro != '' }} + shell: powershell + run: | + # Install the new distro + switch ( "${{ inputs.distro }}" ) + { + "Ubuntu" { $storeId="9PDXGNCFSCZV" ; $launcher="ubuntu.exe" ; $appxname="Ubuntu" } + "Ubuntu-Preview" { $storeId="9P7BDVKVNXZ6" ; $launcher="ubuntupreview.exe" ; $appxname="UbuntuPreview" } + "Ubuntu-22.04" { $storeId="9PN20MSR04DW" ; $launcher="ubuntu2204.exe" ; $appxname="Ubuntu22.04LTS" } + "Ubuntu-20.04" { $storeId="9MTTCL66CPXJ" ; $launcher="ubuntu2004.exe" ; $appxname="Ubuntu20.04LTS" } + "Ubuntu-18.04" { $storeId="9PNKSF5ZN4SW" ; $launcher="ubuntu1804.exe" ; $appxname="Ubuntu18.04LTS" } + default { Write-Output "Error: Unknown distro ${distro}" ; Exit(1) } + } + + # Uninstall pre-existing appx + $pkgFullName = (Get-AppxPackage | Where-Object Name -like "CanonicalGroupLimited.${appxname}").PackageFullName + if ( "$pkgFullName" -ne "" ) { + Remove-AppxPackage "${pkgFullName}" 3>&1 2>&1 | Out-Null + } + + # Unregister leftover distros + $env:WSL_UTF8=1 + wsl.exe --shutdown + wsl.exe --unregister ${{ inputs.distro }} 3>&1 2>&1 | Out-Null + + Write-Output "::group::Install a new distro" + winget install --id "${storeId}" --accept-source-agreements --accept-package-agreements --silent + Write-Output "::endgroup::" + + # Register the new distro + & ${launcher} install --root --ui=none + + # Testing succesful install + & ${launcher} run echo Created a new distro with user: '$(whoami)' + + if ( ! $? ) { Exit(1) } \ No newline at end of file diff --git a/.github/dco.yml b/.github/dco.yml new file mode 100644 index 000000000..90ac35428 --- /dev/null +++ b/.github/dco.yml @@ -0,0 +1,4 @@ +# Developer Certificate of Origin configuration +# https://github.com/dcoapp/app +require: + members: false diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..591cd2aac --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly + day: saturday + time: "15:00" + timezone: Asia/Shanghai + open-pull-requests-limit: 10 diff --git a/.github/entrypoint/artifact.sh b/.github/entrypoint/artifact.sh new file mode 100755 index 000000000..ff811be18 --- /dev/null +++ b/.github/entrypoint/artifact.sh @@ -0,0 +1,180 @@ +#!/usr/bin/env bash + +# Structure: Cell Types – Modulo 6 +# https://www.hexspin.com/proof-of-confinement/ + +set_target() { + + # Get Structure + if [[ $2 == *"github.io"* ]]; then + [[ -n "$CELL" ]] && SPIN=$(( $CELL * 13 )) + if [[ "${OWNER}" == "eq19" ]]; then + echo "maps, feed, lexer, parser, syntax, grammar" > ${RUNNER_TEMP}/pinned_repos + else + QUERY='{"query":"{\n organization(login: \"'${OWNER}'\") {\n pinnedItems(first: 6, types: REPOSITORY) {\n nodes {\n ... on Repository {\n name\n }\n }\n }\n }\n}"' + curl -s -X POST "${GITHUB_GRAPHQL_URL}" -H "Authorization: bearer ${GH_TOKEN}" --data-raw "${QUERY}" | jq --raw-output '.data.organization.pinnedItems.nodes[].name' | yq eval -P | sed "s/ /, /g" > ${RUNNER_TEMP}/pinned_repos + sed -i "1s|^|maps, feed, lexer, parser, syntax, grammar, |" ${RUNNER_TEMP}/pinned_repos + fi + IFS=', '; array=($(cat ${RUNNER_TEMP}/pinned_repos)) + else + gh api -H "${HEADER}" /user/orgs --jq '.[].login' | sort -uf | yq eval -P | sed "s/ /, /g" > ${RUNNER_TEMP}/user_orgs + IFS=', '; array=($(cat ${RUNNER_TEMP}/user_orgs)) + echo "[" > ${RUNNER_TEMP}/orgs.json + for ((i=0; i < ${#array[@]}; i++)); do + QUERY='{"query":"{\n organization(login: \"'${array[$i]}'\") {\n pinnedItems(first: 6, types: REPOSITORY) {\n nodes {\n ... on Repository {\n name\n }\n }\n }\n }\n}"' + IFS=', '; pr=($(curl -s -X POST "${GITHUB_GRAPHQL_URL}" -H "Authorization: bearer ${GH_TOKEN}" --data-raw "${QUERY}" | jq --raw-output '.data.organization.pinnedItems.nodes[].name' | yq eval -P | sed "s/ /, /g")) + gh api -H "${HEADER}" /orgs/${array[$i]} | jq '. + + {"key1": ["maps","feed","lexer","parser","syntax","grammar"]} + + {"key2": ["'${pr[0]}'","'${pr[1]}'","'${pr[2]}'","'${pr[3]}'","'${pr[4]}'","'${pr[5]}'"]}' >> ${RUNNER_TEMP}/orgs.json + if [[ "$i" -lt "${#array[@]}-1" ]]; then echo "," >> ${RUNNER_TEMP}/orgs.json; fi + done + echo "]" >> ${RUNNER_TEMP}/orgs.json + fi + + # Iterate the Structure + printf -v array_str -- ',,%q' "${array[@]}" + if [[ ! "${array_str},," =~ ",,$1,," ]]; then + SPAN=0; echo ${array[0]} + elif [[ "${array[-1]}" == "$1" ]]; then + SPAN=${#array[@]}; echo $2 | sed "s|${OWNER}.github.io|${ENTRY}.github.io|g" + if [[ -n "$CELL" ]]; then + if [[ "${ENTRY}" == "eq19" ]]; then + echo "maps, feed, lexer, parser, syntax, grammar" > ${RUNNER_TEMP}/pinned_repos + else + QUERY='{"query":"{\n organization(login: \"'${ENTRY}'\") {\n pinnedItems(first: 6, types: REPOSITORY) {\n nodes {\n ... on Repository {\n name\n }\n }\n }\n }\n}"' + curl -s -X POST "${GITHUB_GRAPHQL_URL}" -H "Authorization: bearer ${GH_TOKEN}" --data-raw "${QUERY}" | jq --raw-output '.data.organization.pinnedItems.nodes[].name' | yq eval -P | sed "s/ /, /g" > ${RUNNER_TEMP}/pinned_repos + sed -i "1s|^|maps, feed, lexer, parser, syntax, grammar, |" ${RUNNER_TEMP}/pinned_repos + fi + fi + else + for ((i=0; i < ${#array[@]}; i++)); do + if [[ "${array[$i]}" == "$1" && "$i" -lt "${#array[@]}-1" ]]; then + SPAN=$(( $i + 1 )); echo ${array[$SPAN]} + fi + done + fi + + # Generate id from the Structure + [[ -z "$SPIN" ]] && if [[ "$1" != "$2" ]]; then SPIN=0; else SPIN=13; fi + if [[ -n "$CELL" ]]; then + SPANPLUS=$(($SPAN + 1)) + if (( $CELL == 0 )); then MOD=7; else MOD=13; fi + if (( $SPANPLUS == $MOD )); then + SPANPLUS=0 + CELLPLUS=$(($CELL + 1)) + if (( $CELLPLUS == 14 )); then CELLPLUS=0; fi + else + CELLPLUS=$(($CELL + 0)) + fi + + echo "SPIN=[${CELLPLUS}, ${SPANPLUS}]" >> ${GITHUB_ENV} + echo " spin: [${CELLPLUS}, ${SPANPLUS}]" >> ${RUNNER_TEMP}/_config.yml + echo " pinned: [$(cat ${RUNNER_TEMP}/pinned_repos)]" >> ${RUNNER_TEMP}/_config.yml + echo " organization: [$(cat ${RUNNER_TEMP}/user_orgs)]" >> ${RUNNER_TEMP}/_config.yml + fi + return $(( $SPAN + $SPIN )) + +} + +jekyll_build() { + + [[ $1 == *"github.io"* ]] && OWNER=$2 + if [[ $1 != "eq19.github.io" ]]; then SITEID=$(( $3 + 2 )); else SITEID=1; fi + + if [[ "${OWNER}" == "eq19" ]]; then + sed -i "1s|^|description: An attempt to discover the Final Theory\n\n|" ${RUNNER_TEMP}/_config.yml + else + DESCRIPTION=$(gh api -H "${HEADER}" /orgs/${OWNER} --jq '.description') + sed -i "1s|^|description: ${DESCRIPTION}\n\n|" ${RUNNER_TEMP}/_config.yml + fi + + # Note: If you need to use a workflow run's URL from within a job, you can combine + # these variables: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID + sed -i "1s|^|action: ${REPO}/actions/runs/${RUN}\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|repository: ${OWNER}/$1\n|" ${RUNNER_TEMP}/_config.yml + [[ $1 != *"github.io"* ]] && sed -i "1s|^|baseurl: /$1\n|" ${RUNNER_TEMP}/_config.yml + + FOLDER="span$(( 19 - $SITEID ))" + TARGET_REPOSITORY=${OWNER}/$1 + gh variable set FOLDER --body "$FOLDER" + echo 'FOLDER='${FOLDER} >> ${RUNNER_TEMP}/.env + echo 'repo='${TARGET_REPOSITORY} >> ${GITHUB_OUTPUT} + echo 'TARGET_REPOSITORY='${TARGET_REPOSITORY} >> ${GITHUB_ENV} + + sed -i "1s|^|title: eQuantum\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|span: ${FOLDER}\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|user: ${USER}\n|" ${RUNNER_TEMP}/_config.yml + sed -i "1s|^|id: ${SITEID}\n|" ${RUNNER_TEMP}/_config.yml + + echo 'ID='${SITEID} >> ${GITHUB_ENV} + cat ${RUNNER_TEMP}/_config.yml + + if [[ "${TARGET_REPOSITORY}" != *"eq19/"* ]]; then + + echo -e "\nTest Module Structure:" + echo "1. ${OWNER}/maps β†’ $(next_repo "${OWNER}/maps")" + echo "2. ${OWNER}/grammar β†’ $(next_repo "${OWNER}/grammar")" + NEXT_REPOSITORY=$(next_repo "${OWNER}/$(yq -r '.track.pinned | .[-1]' ${RUNNER_TEMP}/_config.yml)") + echo "3. ${OWNER}/$(yq -r '.track.pinned | .[-1]' ${RUNNER_TEMP}/_config.yml) β†’ ${NEXT_REPOSITORY}" + echo "4. ${NEXT_REPOSITORY} β†’ $(next_repo "${NEXT_REPOSITORY}")" + + NEXT_REPOSITORY=$(next_repo "${TARGET_REPOSITORY}") + gh variable set TARGET_REPOSITORY --repo $TARGET_REPOSITORY --body "$NEXT_REPOSITORY" + + fi + +} + +# Define the next repository function using jq +next_repo() { + + local target_repo="$1" + jq -r --arg target "$target_repo" ' + ($target | split("/")) as $parts | + $parts[0] as $org | + $parts[1] as $repo | + + (map(.login) | index($org)) as $org_index | + if $org_index == null then + "Organization not found: \($org)" | halt_error(1) + else + .[$org_index] as $current_org | + (.[($org_index + 1) % length].login) as $next_org | + + if $repo == "\($org).github.io" then + "\($org)/\($current_org.key1[0])" + else + ($current_org.key1 | index($repo)) as $key1_index | + if $key1_index != null then + if ($key1_index + 1) < ($current_org.key1 | length) then + "\($org)/\($current_org.key1[$key1_index + 1])" + else + "\($org)/\($current_org.key2[0])" + end + else + ($current_org.key2 | index($repo)) as $key2_index | + if $key2_index != null then + if ($key2_index + 1) < ($current_org.key2 | length) then + "\($org)/\($current_org.key2[$key2_index + 1])" + else + "\($next_org)/\($next_org).github.io" + end + else + "Repository not found: \($repo)" | halt_error(1) + end + end + end + end + ' ${RUNNER_TEMP}/orgs.json + +} + +# Get structure on gist files +PATTERN='sort_by(.created_at)|.[] | select(.public == true).files.[] | select(.filename != "README.md").raw_url' +HEADER="Accept: application/vnd.github+json" #&& echo ${TOKEN} | gh auth login --with-token +gh api -H "${HEADER}" "/users/eq19/gists" --jq "${PATTERN}" > ${RUNNER_TEMP}/gist_files + +# Capture the string and return status +if [[ "${OWNER}" != "${USER}" ]]; then ENTRY=$(set_target ${OWNER} ${USER}); else ENTRY=$(set_target ${OWNER}); fi +CELL=$? && TARGET_REPOSITORY=$(set_target $(basename ${REPO}) ${OWNER}.github.io) +jekyll_build ${TARGET_REPOSITORY} ${ENTRY} $? diff --git a/.github/entrypoint/artifact/BosonJet.c b/.github/entrypoint/artifact/BosonJet.c new file mode 100644 index 000000000..be74a78f4 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJet.c @@ -0,0 +1,326 @@ +#include "BosonJet.h" +#include +#define PI 3.141592653589793 + +BosonJet::BosonJet(){ + invGeV2topb=3.893793656233564944e8; + _nf=5;_calls=50000; +} + +BosonJet::BosonJet(double Ecm, Particle *boson){ + _boson=boson;_Ecm=Ecm;invGeV2topb=3.893793656233564944e8; + _nf=5;_calls=50000; + + //calculate some universal prefactors: + _s=_Ecm*_Ecm; + _preXsection=2.0*PI*_ew.alpha()/(_s*_s); + _mB2=_boson->m()*_boson->m(); + +} + +void BosonJet::setpT(double pT){ + _pT=pT; +} + +double BosonJet::getpT(){ + return _pT; +} + +void BosonJet::getKinematics(){ + cout << "x1=" << _x1 << ", x2=" << _x2 << ", s=" << _shat << ", t=" << _that << ", u=" << _uhat << endl; +} + +double BosonJet::M2toXsection(double pT, double x1, double x2, double Q){ + /* + This function gives the prefactor for + dsigma/dpTdyBdyJ=2*pi*pT*aEM*aS*M2/(x1*x2*s^2)*pdf1(x2)*pdf2(x2) + without pdfs and M2 and aS. + */ + return _preXsection*pT*_qcd.alphas(Q)/(x1*x2); +} + +double BosonJet::M2toXsection(double Q){ + /* + This function gives the prefactor for + dsigma/dpTdyBdyJ=2*pi*pT*aEM*aS*M2/(x1*x2*s^2)*pdf1(x2)*pdf2(x2) + without pdfs and M2 and aS. + */ + return _preXsection*_pT*_qcd.alphas(Q)/(_x1*_x2); +} + +void BosonJet::setEcm(double Ecm){ + _Ecm=Ecm;_s=_Ecm*_Ecm;_preXsection=2.0*PI*_ew.alpha()/(_Ecm*_Ecm*_Ecm*_Ecm); +} + +void BosonJet::setBoson(Particle *boson){ + _boson=boson; _mB2=_boson->m()*_boson->m(); +} + +void BosonJet::setNf(unsigned int nf){ + _nf=nf; +} + +void BosonJet::getxBs(double *xB, double pT, double yB, double yJ){ + /* + p1=x_1 (_Ecm,0,0,_Ecm)/2, p2=x_2 (_Ecm,0,0,-_Ecm)/2, + pB=(sqrt(pT^2+m^2)cosh(yB),pT cos(phiB),pT sin(phiB),sqrt(pT^2+m^2)sinh(yB)), + pJ=(sqrt(pT^2+m^2) cosh(yJ),pT cos(phiJ),pT sin(phiJ),sqrt(pT^2+m^2)sinh(yJ)). + */ + double mT=sqrt(1.0+_boson->m()*_boson->m()/(pT*pT)); + double xT=pT/_Ecm; + xB[0]=xT*(mT*exp(yB)+exp(yJ));xB[1]=xT*(mT*exp(-yB)+exp(-yJ)); +} + +void BosonJet::Mandelstam(double x1, double x2, double pT, double yB, double &s, double &t, double &u){ + /* p1=xB[0] (_Ecm, 0,0,_Ecm)/2, p2=xB[1](_Ecm,0,0,-_Ecm)/2, + pB=(sqrt(pT^2+mB^2)cosh(yB), pT cos(phiB), pT sin(phiB),sqrt(pT^2+mB^2)sinh(yB)), + */ + double mT=sqrt(_mB2+pT*pT);double EcmmT=_Ecm*mT; + s=x1*x2*_s; t=_mB2-x1*EcmmT*exp(-yB); u=_mB2-x2*EcmmT*exp(yB); +} + +void BosonJet::setKinematics(double pT, double yB, double yJ){ + _pT=pT;_yB=yB;_yJ=yJ; + double xB[2];getxBs(xB, pT, yB, yJ);_x1=xB[0];_x2=xB[1]; + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u);_shat=s;_that=t;_uhat=u; + //cout << _shat << ", " << _that << ", " << _uhat << ", " << _x1 << ", " << _x2 << endl; + //cout << _shat*_pT*_pT/(_that*_uhat) << endl; +} + +bool BosonJet::kinematicsQ(){ + return _x1>0.0&&_x1<1.0&&_x2>0.0&&_x2<1.0; +} + +/* + M^2/(g_s^2 e_q^2) aveaged and summed over the spin and color indices repectively in the intial and final states. + See Table 7.2 in page 265 in QCD and Collider Physics. +*/ + +double BosonJet::Mgq2(double s, double t, double u){ + /* + M^2/(e^2g^2) for gq->BJ. For qg->BJ, swap t and u. + */ + return -(s*s+u*u+2.0*t*(s+t+u))/(_qcd._Nc*s*u); +} + +double BosonJet::Mgq2(){ + /* + M^2/(e^2g^2) for gq->BJ. + */ + return -(_shat*_shat+_uhat*_uhat+2.0*_that*(_shat+_that+_uhat))/(_qcd._Nc*_shat*_uhat); +} + +double BosonJet::Mqg2(){ + /* + M^2/(e^2g^2) for qg->BJ. + */ + return -(_shat*_shat+_that*_that+2.0*_uhat*(_shat+_uhat+_that))/(_qcd._Nc*_shat*_that); +} + +double BosonJet::Mqqb2(double s, double t, double u){ + /*M^2/(e^2g^2) for qqb->BJ. The same for qbq->BJ. + */ + return 2.0*_qcd._CF*(t*t+u*u+2.0*s*(s+t+u))/(_qcd._Nc*t*u); +} + +double BosonJet::Mqqb2(){ + /*M^2/(e^2g^2) for qqb->BJ. The same for qbq->BJ. + */ + return 2.0*_qcd._CF*(_that*_that+_uhat*_uhat+2.0*_shat*(_shat+_that+_uhat))/(_qcd._Nc*_that*_uhat); +} + +double BosonJet::e2(double eq){ + double e2eff; + switch(_boson->id()){ + case 22: + e2eff=eq*eq;//photon + break; + case 23: + e2eff=1.0-2.0*fabs(eq)*_ew.sw2();e2eff=(e2eff*e2eff+4.0*eq*eq*_ew.sw2()*_ew.sw2())/(8.0*_ew.sw2()*_ew.cw2());//Z^0 + } + return e2eff; +} + +//differential cross sectoin at LO + +double BosonJet::sigmagqLO(double pT, double yB, double yJ, double Q){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for gq->ZJ & gqb->ZJ + */ + double res; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + //cout << s << ", " << t << ", " << u << endl; + double dsgq=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsgq+=(_qcd.pdf(i,xB[1],Q)+_qcd.pdf(-i,xB[1],Q))*e2(_qcd._partons[i].e());//g(p1) q(p2)->boson(pB) jet(pJ) + } + res=(_qcd.pdf(21,xB[0],Q)*dsgq*Mgq2(s,t,u))*M2toXsection(pT, xB[0], xB[1], Q); + //cout << (_qcd.pdf(21,xB[0],Q)*dsgq*Mgq2(s,t,u)) << ", " << M2toXsection(pT, xB[0], xB[1], Q) << endl; + + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJet::sigmagqLO(double Qh, double QPDF){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for gq->ZJ & gqb->ZJ + */ + double res=0.0; + if(kinematicsQ()){ + double dsgq=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsgq+=(_qcd.pdf(i,_x2,QPDF)+_qcd.pdf(-i,_x2,QPDF))*e2(_qcd._partons[i].e());//g(p1) q(p2) or g(p1) qb(p2)->boson(pB) jet(pJ) + } + res=(_qcd.pdf(21,_x1,QPDF)*dsgq*Mgq2())*M2toXsection(Qh); + //cout << (_qcd.pdf(21,xB[0],Q)*dsgq*Mgq2(s,t,u)) << ", " << M2toXsection(pT, xB[0], xB[1], Q) << endl; + + } + return res*invGeV2topb;//return with unit pb +} + + +double BosonJet::sigmaqgLO(double pT, double yB, double yJ, double Q){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for qg->ZJ and qbg->ZJ + */ + double res; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsqg+=(_qcd.pdf(i,xB[0],Q)+_qcd.pdf(-i,xB[0],Q))*e2(_qcd._partons[i].e());//q(p1) g(p2) or qb(p1) g(p2)->boson(pB) jet(pJ) + } + res=dsqg*_qcd.pdf(21,xB[1],Q)*Mgq2(s,u,t)*M2toXsection(pT, xB[0], xB[1], Q); + } + return res*invGeV2topb; +} + +double BosonJet::sigmaqgLO(double Q,double QPDF){ + /* + dsigma/dpTdyZdyJ in unit pb/GeV for qg->ZJ and qbg->ZJ + */ + double res=0.0; + if(kinematicsQ()){ + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + dsqg+=(_qcd.pdf(i,_x1,QPDF)+_qcd.pdf(-i,_x1,QPDF))*e2(_qcd._partons[i].e());//q(p1) g(p2) or qb(p1) g(p2)->boson(pB) jet(pJ) + } + res=dsqg*_qcd.pdf(21,_x2,QPDF)*Mqg2()*M2toXsection(Q); + } + return res*invGeV2topb; +} + +double BosonJet::sigmaqqbLO(double pT, double yB, double yJ, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qqb->ZJ and qbq->ZJ + */ + double res; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + double ds=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qg->Zj + ds+=_qcd.pdf(i,xB[0],Q)*_qcd.pdf(-i,xB[1],Q)*e2(_qcd._partons[i].e());//g(p1) q(p2)->boson(pB) jet(pJ) + //qbg->ZJ + ds+=_qcd.pdf(i,xB[1],Q)*_qcd.pdf(-i,xB[0],Q)*e2(_qcd._partons[i].e());//q(p1) g(p2)->boson(pB) jet(pJ) + } + res=ds*Mqqb2(s,t,u)*M2toXsection(pT, xB[0], xB[1], Q); + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJet::sigmaqqbLO(double Q, double QPDF){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qqb->ZJ and qbq->ZJ + */ + double res=0.0; + if(kinematicsQ()){ + double ds=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qqb and qb q->Zj + ds+=(_qcd.pdf(i,_x1,QPDF)*_qcd.pdf(-i,_x2,QPDF)+_qcd.pdf(i,_x2,QPDF)*_qcd.pdf(-i,_x1,QPDF))*e2(_qcd._partons[i].e()); + } + res=ds*Mqqb2()*M2toXsection(Q); + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJet::sigmaLO(double pT, double yB, double yJ, double Q){ + return sigmaqgLO(pT, yB, yJ, Q)+sigmagqLO(pT, yB, yJ, Q)+sigmaqqbLO(pT, yB, yJ, Q); +} + +double BosonJet::sigmaLO(double Q, double QPDF){ + double res=0.0; + if(kinematicsQ()){ + res=sigmaqgLO(Q, QPDF)+sigmagqLO(Q, QPDF)+sigmaqqbLO(Q, QPDF); + } + return res; +} + +//MC integration + +void BosonJet::setupMC(double (*pds)(double *, size_t, void *), size_t dim, double *ymin, double *ymax, void *para){ + + gsl_rng_env_setup (); + _T = gsl_rng_default; + _r = gsl_rng_alloc (_T); + + _dim=dim;_mcFun.f=pds;_mcFun.dim=dim;_mcFun.params=para; +#ifdef MC_MISER + cout << "miser is used..." << endl; + _mcStatus = gsl_monte_miser_alloc (dim); +#else + cout << "vegas is used..." << endl; + _mcStatus = gsl_monte_vegas_alloc (dim); +#endif + _ymin=ymin;_ymax=ymax; + +} + +void BosonJet::cleanupMC(){ +#ifdef MC_MISER + gsl_monte_miser_free (_mcStatus); +#else + gsl_monte_vegas_free (_mcStatus); +#endif + gsl_rng_free (_r); + +} + +void BosonJet::setCalls(size_t calls){ + _calls=calls; +} + +void BosonJet::calculate(double qT, ostream &out){ + double res, err; +#ifdef MC_MISER + gsl_monte_miser_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res, &err); +#else + gsl_monte_vegas_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res, &err); +#endif + out << setprecision(15) << qT << " " << qT*res << " " << qT*err << endl;//here, in resum, we actually calculate dsigam/qTdqT but we only save dsigma/dqT. +} + +void BosonJet::calculate(double qT, double *res){ +#ifdef MC_MISER + gsl_monte_miser_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#else + gsl_monte_vegas_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#endif +} + +void BosonJet::calculate(double *res){//calculate the total cross section in pb +#ifdef MC_MISER + gsl_monte_miser_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#else + gsl_monte_vegas_integrate (&_mcFun, _ymin, _ymax, _dim, _calls, _r, _mcStatus, &res[0], &res[1]); +#endif +} + diff --git a/.github/entrypoint/artifact/BosonJet.h b/.github/entrypoint/artifact/BosonJet.h new file mode 100644 index 000000000..35c101886 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJet.h @@ -0,0 +1,92 @@ +//#define MC_MISER +#include "QCD.h" +#include "ElectroWeak.h" +#include +#include +#include +#include + +using namespace std; + + +class BosonJet{ + + protected: + + unsigned int _nf;//flavors of quarks, 5 by default + + //pdfs and parameters + double _Ecm;//=sqrt{s} characterizes the collision. We always choose the CM frame. + QCD _qcd; + ElectroWeak _ew; + Particle *_boson; + + double _preXsection;//prefactor for calculting cross secton + double _s; + double _mB2;//boson mass squared + + double _x1, _x2, _yB, _yJ, _shat, _that, _uhat,_pT;//Kinematics for a scattering process + + //unit conversion 1 GeV fm=0.1973269788 from PDG 2018 + double invGeV2topb;//1/GeV^2 to pb + + //Variables for Monte Carlo + const gsl_rng_type *_T; + gsl_rng *_r; + +#ifdef MC_MISER + gsl_monte_miser_state * _mcStatus; +#else + gsl_monte_vegas_state * _mcStatus; +#endif + gsl_monte_function _mcFun; + size_t _dim, _calls; + + double *_ymin, *_ymax;//integration boundary + + public: + + BosonJet(); + BosonJet(double Ecm, Particle *boson); + + //calculte the effective charge + double e2(double); + + void setEcm(double Ecm); + void setBoson(Particle *boson); + void getxBs(double *xB, double pT, double yB, double yJ);//calculate Bjorken x's from Ecm, pT and the rapidities of the two produced particles + void Mandelstam(double x1, double x2, double pT, double yB, double &s, double &t, double &u); + void setNf(unsigned int nf); + void setKinematics(double pT, double yB, double yJ); + bool kinematicsQ();//return whether it is allowed kinematics. + void getKinematics(); + void setpT(double pT); + double getpT(); + + //Born amplitudes squared: basically the hard function + double Mgq2(double s, double t, double u);//averged amplitude squared for gq channel + double Mgq2();//averged amplitude squared for gq channel + double Mqg2();//averged amplitude squared for gq channel + double Mqqb2(double s, double t, double u);//averaged amplitude squared for qqbar channel + double Mqqb2();//averaged amplitude squared for qqbar channel + + //differential cross section at LO, used for tests + double M2toXsection(double Q);//The prefactor*M^2 gives Born cross section. + double M2toXsection(double pT, double x1, double x2, double Q);//The prefactor*M^2 gives Born cross section. + double sigmagqLO(double pT, double yB, double yJ, double Q);//differential cross section for gq channel + double sigmagqLO(double Qh, double QPDF);//differential cross section for gq+gqb channel + double sigmaqgLO(double Q, double QPDF);//differential cross section for gq+gqb channel + double sigmaqgLO(double pT, double yB, double yJ, double Q);//differential cross section for qg+qbg channel + double sigmaqqbLO(double pT, double yB, double yJ, double Q);//differential cross section for qqb+qbq channel + double sigmaqqbLO(double Q,double QPDF);//differential cross section for qq channel + double sigmaLO(double pT, double yB, double yJ, double Q); + double sigmaLO(double Q,double QPDF); + + //Monte Carlo + void setupMC(double (*pds)(double *, size_t, void *), size_t dim, double *ymin, double *ymax, void *para); + void cleanupMC();void setCalls(size_t); + void calculate(double, ostream &); + void calculate(double, double *); + void calculate(double *); +}; + diff --git a/.github/entrypoint/artifact/BosonJetBorn.c b/.github/entrypoint/artifact/BosonJetBorn.c new file mode 100644 index 000000000..e3f6c0e89 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetBorn.c @@ -0,0 +1,10 @@ +#include "BosonJetBorn.h" + + +BosonJetBorn::BosonJetBorn(double Ecm, Particle *boson):BosonJet(Ecm, boson){ +} + +void BosonJetBorn::getFilename(stringstream &filename, double yJmax){ + filename << "s" << _Ecm << "etaJ" << yJmax << "Born.dat"; + +} diff --git a/.github/entrypoint/artifact/BosonJetBorn.h b/.github/entrypoint/artifact/BosonJetBorn.h new file mode 100644 index 000000000..c3f4ce93b --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetBorn.h @@ -0,0 +1,9 @@ +#include "BosonJet.h" + +class BosonJetBorn: public BosonJet{ + + public: + BosonJetBorn(double Ecm, Particle *boson); + void getFilename(stringstream &filename, double ymax); + +}; diff --git a/.github/entrypoint/artifact/BosonJetCSS.c b/.github/entrypoint/artifact/BosonJetCSS.c new file mode 100644 index 000000000..90e010a45 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetCSS.c @@ -0,0 +1,133 @@ +#include +#include "BosonJetCSS.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +using namespace std; + +BosonJetCSS::BosonJetCSS():BosonJetResum(){ +} + +BosonJetCSS::BosonJetCSS(double Ecm, Particle *boson):BosonJetResum(Ecm, boson){ +} + + +//CSS +double BosonJetCSS::H1qqb(double muh){ + double lmuhomz2=log(muh*muh/_mB2), lRpTomuh2=_R*_pT/muh,mz2t=_mB2/(_mB2-_that),mz2u=_mB2/(_mB2-_uhat); + double lsomz2=log(_shat/_mB2),ltomz2=log(-_that/_mB2),luomz2=log(-_uhat/_mB2),lmz2t=log(mz2t),lmz2u=log(mz2u); + lRpTomuh2=2.0*log(lRpTomuh2); + return 0.5*_qcd.alphas(muh)*( _qcd._Nc*( -_qcd._beta0*lRpTomuh2/6.0 +0.5*lRpTomuh2*lRpTomuh2 + gsl_sf_dilog(mz2t)+ gsl_sf_dilog(mz2u)-lmuhomz2*log(_shat*_mB2/(_that*_uhat)) - 0.5*lmuhomz2*lmuhomz2+0.5*lsomz2*lsomz2-0.5*(ltomz2+luomz2)*(ltomz2+luomz2) + ltomz2*luomz2 + 0.5*lmz2t*lmz2t+0.5*lmz2u*lmz2u-2.0*log(_R)*log(_R)-2.0*M_PI*M_PI/3.0+67.0/9.0-23.0*_nf/54.0 ) + _qcd._CF*( 2.0*lsomz2*lmuhomz2-lmuhomz2*lmuhomz2-3.0*lmuhomz2-lsomz2*lsomz2+M_PI*M_PI-8.0 ) )/M_PI; +} + +double BosonJetCSS::H1qg(double muh){ + double lmuhomz2=log(muh*muh/_mB2), lRpTomuh2=_R*_pT/muh,mz2t=_mB2/(_mB2-_that),mz2u=_mB2/(_mB2-_uhat); + double lsomz2=log(_shat/_mB2),ltomz2=log(-_that/_mB2),luomz2=log(-_uhat/_mB2),lmz2t=log(mz2t),lmz2u=log(mz2u); + lRpTomuh2=2.0*log(lRpTomuh2); + return 0.5*_qcd.alphas(muh)*( _qcd._CF*( -1.5*lRpTomuh2 +0.5*lRpTomuh2*lRpTomuh2 + 2.0*luomz2*lmuhomz2-lmuhomz2*lmuhomz2-3.0*lmuhomz2-luomz2*luomz2-2.0*log(_R)*log(_R)-2.0*M_PI*M_PI/3.0-1.5) + _qcd._Nc*( gsl_sf_dilog(mz2t)-gsl_sf_dilog(_mB2/_shat) - lmuhomz2*log(_uhat*_mB2/(_shat*_that))-0.5*lmuhomz2*lmuhomz2-0.5*(lsomz2+ltomz2)*(lsomz2+ltomz2)+lsomz2*ltomz2-lsomz2*log(_that/(_mB2-_shat)) -0.5*lsomz2*lsomz2+0.5*lmz2t*lmz2t+0.5*luomz2*luomz2+0.5*M_PI*M_PI ) )/M_PI; +} +/* + +double BosonJetCSS::H1qg(double muh){ + double lmuhomz2=log(muh*muh/_mB2), lRpTomuh2=_R*_pT/muh,mz2t=_mB2/(_mB2-_that),mz2u=_mB2/(_mB2-_uhat); + double lsomz2=log(_shat/_mB2),ltomz2=log(-_that/_mB2),luomz2=log(-_uhat/_mB2),lmz2t=log(mz2t),lmz2u=log(mz2u); + lRpTomuh2=2.0*log(lRpTomuh2); + return 0.5*_qcd.alphas(muh)*( _qcd._CF*( -1.5*lRpTomuh2 +0.5*lRpTomuh2*lRpTomuh2 + 2.0*luomz2*lmuhomz2-lmuhomz2*lmuhomz2-3.0*lmuhomz2-luomz2*luomz2-2.0*log(_R)*log(_R)-2.0*M_PI*M_PI/3.0-1.5) + _qcd._Nc*( gsl_sf_dilog(mz2t)-gsl_sf_dilog(_mB2/_shat) - lmuhomz2*log(_uhat*_mB2/(_shat*_that))-0.5*lmuhomz2*lmuhomz2-0.5*(lsomz2+ltomz2)*(lsomz2+ltomz2)+lsomz2*ltomz2+lsomz2*log(_shat-_mB2) -0.5*lsomz2*lsomz2+0.5*lmz2t*lmz2t+0.5*luomz2*luomz2+0.5*M_PI*M_PI ) )/M_PI; +} +*/ + +double BosonJetCSS::aHqgCSS(){ + return -2.0*(_qcd._Nc+_qcd._CF)/M_PI; +} + +double BosonJetCSS::bHqgCSS(double muh){ + return (_qcd._CF*(2.0*log(-_uhat/(_pT*muh*_R))-1.5)+_qcd._Nc*log(_shat*_that/(_uhat*muh*muh))-0.5*_qcd._beta0)/M_PI; +} + +double BosonJetCSS::aHqqbCSS(){ + return _aHqqb+_aJqqb; +} + +double BosonJetCSS::bHqqbCSS(double muh){ + //cout << "s=" << _shat << endl; + return ( _qcd._CF*(2.0*log(_shat/(muh*muh))-3.0)-2.0*_qcd._Nc*log(_R) )/M_PI; +} + +double BosonJetCSS::aSqgCSS(){ + return _asbbqg+_acoftqg; +} + +double BosonJetCSS::bSqgCSS(double muxT){ + return (_qcd._CF*(1.5-2.0*log(-_uhat/(_pT*muxT*_R)))+2.0*_qcd._Nc*log(-_pT*muxT/_that)+0.5*_qcd._beta0)/M_PI; +} + +double BosonJetCSS::CHqgCSS(double mu, double muh){ + return rge(mu,muh,aHqgCSS(),bHqgCSS(muh)); +} + +double BosonJetCSS::CHqqbCSS(double mu, double muh){ + return rge(mu,muh,aHqqbCSS(),bHqqbCSS(muh)); +} + +double BosonJetCSS::CSqgCSS(double mu, double muxT){ + return rge(mu,muxT,aSqgCSS(),bSqgCSS(muxT)); +} + + + +double BosonJetCSS::sigmaqgCSS(double xT, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qg->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + double muT=muxTCSS(xT),muh=muhCSS(); + res=0.5*xT*NonPert(xT,muh)*gsl_sf_bessel_J0(_qT*xT)*CHqgCSS(muT,muh)*(1.0+H1qg(muh))*sigmaqgLO(muh,muT)/M_PI; + } + return res; +} + +double BosonJetCSS::sigmaqqbCSS(double xT, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qqb and qbq->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + double muT=muxTCSS(xT),muh=muhCSS(); + res=xT*NonPert(xT,muh)*gsl_sf_bessel_J0(_qT*xT)*CHqqbCSS(muT,muh)*(1.0+H1qqb(muh))*sigmaqqbLO(muh,muT); + } + return res; +} + +double BosonJetCSS::sigmaCSS(double xT, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qqb and qbq->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + double muT=muxTCSS(xT),muh=muhCSS(); + res=xT*NonPert(xT,muh)*gsl_sf_bessel_J0(_qT*xT)*((1.0+H1qqb(muh))*CHqqbCSS(muT,muh)*sigmaqqbLO(muh,muT)+2.0*(1.0+H1qg(muh))*CHqgCSS(muT,muh)*sigmaqgLO(muh,muT)); + } + return res; +} + +double BosonJetCSS::RGInvariance(double mu, double muxT, double muh){ + return aHqgCSS()*log(mu/muh)+bHqgCSS(muh)+aSqgCSS()*log(mu/muxT)+bSqgCSS(muxT); +} + +//filename + +void BosonJetCSS::getFilename(stringstream &filename, double ymin, double ymax){ + filename << "R" << _R << "pT" << ymin << "." << ymax; + filename << "CSS.dat"; + +} diff --git a/.github/entrypoint/artifact/BosonJetCSS.h b/.github/entrypoint/artifact/BosonJetCSS.h new file mode 100644 index 000000000..6cf4da933 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetCSS.h @@ -0,0 +1,33 @@ + +#include "BosonJetResum.h" + +class BosonJetCSS: public BosonJetResum{ + public: + BosonJetCSS(); + BosonJetCSS(double Ecm, Particle *boson); + + //CSS formalism: H=Hard+Jet, S=Soft+Coft + double H1qg(double muh); + double H1qqb(double muh); + + double aHqgCSS();//a for anomalous dimension of hard function Hqg + double bHqgCSS(double muh);//b for anomalous dimension of hard function Hqg + + double aHqqbCSS();//a for anomalous dimension of hard function Hqg + double bHqqbCSS(double muh);//b for anomalous dimension of hard function Hqg + + double aSqgCSS();//a for anomalous dimension of soft function Hqg + double bSqgCSS(double);//b for anomalous dimension of soft function Hqg + + double CHqgCSS(double mu, double muH);//nll resummed for hard function: Hqg in CSS + + double CHqqbCSS(double mu, double muH);//nll resummed for hard function: Hqg in CSS + + double CSqgCSS(double mu, double muS);//nll resummed for hard function: Hqg + double sigmaqgCSS(double xT, double pT, double yB, double yJ); + double sigmaqqbCSS(double xT, double pT, double yB, double yJ); + double sigmaCSS(double xT, double pT, double yB, double yJ); + + double RGInvariance(double mu, double muxT, double muh); + void getFilename(stringstream &filename, double ymin, double ymax); +}; diff --git a/.github/entrypoint/artifact/BosonJetLL.c b/.github/entrypoint/artifact/BosonJetLL.c new file mode 100644 index 000000000..f125060b9 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLL.c @@ -0,0 +1,42 @@ +#include +#include "BosonJetLL.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +BosonJetLL::BosonJetLL():BosonJetNLL(){ + initLL(); +} + +BosonJetLL::BosonJetLL(double Ecm, Particle *boson):BosonJetNLL(Ecm, boson){ + initLL(); +} + +void BosonJetLL::initLL(){ + _ngl=false; +} + +double BosonJetLL::bHqg(){ + cout << "We are here..." << endl; + return -(_cf*(2.0*log(-_muh*_muh/_uhat))+_nc*log(_muh*_muh*_uhat/(_shat*_that))); +} + +//filename + +void BosonJetLL::getFilename(stringstream &filename, double ymin, double ymax){ + filename << "R" << _R << "pT" << ymin << "." << ymax << "LL"; + if(_css){ + filename << "CSS"; + } + if(_nonpert){ + filename << "NP"; + } + filename <<"muh" << _muhV << "mub" << _muxTV << "muJ" << _muJV << "mut" << _mutV; + filename <<".dat"; +} + diff --git a/.github/entrypoint/artifact/BosonJetLL.h b/.github/entrypoint/artifact/BosonJetLL.h new file mode 100644 index 000000000..f5153a6a6 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLL.h @@ -0,0 +1,23 @@ + +#include "BosonJetNLL.h" + +class BosonJetLL: public BosonJetNLL{ + +protected: + +public: + + BosonJetLL(); + BosonJetLL(double Ecm, Particle *boson); + + void initLL(); + + virtual double bHqg();//b for anomalous dimension of hard function Hqg + + + //NGL resummation + + void getFilename(stringstream &filename, double ymin, double ymax); + +}; + diff --git a/.github/entrypoint/artifact/BosonJetLO.c b/.github/entrypoint/artifact/BosonJetLO.c new file mode 100644 index 000000000..73591a108 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLO.c @@ -0,0 +1,198 @@ +#include "BosonJetLO.h" + +#define PI 3.141592653589793 + +BosonJetLO::BosonJetLO(double Ecm, Particle *boson):BosonJet(Ecm, boson){ +} + + +double BosonJetLO::nllqg(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Double log + non-PDF single log at O(alpha_s) for qg->BJ channel. It is the same for qbg->BJ. + For gq->BJ and gqb->BJ, it is given by t<->u. + */ + double xB[2],res;getxBs(xB, pT, yB, yJ); + + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + res=-_qcd.alphas(Q)*(2.0*(_qcd._Nc*log(-pT*qT/t)+_qcd._CF*log(-pT*qT*R/u))+( 11.0*_qcd._Nc/6.0-_nf/3.0+3.0*_qcd._CF/2.0))/(PI); + } + // + //res=-_qcd.alphas(Q)*2.0*(_qcd._Nc+_qcd._CF)*(log(0.5*qT)+0.5772156649015329)/(PI); + return res; +} + +double BosonJetLO::nllqq(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Double log + non-PDF single log at O(alpha_s) for qqb->BJ channel. It is the same for qbq->BJ. + */ + double xB[2],res;getxBs(xB, pT, yB, yJ); + if(xB[0]>1.0||xB[1]>1.0||xB[0]<0.0||xB[1]<0.0) res=0.0; + else{ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + res=-_qcd.alphas(Q)*(_qcd._CF*(3.0+2.0*log(-pT*qT/t)+2.0*log(-pT*qT/u))+2.0*_qcd._Nc*log(R))/(PI); + } + return res; +} + +double BosonJetLO::sigmaqg(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Non-PDF LL and NLL for qg+qbg channel. + */ + return sigmaqgLO(pT,yB,yJ,Q)*nllqg(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmaqg(double qT, double pT, double yB, double yJ, double z, double R, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qg->ZJ+qbg->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]<1.0&&xB[1]<1.0&&xB[0]>0.0&&xB[1]>0.0&&z>0.0&&z<1.0){//z has to be in the whole range (0,1) in order to get the delta function in splitting function + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + double dg=0.0,dq=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qg->q'g->BJ+qbg->qb'g + dq+=(_qcd.Pqq(i,z,xB[0],Q)+_qcd.Pqq(-i,z,xB[0],Q))*e2(_qcd._partons[i].e()); + //qg->qg'->BJ+qbg->qb'g->BJ + dg+=(_qcd.pdf(i,xB[0],Q)+_qcd.pdf(-i,xB[0],Q))*e2(_qcd._partons[i].e()); + //That is all. + } + res=_qcd.alphas(Q)*((dg*_qcd.Pgg(z,xB[1],Q)+dq*_qcd.pdf(21,xB[1],Q))*Mgq2(s,u,t)+ dg*_qcd.Pqg(z,xB[1],Q)*Mqqb2(s,t,u))*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor alphas/PI + } + return res*invGeV2topb+sigmaqgLO(pT,yB,yJ,Q)*nllqg(qT, pT,yB,yJ,R,Q); + //return sigmaqgLO(pT,yB,yJ,Q)*nllqg(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmaqqb(double qT, double pT, double yB, double yJ, double R, double Q){ + /* + Non-PDF LL and NLL for qqb+qbq channel. + */ + return sigmaqqbLO(pT,yB,yJ,Q)*nllqq(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmaqqb(double qT, double pT, double yB, double yJ, double z, double R, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qqb->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + //z has to be in the whole range (0,1) in order to get the delta function in splitting function + if(xB[0]<1.0&&xB[1]<1.0&&xB[0]>0.0&&xB[1]>0.0&&z>0.0&&z<1.0){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + double ds=0.0,dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //qqb->qqb'->BJ with ' indicating undergoing splitting + ds+=_qcd.pdf(i,xB[0],Q)*_qcd.Pqq(-i,z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qqb->qg->BJ + dsqg+=_qcd.pdf(i,xB[0],Q)*_qcd.Pgqb(z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qbq->qbq'->BJ + ds+=_qcd.pdf(-i,xB[0],Q)*_qcd.Pqq(i,z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qbq->qbg->BJ + dsqg+=_qcd.pdf(-i,xB[0],Q)*_qcd.Pgq(z,xB[1],Q)*e2(_qcd._partons[i].e()); + //qqb->q'qb->BJ, qqb->gqb->BJ,qbq->qb'q->BJ & qbq->gq->BJ is taken into account by a factor of 2. + } + res=2.0*_qcd.alphas(Q)*( ds*Mqqb2(s,t,u)+dsqg*Mgq2(s,u,t) )*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 2 alphas/(PI) + } + + return res*invGeV2topb+sigmaqqbLO(pT,yB,yJ,Q)*nllqq(qT, pT,yB,yJ,R,Q); +} + +double BosonJetLO::sigmagg(double qT, double pT, double yB, double yJ, double z, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for gg->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>0.0&&xB[1]>0.0&&xB[0]<1.0&&xB[1]<1.0&&z<1.0&&z>xB[0]){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + for(unsigned int i=1;i<=_nf;i++){ + //Conly gg->qg->BJ is calculated. + //gg->qbg->BJ, gg->gq->BJ and gg->gqb is taken into account by a factor of 4. + res+=e2(_qcd._partons[i].e());//g(p1) q(p2)->boson(pB) jet(pJ) + } + res*=4.0*_qcd.alphas(Q)*_qcd.Pqg(z,xB[0],Q)*_qcd.pdf(21,xB[1],Q)*Mgq2(s,u,t)*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 4*alphas/PI + } + return res*invGeV2topb;//return with unit pb +} + + +double BosonJetLO::sigmaqq(double qT, double pT, double yB, double yJ, double z, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qq->ZJ. + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>0.0&&xB[1]>0.0&&xB[0]<1.0&&xB[1]<1.0&&z<1.0&&z>xB[0]){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //Only qq->qg->ZJ is calculated. + //qq->gq->ZJ is taken into account by a factor of 2. + dsqg+=_qcd.pdf(i,xB[0],Q)*e2(_qcd._partons[i].e()); + } + + res=2.0*_qcd.alphas(Q)*dsqg*_qcd.Pgq(z,xB[1],Q)*Mgq2(s,u,t)*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 2*alphas/(PI) + + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJetLO::sigmaqbqb(double qT, double pT, double yB, double yJ, double z, double Q){ + /* + dsigma/dpTdyBdyJ in pb/GeV for qbqb->ZJ + */ + double res=0.0; + double xB[2];getxBs(xB, pT, yB, yJ); + if(xB[0]>0.0&&xB[1]>0.0&&xB[0]<1.0&&xB[1]<1.0&&z<1.0&&z>xB[0]){ + double s,t,u;Mandelstam(xB[0], xB[1], pT, yB, s, t, u); + double dsqg=0.0; + for(unsigned int i=1;i<=_nf;i++){ + //Only qb qb->qb g->ZJ is calculated. + //qbqb->gqb->ZJ is taken into account by a factor 2 + dsqg+=_qcd.pdf(-i,xB[0],Q)*e2(_qcd._partons[i].e()); + } + + res=2.0*_qcd.alphas(Q)*(dsqg*_qcd.Pgqb(z,xB[1],Q)*Mgq2(s,u,t))*M2toXsection(pT, xB[0], xB[1], Q)/PI;//prefactor: 2*alphas/PI + + } + return res*invGeV2topb;//return with unit pb +} + +double BosonJetLO::sigma(double qT, double pT, double yB, double yJ,double z, double R, double Q){ + return 2.0*sigmaqg(qT,pT,yB,yJ,z,R,Q)+sigmaqqb(qT,pT,yB,yJ,z,R,Q)+sigmaqq(qT,pT,yB,yJ,z,Q)+sigmaqbqb(qT,pT,yB,yJ,z,Q)+sigmagg(qT,pT,yB,yJ,z,Q); +} + +//output + +void BosonJetLO::getFilename(stringstream &filename, double R, int chan, double ymin, double ymax){ + filename << "R" << R << "pT" << ymin << "." << ymax; + switch(chan){ + case 0: + filename<< "tot"; + break; + case 1: + filename<< "qg"; + break; + case 2: + filename<< "qqb"; + break; + case 3: + filename<< "gg"; + break; + case 4: + filename<< "qq"; + break; + case 5: + filename<< "qbqb"; + break; + } + filename << "LO.dat"; + +} diff --git a/.github/entrypoint/artifact/BosonJetLO.h b/.github/entrypoint/artifact/BosonJetLO.h new file mode 100644 index 000000000..ecc433307 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetLO.h @@ -0,0 +1,31 @@ +#include "BosonJet.h" + +class BosonJetLO: public BosonJet{ + + public: + BosonJetLO(double Ecm, Particle *boson); + + //differential cross section at LO + double sigmaqg(double qT, double pT, double yB, double yJ, double R, double Q);//differential cross section for gq channel + double sigmaqg(double qT, double pT, double yB, double yJ,double z, double R, double Q);//differential cross section for gq channel + //differential cross section after resummation (RG evolution) + double sigmagq(double qT,double dphi, double pT, double yB, double yJ);//differential cross section for gq channel + double sigmagg(double qT,double pT, double yB, double yJ, double z,double Q);//differential cross section for gq channel + double sigmaqq(double qT,double pT, double yB, double yJ, double z,double Q);//differential cross section for gq channel + double sigmaqbqb(double qT,double pT, double yB, double yJ, double z,double Q);//differential cross section for gq channel + double sigmaqqb(double qT,double pT, double yB, double yJ, double R, double Q);//differential cross section for gq channel + double sigmaqqb(double qT,double pT, double yB, double yJ,double z, double R, double Q);//differential cross section for gq channel + double sigma(double qT,double pT, double yB, double yJ, double z, double R, double Q); + + //Fixed-order calculation + double nllqg(double pT, double qT, double yB, double yJ, double R, double Q); + double nllqq(double pT, double qT, double yB, double yJ, double R, double Q); + + //Output + void getFilename(stringstream &filename, double R, int chan, double ymin, double ymax); + +}; + +struct ParaQT{BosonJetLO *_bj;double _R;double _qT; int _chan;}; + + diff --git a/.github/entrypoint/artifact/BosonJetNLL.c b/.github/entrypoint/artifact/BosonJetNLL.c new file mode 100644 index 000000000..9b878640a --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetNLL.c @@ -0,0 +1,210 @@ +#include +#include "BosonJetNLL.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +BosonJetNLL::BosonJetNLL():BosonJetResum(){ + initNLL(); +} + +BosonJetNLL::BosonJetNLL(double Ecm, Particle *boson):BosonJetResum(Ecm, boson){ + initNLL(); +} + +void BosonJetNLL::initNLL(){ + _css=false;_imgcphix=true;;_ngl=true; + _angl=0.85*_qcd._Nc;_bngl=0.86*_qcd._Nc;_cngl=1.33; + _cNGL=_qcd._Nc*_qcd._CF*M_PI*M_PI/(3.0); + _muhV=1.0;_muJV=1.0;_mutV=1.0;_muxTV=1.0; + + _mutMin=10.0; + _ll=false; +} + +void BosonJetNLL::setScaleVar(double vh, double vb, double vJ, double vt){ + _muhV=vh;_muxTV=vb;_muJV=vJ;_mutV=vt; +} + +void BosonJetNLL::setCSS(bool cssQ){ + _css=cssQ; +} + +void BosonJetNLL::setNGL(bool nglQ){ + _ngl=nglQ; +} + +void BosonJetNLL::setImgcphix(bool cssQ){ + _imgcphix=cssQ; +} + +double BosonJetNLL::CHqg(){ + //cout << _mu <<", " << _muh << ", " << _pT << ", " << aHqg() << ", " << bHqg() << ", " << aHqg()*log(_mu/_muh)+bHqg() << endl; + return rge(_mu,_muh,aHqg(),bHqg()); +} + +double BosonJetNLL::CJqg(){ + return rge(_mu,_muJ,aJqg(),bJqg()); +} + +double BosonJetNLL::Ccoftqg(){ + return rge(_mu,_mut,acoftqg(),bcoftqg()); +} + +double BosonJetNLL::Csbbqg(){ + return rge(_mu,_muxT,asbbqg(),bsbbqg()); +} + +double BosonJetNLL::CHqqb(){ + return rge(_mu,_muh,aHqqb(),bHqqb()); +} + +double BosonJetNLL::CJqqb(){ + return rge(_mu,_muJ,aJqqb(),bJqqb()); +} + +double BosonJetNLL::Ccoftqqb(){ + return rge(_mu,_mut,acoftqqb(),bcoftqqb()); +} + +double BosonJetNLL::Csbbqqb(){ + return rge(_mu,_muxT,asbbqqb(),bsbbqqb()); +} + +//R resum +double BosonJetNLL::Ccphixqg(){ + return cos(2.0*M_PI*_qcd._CF*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut))/_qcd._beta0); +} + +double BosonJetNLL::Ccphixqqb(){ + return cos(2.0*M_PI*_qcd._Nc*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut))/_qcd._beta0); +} + +double BosonJetNLL::NGL(){ + double res=1.0; + + if(_mut<_muJ){ + double u=log(_qcd.alphas(_mut)/_qcd.alphas(_muJ))/_qcd._beta0; + double u2=u*u; + + //cout << _mut << ", " << _muJ << endl; + + //cout << u2 << ", " << exp(-_cNGL*u2*(1.0+_angl*_angl*u2)/(1.0+pow(_bngl*u,_cngl))) << endl; + + res=exp(-_cNGL*u2*(1.0+_angl*_angl*u2)/(1.0+pow(_bngl*u,_cngl))); + } + return res; +} + + +void BosonJetNLL::setScales(double xT){ + _muxT=_muxTV*_b0/xT;_muh=_muhV*muh();_muJ=_muJV*_R*_pT;_mut=_mutV*_R*_b0/xT; + _mu=_muJ; + if(_muxT>_muh) _muxT=_muh; + if(_mut>_muJ) _mut=_muJ; + if(_muxT>_pT) _muxT=_pT; + + // if(_mut<_muJ&&_muxT<_muh){ + + //CSS + if(_css){ + _mut=_muxT;_muJ=_muh;_mu=_muxT; + } +} + +double BosonJetNLL::sigmaqgR(double xT, double cphix, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qg->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + + _xT=xT; _cphix=cphix; setScales(xT); + if((_qcd.alphas(_muxT)/_qcd.alphas(_mut)>exp(-0.25*_qcd._beta0/_qcd._CF))){ + //cout << "RGI: " << RGInvariance(_mu, _muh, _muxT, _muJ, _mut, xT, cphix) << endl; + if(_mutMin>_mut) _mutMin=_mut; + //cout << _mutMin << ", " << _mut << endl; + res=xT*gsl_sf_bessel_J0(_qT*xT)*Ccphixq()*CHqg()*CJqg()*Csbbqg()*Ccoftqg()*sigmaqgLO(_muh,_muxT)/M_PI; + if(_nonpert){ + res*=NonPert(xT,_muh); + } + if(_imgcphix){ + res*=Ccphixqg(); + } + if(_ngl){ + res*=NGL(); + } + } + //} + } + return res; +} + + +double BosonJetNLL::sigmaqqbR(double xT, double cphix, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV for qqb->ZJ+qbg->ZJ. + */ + + setKinematics(pT,yB,yJ);double res=0.0; + if(kinematicsQ()){ + + _xT=xT; _cphix=cphix; setScales(xT); + //cout << "qqb: " << Ccphixqqb()*Csbbqqb() << ", " << CHqqb()*CJqqb()*Csbbqqb()*Ccoftqqb() << endl; + //cout << "mu=" << _mu << ", muxT=" << _muxT << ", muh=" << _muh << ", muJ" << _muJ << ", mut=" << _mut << endl; + // cout << exp(-0.25*_qcd._beta0/_qcd._Nc) << ", " << exp(-0.25*_qcd._beta0/_qcd._CF) << endl; + if((_qcd.alphas(_muxT)/_qcd.alphas(_mut)>exp(-0.25*_qcd._beta0/_qcd._Nc))){ + if(_mutMin>_mut) _mutMin=_mut; + res=xT*gsl_sf_bessel_J0(_qT*xT)*Ccphixg()*CHqqb()*CJqqb()*Csbbqqb()*Ccoftqqb()*sigmaqqbLO(_muh,_muxT)/M_PI; + if(_nonpert){ + res*=NonPert(xT,_muh); + } + if(_imgcphix){ + res*=Ccphixqqb(); + } + if(_ngl){ + double ngl=NGL(); + res*=pow(ngl,_qcd._Nc/_qcd._CF); + } + //} + } + } + return res; +} + +double BosonJetNLL::sigmaR(double xT, double cphix, double pT, double yB, double yJ){ + /* + dsigma/qTdqTdpTdyBdyJ in pb/GeV. + */ + + return 2.0*sigmaqgR(xT, cphix, pT, yB, yJ)+sigmaqqbR(xT, cphix, pT, yB,yJ); +} + + + +//filename + +void BosonJetNLL::getFilename(stringstream &filename, double ymin, double ymax){ + filename << "R" << _R << "pT" << ymin << "." << ymax; + if(_css){ + filename << "CSS"; + } + if(_nonpert){ + filename << "NP"; + } + if(_ngl){ + filename << "NGL"; + } + if(_ll){ + filename << "LL"; + } + filename <<"muh" << _muhV << "mub" << _muxTV << "muJ" << _muJV << "mut" << _mutV; + filename <<"s"<< _Ecm << ".dat"; +} + diff --git a/.github/entrypoint/artifact/BosonJetNLL.h b/.github/entrypoint/artifact/BosonJetNLL.h new file mode 100644 index 000000000..7d854fadf --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetNLL.h @@ -0,0 +1,55 @@ + +#include "BosonJetResum.h" + +class BosonJetNLL: public BosonJetResum{ + +protected: + bool _css,_imgcphix,_ngl; + double _cNGL,_angl,_bngl,_cngl; + double _muhV,_muxTV,_muJV,_mutV; + + +public: + + BosonJetNLL(); + BosonJetNLL(double Ecm, Particle *boson); + + double _mutMin; + + void initNLL(); + void setScales(double xT);//var is a prefactor for the scale variation + void setScaleVar(double vh, double vb, double vJ, double vt); + + double CHqg();//nll resummed for hard function in qg + double CJqg();//nll resummed for Jet function in qg + double Ccoftqg();//nll resummed for Jet function in qg + double Csbbqg();//nll resummed for SBB in qg + double CHqqb();//nll resummed for hard function: Hqqb + double CJqqb();//nll resummed for Jet function in qqb + double Ccoftqqb();//nll resummed for Jet function in qqb + double Csbbqqb();//nll resummed for SBB: Hqqb + + //R resummation + double Ccphixqg(); + double Ccphixqqb(); + double sigmaqgR(double xT, double cphix, double pT, double yB, double yJ); + double sigmaqqbR(double xT,double cphix, double pT, double yB, double yJ); + double sigmaR(double xT,double cphix, double pT, double yB, double yJ); + + //NGL resummation + double NGL(); + + + void getFilename(stringstream &filename, double ymin, double ymax); + + //check css limit + void setCSS(bool cssQ); + void setImgcphix(bool icphix); + + //switch on and off NGL + void setNGL(bool nglQ); + + //print _mut min + double mutMin(); +}; + diff --git a/.github/entrypoint/artifact/BosonJetResum.c b/.github/entrypoint/artifact/BosonJetResum.c new file mode 100644 index 000000000..3420f67c7 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetResum.c @@ -0,0 +1,280 @@ +#include +#include "BosonJetResum.h" +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +using namespace std; + +void BosonJetResum::init(){ + _R=0.0;_qT=0.0;_eps=1.0e-4;_b0=1.1229189671337703; + _aHqg=-2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI;_asbbqg=2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI; + _aJqg=2.0*_qcd._CF/M_PI;_acoftqg=-2.0*_qcd._CF/M_PI; + _aHqqb=-2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI;_aJqqb=2.0*_qcd._Nc/M_PI; + _acoftqqb=-2.0*_qcd._Nc/M_PI;_asbbqqb=2.0*(_qcd._Nc+2.0*_qcd._CF)/M_PI; + + //constant for RG evolution + _b2i=2.0*M_PI/_qcd._beta0;double b2ia=0.5/_qcd._beta0; + _aHqg*=b2ia;_aJqg*=b2ia;_asbbqg*=b2ia;_acoftqg*=b2ia; + _aHqqb*=b2ia;_aJqqb*=b2ia;_asbbqqb*=b2ia;_acoftqqb*=b2ia; + + _beta0=_qcd._beta0/M_PI;_nc=_qcd._Nc/M_PI;_cf=_qcd._CF/M_PI; + + _nonpert=false; +} + +BosonJetResum::BosonJetResum(){ + init(); +} + +BosonJetResum::BosonJetResum(double Ecm, Particle *boson):BosonJet(Ecm, boson){ + init(); +} + +void BosonJetResum::setNonPert(bool npQ){ + _nonpert=npQ; +} + +void BosonJetResum::setLL(bool ll){ + _ll=ll; +} + + +void BosonJetResum::setRegulator(double eps){ + _eps=eps; +} + +void BosonJetResum::setScale(double mu, double muh, double muJ, double muxT, double mut,double xT, double cphix){ + _mu=mu;_muJ=muJ;_muh=muh;_mut=mut;_muxT=muxT, _xT=xT, _cphix=cphix; +} + +double BosonJetResum::rge(double mu, double mu0, double a, double b){ + //double b2i=2.0*M_PI/_qcd._beta0;double b2ia=0.5*a/_qcd._beta0; + //return pow(_qcd.alphas(mu)/_qcd.alphas(mu0),-b2i*b)*exp( -b2ia*log(mu/mu0)*log(_qcd.alphas(mu))-b2ia*b2i*( (log(_qcd.alphas(mu0))+1.0)/_qcd.alphas(mu0)- (log(_qcd.alphas(mu))+1.0)/_qcd.alphas(mu)) ); + double r=_qcd.alphas(mu)/_qcd.alphas(mu0); + double lr=log(r); + return exp(-_b2i*b*log(r)-_b2i*a*(4.0*M_PI*(1.0- 1.0/r-lr)/_qcd.alphas(mu0) + ( _qcd._gcusp1/_qcd._gcusp0-_qcd._beta1/_qcd._beta0 )*(1.0-r+lr) + 0.5*_qcd._beta1*lr*lr/_qcd._beta0 ) ); +} + +void BosonJetResum::setR(double R){ + if(R>0.0) + _R=R; + else{ + cout << "The cone size can not be less than zero!" << endl; + throw exception(); + } +} + +void BosonJetResum::setqT(double qT){ + if(qT>0.0) + _qT=qT; + else{ + cout << "qT can not be less than zero!" << endl; + throw exception(); + } +} + +void BosonJetResum::setmu(double mu){ + if(mu>0.0) + _mu=mu; + else{ + cout << "mu can not be less than zero!" << endl; + throw exception(); + } +} + +void BosonJetResum::setPara(double R, double qT, double mu){ + setR(R);setqT(qT);setmu(mu); +} + +double BosonJetResum::regulator(double xT){ + return exp(-_eps*xT*xT); + } + +double BosonJetResum::aHqg(){ + return _aHqg; +} + +double BosonJetResum::bHqg(){ + double b; + if(_ll){ + b=-(_cf*(2.0*log(-_muh*_muh/_uhat))+_nc*log(_muh*_muh*_uhat/(_shat*_that))); + } + else{ + b=-(0.5*_beta0+_cf*(3.0+2.0*log(-_muh*_muh/_uhat))+_nc*log(_muh*_muh*_uhat/(_shat*_that))); + } + return b; +} + + +double BosonJetResum::aJqg(){ + return _aJqg; +} + +double BosonJetResum::bJqg(){ + double b; + if(_ll){ + b=_cf*(-2.0*log(_pT*_R/_muJ) ); + } + else{ + b=_cf*(1.5-2.0*log(_pT*_R/_muJ) ); + } + return b; +} + +double BosonJetResum::acoftqg(){ + return _acoftqg; +} + +double BosonJetResum::bcoftqg(){ + //return -2.0*_cf*log( 2.0*fabs(_cphix)*_xT*_mut/(_b0*_R) ); + double b; + if(_ll){ + b=-2.0*_cf*log(_xT*_mut/(_b0*_R) ); + } + else{ + b=-2.0*_cf*log( 2.0*_xT*_mut/(_b0*_R) ); + } + return b; +} + +double BosonJetResum::asbbqg(){ + return _asbbqg; +} + +double BosonJetResum::bsbbqg(){ + //return (0.5*_beta0+_cf*(1.5+2.0*log(-2.0*fabs(_cphix)*_pT*_xT*_muxT*_muxT/(_b0*_uhat)) )-2.0*_nc*log(-_that/(_pT*_muxT)) ); + double b; + if(_ll){ + b=(_cf*(2.0*log(-_pT*_xT*_muxT*_muxT/(_b0*_uhat)) )-2.0*_nc*log(-_that/(_pT*_muxT)) ); + } + else{ + b=(0.5*_beta0+_cf*(1.5+2.0*log(-2.0*_pT*_xT*_muxT*_muxT/(_b0*_uhat)) )-2.0*_nc*log(-_that/(_pT*_muxT)) ); + } + return b; +} + +double BosonJetResum::aHqqb(){ + return _aHqqb; +} + +double BosonJetResum::bHqqb(){ + double b; + if(_ll){ + b=(2.0*_nc*log(_pT/_muh)-_cf*(2.0*log(_muh*_muh/_shat))); + } + else{ + b=(2.0*_nc*log(_pT/_muh)-0.5*_beta0-_cf*(3.0+2.0*log(_muh*_muh/_shat))); + } + return b; +} + +double BosonJetResum::aJqqb(){ + return _aJqqb; +} + +double BosonJetResum::bJqqb(){ + double b; + if(_ll){ + b=(-2.0*_nc*log(_pT*_R/_muJ) ); + } + else{ + b=( 0.5*_beta0-2.0*_nc*log(_pT*_R/_muJ) ); + } + return b; + +} + + +double BosonJetResum::acoftqqb(){ + return _acoftqqb; +} + +double BosonJetResum::bcoftqqb(){ + //return -2.0*_nc*log( 2.0*fabs(_cphix)*_xT*_mut/(_b0*_R) ); + double b; + if(_ll){ + b=-2.0*_nc*log(_xT*_mut/(_b0*_R) ); + } + else{ + b=-2.0*_nc*log( 2.0*_xT*_mut/(_b0*_R) ); + } + return b; +} + + +double BosonJetResum::asbbqqb(){ + return _asbbqqb; +} + +double BosonJetResum::bsbbqqb(){ + //return (2.0*_nc*log(2.0*fabs(_cphix)*_xT*_muxT/(_b0))+_cf*(3.0+2.0*log(_muxT*_muxT/_shat)) ); + double b; + if(_ll){ + b=(2.0*_nc*log(_xT*_muxT/(_b0))+_cf*(2.0*log(_muxT*_muxT/_shat)) ); + } + else{ + b=(2.0*_nc*log(2.0*_xT*_muxT/(_b0))+_cf*(3.0+2.0*log(_muxT*_muxT/_shat)) ); + } + return b; +} + +double BosonJetResum::Ccphixq(){ + double pre=4.0*_qcd._CF/_qcd._beta0; + return exp(pre*log(fabs(_cphix))*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut)) ); +} + +double BosonJetResum::Ccphixg(){ + double pre=4.0*_qcd._Nc/_qcd._beta0; + return exp(pre*log(fabs(_cphix))*log(_qcd.alphas(_muxT)/_qcd.alphas(_mut)) ); +} + +double BosonJetResum::muxT(double xT){ + return 1.1229189671337703/xT;//muxT=2.0*exp(-gamma_E)/xT +} + +double BosonJetResum::RGInvariance(double mu, double muh, double muxT, double muJ, double mut, double xT, double cphix){ + double b2ia=0.5/_qcd._beta0; + _mu=mu;_muh=muh; _muxT=muxT; _muJ=muJ; _mut=mut;_xT=xT;_cphix=cphix; + //return aHqg()+asbbqg()+aJqg()+acoftqg(); + //return aHqqb()+asbbqqb()+aJqqb()+acoftqqb(); + cout << aHqg()*log(_mu/_muh)/b2ia+bHqg() << " vs " << (2.0*_cf+_nc)*log(_shat/(_mu*_mu))+_cf*log(_uhat*_uhat/(_pT*_pT*_shat))+_nc*log(_that*_that/(_pT*_pT*_shat))+_cf*log(_pT*_pT/(_shat)) << endl; + cout << asbbqg()*log(_mu/_muxT)/b2ia+bsbbqg() << " vs " << -2.0*_cf*log(-_uhat/(_mu*_pT))-2.0*_nc*log(-_that/(_mu*_pT))+ 2.0*_cf*log(_xT*_mu/_b0)<< endl; + cout << aJqg()*log(_mu/_muJ)/b2ia+bJqg() << " vs " <<-2.0*_cf*log(_pT*_R/_mu) << endl; + cout << acoftqg()*log(_mu/_mut)/b2ia+bcoftqg() << " vs " << 2.0*_cf*log(_R*_b0/(_mu*_xT))<< endl; + cout << aHqqb()*log(_mu/_muh)/b2ia+bHqqb() << " vs " << (2.0*_cf+_nc)*log(_shat/(_mu*_mu))+_cf*log(_uhat*_uhat/(_pT*_pT*_shat))+_cf*log(_that*_that/(_pT*_pT*_shat))+_nc*log(_pT*_pT/(_shat)) << endl; + cout << asbbqqb()*log(_mu/_muxT)/b2ia+bsbbqqb() << " vs " << -2.0*_cf*log(-_uhat/(_mu*_pT))-2.0*_cf*log(-_that/(_mu*_pT))+ 2.0*_nc*log(_xT*_mu/_b0) << endl; + cout << aJqqb()*log(_mu/_muJ)/b2ia+bJqqb() << " vs " <<-2.0*_nc*log(_pT*_R/_mu) << endl; + cout << acoftqqb()*log(_mu/_mut)/b2ia+bcoftqqb() << " vs " << 2.0*_nc*log(_R*_b0/(_mu*_xT)) << endl; + return aHqg()*log(_mu/_muh)/b2ia+bHqg()+asbbqg()*log(_mu/_muxT)/b2ia+bsbbqg()+aJqg()*log(_mu/_muJ)/b2ia+bJqg()+acoftqg()*log(_mu/_mut)/b2ia+bcoftqg()+aHqqb()*log(_mu/_muh)/b2ia+bHqqb()+asbbqqb()*log(_mu/_muxT)/b2ia+bsbbqqb()+aJqqb()*log(_mu/_muJ)/b2ia+bJqqb()+acoftqqb()*log(_mu/_mut)/b2ia+bcoftqqb(); + //return aHqqb()*log(_mu/_muh)/b2ia+bHqqb()+asbbqqb()*log(_mu/_muxT)/b2ia+bsbbqqb()+aJqqb()*log(_mu/_muJ)/b2ia+bJqqb()+acoftqqb()*log(_mu/_mut)/b2ia+bcoftqqb(); +} + +double BosonJetResum::muxTCSS(double xT){ + return muxT(xT)*sqrt(1.0+xT*xT/2.25); +} + +double BosonJetResum::muhCSS(){ + //cout << _mB2 << ", " << _pT << endl; + return sqrt(_mB2+_pT*_pT)+_pT; +} + +double BosonJetResum::muh(){ + //cout << _mB2 << ", " << _pT << endl; + //return (sqrt(_mB2)+7.0*_pT)/6.0; + return sqrt(_mB2+_pT*_pT); +} + +double BosonJetResum::muJ(){ + return _R*_pT; +} + +double BosonJetResum::NonPert(double xT, double Q){ + double bmax=1.5; + return exp(-0.21*xT*xT-0.42*log(Q/1.5491933384829668)*log(1.0+xT*xT/(bmax*bmax))); +} diff --git a/.github/entrypoint/artifact/BosonJetResum.h b/.github/entrypoint/artifact/BosonJetResum.h new file mode 100644 index 000000000..0cd115543 --- /dev/null +++ b/.github/entrypoint/artifact/BosonJetResum.h @@ -0,0 +1,78 @@ + +#include "BosonJet.h" + +class BosonJetResum: public BosonJet{ + +protected: + + double _R; + double _qT; + double _mu, _muJ, _muh, _muxT, _cphix, _mut, _xT, _b0; + double _aHqg, _aJqg, _asbbqg, _acoftqg; + double _aHqqb, _aJqqb, _asbbqqb, _acoftqqb; + double _eps;//regulator for xT integration + + double _b2i, _beta0, _nc, _cf;//constant for RG evolution + + bool _nonpert; + bool _ll; + + void init(); + +public: + + BosonJetResum(); + BosonJetResum(double Ecm, Particle *boson); + + void setR(double R); + void setqT(double qT); + void setmu(double mu); + void setPara(double R, double qT, double mu); + void setRegulator(double eps); + void setScale(double mu, double muh, double muJ, double muxT, double mut,double xT, double cphix); + void setNonPert(bool); + void setLL(bool); + + double rge(double mu, double mu0, double a, double b);//gives the solution of RG equation + + double aHqg();//a for anomalous dimension of hard function Hqg + double bHqg();//b for anomalous dimension of hard function Hqg + + double aJqg();//a for anomalous dimension of Jet function in qg + double bJqg();//b for anomalous dimension of Jet function in qg + + double acoftqg();//a for coft function in qg + double bcoftqg(); + + double asbbqg();//a for anomalous dimension of soft+beams in qg->BJ + double bsbbqg();//b for anomalous dimension 0of soft+beams in qg->BJ + + double aHqqb();//a for anomalous dimension of hard function Hqqb + double bHqqb();//b for anomalous dimension of hard function Hqqb + + double aJqqb();//a for anomalous dimension of Jet function in qqb + double bJqqb();//b for anomalous dimension of Jet function in qqb + + double acoftqqb();//a for coft function in qqb + double bcoftqqb();//a for coft function in qqb + + double asbbqqb();//a for anomalous dimension of soft+beams in qqb->BJ + double bsbbqqb();//b for anomalous dimension of soft+beams in qqb->BJ + + double Ccphixq(); + double Ccphixg(); + + double RGInvariance(double mu, double muh, double muxT, double muJ, double mut, double xT, double cphix); + + double muxT(double xT); + double muh(); + double muxTCSS(double xT); + double muhCSS(); + double muJ(); + + //Mathematical tricks + + double NonPert(double xT, double Q); + double regulator(double xT); +}; + diff --git a/.github/entrypoint/artifact/ElectroWeak.c b/.github/entrypoint/artifact/ElectroWeak.c new file mode 100644 index 000000000..540fdecf4 --- /dev/null +++ b/.github/entrypoint/artifact/ElectroWeak.c @@ -0,0 +1,27 @@ +#include "ElectroWeak.h" +#include +#define PI 3.141592653589793 + + +/*ElectroWeak::ElectroWeak(){ + //Here, all the values are taken from PDG 2018 + _GF=1.1663787e-5;//in GeV^{-2} + _mZ=91.1876;//in GeV + _mW=80.379;//in GeV + + //gmu scheme shall be used by taking the above three parameters as an input + _cw2=_mW/_mZ; _cw2*=_cw2;_sw2=1.0-_cw2;_alpha=_mW*_mW*sqrt(2.0)*_GF*_sw2/PI; +} +*/ + + +ElectroWeak::ElectroWeak(){ + //Here, all the values are taken from PDG 2018 + //_GF=1.1663787e-5;//in GeV^{-2} + _mZ=91.1876;//in GeV + _mW=80.398;//in GeV + + //gmu scheme shall be used by taking the above three parameters as an input + _sw2=0.22264585;_cw2=1-_sw2;_alpha=1.0/132.33843228; +} + diff --git a/.github/entrypoint/artifact/ElectroWeak.h b/.github/entrypoint/artifact/ElectroWeak.h new file mode 100644 index 000000000..e2854e7c1 --- /dev/null +++ b/.github/entrypoint/artifact/ElectroWeak.h @@ -0,0 +1,20 @@ + +class ElectroWeak{ + private: + + double _mZ;//Z boson mass in GeV + double _mW;//W boson mass in GeV + double _GF;//G_F in GeV^{-2} + + double _cw2;//cos(theta_W)^2 + double _sw2;//sin(theta_W)^2 + double _alpha;//elecromagnetic alpha + + public: + ElectroWeak(); + //ElectroWeak~(); + double cw2(){return _cw2;} + double sw2(){return _sw2;} + double alpha(){return _alpha;} +}; + diff --git a/.github/entrypoint/artifact/Makefile b/.github/entrypoint/artifact/Makefile new file mode 100644 index 000000000..248ccc31d --- /dev/null +++ b/.github/entrypoint/artifact/Makefile @@ -0,0 +1,99 @@ +CC=g++ +IPDF=-I/Users/biwu/Software/LHAPDF/include +LPDF=-L/Users/biwu/Software/LHAPDF/lib -lLHAPDF +#IGSL=-I/usr/local/include/ +#LGSL=-L/usr/local/lib -lgsl -lgslcblas -lm + +#IPDF=-I/home/bwu/Softwares/LHAPDF/include +#LPDF=-L/home/bwu/Softwares/LHAPDF/lib -lLHAPDF +IGSL=-I/usr/local/include/ +LGSL=-L/usr/local/lib -lgsl -lgslcblas -lm + + +All: resum + +Particle.o: Particle.c Particle.h + $(CC) -Wall -c Particle.c + +QCD.o: QCD.c QCD.h + $(CC) -Wall $(IPDF) -c QCD.c + +ElectroWeak.o: ElectroWeak.c ElectroWeak.h + $(CC) -Wall -c ElectroWeak.c + +BosonJet.o: BosonJet.c BosonJet.h + $(CC) -Wall $(IPDF) -c BosonJet.c + +#Born cross section + +BosonJetBorn.o: BosonJetBorn.c BosonJetBorn.h + $(CC) -Wall $(IPDF) -c BosonJetBorn.c + +born.o: born.c + $(CC) -Wall $(IPDF) $(IGSL) -c born.c + +born: born.o BosonJetBorn.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall born.o BosonJetBorn.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o born + +#properties of qcd + +test_qcd.o: test_qcd.c + $(CC) -Wall $(IPDF) -c test_qcd.c + +test_qcd: test_qcd.o QCD.o Particle.o + $(CC) -Wall test_qcd.o QCD.o Particle.o $(LPDF) -o test_qcd + +#Fixed order result at LO (O(alphas)) + +BosonJetLO.o: BosonJetLO.c BosonJetLO.h + $(CC) -Wall $(IPDF) -c BosonJetLO.c + +main.o: main.c + $(CC) -Wall $(IPDF) $(IGSL) -c main.c + +LO: main.o BosonJetLO.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall main.o BosonJetLO.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o LO + +#Resummed result + +BosonJetResum.o: BosonJetResum.c BosonJetResum.h + $(CC) -Wall $(IPDF) -c BosonJetResum.c + +#css + +BosonJetCSS.o: BosonJetCSS.c BosonJetCSS.h + $(CC) -Wall $(IPDF) -c BosonJetCSS.c + +css.o: css.c + $(CC) -Wall $(IPDF) $(IGSL) -c css.c + +css: css.o BosonJetCSS.o BosonJetResum.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall css.o BosonJetCSS.o BosonJetResum.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o css + +#R resummed + +BosonJetNLL.o: BosonJetNLL.c BosonJetNLL.h + $(CC) -Wall $(IPDF) -c BosonJetNLL.c + +resum.o: resum.c + $(CC) -Wall $(IPDF) $(IGSL) -c resum.c + +resum: resum.o BosonJetNLL.o BosonJetResum.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall resum.o BosonJetNLL.o BosonJetResum.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o resum + +#tot + +BosonJetNLL.o: BosonJetNLL.c BosonJetNLL.h + $(CC) -Wall $(IPDF) -c BosonJetNLL.c + +tot.o: tot.c + $(CC) -Wall $(IPDF) $(IGSL) -c tot.c + +tot: tot.o BosonJetNLL.o BosonJetResum.o BosonJet.o QCD.o ElectroWeak.o Particle.o + $(CC) -Wall tot.o BosonJetNLL.o BosonJetResum.o BosonJet.o ElectroWeak.o QCD.o Particle.o $(LPDF) $(LGSL) -o tot + + +clean: + rm *.o + rm resum + rm tot diff --git a/.github/entrypoint/artifact/Particle.c b/.github/entrypoint/artifact/Particle.c new file mode 100644 index 000000000..66b0439df --- /dev/null +++ b/.github/entrypoint/artifact/Particle.c @@ -0,0 +1,30 @@ +#include +#include "Particle.h" + +Particle::Particle(){ + _m=0.0;_e=0.0;_name="UFO";_id=-273; +} + +Particle::Particle(string name, int id, double m, double e){ + _name=name;_id=id;_m=m;_e=e; +} + +void Particle::setParticle(string name, int id, double m, double e){ + _name=name;_id=id;_m=m;_e=e; +} + + +double Particle::m(){ + return _m; +} + +int Particle::id(){return _id;} +double Particle::e(){return _e;} +string Particle::name(){return _name;} + +/* +int main(){ + Particle pl; + return 0; +} +*/ diff --git a/.github/entrypoint/artifact/Particle.h b/.github/entrypoint/artifact/Particle.h new file mode 100644 index 000000000..753979e97 --- /dev/null +++ b/.github/entrypoint/artifact/Particle.h @@ -0,0 +1,26 @@ +#include + +using namespace std; + +class Particle{ + private: + + string _name;//particle name + double _m;//particle mass + double _e;//electric charge in the unit of the elementary charge e + int _id;//particle id according to PDF particle codes + + + public: + + enum _type {d=1,u=2,s=3,c=4,b=5,t=6,g=21,photon=22,Z0=23,Wp=24}; + + Particle(); + Particle(string name, int id, double m,double e); + //~Particle(){}; + void setParticle(string name, int id, double m,double e); + double m(); + int id(); + double e(); + string name(); +}; diff --git a/.github/entrypoint/artifact/QCD.c b/.github/entrypoint/artifact/QCD.c new file mode 100644 index 000000000..2dab63d62 --- /dev/null +++ b/.github/entrypoint/artifact/QCD.c @@ -0,0 +1,122 @@ +#include +#include "QCD.h" +#include + +using namespace std; + +QCD::QCD(unsigned int nf){ + /*Here, one needs to download the pdfset from + https://lhapdf.hepforge.org/pdfsets.html + and put it into the folder which can be found out by lhapdf-config --datadir. + */ + _nf=nf; + init(); +} + +QCD::QCD(){ + /*Here, one needs to download the pdfset from + https://lhapdf.hepforge.org/pdfsets.html + and put it into the folder which can be found out by lhapdf-config --datadir. + */ + _nf=5; + init(); +} + +void QCD::init(){ + const int imem = 0; + _Nc=3.0;_CF=4.0/3.0; + _beta0=11.0*_Nc/3.0 - 2.0*_nf/3.0; + _beta1=34.0*_Nc*_Nc/3.0-10.0*_Nc*_nf/3.0-2.0*_CF*_nf; + _gcusp0=4.0;_gcusp1=(268.0/9.0-4.0*M_PI*M_PI/3.0)*_Nc-40.0*_nf/9.0; + _pdf = mkPDF("CT14nlo", imem); + _partons=new Particle[7]; + _partons[0].setParticle("g",21, 0.0, 0.0); + _partons[1].setParticle("d",1, 0.0, -1.0/3.0); + _partons[2].setParticle("u",2, 0.0, 2.0/3.0); + _partons[3].setParticle("s",3, 0.0, -1.0/3.0); + _partons[4].setParticle("c",4, 0.0, 2.0/3.0); + _partons[5].setParticle("b",5, 0.0, -1.0/3.0); + _partons[6].setParticle("t",6,173.0, 2.0/3.0); + +} + +QCD::~QCD(){ + delete _pdf; + delete [] _partons; +} + +double QCD::pdf(int f,double x,double Q){ + return _pdf->xfxQ(f,x,Q)/x; +} + +double QCD::alphas(double Q){ + return _pdf->alphasQ(Q); +} + +double QCD::Pqg(double z){ + double res=0.0; + if(z>0&&z<=1.0) + res=z*z-z+0.5; + return res; +} + +double QCD::Pqg(double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>x) + res=Pqg(z)*pdf(21,x/z,Q)/z; + return res; +} + +double QCD::Pgq(double z){ + double res=0.0; + if(z>0&&z<1.0) + res=_CF*(z-2.0+2.0/z); + return res; +} + +double QCD::Pgq(double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>x){ + for(unsigned int i=1;i<=_nf;i++){ + res+=pdf(i,x/z,Q); + } + res*=Pgq(z)/z; + } + return res; +} + +double QCD::Pgqb(double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>x){ + for(unsigned int i=1;i<=_nf;i++){ + res+=pdf(-i,x/z,Q); + } + res*=Pgq(z)/z; + } + return res; +} + +double QCD::Pqq(int flavor, double z,double x, double Q){ + double res=0.0; + if(z<1.0&&z>0.0){ + double qsumx=pdf(flavor,x,Q); + res=1.5*qsumx;//Here, we have to make sure the range for z integration is from 0 to 1 + double qsum=0.0; + if(z>x) qsum=pdf(flavor,x/z,Q); + res+=((1.0+z*z)*qsum/z-2.0*qsumx)/((1.0-z)); + res*=_CF; + } + return res; +} + +double QCD::Pgg(double z, double x, double Q){ + double res=0.0; + if(z<1.0&&z>0.0){ + res=(11.0*_Nc/6.0-_nf/3.0)*pdf(21,x,Q);//Here, we have to make sure the range for z integration is from 0 to 1 + if(z>x) + res+=2.0*_Nc*( ( z*z-z+1.0 )*(z*z-z+1.0)*pdf(21,x/z,Q)/(z*z) - pdf(21,x,Q) )/(1.0-z); + else + res+=-2.0*_Nc*pdf(21,x,Q)/(1.0-z); + } + return res; +} diff --git a/.github/entrypoint/artifact/QCD.h b/.github/entrypoint/artifact/QCD.h new file mode 100644 index 000000000..728065f03 --- /dev/null +++ b/.github/entrypoint/artifact/QCD.h @@ -0,0 +1,39 @@ +#include "Particle.h" +#include "LHAPDF/LHAPDF.h" + +using namespace LHAPDF; + +/*namespace colorfactor{ + double _Nc=3.0; + double _CF=4.0/3.0; +} +*/ + +class QCD{ + private: + const PDF* _pdf; + unsigned int _nf;//flavors of quarks, 5 by default + + public: + + double _Nc, _CF;//number of colors + //const static double _Nc=3.0, _CF=4.0/3.0;//number of colors + double _beta0, _beta1, _gcusp0, _gcusp1;//_gcusp=gamma^cusp + Particle *_partons; + QCD(); + QCD(unsigned int); + ~QCD(); + void init(); + + double pdf(int,double x,double Q);//PDF as a function of flavor, x and Q + double alphas(double Q);//the strong coupling alpha_s as a function of Q + + double Pqg(double z); + double Pqg(double z, double x, double Q); + double Pgq(double z); + double Pgq(double z, double x, double Q); + double Pgqb(double z, double x, double Q); + double Pgg(double z, double x, double Q); + double Pqq(int flavor, double z, double x, double Q); + +}; diff --git a/.github/entrypoint/artifact/README.md b/.github/entrypoint/artifact/README.md new file mode 100644 index 000000000..b189dc632 --- /dev/null +++ b/.github/entrypoint/artifact/README.md @@ -0,0 +1,3 @@ +# SM +C++ code for hadron colliders. +Published papers using this code: JHEP 1911 (2019) 025. diff --git a/.github/entrypoint/artifact/StandardModel.h b/.github/entrypoint/artifact/StandardModel.h new file mode 100644 index 000000000..5874957cc --- /dev/null +++ b/.github/entrypoint/artifact/StandardModel.h @@ -0,0 +1,19 @@ +/* + This class is used for parameters in ElectroWeak theory + Created on January 5 2019 by Bin Wu. +*/ + +class ElectroWeak{ + private: + + double _mZ;//Z boson mass + double _mW;//W boson mass + double _GF;//Fermi coupling constant G_F + double _sw2;//sin(theta_W)^2 + double _cw2;//cos(theta_W)^2 + double _alpha;//electromagnetic coupling + + public: + ElectroWeak(); + //~ElectroWeak(); +}; diff --git a/.github/entrypoint/artifact/born.c b/.github/entrypoint/artifact/born.c new file mode 100644 index 000000000..3a4f2c4b0 --- /dev/null +++ b/.github/entrypoint/artifact/born.c @@ -0,0 +1,52 @@ +#include "BosonJetBorn.h" +#include +#include +#include +#include + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={yB,yJ}; + BosonJetBorn *bj=(BosonJetBorn*)p; + bj->setKinematics(bj->getpT(),y[0],y[1]); + return bj->sigmaLO(bj->getpT(),bj->getpT()); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetBorn ZJ(1.3e4,&Z0); + + //range of the integration: from ymin to ymax + double ymin[]={-2.4,-2.4}; + double ymax[]={2.4,2.4}; + + int dim=2; + size_t calls = 50000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, ymax[1]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + double pT[]={35.5, 50., 71., 100.5, 143., 194., 260., 350.}; + for(int i=0;i<21;i++){ + ZJ.setpT(pT[i]); + ZJ.calculate(pT[i],f); + //cout << (0.5772156649015329+log(0.5*qT[i]))/(M_PI*qT[i]*qT[i]) << endl; + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/css.c b/.github/entrypoint/artifact/css.c new file mode 100644 index 000000000..2fcb491d0 --- /dev/null +++ b/.github/entrypoint/artifact/css.c @@ -0,0 +1,72 @@ +#include "BosonJetCSS.h" +#include +#include +#include +#include + +using namespace std; + + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, pT, yB,yJ}; + BosonJetCSS *bj=(BosonJetCSS *)p; + return bj->sigmaCSS(y[0],y[1],y[2],y[3]); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetCSS ZJ(1.3e4,&Z0); + + double R=0.2;ZJ.setR(R); + + /* + double pT=30.0,yB=0.1,yJ=0.2,muh=100.0,mu=10.0,muJ=10.0,xT=0.2,qT=1.0;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muJ,muh); + cout << setprecision(15) << ZJ. RGInvariance(0.1,0.2,0.3,0.4,0.5,0.6,0.7) << endl; + cout << setprecision(15) << ZJ. RGInvariance(1.1,3.2,5.3,9.4,1.5,0.6,0.7) << endl; + + */ + //range of the integration: from ymin to ymax + double ymin[]={0.0,200.0,-10.0,-2.4}; + double ymax[]={3.0,6500.0,10.0,2.4}; + + int dim=4; + size_t calls = 50000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, ymin[1],ymax[1]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + + double qT[]={1., 1.1273, 1.27082, 1.4326, 1.61497, 1.82056, 2.05233, 2.3136, + 2.60813, 2.94016, 3.31445, 3.7364, 4.21206, 4.74827, 5.35275, + 6.03418, 6.80235, 7.66832, 8.64453, 9.74502, 10.9856, 12.3841, + 13.9607, 15.7379, 17.7414, 20., 22.5461, 25.4163, 28.6519, 32.2994, + 36.4113, 41.0466, 46.272, 52.1626, 58.8032, 66.2891, 74.728, 84.2412, + 94.9654, 107.055, 120.684, 136.047, 153.366, 172.891, 194.9, 219.712, + 247.682, 279.213, 314.759, 354.829, 400.}; + /*{1., 1.25893, 1.58489, 1.99526, 2.51189, 3.16228, 3.98107, 5.01187, + 6.30957, 7.94328, 10., 12.5893, 15.8489, 19.9526, 25.1189, 31.6228, + 39.8107, 50.1187, 63.0957, 79.4328, 100.};*/ + for(int i=0;i<51;i++){ + ZJ.setqT(qT[i]); + ZJ.calculate(qT[i],f); + //cout << (0.5772156649015329+log(0.5*qT[i]))/(M_PI*qT[i]*qT[i]) << endl; + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/main.c b/.github/entrypoint/artifact/main.c new file mode 100644 index 000000000..d33c17e1d --- /dev/null +++ b/.github/entrypoint/artifact/main.c @@ -0,0 +1,114 @@ +#include "BosonJetLO.h" +#include +#include +#include +#include +#include +#include +#include + +//#define SCREEN_ONLY + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={pT, yB,yJ,z}; + //parameter list p: BosonJet, qT, R, chan + struct ParaQT *para=(struct ParaQT *)p; + double res; + switch(para->_chan){ + case 0: + res=para->_bj->sigma(para->_qT, y[0],y[1],y[2],y[3],para->_R,y[0]); + break; + case 1: + res=para->_bj->sigmaqg(para->_qT, y[0],y[1],y[2],y[3],para->_R,y[0]); + break; + case 2: + res=para->_bj->sigmaqqb(para->_qT, y[0],y[1],y[2],y[3],para->_R,y[0]); + break; + case 3: + res=para->_bj->sigmagg(para->_qT, y[0],y[1],y[2],y[3],y[0]); + break; + case 4: + res=para->_bj->sigmaqq(para->_qT, y[0],y[1],y[2],y[3],y[0]); + break; + case 5: + res=para->_bj->sigmaqbqb(para->_qT, y[0],y[1],y[2],y[3],y[0]); + break; + } + return res; +} + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetLO ZJ(1.3e4,&Z0); + //double qT=0.1, pT=500.0, yB=0.5, yJ=0.1,z=0.9999; + //cout << ZJ.sigmaqqb(qT, pT, yB, yJ, z, 0.01, pT) << endl; + + //range of the integration: from ymin to ymax + double ymin[]={30.0,-10.0,-2.4,0.0}; + double ymax[]={6500.0,10.0,2.4,1.0}; + + //integration + struct ParaQT para; + para._bj=&ZJ; para._R=0.2;para._chan=0; + + int dim=4; + size_t calls = 50000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, ¶); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, para._R, para._chan, ymin[0], ymax[0]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + double qT[]={1., 1.1273, 1.27082, 1.4326, 1.61497, 1.82056, 2.05233, 2.3136, + 2.60813, 2.94016, 3.31445, 3.7364, 4.21206, 4.74827, 5.35275, + 6.03418, 6.80235, 7.66832, 8.64453, 9.74502, 10.9856, 12.3841, + 13.9607, 15.7379, 17.7414, 20., 22.5461, 25.4163, 28.6519, 32.2994, + 36.4113, 41.0466, 46.272, 52.1626, 58.8032, 66.2891, 74.728, 84.2412, + 94.9654, 107.055, 120.684, 136.047, 153.366, 172.891, 194.9, 219.712, + 247.682, 279.213, 314.759, 354.829, 400.};/*{0.106101, 0.119047, 0.133573, 0.149872, 0.168159, 0.188677, + 0.211699, 0.23753, 0.266513, 0.299033, 0.335521, 0.37646, 0.422395, + 0.473935, 0.531764, 0.596649, 0.669452, 0.751137, 0.84279, 0.945625, + 1.06101, 1.19047, 1.33573, 1.49872, 1.68159, 1.88677, 2.11699, + 2.3753, 2.66513, 2.99033, 3.35521, 3.7646, 4.22395, 4.73935, 5.31764, + 5.96649, 6.69452, 7.51137, 8.4279, 9.45625}; + {1., 1.25893, 1.58489, 1.99526, 2.51189, 3.16228, 3.98107, 5.01187, + 6.30957, 7.94328, 10., 12.5893, 15.8489, 19.9526, 25.1189, 31.6228, + 39.8107, 50.1187, 63.0957, 79.4328, 100.};*/ + for(int i=0;i<51;i++){ + para._qT=qT[i]; + if(para._chan>5){ + int chan=para._chan; + double res[2]; + f << qT[i]; + for(para._chan=0;para._chan<=5;para._chan++){ + //cout << para._chan << endl; + ZJ.calculate(qT[i],res); + f << " " << res[0] << " " << res[1]; + } + f << endl; + para._chan=chan; + } + else{ + double res[2]; + f << qT[i]; + //cout << para._chan << endl; + ZJ.calculate(qT[i],res); + f << " " << res[0]/qT[i] << " " << res[1]/qT[i] << endl;//save as dsigma/dqT + } + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/nllR.c b/.github/entrypoint/artifact/nllR.c new file mode 100644 index 000000000..6f9628c2b --- /dev/null +++ b/.github/entrypoint/artifact/nllR.c @@ -0,0 +1,67 @@ +#include "BosonJetResum.h" +#include +#include +#include +#include + +using namespace std; + +struct ParaQT{BosonJetResum *_bj; int _chan;}; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ}; + BosonJetResum *bj=(BosonJetResum *)p; + double cphix=cos(y[1]); + return bj->sigmaqqbR(y[0],cphix,y[2],y[3],y[4]); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetResum ZJ(1.3e4,&Z0); + + double R=0.4;ZJ.setR(R); + + /* + double pT=30.0,yB=0.1,yJ=0.2,muh=100.0,mu=10.0,muJ=10.0,xT=0.2,qT=1.0;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muJ,muh); + cout << setprecision(15) << ZJ. RGInvariance(0.1,0.2,0.3,0.4,0.5,0.6,0.7) << endl; + cout << setprecision(15) << ZJ. RGInvariance(1.1,3.2,5.3,9.4,1.5,0.6,0.7) << endl; + + */ + //range of the integration: from ymin to ymax + double ymin[]={0.0,-0.5*M_PI,30.0,-10.0,-2.4}; + double ymax[]={3.0,0.5*M_PI,6500.0,10.0,2.4}; + + int dim=5; + size_t calls = 500000; + ZJ.setupMC( &dsigmadqT, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + stringstream filename; + ZJ.getFilename(filename, ymin[2],ymax[2]); + cout << filename.str() << endl; + ofstream f(filename.str(), ofstream::out | ofstream::app); + + + double qT[]={1., 1.25893, 1.58489, 1.99526, 2.51189, 3.16228, 3.98107, 5.01187, + 6.30957, 7.94328, 10., 12.5893, 15.8489, 19.9526, 25.1189, 31.6228, + 39.8107, 50.1187, 63.0957, 79.4328, 100.}; + for(int i=0;i<21;i++){ + ZJ.setqT(qT[i]); + ZJ.calculate(qT[i],f); + //cout << (0.5772156649015329+log(0.5*qT[i]))/(M_PI*qT[i]*qT[i]) << endl; + } + + f << "\n\n"; + f.close(); + + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/artifact/python/LICENSE b/.github/entrypoint/artifact/python/LICENSE new file mode 100644 index 000000000..c4f387f15 --- /dev/null +++ b/.github/entrypoint/artifact/python/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Neural Field Transformations For Lattice QCD + +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. diff --git a/.github/entrypoint/artifact/python/README.md b/.github/entrypoint/artifact/python/README.md new file mode 100644 index 000000000..37ef8dc43 --- /dev/null +++ b/.github/entrypoint/artifact/python/README.md @@ -0,0 +1,32 @@ +# lgt +Collection of objects / models for Lattice Gauge Theory + +## Install +`python3 -m pip install lgt`
+`python3 -m pip install -e /path/to/this/repo` + +## Organization +``` +πŸ“ lgt/ +β”œβ”€β”€πŸ“ group/ +β”‚Β Β  β”œβ”€β”€ generators.py +β”‚Β Β  └── group.py +└── πŸ“ lattice/ + β”œβ”€β”€πŸ“ su3/ + β”‚Β Β  β”œβ”€β”€πŸ“ numpy/ + β”‚Β Β  β”‚Β Β  └── lattice.py + β”‚Β Β  β”œβ”€β”€πŸ“ pytorch/ + β”‚Β Β  β”‚Β Β  └── __init__.py + β”‚Β Β  β””β”€β”€πŸ“ tensorflow/ + β”‚Β Β  └── lattice.py + β”œβ”€β”€πŸ“ sun/ + β”‚Β Β  β”œβ”€β”€ logm.py + β”‚Β Β  └── sun.py + β””β”€β”€πŸ“ u1/ + β”œβ”€β”€πŸ“ numpy/ + β”‚Β Β  └── lattice.py + β”œβ”€β”€πŸ“ pytorch/ + β”‚Β Β  └── lattice.py + β””β”€β”€πŸ“ tensorflow/ + └── lattice.py +``` diff --git a/.github/entrypoint/artifact/python/colour_matrices.py b/.github/entrypoint/artifact/python/colour_matrices.py new file mode 100644 index 000000000..160ddba47 --- /dev/null +++ b/.github/entrypoint/artifact/python/colour_matrices.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +"""Small program to explore colour matrices and structure constants in QCD. + +Written by Gavin Salam as an illustration for lecture 1 of the QCD +course at the 2024 European School of High-Energy Physics. +""" +import numpy as np + +def main(): + + print("Warning: the A,B,C indices here run from 0 to 7, not 1 to 8 as in the lecture notes.") + print("Warning: the a,b,c indices here run from 0 to 2, not 1 to 3 as in the lecture notes.") + + nF = 3 # number of degrees of freedom in Fundamental representation (quarks) + nA = 8 # number of degrees of freedom in Adjoint representation (gluos) + lambdas = get_lambdas() + ts = [0.5*l for l in lambdas] + + #--------------------------------------------- + header("check Tr(t^A t^B) = T_R delta^{AB}") + for A in range(nA): + for B in range(nA): + trace = np.trace(np.matmul(ts[A],ts[B])) + if abs(trace)>1e-10: print(f"{A=} {B=}: Trace(t^A t^B)={trace}") + + #--------------------------------------------- + header("check Sum_A(t_{ab}^A t_{bc}^A) = C_F \\delta_{ac}") + sum = np.zeros((3,3),dtype=complex) + for A in range(nA): + sum += np.matmul(ts[A],ts[A]) + for a in range(nF): + for c in range(nF): + print(f"{a=} {c=}: Sum_A(t_{{ab}}^A t_{{bc}}^A)={sum[a][c]}") + + #--------------------------------------------- + header("Examine the non-zero fABCs (A 1e-10: print(f"{A=} {B=} {result=}") + +def header(title): + print() + print("-"*len(title)) + print(title) + print("-"*len(title)) + +def non_zero_entries(arr,imin, tag="i"): + res = [] + for i in range(imin, arr.shape[0]): + if abs(arr[i]) > 1e-10: res.append(f"{tag}={i}:{arr[i]}") + return ", ".join(res) + +def get_fABCs(ts): + "returns the fABC array" + + # get the ts supplemented by a unit array, which is needed to + # complete the basis below that we will use in solving for the fABCs + ts_plus_unit = np.array([t.flatten() + for t in ts+[np.diag(np.array([1,1,1],dtype=complex))] ]) + + nA = len(ts) + fABC = np.zeros((nA,nA,nA)) + for A in range(nA): + for B in range(nA): + tt = (np.matmul(ts[A],ts[B]) - np.matmul(ts[B],ts[A]))/complex(0,1) + ff = np.linalg.solve(ts_plus_unit.transpose(), tt.flatten()) + if abs(ff[nA]) > 1e-10: raise("illegal 9th component in nA") + fABC[A,B,:] = np.real(ff[:nA]) + #if B <= A: continue + #print(f"{A=} {B=}, fABC={fABC[A,B,:]}") + + return fABC + + +def get_lambdas(): + """Return the Gell-Mann matrices as a list of 3x3 numpy arrays.""" + i = complex(0,1) + lambdas = [0]*8 + lambdas[0] = [[ 0, 1, 0], + [ 1, 0, 0], + [ 0, 0, 0]] + + lambdas[1] = [[ 0,-i, 0], + [ i, 0, 0], + [ 0, 0, 0]] + + lambdas[2] = [[ 1, 0, 0], + [ 0,-1, 0], + [ 0, 0, 0]] + + lambdas[3] = [[ 0, 0, 1], + [ 0, 0, 0], + [ 1, 0, 0]] + + lambdas[4] = [[ 0, 0,-i], + [ 0, 0, 0], + [ i, 0, 0]] + + lambdas[5] = [[ 0, 0, 0], + [ 0, 0, 1], + [ 0, 1, 0]] + + lambdas[6] = [[ 0, 0, 0], + [ 0, 0,-i], + [ 0, i, 0]] + + lambdas[7] = [[ 1.0/np.sqrt(3), 0, 0], + [ 0, 1.0/np.sqrt(3), 0], + [ 0, 0,-2.0/np.sqrt(3)]] + + return [np.array(l,dtype=complex) for l in lambdas] + +if __name__ == "__main__": + main() diff --git a/.github/entrypoint/artifact/python/gellmann.ipynb b/.github/entrypoint/artifact/python/gellmann.ipynb new file mode 100644 index 000000000..c772c82a5 --- /dev/null +++ b/.github/entrypoint/artifact/python/gellmann.ipynb @@ -0,0 +1,815 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "7L2WbBt5uNag" + }, + "source": [ + "# 1. Preliminaries" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 5024, + "status": "ok", + "timestamp": 1584469489951, + "user": { + "displayName": "mahkame salimi", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GhXCkBWY2tBzsPtIAaeDyn3ng2gbWea3ReVrZhe=s64", + "userId": "11757140415455670736" + }, + "user_tz": -210 + }, + "id": "lHgp6b1NuNat", + "outputId": "472e7f3d-53e9-4c23-99a5-bb712c0be181" + }, + "outputs": [], + "source": [ + "##!pip3 install qutip\n", + "import qutip as qp\n", + "import numpy as np\n", + "from scipy.spatial import ConvexHull, Delaunay\n", + "import pandas as pd\n", + "from random import random, choice, randint\n", + "##from multiprocessing import Pool\n", + "##from concurrent.futures import ThreadPoolExecutor" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "CkRTqRe-uNa_" + }, + "source": [ + "# 2. Gell_Mann matrix generator function" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Xaqtqo1quNbD" + }, + "source": [ + "this function will generate the gellmann matrix of dimension d.\n", + "\n", + "the function \"gellmann(j,k,d)\" will generate the jth_kth gellmann matrix of dimension d. so for every d dimension we have d^2 gellmann matrix. one of them is I, so the number of gellmann matrix that is not trivial is (d^2 - 1)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "wjlZ7FERuNbH" + }, + "outputs": [], + "source": [ + "\"\"\"Generate generalized Gell-Mann matrices.\n", + " .. module:: gellmann.py\n", + " :synopsis: Generate generalized Gell-Mann matrices\n", + " .. moduleauthor:: Jonathan Gross \n", + "\"\"\"\n", + "from itertools import product\n", + "\n", + "def gellmann(j, k, d):\n", + " r\"\"\"Returns a generalized Gell-Mann matrix of dimension d.\n", + " \n", + " According to the convention in *Bloch Vectors for Qubits* by Bertlmann and\n", + " Krammer (2008), returns :math:`\\Lambda^j` for :math:`1\\leq j=k\\leq d-1`,\n", + " :math:`\\Lambda^{kj}_s` for :math:`1\\leq k k:\n", + " gjkd = np.zeros((d, d), dtype=np.complex128)\n", + " gjkd[j - 1][k - 1] = 1\n", + " gjkd[k - 1][j - 1] = 1\n", + " elif k > j:\n", + " gjkd = np.zeros((d, d), dtype=np.complex128)\n", + " gjkd[j - 1][k - 1] = -1.j\n", + " gjkd[k - 1][j - 1] = 1.j\n", + " elif j == k and j < d:\n", + " gjkd = np.sqrt(2/(j*(j + 1)))*np.diag([1 + 0.j if n <= j\n", + " else (-j + 0.j if n == (j + 1)\n", + " else 0 + 0.j)\n", + " for n in range(1, d + 1)])\n", + " else:\n", + " gjkd = np.diag([1 + 0.j for n in range(1, d + 1)])\n", + "\n", + " return gjkd\n", + "\n", + "def get_basis(d):\n", + " r\"\"\"Return a basis of operators.\n", + " \n", + " The basis is made up of orthogonal Hermitian operators on a Hilbert space\n", + " of dimension d, with the identity element in the last place.\n", + " Parameters\n", + " ----------\n", + " d : int\n", + " The dimension of the Hilbert space.\n", + " Returns\n", + " -------\n", + " list of numpy.array\n", + " The basis of operators.\n", + " \"\"\"\n", + " return [gellmann(j, k, d) for j, k in product(range(1, d + 1), repeat=2)]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "1yB7X5nruNbU" + }, + "source": [ + "in this cell the gellmann matrix of 3 dimension will generate and they will save in a dictionary and labeled them by numbers 0,1,...,8 ." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "trodoU6zuNbY" + }, + "outputs": [], + "source": [ + "def gellmann_basis(d):\n", + " \"\"\" generalization gellmann matrice \n", + " input : dimesion of system\n", + " output: dictionary of gellmann matrices of dimension 'd'\n", + " \"\"\"\n", + " \n", + " gellmann_basis = {} ## a dictionary that saved the gellmann matrices\n", + "\n", + " k=0\n", + " for i in range(1,d+1):\n", + " for j in range(1,d+1):\n", + " gellmann_basis.update({\"G{}\".format(k):gellmann(i,j,d)})\n", + " k+=1\n", + " \n", + " return gellmann_basis\n", + "\n", + "#gellmann_basis(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "K4Ck7uDYuNbl" + }, + "source": [ + "# 3. Coefficients of gellmann's expansion" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_sL95KUXuNbp" + }, + "source": [ + "at this cell a random density matrix will generate by qutip library.\n", + "\n", + "for calculating the coefficients of gellmann expansion we do this iteration:\n", + "1. calculate the tensor product of gellmann matrices for every coefficient\n", + "2. calculate the dot product of \"ro\" and the \"gellmann's tensor product\"\n", + "3. calculate the trace of this matrix and divide it into 4\n", + "4. append it to our index list" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2Upf2jQDuNbt" + }, + "outputs": [], + "source": [ + "def coef_of_gellmann(ro, d_sub1, d_sub2):\n", + " \"\"\" coefficient of gellmann expansion \n", + " input : density matrix and dimensions of two subsystem\n", + " output: dictionary of coefficient\n", + " \"\"\"\n", + " \n", + " coef = {} ## the coefficient's dictionary (suitable format for saving as a data)\n", + " gellmann_basis_d_sub1 = gellmann_basis(d_sub1) ## the gellmann matrix for a d_sub1 dimension system\n", + " gellmann_basis_d_sub2 = gellmann_basis(d_sub2) ## the gellmann matrix for a d_sub2 dimension system\n", + " \n", + " n1 = d_sub1**2\n", + " n2 = d_sub2**2\n", + " for i in range(n1):\n", + " for j in range(n2):\n", + " tensorP = np.kron(gellmann_basis_d_sub1[\"G{}\".format(i)],gellmann_basis_d_sub2[\"G{}\".format(j)]) ## Tensor product of gelllmann matrices\n", + " c = np.trace(np.dot(ro,tensorP))/4 ## dot product and trace\n", + " c = c.real ## all of gellmann coefs is a real\n", + " c = round(c,8) \n", + " coef.update({\"a{}{}\".format(i,j):c}) ## update the coef dict by a[i][j] and its gellmann coef for g[i][j]\n", + "\n", + " index = np.array(coef) ## change list to np.array() object\n", + " return coef" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "vfa0qkq6uNb6" + }, + "source": [ + "this cell is just a test of this algotithm in 3 dimension bipatite systems." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "uA-NxF1vuNcA" + }, + "outputs": [], + "source": [ + "N = 3\n", + "\n", + "ro = qp.rand_dm(N*N,0.5,dims=[[N,N], [N,N]])\n", + "#print(coef_of_gellmann(ro))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "jSoxsPBiuNcJ" + }, + "source": [ + "# 4. Generate entangled states (PPT)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this cell we define a PPT funcion that check positive partial transpose." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "VWGoxF5EuNcL" + }, + "outputs": [], + "source": [ + "def PPT(ro, d_sub1, d_sub2):\n", + " \"\"\" positive partial transpose \n", + " input : density matrix and the dimension of subsystem 1 and subsystem 2\n", + " output: dictionary of coefficient of gellmann matrices and label 1 or 2 for entangeled states and unknown respectivly\n", + " \"\"\"\n", + " \n", + " ro_pt = qp.partial_transpose(ro,[0,1]) ## partial transpose in subsystem 2\n", + " eig = ro_pt.eigenstates() ## calculate the eigenvalues and eigenstates\n", + " eigv = [round(i,8) for i in eig[0]] \n", + " \n", + " result = coef_of_gellmann(ro, d_sub1, d_sub2)\n", + " \n", + " if (eigv[0]<0 ):\n", + " result.update({\"label\":1}) ## the entangled states that labeled by 1\n", + " return result\n", + " else :\n", + " result.update({\"label\":2}) ## the unknown states that labeled by 2\n", + " return result\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. Generate separable states (Convex combination)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we define two function that:\n", + "1. Convex_Combination: this function is give a matrix list and return a convex combination of this matrices\n", + "2. generate_ran_den_list: this function is generate a list of random density matrices" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def Convex_Combination(matrix_list1, matrix_list2, index=10):\n", + " \"\"\" Convex Combination \n", + " input : two list of matrices that you want to build a convex combination of them. index is the number of iteration\n", + " output: a state that is a convex combination of input\n", + " \"\"\"\n", + " \n", + " coef = np.random.dirichlet(np.ones(index), size=1) ## generating list of numbers that is positive and its sum is 1 with length equal to 'index'\n", + " \n", + " seprable_state = qp.Qobj() ## build an empty Qobj for cycle\n", + " for i in range(index):\n", + " a = choice(matrix_list1) ## choice a density matrix randomly\n", + " b = choice(matrix_list2) ## choice a density matrix randomly\n", + " \n", + " tensorP = np.kron(a,b) ## Tensor product of density matrices\n", + " tensorP *= round(coef[0][i],8) ## product of tensorP and a coef that come from the coef list\n", + " \n", + " seprable_state += tensorP ## at the last its a convex combination of tensor product of density matrices\n", + " \n", + " return seprable_state\n", + "\n", + "\n", + "def generate_ran_den_list(d, length= 100):\n", + " \"\"\" generate random density matrix list \n", + " input : dimension of system and the lenght of list\n", + " output: list of random density matrix with dimension 'd'\n", + " \"\"\"\n", + " \n", + " result = []\n", + " for i in range(length):\n", + " density = round(random(),4) ## for build a random number between 0 and 1\n", + "\n", + " rand = qp.rand_dm(d, density) ## generate a random density matrix with dimension N\n", + " result.append(rand) ## appending this random density matrix to ran_den_mat list \n", + " \n", + " return result" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 6. Convex hull approximation method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Making a Convex Hull for a 2_qutrit system and checking for new points in the convex Hull" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "d_sub1 = 3\n", + "d_sub2 = 3\n", + "num_extreme_points = 83\n", + "index = np.zeros((1,81))\n", + "\n", + "for i in range(num_extreme_points):\n", + " ro = qp.rand_dm(d_sub1 * d_sub2, pure=True)\n", + "\n", + " coef = list(coef_of_gellmann(ro, d_sub1, d_sub2).values())\n", + " coef = np.reshape(np.array(coef),(1,81))\n", + " index = np.vstack((index,coef))\n", + "#print(np.shape(index[1:,]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using different functions to build convex hull" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "#generating convex hull from extreme points(Pure separable states)\n", + "hull = Delaunay(index)\n", + "#hull = ConvexHull(index)\n", + "#print(index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function that checks if a point is in a convex hull" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "#This function checks if a point is in the convex hull or not\n", + "def in_hull(p, hull):\n", + " \"\"\"\n", + " Test if points in `p` are in `hull`\n", + "\n", + " `p` should be a `NxK` coordinates of `N` points in `K` dimensions\n", + " `hull` is either a scipy.spatial.Delaunay object or the `MxK` array of the \n", + " coordinates of `M` points in `K`dimensions for which Delaunay triangulation\n", + " will be computed\n", + " \"\"\"\n", + " from scipy.spatial import Delaunay\n", + " if not isinstance(hull,Delaunay):\n", + " hull = Delaunay(hull)\n", + "\n", + " return hull.find_simplex(p)>=0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "ro = qp.rand_dm(9) ## generate the random density matrix\n", + "\n", + "coef = list(coef_of_gellmann(ro,3,3).values())\n", + "coef = np.reshape(np.array(coef),(1,81)) \n", + "\n", + "#print(coef)\n", + "print(in_hull(index[20:,],index))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Making a Convex Hull for a 2_qubit system and checking for new points in the convex Hull." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "d_sub1 = 2\n", + "d_sub2 = 2\n", + "num_extreme_points = 20\n", + "index = np.zeros((1,16))\n", + "\n", + "for i in range(num_extreme_points):\n", + " ro = qp.rand_dm(d_sub1 * d_sub2, pure=True)\n", + " \n", + " coef = list(coef_of_gellmann(ro, d_sub1, d_sub2).values())\n", + " coef = np.reshape(np.array(coef),(1,16))\n", + " index = np.vstack((index,coef))\n", + "#print(np.real(index[1:,]))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hull = ConvexHull(index[:,])\n", + "in_hull(index[2,],index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 7. Generate data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we build 100 000 random states and labeled that. after that we build a data frame for saving and using in future." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "5kfhME1RuNcT" + }, + "outputs": [], + "source": [ + "%%time\n", + "\n", + "states={} #states\n", + "d_sub1 = 3 #dimension of subsystem 1\n", + "d_sub2 = 3 #dimension of subsystem 2\n", + "R1 = 50000 # the number of entangled states\n", + "\n", + "##generate the entangled states\n", + "for i in range (1, R1+1):\n", + " density = round(random(),4) ## for build a random number between 0 and 1\n", + " \n", + " ro = qp.rand_dm(d_sub1*d_sub2, density, dims=[[d_sub1,d_sub2], [d_sub1,d_sub2]]) #generating random density matrix with a random density\n", + " states.update({\"{}\".format(i):PPT(ro, d_sub1, d_sub2)}) # update the states by its number and label and gellmann coefs\n", + "\n", + "\n", + "##generate the separable states\n", + "R2 = 50000 # the number of seperable states\n", + "ran_den_mat1 = generate_ran_den_list(d_sub1, 100) ## a list of random density matrix for a system\n", + "ran_den_mat2 = generate_ran_den_list(d_sub2, 100) ## a list of random density matrix for a system\n", + "\n", + "for i in range(R1+1, R1+R2+1):\n", + " index = randint(10,100) ## build a integer number between 10 and 100 for using in function\n", + " sep = Convex_Combination(ran_den_mat1, ran_den_mat2, index) ## generate a random seprable density matrix\n", + " \n", + " sep_coef = coef_of_gellmann(sep, d_sub1, d_sub2) ## calculate the gellmann coefs\n", + " sep_coef.update({\"label\":0}) ## labeled seprable states by 0\n", + " \n", + " states.update({\"{}\".format(i):sep_coef}) ## update states\n", + " \n", + " \n", + "df = pd.DataFrame(data=states).T # build a data frame by pandas\n", + "\n", + "df.to_csv('data_of_states.csv.zip') #for saving the data in zip format\n", + "#df.to_excel('data_of_states.xlsx') #for saving tha data in an excel file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we save our data frame as a zip file" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 163 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 1231, + "status": "error", + "timestamp": 1584469470718, + "user": { + "displayName": "mahkame salimi", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GhXCkBWY2tBzsPtIAaeDyn3ng2gbWea3ReVrZhe=s64", + "userId": "11757140415455670736" + }, + "user_tz": -210 + }, + "id": "rt63ussFuNcc", + "outputId": "dae4bdb2-205b-4bbc-b702-de4e82d70511" + }, + "outputs": [], + "source": [ + "df.to_csv('data_of_states.csv.zip')\n", + "##df.to_csv('data_of_states.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in the blow cell we define a function that merge all of our data to a one data." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def merge(list_data):\n", + " N = len(list_data) #the number of datas\n", + " n = [len(i.index) for i in list_data] # length of index of every data\n", + " \n", + " new_datas = [list_data[0]]\n", + " index = {}\n", + " k = n[0]\n", + " for i in range(1,N):\n", + " last_index, new_index = [i for i in range(1,n[i]+1)], []\n", + " for j in range(1+k, n[i]+1+k):\n", + " new_index.append(j)\n", + " \n", + " index = {last_index[p]:new_index[p] for p in range(n[i])}\n", + " df = list_data[i]\n", + " df = df.rename(index = index)\n", + " new_datas.append(df)\n", + " k += n[i]\n", + " \n", + " result_data = pd.concat(new_datas)\n", + " return result_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "this function dont true work because of 'memory error'.\n", + "\n", + "so we dont merge datas and just fix their index for future." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "at this cell we read the unfixed datas. after that we drop the 'a88' column, because it's same for all." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#df1 = pd.read_csv('data/data_of_states1.csv.zip', index_col=0, compression = 'zip')\n", + "#df2 = pd.read_csv('data/data_of_states2.csv.zip', index_col=0, compression = 'zip')\n", + "#df3 = pd.read_csv('data/data_of_states3.csv.zip', index_col=0, compression = 'zip')\n", + "#df4 = pd.read_csv('data/data_of_states4.csv.zip', index_col=0, compression = 'zip')\n", + "#df5 = pd.read_csv('data/data_of_states5.csv.zip', index_col=0, compression = 'zip')\n", + "#df6 = pd.read_csv('data/data_of_states6.csv.zip', index_col=0, compression = 'zip')\n", + "#df7 = pd.read_csv('data/data_of_states7.csv.zip', index_col=0, compression = 'zip')\n", + "#df8 = pd.read_csv('data/data_of_states8.csv.zip', index_col=0, compression = 'zip')\n", + "#df9 = pd.read_csv('data/data_of_states_100.csv.zip', index_col=0, compression = 'zip')\n", + "#df10 = pd.read_csv('data/data_of_states_200.csv.zip', index_col=0, compression = 'zip')\n", + "\n", + "df = df.drop(columns=['a88'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "in this cell we fixed (rename) the index." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "k = 1000000\n", + "\n", + "a = [i for i in range(1,100000+1)]\n", + "b = [i for i in range(k+1,k+100000+1)]\n", + "c = {a[i]:b[i] for i in range(len(a))}\n", + "\n", + "df = df.rename(index = c)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#df10.to_csv('fixed_data/data_of_states_10(100 k).csv.zip')\n", + "#df1.to_csv('fixed_data/data_of_states_2(100 k).csv.zip')\n", + "#df2.to_csv('fixed_data/data_of_states_3(100 k).csv.zip')\n", + "#df3.to_csv('fixed_data/data_of_states_4(100 k).csv.zip')\n", + "#df4.to_csv('fixed_data/data_of_states_5(100 k).csv.zip')\n", + "#df5.to_csv('fixed_data/data_of_states_6(100 k).csv.zip')\n", + "#df6.to_csv('fixed_data/data_of_states_7(100 k).csv.zip')\n", + "#df7.to_csv('fixed_data/data_of_states_8(100 k).csv.zip')\n", + "#df8.to_csv('fixed_data/data_of_states_9(100 k).csv.zip')\n", + "#df9.to_csv('fixed_data/data_of_states_10(100 k).csv.zip')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 8. Correlation of data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the plot shows the correlation of 100000 random states" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn\n", + "\n", + "#import the data\n", + "df = pd.read_csv('fixed_data/data_of_states_4(100 k).csv.zip', index_col=0, compression = 'zip')\n", + "\n", + "# Compute the correlation matrix\n", + "corr = df.corr()\n", + "\n", + "# Set up the matplotlib figure\n", + "f, ax = plt.subplots(figsize=(8, 8))\n", + "\n", + "# Generate a custom diverging colormap\n", + "cmap = seaborn.diverging_palette(220, 10, as_cmap=True)\n", + "\n", + "# Draw the heatmap with the mask and correct aspect ratio\n", + "#data_mini = d.sample(10000)\n", + "seaborn.heatmap(corr, cmap=cmap, vmax=.3, center=0)\n", + "plt.show()" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "PPt.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/.github/entrypoint/artifact/python/gellmann.py b/.github/entrypoint/artifact/python/gellmann.py new file mode 100644 index 000000000..f2126f7c6 --- /dev/null +++ b/.github/entrypoint/artifact/python/gellmann.py @@ -0,0 +1,92 @@ +"""Generate generalized Gell-Mann matrices. + + .. module:: gellmann.py + :synopsis: Generate generalized Gell-Mann matrices + .. moduleauthor:: Jonathan Gross + + .. references:: + - https://arxiv.org/pdf/0806.1174.pdf + - https://github.com/iree-org/iree/tree/main/integrations/pjrt + - https://mathworld.wolfram.com/GeneralizedGell-MannMatrix.html + - https://github.com/husisy/klearning/blob/master/misc/draft_gellman.py + +""" +import numpy as np +import itertools as it + +from pylab import * +from sparse import COO +from pprint import pprint + +def gellmann(j, k, d, sparse=False): + r"""Returns a generalized Gell-Mann matrix of dimension d. + + According to the convention in *Bloch Vectors for Qubits* by Bertlmann and + Krammer (2008), returns :math:`\Lambda^j` for :math:`1\leq j=k\leq d-1`, + :math:`\Lambda^{kj}_s` for :math:`1\leq k k: + coords = [[j - 1, k - 1], + [k - 1, j - 1]] + data = [1, 1] + elif k > j: + coords = [[j - 1, k - 1], + [k - 1, j - 1]] + data = [-1j, 1j] + elif j == k and j < d: + coords = [list(range(j + 1)), + list(range(j + 1))] + data = np.sqrt(2/(j*(j + 1)))*np.array(list(it.repeat(1 + 0j, j)) + + [-j + 0j]) + else: + coords = [list(range(d)), + list(range(d))] + data = list(it.repeat(1 + 0j, d)) + + if sparse: + gjkd = COO(coords, data, shape=(d, d)) + else: + gjkd = np.zeros((d, d), dtype=np.complex128) + for val, m, n in zip(data, *coords): + gjkd[m][n] = val + + return gjkd + +def get_basis(d, sparse=False): + r"""Return a basis of operators. + + The basis is made up of orthogonal Hermitian operators on a Hilbert space + of dimension d, with the identity element in the last place. + + Parameters + ---------- + d : int + The dimension of the Hilbert space. + + Returns + ------- + list of numpy.array + The basis of operators. + + """ + return [gellmann(j, k, d, sparse) + for j, k in it.product(range(1, d + 1), repeat=2)] + +pprint(get_basis(13)) diff --git a/.github/entrypoint/artifact/python/inventory.py b/.github/entrypoint/artifact/python/inventory.py new file mode 100644 index 000000000..2ae2333fc --- /dev/null +++ b/.github/entrypoint/artifact/python/inventory.py @@ -0,0 +1,218 @@ +# This Python file uses the following encoding: utf-8 + +from gametext import * + +states = {} + +states["currentrm"] = 'entryrm' + +states["entryrm"] = { + roomd: 0, + e_door: 1, + w_door: 1, + chair: 1, + sagan: 1 + } + +states["mainrm"] = { + roomd: 0, + n_door: 1, + e_door: 1, + w_door: 1, + s_door: 1, + # fireplace: 1 + } + +#QUARKS + +states["strangerm"] = { + roomd: 0, + n_door: 1, + e_door: 1, + w_door: 1, + s_door: 1, + dirac: 1 + } + +states["charmrm"] = { + roomd: 0, + s_door: 1 + } + +states["downrm"] = { + roomd: 0, + n_door: 1, + portal: 1, + e_door: 1, + gellmann: 1, + wardrobe: 1, + rope: 0, + teaspoon: 0, + tripod: 0, + hadrons: 0 + } + +states["uprm"] = { + roomd: 0, + s_door: 1, + portal: 1, + hadrons: 1, + rope: 0 + } + +states["bottomrm"] = { + roomd: 0, + w_door: 1, + stairs: 1, + pauli: 1, + trapdoor: 1, + upstairs: 1, + downstairs: 1 + } + +states["toprm"] = { + roomd: 0, + stairs: 1, + trapdoor: 1, + downstairs: 1, + bed: 1, + chest: 0, + powder: 0, + chair: 1, + desk: 1, + drawer: 0, + paperclip: 0, + seashell: 0, + bricabrac: 0, + floorlamp: 1, + drapes: 1, + window: 1, + pauli: 0 + } + + +#LEPTONS + +states["muneurm"] = { + roomd: 0, + n_door: 1, + s_door: 1, + e_door: 1, + w_door: 1, + feynman: 1, + tripod: 1 + } + +states["eneurm"] = { + roomd: 0, + s_door: 1, + e_door: 1 + } + +states["tneurm"] = { + roomd: 0, + s_door: 1, + w_door: 1 + } + +states["elecrm"] = { + roomd: 0, + n_door: 1, + e_door: 1 + } + +states["muonrm"] = { + roomd: 0, + n_door: 1, + e_door: 1, + w_door: 1 + } + +states["taurm"] = { + roomd: 0, + n_door: 1, + w_door: 1 + } + +# BOSONS + +states["photonrm"] = { + roomd: 0 + } + +states["gluonrm"] = { + roomd: 0 + } + +states["Zrm"] = { + roomd: 0 + } + +states["Wrm"] = { + roomd: 0 + } + +states["higgsrm"] = { + roomd: 0 + } + +#INVENTORY + +states["inv"] = { + beads: 0, + key: 9, + key_bt: 0, + bottle: 1, + powder: 0, + refresher: 0, + bongos: 1, + tripod: 0, + up_bongos: 0, + rope: 0, + teaspoon: 0, + paperclip: 0, + seashell: 0 + } + +states[beads] = { + 'u': 0, + 'd': 0, + 'c': 0, + 's': 0, + 't': 0, + 'b': 0, + 've': 0, + 'e': 0, + 'vmu': 0, + 'mu': 0, + 'vtau': 0, + 'tau': 0, + 'y': 0, + 'g': 0, + 'Z': 0, + 'W': 0 + } + +#MAP + +states['map'] = { + "entryrm": 1, + "mainrm": 0, + "strangerm": 0, + "charmrm": 0, + "downrm": 0, + "uprm": 0, + "toprm": 0, + "bottomrm": 0, + "muneurm": 0, + "eneurm": 0, + "tneurm": 0, + "elecrm": 0, + "muonrm": 0, + "taurm": 0, + "photonrm": 0, + "gluonrm": 0, + "Zrm": 0, + "Wrm": 0, + "higgsrm": 0 + } diff --git a/.github/entrypoint/artifact/python/keywords.lst b/.github/entrypoint/artifact/python/keywords.lst new file mode 100644 index 000000000..01926db38 --- /dev/null +++ b/.github/entrypoint/artifact/python/keywords.lst @@ -0,0 +1,7614 @@ +(2+1) dimensional topological gravity +(n p) reaction +1s slater type function +2d lattice +3 j symbol +3d scanner +4 current +4 divergence +4 laplacian +4 tensor +4 vector +4 vector potential +4 velocities +4 velocity +4pi microscope +6 j symbol +9 j symbol +ab initio multiple spawning +abelian group +abelian sandpile model +aberration equation +above threshold ionization +abraham lorentz equation of motion +abraham lorentz model of electron +abrikosov vortex +absolute zero +absorbance +absorption band +absorption coefficient +absorption cross section +absorption edge +absorption spectra +absorption spectroscopy +absorption spectrum +absorptivity +abstract differential geometry +ac stark shift +acceleration field +accelerator mass spectrometry +accelerator operator +acceleron +accidental symmetry +acholeplasma +acoustic droplet vaporization +acoustic metric +acoustic paramagnetic resonance +acoustic phonon +acoustic resonance spectroscopy +acousto optic +acousto optical spectrometer +actinide chemistry +actinide concept +action principle +activation product +active laser medium +adaptive measurement +adaptive optic +addition of velocities +addition theorem for spherical harmonic +adhm construction +adiabatic +adiabatic approximation +adiabatic dynamic +adiabatic elimination +adiabatic evolution +adiabatic flame temperature +adiabatic invariance +adiabatic invariant +adiabatic passage +adiabatic quantum algorithm +adiabatic quantum computation +adiabatic quantum computing +adiabatic quantum optimization +adiabatic theorem +adiabatic transport +adiabatically eliminated +adinkra symbol +adjacency matrix +admittance +ads/cft correspondence +advanced green function for wave equation +advanced potential +advanced tactical laser +affine gauge theory +affine lie algebra +afshar experiment +aharonov bohm effect +aharonov bohm phase +aharonov bohm potential +aharonov casher effect +airy beam +airy disk +airy integral +aklt model +akns system +alfven velocities +alfven velocity +alfven wave +algebraic holography +algebraic quantum field theory +algorithmic cooling +alikhanian alikhanov spectrometer +alkali atom +alkali metal atom +all gas phase iodine laser +all optical switching +alpha particle spectroscopy +alpha particle x ray spectrometer +alpha process +alpine planetary boundary layer +american superconductor +ampac +amperes law +amplified spontaneous emission +amplitude amplification +amplitude damping channel +amplitude modulation +amplitude of low frequency fluctuation +amplituhedron +amsterdam density functional +an exceptionally simple theory of everything +anaem +analytic continuation +analytic properties of the index of refraction +analytical regularization +anatoly dyatlov +ancilla bit +ancillary qubit +ancillary system +anderson impurity model +anderson localisation +anderson localization +anderson model +anderson transition +andersons rule +andreev reflection +angle resolved photoemission spectroscopy +angles of incidence +angular distribution of radiation +angular momentum +angular momentum coupling +angular momentum diagram +angular momentum operator +angular velocities +angular velocity +anharmonic oscillator +anisotropy parameter +annihilation +annihilation radiation +annni model +annular dark field imaging +anomalon +anomalous diffusion +anomalous dispersion +anomalous magnetic dipole moment +anomalous magnetic moment +anomaly +anomaly matching condition +antenna in wave guide +anti stokes raman spectroscopy +anti symmetric operator +anti zeno effect +antiferromagnetism +antifreeze protein +antihydrogen +antimatter +antimatter comet +antimatter gravity measurement +antimatter rocket +antimatter tests of lorentz violation +antimatter weapon +antineutron +antiparticle +antiproton +antiproton decelerator +antiprotonic helium +antisymmetric exchange +antisymmetrizer +anyon +anyonic excitation +apparent paradox +apparent violation +applied radiochemistry +applied spectroscopy +approximate quantum error correction +approximation scheme +arago spot +arc fusion reactor +argon fluoride laser +argonaut class reactor +argus laser +arnolds cat map +aromatic ring current +arrival time +arrow of time +arthrobacter +arthrobacter antarcticus +arthrobacter chlorophenolicus +arthrobacter cryotolerans +arthrobacter cumminsii +arthrobacter flavus +arthrobacter livingstonensis +arthrobacter roseus +arthrobacter russicus +arthrobacter soli +arthrobacter subterraneus +arthrobacter woluwensis +arthur komar +arthur maitland +artificial atom +artificial disintegration +artificial insemination +artificial intelligence +ashtekar variable +associated legendre function +associated legendre polynomial +asterix iv laser +astro comb +astronomical spectroscopy +asymmetric entanglement +asymmetrically entangled quantum state +asymmetry measure +asymptotic entanglement +asymptotic freedom +asymptotic iteration method +asymptotic limit +asymptotic regime +asymptotic safety in quantum gravity +atiyah jones conjecture +atmospheric diffraction +atmospheric lidar +atmospheric optics ray tracing code +atmospheric turbulence +atom +atom atom interaction +atom beam +atom bose einstein condensate +atom cavity system +atom center of mass motion +atom chip +atom clock +atom coherence +atom decay +atom dynamic +atom entanglement +atom excitation +atom field coupling +atom field entanglement +atom field interaction +atom force microscope +atom gas +atom hydrogen +atom interacting +atom interaction +atom interferometry +atom inversion +atom laser +atom level +atom memory +atom motion +atom nuclei +atom optic +atom photon entanglement +atom position +atom quantum memory +atom qubit +atom resonance +atom spontaneous emission +atom transition +atom transition frequency +atom vibration +atomic absorption spectroscopy +atomic and molecular astrophysic +atomic decay rate +atomic electron transition +atomic emission spectroscopy +atomic form factor +atomic heraldry +atomic internal degree +atomic mass +atomic mass unit +atomic nucleus +atomic number +atomic operator +atomic optic +atomic orbital +atomic physic +atomic recoil +atomic spacing +atomic spectroscopy +atomic theory +atomic unit +atomistix toolkit +atomistix virtual nanolab +atoms in molecule +attenuated total reflectance +attenuation coefficient +attenuation in optical fiber +attenuation length +attosecond +attosecond chronoscopy +audience scanning +aufbau principle +auger architectomic +auger effect +auger electron spectroscopy +austin model +autler townes effect +autler townes splitting +autoignition temperature +autoionization +automated mineralogy +autonomous landing hazard avoidance technology +auxiliary field +auxiliary field monte carlo +auxiliary qubit +auxiliary system +avalanche diode +averaging procedure +avoided crossing +avoided level crossing +awpp +axial vector +axino +axiomatic quantum field theory +axion +azeotrope +azimuthal quantum number +azimuthal symmetry +b integral +b meson +b tagging +b0 +babinets principle +back action +back action evasion +background field +background field method +background noise +bad cavity limit +baecklund transform +bakers map +balanced homodyne detection +ballistic conduction +ballistic conduction in single walled carbon nanotube +banach space +bancroft point +band bending +band diagram +band emission +band gap +band head +band offset +band structure +bandwidth limited pulse +banks zaks fixed point +bare mass +bargmann state +bargmann wigner equation +bargmanns limit +bariloche atomic centre +barrett crane model +baryon +baryon acoustic oscillation +baryon number +baryonic dark matter +basis set +basis set superposition error +basis state +basis vector +batalin vilkovisky formalism +bathochromic shift +bayesian approach +bayesian estimate +bb84 +bb84 protocol +bcfw recursion +bcs theory +beam dump +beam expander +beam homogenizer +beam parameter product +beam powered propulsion +beam splitter +beans critical state model +bechgaard salt +beer lambert law +bekenstein bound +belavkin equation +bell chsh inequalities +bell chsh inequality +bell diagonal state +bell experiment +bell inequalities +bell inequality +bell inequality violation +bell kochen specker theorem +bell measurement +bell nonlocality +bell operator +bell pair +bell state +bell state measurement +bell test +bell test experiment +bell theorem +bell type inequalities +bell type inequality +bell violation +belle ii detector +bells theorem +benchtop nuclear magnetic resonance spectrometer +beneath the city street +benesi hildebrand method +bennetts law +berezin integral +berezinian +beriev a 60 +berry connection and curvature +berry curvature +berry phase +bessel beam +bessel equation +bessel function +bessels differential equation +bessels inequalities +bessels inequality +beta decay +beta decay stable isobar +beta function +beta m +betatron +bethe ansatz +bethe feynman formula +bethe formula +bethe heitler formula +bethe lattice +bethe salpeter equation +bf model +bhabha scattering +bht algorithm +biexciton +big bang +big bang nucleosynthesis +bigdft +biham middleton levine traffic model +bilepton +binary collision approximation +binding energy +biocentric universe +biological half life +biological small angle scattering +biological system +biomedical spectroscopy +biot and savart law +biot savart law +bipartite case +bipartite correlation +bipartite entanglement +bipartite gaussian state +bipartite mixed state +bipartite pure state +bipartite quantum state +bipartite quantum system +bipartite state +bipartite system +biphoton +bipolaron +birefringence of the ionosphere +birge sponer method +bismuth strontium calcium copper oxide +bispinor +bistability +bistatic cross section +bistochastic quantum channel +bit commitment +bit error rate +bit string physic +bks theory +black body radiation +black hole +black hole complementarity +black hole electron +black hole entropy +black hole evaporation +black hole information paradox +black hole physic +black hole thermodynamic +black star +blackbody radiation +blasius boundary layer +blind quantum computation +bloch ball +bloch equation +bloch grueneisen temperature +bloch oscillation +bloch spectrum +bloch sphere +bloch vector +bloch wave +blood irradiation therapy +blown flap +blue laser +blueshift +bmt equation for spin +boeing laser avenger +boeing yal 1 +bogdanov map +bogoliubov causality condition +bogoliubov inner product +bogoliubov parasyuk theorem +bogoliubov transformation +bogomolnyi prasad sommerfield bound +bogomolnyi prasad sommerfield state +bohmian interpretation +bohmian mechanic +bohmian quantum mechanics +bohmian trajectory +bohr einstein debate +bohr magneton +bohr model +bohr radius +bohrs classical formula +boiling +boiling chip +boiling point +bolometer +boltzmann distribution +boltzmanns distribution law +bond fluctuation model +bond hardening +bond softening +boolean network +boost momentum +boost parameter +borchers algebra +borel summation +born approximation +born huang approximation +born infeld nonlinear electrodynamic +born markov approximation +born oppenheimer approximation +born probability rule +born rule +born serie +borromean nucleus +bose condensate +bose einstein condensate +bose einstein condensation +bose einstein statistic +bose gas +bose hubbard hamiltonian +bose hubbard model +bosenova +boson +boson sampling +bosonic atom +bosonic environment +bosonic field +bosonic gaussian channel +bosonic particle +bosonic system +bosonization +bottom eta meson +bottom quark +bottomness +bound electron dynamic +bound entangled +bound entanglement +bound state +bound state energy +bound state problem +bound state solution +bound states in wave guide +boundary condition +boundary conformal field theory +boundary layer +boundary layer control +boundary layer suction +boundary layer thickness +boundary value problem +bounded error +bounded operator +boussos holographic bound +bpst instanton +bqp +bra ket notation +bragg plane +bragg scattering +braggs law +braid group +braid statistic +braided vector space +branch point +branching fraction +brauer wall group +braunstein ghosh severini entropy +breast mri +breathalyzer +breit equation +breit interaction +bremsstrahlung +bretherton equation +brewsters angle +brian josephson +brillouin precursor +brillouin scattering +brillouin spectroscopy +brillouin zone +brillouins theorem +broadband +broadband acoustic resonance dissolution spectroscopy +broken symmetry +brownian motion +brownian particle +brst quantization +brus equation +btz black hole +bubble fusion +bubble point +buffer gas +bulk richardson number +bullough dodd model +bunch davies vacuum +bures distance +bures metric +butcher group +byers yang theorem +c parity +c rot gate +c symmetry +c theorem +c70 molecule +cabibbo kobayashi maskawa matrix +cadpac +caesium cadmium bromide +cal pt symmetry +caldeira leggett model +calkin correspondence +callan symanzik equation +calligraphic projection +calogero conjecture +caloron +camassa holm equation +canadian penning trap mass spectrometer +canonical commutation relation +canonical ensemble +canonical momentum +canonical quantization +canonical quantum gravity +canonical state +canonical stress tensor +canonical transformation +canonical variable +capacitance +capacitive coupling +capacitive resistance +capacitively coupled +capacity region +capillary rise method +capping inversion +car parrinello method +car parrinello molecular dynamic +carbon 13 nmr satellite +carbon 13 nuclear magnetic resonance +carbon burning process +carbon dioxide +carbon dioxide laser +carbon nanotube +cardiac magnetic resonance imaging +cardiac magnetic resonance imaging perfusion +cardiac ventriculography +cardy formula +carnobacterium pleistocenium +carnot efficiency +caroline herzenberg +carrier scattering +cartan decomposition +cartesian coordinate +cascading gauge theory +casimir effect +casimir energy +casimir force +casimir force measurement +casimir free energy +casimir interaction +casimir interaction energy +casimir polder force +casimir polder interaction +casimir polder potential +casimir pressure +castep +cat state +catastrophic optical damage +categorical quantum mechanic +category of finite dimensional hilbert space +category theory +cathode ray +cathodoluminescence +cauchy boundary condition +cauchy hadamard formula +cauchy riemann differential equation +cauchy schwarz inequalities +cauchy schwarz inequality +cauchys integral formula +cauchys theorem +causal dynamical triangulation +causal fermion system +causal green function +causal interpretation +causal patch +causal perturbation theory +causal set +causal structure +causality +cavendishs apparatu +cavities +cavity +cavity cooling +cavity decay +cavity field +cavity frequency +cavity loss +cavity mirror +cavity mode +cavity optomechanic +cavity optomechanical system +cavity photon +cavity qed +cavity qed system +cavity quantum electrodynamic +cavity resonance +cavity ring down spectroscopy +cayley graph +ccr and car algebras +cecoin5 +cells alive system +cellular potts model +center fed antenna +center of inversion +center of mass +center of mass motion +center vortex +central charge +central field approximation +central limit theorem +central potential +central role +central spin +centre for magnetic resonance investigation +cesium atom +cghs model +ch inequalities +ch inequality +chain of circle procedure +chameleon field +chameleon particle +channel capacity +channel loss +channel state duality +chaotic behaviour +chaotic dynamic +chaotic motion +chaotic regime +chaotic scattering +chaotic state +chaotic system +chaplygin gas model +characteristic time +charge +charge carrier +charge conjugation +charge conservation +charge contrast imaging +charge density +charge density wave +charge noise +charge ordering +charge qubit +charge radius +charge state +charge transfer insulator +charge transport +charged current +charged particle +charged particle equilibrium +chargino +charm +charm quark +charmed baryon +charmed eta meson +chebyshev polynomial +chelpg +chemical bond +chemical computer +chemical imaging +chemical laser +chemical oxygen iodine laser +chemical potential +chemical shift +chemical shift index +chemiluminescence +chep conference +cherenkov angle +cherenkov radiation +chern number +chern simons theory +chip integration +chiral algebra +chiral anomaly +chiral gauge theory +chiral model +chiral molecule +chiral perturbation theory +chiral potts curve +chiral potts model +chiral superfield +chiral symmetry +chiral symmetry breaking +chirality +chirped pulse amplification +chladnis law +chromism +chromo weibel instability +chronon +chsh bell inequalities +chsh bell inequality +chsh inequalities +chsh inequality +cidnp +circuit model +circuit qed +circuit quantum electrodynamic +circular current loop +circular polarization +circularly polarized wave +cladding +claes goeran granqvist +clas detector +classical action +classical algorithm +classical analogue +classical and quantum conductivity +classical approach +classical behaviour +classical bit +classical bound +classical capacity +classical case +classical channel +classical chaos +classical communication +classical complexity +classical computation +classical computing +classical concept +classical correlation +classical counterpart +classical cryptography +classical diffusion +classical domain +classical dynamic +classical electrodynamic +classical electron radius +classical entanglement +classical environment +classical equation +classical evolution +classical field +classical field theory +classical hamiltonian +classical heisenberg model +classical information channel +classical information theory +classical interpretation +classical level +classical light +classical limit +classical logic +classical measurement +classical mechanic +classical memory +classical method +classical mixture +classical model +classical motion +classical noise +classical notion +classical object +classical observable +classical optic +classical orbit +classical particle +classical phase space +classical physic +classical post processing +classical probability distribution +classical probability theory +classical problem +classical property +classical protocol +classical quantum channel +classical quantum correspondence +classical random walk +classical regime +classical resource +classical result +classical setting +classical simulation +classical solution +classical state +classical statistic +classical statistical mechanic +classical strategy +classical system +classical theory +classical trajectory +classical transition +classical treatment +classical variable +classical version +classical xy model +classically chaotic system +classically correlated state +classically forbidden region +clauser horne inequalities +clauser horne inequality +clauser horne shimony holt inequalities +clauser horne shimony holt inequality +clausius mossotti formula +clausius mossotti relation +clear physical interpretation +clebsch gordan coefficient +clifford algebra +clifford gate +clifford group +clock +cloning +cloning machine +closed expression +closed form expression +closed form solution +closed formula +closed loop +closed quantum system +closed system +closed timelike curve +cloud aerosol transport system +cloud quantum computing +cluster decomposition theorem +cluster expansion approach +cluster state +cmos +cndo/2 +cno cycle +cnot +coanda effect +coarse graining +coaxial cable +coaxial line +cobalt 59 +coblentz society +cobordism hypothesis +coefficient matrix +coffee ring effect +cognitive system +coherence +coherence function +coherence length +coherence property +coherence representation +coherence time +coherent addition +coherent anti stokes raman spectroscopy +coherent attack +coherent backscattering +coherent control +coherent coupling +coherent destruction +coherent diffraction imaging +coherent dynamic +coherent evolution +coherent excitation +coherent feedback +coherent field +coherent information +coherent interaction +coherent light +coherent manipulation +coherent oscillation +coherent perfect absorber +coherent population trapping +coherent spectroscopy +coherent state +coherent superposition +coherent transfer +coherent transport +coherent tunneling +coherently control +coherently manipulated +coil +coin operator +coincidence counting +coincidence detection +coincidence measurement +coincidence probability +cold atom ensemble +cold atom experiment +cold atom gas +cold atom laboratory +cold atom system +cold dark matter +cold fission +cold fusion +cold polar molecule +cold trapped ion +cold vapour +coleman mandula theorem +coleman weinberg potential +collaborative computing project for nmr +collapse model +collection efficiency +collective atomic excitation +collective attack +collective behaviour +collective coupling +collective decoherence +collective dephasing +collective effect +collective excitation +collective measurement +collective mode +collective motion +collective noise +collective spin +collective state +collinear quasi phase matching +collision energy +collision induced absorption and emission +collision problem +collisional broadening limit +collisional decoherence +collisional excitation +collisional process +colocalization benchmark source +color center +color charge +color code +color confinement +color flavor locking +color glass condensate +color superconductivity +colored noise +colored particle in cell +colorimeter +colossal magnetoresistance +combinatorial hierarchy +combining dimensions +common bath +common reservoir +communicating party +communication capacity +communication channel +communication complexity +communication cost +communication protocol +commutation relation +commutator subspace +commuting observable +commuting operator +compact fluorescent lamp +compact operator on hilbert space +compact quantum group +compact reconnaissance imaging spectrometer +compacton +comparative analysis +comparative study +complementarity +complementarity principle +complementarity relation +complementary observable +complementary screen +complete active space +complete graph +complete information +complete positivity +complete set +complete set of commuting observable +complete set of function +complete solution +complete system +complete theory +completely mixed state +completely positive map +completely positive trace preserving map +completely suppressed +completeness +completeness relation +complex conjugation +complex differentiable +complex function +complex hadamard matrix +complex hilbert space +complex network +complex number +complex oxide +complex plane +complex potential +complex quantum system +complexity theory +composite fermion +composite field +composite gravity +composite pulse +composite quantum system +composite reaction texturing +composite system +compound system +compressed sensing +compton edge +compton effect +compton scattering +compton wavelength +computation time +computational bases +computational basis +computational complexity +computational cost +computational fluid dynamic +computational power +computational problem +computational resource +compute analytically +computed efficiently +computer algorithm +computer science +computer simulation +concurrence +condensation +condensed matter +condensed matter physic +condensed matter system +conditional dynamic +conditional entropy +conditional measurement +conditional preparation +conditional probability +conditional quantum entropy +conditional state +conductance quantum +conduction band +conduction electron +conduction in a moving medium +conductivity +conductivity near the percolation threshold +conductor +configuration interaction +configuration space +configuration state function +confining potential +conformal bootstrap +conformal family +conformal field theory +conformal loop ensemble +conformal supergravity +conformal symmetry +congruent melting +conical hole or point +conical intersection +conjugate bases +conjugate basis +conjugate momenta +conjugate variable +conquest +conscious observer +conservation law +conservation law of energy +conservation law of momentum +conservation of angular momentum +conserved quantity +consistency condition +consistent description +consistent histories +consistent history approach +consistent theory +constant diffusion process +constant magnetic field +constant time +constituent quark +constituive equation +constitutive relation +constrained system +constraint algebra +constraints imposed +constructive interference +constructive quantum field theory +contact interaction +contact process +contextuality +continuity equation +continuous cooling transformation +continuous degree +continuous family +continuous limit +continuous observation +continuous quantum computation +continuous quantum measurement +continuous quantum variable +continuous scan laser doppler vibrometry +continuous set +continuous slowing down approximation range +continuous spectra +continuous spectrum +continuous spontaneous localisation +continuous symmetry +continuous time quantum walk +continuous variable +continuous variable entanglement +continuous variable quantum cryptography +continuous variable quantum key distribution +continuous variable quantum system +continuous variable quantum teleportation +continuous variable regime +continuous variable state +continuous variable system +continuous variable teleportation +continuous wave +continuum limit +continuum percolation theory +contraction +contractive state +contravariant vector +control error +control field +control parameter +control pulse +control qubit +control scheme +control theory +controlled disorder +controlled generation +controlled not gate +controlled phase gate +controlled z +convective boundary layer +convective derivative +conventional superconductor +conventional transmission electron microscope +convergence in square mean +convergence property +conversion efficiency +conversion electron moessbauer spectroscopy +conversion process +convex combination +convex hull +convex optimization +convex set +convolution theorem +cooling process +cooper pair +cooper pair box +cooperative effect +coorbit theory +copenhagen +copenhagen interpretation +copper vapor laser +coprecipitation +core charge +core electron +core excited shape resonance +corner transfer matrix +coronal radiative loss +correlated noise +correlated photon +correlated photon pair +correlated state +correlation +correlation effect +correlation energy +correlation function +correlation inequalities +correlation inequality +correlation length +correlation matrix +correlation property +correlation time +correspondence principle +correspondence rule +coset construction +cosmic acceleration +cosmic microwave background +cosmic ray spallation +cosmic string spacetime +cosmological constant problem +cosmological interpretation +cost function +coster kronig transition +cotlar stein lemma +coulomb barrier +coulomb blockade +coulomb collision +coulomb excitation +coulomb explosion +coulomb field +coulomb force +coulomb gauge +coulomb interaction +coulomb law +coulomb operator +coulomb potential +coulomb repulsion +coulomb scattering state +coulombs law +coumarin +counter rotating term +counterfactual definiteness +counterfactual quantum computation +counting statistic +coupled bose einstein condensate +coupled cavity array +coupled cluster +coupled dynamic +coupled equation +coupled harmonic oscillator +coupled oscillator +coupled quantum dot +coupled qubit +coupled spin +coupled system +coupling constant +coupling efficiency +coupling field +coupling parameter +coupling strength +covafiant lagrangian formalism +covalent superconductor +covariance +covariance mapping +covariance matrix +cp violation +cp2k +cpt symmetry +craic technologies +cramer rao bound +creation and annihilation operator +critical behaviour +critical coupling +critical exponent +critical field +critical fluctuation +critical line +critical opalescence +critical phenomena +critical point +critical property +critical radius +critical system +critical temperature +critical value +critical variable +cross kerr nonlinearity +cross phase modulation +cross section +crossed crystal configuration +crowther criterion +cryochemistry +cryoelectronic +cryogenic particle detector +cryogenic temperature +cryoneurolysis +cryoneuromodulation +cryophorus +cryoprotectant +cryoscopic constant +cryostasis +cryosurgery +cryozoa +cryptographic protocol +crypton +crystal base +crystal momentum +crystal oven +crystallization +crystallization of polymer +css code +cubic harmonic +cubical atom +cumulant expansion +cuprate +curie tempenature +curie temperature +curies law +current algebra +current density +current density imaging +current four vector +current quark +curtright field +curvaton +curvature of space +curved space +curved space time +custodial symmetry +cutoff +cyclic evolution +cyclic group +cyclic operation +cyclops laser +cylindrical capacitor +cοΏ½as lemma +d dimensional hilbert space +d level system +d meson +d term +d wave system +d wave two +dacapo +dalitz plot +damped harmonic oscillator +damped lyman alpha system +damped oscillator +damping rate +damping time +dangerously irrelevant operator +darboux transformation +dark count +dark count rate +dark energy +dark energy star +dark matter +dark photon +dark state +dark state polariton +dasar +data compression +data processing inequalities +data processing inequality +david deutsch +davisson germer experiment +davydov soliton +dbar problem +de broglie bohm interpretation +de broglie bohm theory +de broglie relation +de broglie wavelength +de haas van alphen effect +de sitter invariant special relativity +de sitter spacetime +de wolf +dead time +debye waller factor +decay channel +decay energy +decay exponentially +decay process +decay product +decay rate +decay time +decision making +decision problem +decision theory +decoherence +decoherence channel +decoherence control +decoherence dynamic +decoherence effect +decoherence factor +decoherence free subspace +decoherence functional +decoherence induced +decoherence mechanism +decoherence process +decoherence property +decoherence rate +decoherence suppression +decoherence theory +decoherence time +decoherence time scale +decoherent history approach +deconfinement +decoy state +decoy state method +decoy state quantum key distribution +deelectrification +deelectrification factor +deep inelastic scattering +deep level transient spectroscopy +deferred measurement principle +deflection +deformation parameter +deformation polarization +deformation quantization +degasperis procesi equation +degenerate energy level +degenerate ground state +degenerate operation +degenerate parametric oscillator +degenerate state +degree of coherence +delay time +delayed choice +delayed choice experiment +delayed choice quantum eraser +delayed neutron +delbrueck scattering +delocalized electron +delta baryon +delta potential +dennis m. bushnell +dense coding +density +density fluctuation +density functional theory +density matrix +density matrix renormalization group +density of state +density operator +density profile +dephasing +dephasing channel +dephasing due +dephasing effect +dephasing noise +dephasing rate +dephasing rate sp formula +dephasing time +depletion effect +deployable tactical engagement system +depolarization ratio +depolarizing channel +depolarizing noise +deposition +derivations of the lorentz transformation +derricks theorem +deslandres table +desy +detection efficiency +detection inefficiency +detection loophole +detection scheme +detector efficiency +detector inefficiency +determination of nuclear radii +deterministic entanglement +deterministic generation +deterministic model +deterministic quantum computation +deuterium burning +deuterium nmr +deutsch jozsa algorithm +deutsch jozsa problem +device independent quantum cryptography +dew point +dexter electron transfer +di positronium +diabatic +diamagnetic +diamagnetism +diamond +diatom molecule +dicke effect +dicke model +dicke state +dielectric +dielectric displacement +dielectric function +dielectric media +dielectric medium +dielectric permittivity +dielectric polarization +dielectric property +dielectric spectroscopy +dielectric susceptibility +diffeomorphism constraint +differential cross section +differential dynamic microscopy +differential geometry +differential operator +diffraction +diffraction efficiency +diffraction formalism +diffraction grating +diffraction in time +diffraction limit +diffraction limited system +diffraction pattern +diffraction tomography +diffractive beam splitter +diffuse interstellar band +diffuse reflectance infrared fourier transform +diffuse serie +diffusing wave spectroscopy +diffusion coefficient +diffusion monte carlo +diffusion mri +diffusion process +diffusionless transformation +diffuson +digital fish library +dihydrogen cation +diis +dilaton +dimensional entangled quantum system +dimensional regularization +dimensional transmutation +dinger cat state +dinger equation +diode +diode pumped solid state laser +dipolar bose einstein condensate +dipolar interaction +dipole approximation +dipole blockade +dipole density +dipole dipole interaction +dipole layer +dipole moment +dipole vector +diquark +dirac adjoint +dirac bracket +dirac delta function +dirac electron +dirac equation +dirac equation in curved spacetime +dirac equation in the algebra of physical space +dirac fermion +dirac field +dirac hamiltonian +dirac hole theory +dirac operator +dirac oscillator +dirac particle +dirac point +dirac sea +dirac spectrum +dirac spinor +dirac string +dirac von neumann axiom +diracs relativistic generalization of +direct and indirect band gap +direct quantum chemistry +directed percolation +dirichlet boundary condition +discovery of the neutron +discrete dipole approximation +discrete dipole approximation code +discrete fourier transform +discrete phase space +discrete spectrum +discrete symmetry +discrete time quantum walk +discrete wigner function +disjoint interval +disk laser +disordered system +dispersion force +dispersion relation +dispersion relation for electromagnetic in vacuum +dispersion relation for electromagnetic wave +dispersion relation in a conducting medium +dispersive bistability +dispersive interaction +dispersive media +dispersive medium +dispersive regime +displaced vacuum +displacement current +displacement operator +displacement polarization +dissipation model for extended environment +dissipation rate +dissipative dynamic +dissipative effect +dissipative environment +dissipative preparation +dissipative process +dissipative quantum system +dissipative soliton +dissipative system +distant atom +distant node +distant particle +distillable entanglement +distillation +distillation protocol +distinguishability +distinguishable particle +distribute entanglement +distributed bragg reflector laser +distributed entanglement +distributed feedback laser +distributed multipole analysis +distributed quantum computation +distributed quantum computing +distribution +divergence +dixmier trace +dm interaction +dmol3 +domain wall +domino tiling +doppler cooling +doppler cooling limit +doppler effect +doppler shift +doppler spectroscopy +dose fractionation theorem +double exchange mechanism +double ionization +double quantum dot +double slit +double slit experiment +doublet state +doubly degenerate +dove prism +down converted photon +down quark +drell yan process +dressed state +driven harmonic oscillator +driven system +driving field +driving force +driving frequency +driving laser +dropleton +drude model +drudes formula +dual superconductor model +duanes hypothesis +ductile brittle transition +dunham expansion +durcupan +duru kleinert transformation +dwell time +dyall hamiltonian +dye laser +dym equation +dynamic contrast enhanced mri +dynamic light scattering +dynamic structure factor +dynamical decoupling +dynamical mean field theory +dynamical picture +dynamical reduction +dyon +dyson serie +dzyaloshinskii moriya interaction +early universe +earths field nmr +eavesdropping +eberhard inequalities +eberhard inequality +ebullioscopic constant +eckart condition +eckhaus equation +ecton +edans +eddy covariance +edge mode +edge of the wedge theorem +edge state +efda +effective action +effective atomic number +effective coupling +effective current +effective dynamic +effective field theory +effective hamiltonian +effective interaction +effective magnetic field +effective mass +effective photon mass +effective potential +effective temperature +effective theory +effective voltage +effects of nuclear explosion +efficiency +efficient algorithm +efficient classical simulation +efficient computation +efficient coupling +efficient generation +efimov effect +efimov physic +efimov state +ehrenfest theorem +ehrenfest time +ehrenfest tolman effect +eigenspinor +eigenstate thermalization hypothesis +eigenvalue equation +eigenvalue perturbation +eigenvalue problem +eigenvalue spectrum +eight vertex model +eikonal approximation +einselection +einstein brillouin keller method +einstein coefficient +einstein de haas effect +einstein maxwell dirac equation +einstein podolsky rosen +einstein podolsky rosen correlation +einstein podolsky rosen paradox +einstein podolsky rosen steering +einsteins summation convention +ekman layer +elastic scattering +electret +electric charge +electric dipole spin resonance +electric dipole transition +electric field gradient +electric field intensity +electric field nmr +electric motor +electric potential +electric susceptibility +electrical aerosol spectrometer +electrically detected magnetic resonance +electricoil +electrochromism +electrolaser +electromagnetic absorption by water +electromagnetic cavities +electromagnetic cavity +electromagnetic field strength tensor +electromagnetic interaction +electromagnetic momentum density +electromagnetic radiation +electromagnetic vacuum fluctuation +electromagnetic wave +electromagnetic waves in matter +electromagnetic waves in vacuum +electromagnetically induced grating +electromagnetically induced transparency +electron +electron affinity +electron backscatter diffraction +electron beam additive manufacturing +electron beam freeform fabrication +electron beam furnace +electron beam induced current +electron beam induced deposition +electron beam ion trap +electron beam machining +electron beam physical vapor deposition +electron beam prober +electron beam processing +electron beam technology +electron beam texturing +electron beam tomography +electron bubble +electron configuration +electron correlation +electron degeneracy pressure +electron density +electron diffraction +electron energy loss spectroscopy +electron excitation +electron gas +electron gun +electron hole +electron liquid +electron localization function +electron magnetic circular dichroism +electron magnetic moment +electron multiplier +electron neutrino +electron nuclear double resonance +electron pair +electron paramagnetic resonance +electron phenomenological spectroscopy +electron phonon coupling +electron positron pair production +electron precipitation +electron rest mass +electron scattering +electron shell +electron spectrometer +electron spectroscopy +electron spin +electron spin qubit +electron spin resonance +electron therapy +electron tomography +electron transfer +electron transport +electron tunneling +electron wake +electron wave packet interference +electronic anticoincidence +electronic band structure +electronic correlation +electronic density +electronic energy transfer +electronic excitation +electronic spin +electronic state +electronic structure +electronic transport +electrostatic +electrostatic energy +electrostatic lens +electrostatic nuclear accelerator +electrostatic potential +electrostatic unit +electrostriction +electrothermal feedback +electroweak interaction +electroweak scale +elementary excitation +elementary gate +elementary particle +elitzur vaidman bomb tester +elitzurs theorem +elko field +ellen gleditsch +elliott formula +ellipsometry +elliptic flow +elliptically polarized wave +emc effect +emission spectra +emission spectrum +empty lattice approximation +encoded qubit +endovenous laser treatment +energy band +energy catalyzer +energy conservation +energy density of the electric field +energy dispersive x ray diffraction +energy dispersive x ray spectroscopy +energy flow +energy level +energy level splitting +energy momentum 4 vector +energy momentum tensor +energy operator +energy transfer +energy transfer upconversion +engineering diffraction +englert greenberger yasin duality relation +ensemble interpretation +entangled atom +entangled coherence +entangled light +entangled pair +entangled particle +entangled photon +entangled photon pair +entangled quantum state +entangled quantum system +entangled qubit +entangled qutrit +entangled state +entangled system +entanglement +entanglement assisted capacity +entanglement assisted classical capacity +entanglement breaking channel +entanglement class +entanglement classification +entanglement concentration +entanglement cost +entanglement creation +entanglement criteria +entanglement criterion +entanglement decay +entanglement detection +entanglement dimensionality +entanglement distillation +entanglement distribution +entanglement entropy +entanglement evolution +entanglement fidelity +entanglement generation +entanglement manipulation +entanglement measure +entanglement monotone +entanglement of formation +entanglement purification +entanglement renormalization +entanglement representation +entanglement resource +entanglement sharing +entanglement spectra +entanglement spectrum +entanglement sudden death +entanglement swapping +entanglement teleportation +entanglement transfer +entanglement transformation +entanglement witness +entangling capability +entangling gate +entangling power +entropic inequalities +entropic inequality +entropic quantity +entropic uncertainty +entropic uncertainty relation +entropy exchange +entropy increase +entropy inequality +entropy of black hole +entropy of entanglement +entropy production +environment +environment induced decoherence +environmental decoherence +environmental degree +environmental effect +environmental interaction +environmental noise +environmental scanning electron microscope +enyi entropy +ep quantum mechanic +epcard +epistemological letter +epr argument +epr correlation +epr entanglement +epr experiment +epr pair +epr paradox +epr state +epsilon radiation +eqp +equilibrium state +equivalence class +equivalence principle +equivalent width +er:yag laser +er=epr +ergodic hypothesis +ermakov lewis invariant +ernst angle +error ellipse +essential singularity +eta meson +eternally collapsing object +ether drift experiment +euclidean quantum gravity +euclidean space +eugene mallove +eugene podkletnov +euler heisenberg lagrangian +euler lagrange equation +euler maclaurin formula +european spallation source +eutectic +eutectic system +eutectoid +evanescent field +evanescent mode +evanescent wave +evaporation +evaporative cooling +even and odd atomic nuclei +event horizon +event symmetry +everett interpretation +evershed effect +evolution equation +evolution operator +evolution time +ex situ conservation +exablate +exchange coupling +exchange energy +exchange force +exchange interaction +exchange operator +exchange symmetry +excimer laser +excitation +excitation energy transfer +excitation function +excitation population +excitation probability +excitation spectra +excitation spectrum +excited atom +excited state +exciton +exciton polariton +excitonic state +exclusion principle +exclusive correlation spectroscopy +exoelectron emission +exotic atom +exotic baryon +exotic hadron +exotic meson +exotic particle +expanding universe +expectation value +exponential decay law +exponential scaling +exponential separation +exponential speed +exponential speedup +extended hueckel method +extended interaction oscillator +external beam radiotherapy +extinction coefficient +extinction ratio +extraordinary magnetoresistance +eye surgery +fabry perot cavities +fabry perot cavity +factoring algorithm +factorization method +faddeev equation +faddeev popov ghost +fair sampling +fair sampling assumption +fajans paneth hahn law +fano factor +fano resonance +far infrared laser +faraday effect +faradays law of induction +fast fission +fast low angle shot magnetic resonance imaging +fast neutron therapy +faster than light +fault current limiter +fault tolerance +fault tolerant quantum computation +fault tolerant quantum computing +fayet iliopoulos d term +fazia +feedback control +feedback loop +fellgetts advantage +femtochemistry +femtosecond pulse shaping +fenna matthews olson complex +fermi arc +fermi dirac statistic +fermi energy +fermi gas +fermi heap and fermi hole +fermi level +fermi liquid theory +fermi motion +fermi point +fermi resonance +fermi sea +fermi statistic +fermi surface +fermi surface of superconducting cuprate +fermion +fermion doubling +fermion system +fermionic atom +fermionic condensate +fermionic field +fermionic system +fermis golden rule +fermis interaction +ferrimagnetism +ferroelectric crystal +ferroelectrics +ferromagnetic phase +ferromagnetic superconductor +ferromagnetics +ferromagnetism +feshbach fano partitioning +feshbach resonance +few body system +feynman checkerboard +feynman diagram +feynman heaviside expressions for field +feynman parametrization +feynman slash notation +fiber based wavelength division multiplexer +fiber bragg grating +fiber disk laser +fiber laser +fiber source +fibonacci anyon +fibre bundle +fidelity decay +fidelity of quantum state +fidelity susceptibility +field approximation +field effect +field electron emission +field equation +field strength tensor +field tensor +fierz identity +filling factor +fine structure +fine structure constant +fine structure splitting +finite amount +finite automata +finite bandwidth +finite conductivity +finite difference method +finite dimension +finite dimensional case +finite dimensional hilbert space +finite dimensional quantum system +finite dimensional representation +finite dimensional system +finite element analysis +finite potential well +firestrike +firewall +first order coherence +first order correlation function +first quantization +fisher information +fission product +fission product pilot plant +fitzgerald lorentz contraction +fixed orbit +fizeaus experiment +flack parameter +flash +flash freezing +flash point +flat spacetime +flavour +flip angle +floer homology +floquet state +floquet theory +flow separation +fluctuation dissipation theorem +fluctuation theorem +fluctuation x ray scattering +fluid analogs in quantum mechanic +fluid attenuated inversion recovery +fluorescein +fluorescence correlation spectroscopy +fluorescence cross correlation spectroscopy +fluorescence intensity decay shape microscopy +fluorescence intermittency +fluorescence loss in photobleaching +fluorescence microscope +fluorescence recovery after photobleaching +fluorescence spectroscopy +fluorescence spectrum +fluorescent tag +fluorine 19 nuclear magnetic resonance +fluorometer +flux footprint +flux pinning +flux pumping +flux quantization +flux quantum +flux qubit +fluxon +fmo complex +fmri adaptation +fock matrix +fock space +fock state +focused ion beam +foerster coupling +fokker planck equation +foldy wouthuysen transformation +forbidden mechanism +force density +force equation +force spectroscopy +form factor +formation of the universe +forward scattering amplitude +four dimensional laplacian operator +four divergence +four fermion interaction +four gradient +four level system +four potential +four tensor +four vector +four wave mixing +fourier analysis +fourier bessel serie +fourier domain mode locking +fourier integral +fourier serie +fourier spherical bessel series +fourier transform +fourier transform infrared spectroscopy +fourier transform spectroscopy +fourth order +fractional anisotropy +fractional crystallization +fractional freezing +fractional quantum hall effect +fractional quantum hall state +fractional quantum mechanic +fractional revival +fractional schroedinger equation +fractional statistic +fractional supersymmetry +fractional vortices +fracton +franck condon principle +franck hertz experiment +franco british nuclear forum +fraunhofer diffraction +fraunhofer distance +fraunhofer line +fraxel +fredholm module +fredkin gate +free carrier absorption +free electron +free electron laser +free electron model +free energy +free evolution +free fall +free fall atomic model +free fermion +free field +free induction decay +free motion +free orbit experiment +free particle +free space +free space optical communication +freeze thaw resistance +freezing +freezing point +freezing point depression +frequency addition source of optical radiation +frequency comb +frequency conversion +frequency dependence +frequency dependence of the conductivity +frequency dependence of the index of refraction +frequency detuning +frequency difference +frequency distribution +frequency distribution of radiation +frequency domain +frequency entanglement +frequency modulation +frequency range +frequency resolved optical gating +frequency shift +frequency spectrum +frequent measurement +fresnel +fresnel diffraction +fresnel number +fresnel zone +fresnels formula +fresnels rhombus +freund rubin compactification +friedmann robertson walker metric +fringe visibility +frobenius manifold +froissart stora equation +frontier molecular orbital theory +frozen ark +frozen mirror image method +frozen zoo +frw/cft duality +frοΏ½edericksz transition +fubini study metric +fujikawa method +fulde ferrell larkin ovchinnikov phase +full configuration interaction +full spectral imaging +functional integral +functional integration +functional magnetic resonance imaging +functional magnetic resonance spectroscopy of the brain +functional renormalization group +fundamental serie +fusenet +fusion ignition +fusion rule +futbolin +fuzzy cold dark matter +fuzzy sphere +g factor +g strain +gadolinium yttrium garnet +gain medium +gain switching +galerkins method +galilean invariance +galilean relativity +galilean transformation +galilei group +game theory +gamma counter +gamma matrices +gamma ray spectrometer +gammasphere +gamow factor +gamow teller transition +gans theory +gary taubes +gas dynamic laser +gas electron diffraction +gas laser +gasochromism +gate fidelity +gate operation +gate time +gate voltage +gauge anomaly +gauge boson +gauge covariant derivative +gauge field +gauge fixing +gauge gravitation theory +gauge group +gauge invariance +gauge invariant +gauge potential +gauge principle +gauge symmetry +gauge theory +gauge theory gravity +gauge transformation +gauged supergravity +gaugino +gaugino condensation +gauss sum +gauss theorem +gaussian approximation +gaussian beam +gaussian broadening +gaussian channel +gaussian entanglement +gaussian fixed point +gaussian measurement +gaussian method +gaussian noise +gaussian orbital +gaussian pillbox +gaussian position +gaussian quantum discord +gaussian quantum monte carlo +gaussian state +gaussian system of unit +gausson +gausss law +geiger marsden experiment +geiger nuttall law +geisa +gekko xii +gel dosimetry +gelfand naimark segal construction +gelfand zeitlin integrable system +gell mann and low theorem +gell mann matrices +gell mann okubo mass formula +general antiparticle spectrometer +general covariant transformation +general criterion +general integral theorem +general relativity +generalized abel plana formula +generalized bell inequalities +generalized bell inequality +generalized bell state +generalized coherence +generalized entanglement +generalized entropy +generalized fourier coefficient +generalized gibbs ensemble +generalized index of refraction +generalized measurement +generalized momenta +generalized ohms law +generalized permittivity +generalized probabilistic theory +generalized quantum measurement +generalized relative entropy +generalized uncertainty principle +generalized uncertainty relation +generalized valence bond +generate entanglement +generated entanglement +generating entanglement +generating function +generators of the lorentz group +genetic algorithm +genuine multipartite entanglement +genuine tripartite entanglement +geometric algebra +geometric approach +geometric description +geometric discord +geometric entanglement +geometric formulation +geometric interpretation +geometric measure +geometric measure of entanglement +geometric phase +geometric phase analysis +geometric quantization +geometric quantum discord +geometric structure +geometrical interpretation +geometrical property +geometrical structure +geonium atom +gerchberg saxton algorithm +gf method +ghirardi rimini weber theory +ghost imaging +ghz experiment +ghz state +ghz theorem +giant magnetoresistance +giant resonance +gibbs state +gim mechanism +gingerbreadman map +ginzburg landau theory +glashow resonance +glass transition +glauber sudarshan p representation +gleasons theorem +global anomaly +global entanglement +global symmetry +global warming potential +globar +glossary of quantum philosophy +glueball +gluex +gluino +gluon +gluon condensate +gluon field +gluon field strength tensor +goertler vortices +golay cell +golden rule +goldstino +goldstone boson +good quantum number +goos hanchen effect +gopakumar vafa invariant +gottesman knill theorem +graded manifold +gradient enhanced nmr spectroscopy +graph isomorphism problem +graph state +graph theory +graphane +graphene +graphene quantum dot +graphene sheet +graphical unitary group approach +graphite furnace atomic absorption +graphite like zno nanostructure +grassmann integral +grassmann number +gravastar +graviphoton +graviscalar +gravitational anomaly +gravitational effect +gravitational field +gravitational instanton +gravitational interaction +gravitational interaction of antimatter +gravitational radiation +gravitational redshift +gravitational self interaction +gravitational wave +gravitational wave detection +gravitational wave detector +gravitational wave interferometer +gravitino +graviton +gravity +gravity wave +gravity wave interferometer +gray tree frog +grazing incidence small angle scattering +green function +green function in electrostatic +greenberger horne zeilinger +greenberger horne zeilinger state +greenberger horne zeilinger theorem +greens first identity +greens function +greens reciprocation theorem +greens theorem +greg fahy +greninger chart +grenouille +gribov ambiguity +grimm sommerfeld rule +grism +gross neveu model +gross pitaevskii equation +grotrian diagram +ground state +ground state atom +ground state cooling +ground state degeneracy +ground state energy +ground state entanglement +ground state fidelity +ground state phase diagram +ground state property +ground state wave function +group field theory +group hopf algebra +group theory +group velocities +group velocity +grover algorithm +grover search +grover walk +grovers algorithm +grylloblatta campodeiformis +grylloblattidae +gsi anomaly +guided mode +gupta bleuler formalism +gutmann beckett method +gw approximation +gyration frequency +gyration radius +gyromagnetic ratio +gyrotropic media +gyrovector space +haag lopuszanski sohnius theorem +haags theorem +haar measure +hadamard gate +hadamard matrix +hadamard space +hadamard transform +hadamard walk +hadron +hadron spectroscopy +hadronization +hafnium controversy +hagedorn temperature +hagen rubens relation +hair removal +half metal +hall effect +halo nucleus +halochromism +halomonas +hamilton jacobi einstein equation +hamilton jacobi equation +hamiltonian +hamiltonian constraint +hamiltonian constraint of lqg +hamiltonian describing +hamiltonian description +hamiltonian dynamic +hamiltonian evolution +hamiltonian field theory +hamiltonian formalism +hamiltonian formulation +hamiltonian function +hamiltonian lattice gauge theory +hamiltonian matrix +hamiltonian operator +hamiltonian parameter +hamiltonian system +hamiltons optico mechanical analogy +hamiltons principle +hanbury brown +hanbury brown and twiss effect +hanbury brown twiss experiment +hankel function +hankel transform +hanle effect +hard core boson +hard hexagon model +hardening +hardys paradox +harmonic approximation +harmonic chain +harmonic confinement +harmonic generation +harmonic oscillator +harmonic oscillator potential +harmonic potential +harmonic superspace +harmonic trap +hartman effect +hartree fock method +hartree product +hawking effect +hawking radiation +hawking temperature +heat bath +heat deflection temperature +heat engine +heat of combustion +heat transfer +heat transport +heaviside feynman expression +heavy baryon chiral perturbation theory +heavy fermion +heavy fermion superconductor +heavy ion collision +heisenberg algebra +heisenberg chain +heisenberg cut +heisenberg equation +heisenberg group +heisenberg langevin equation +heisenberg limit +heisenberg model +heisenberg picture +heisenberg scaling +heisenberg uncertainty relation +heisenbergs microscope +helical orbit spectrometer +helicity +helicity bases +helicity basis +helion +helion energy +helium +helium atom +helium line ratio +helium neon laser +hellmann feynman theorem +helmholtz coil +helmholtz equation +helram +hemisphere +heralded single photon +heralded single photon source +hermite gauss +hermite polynomial +hermitian hamiltonian +hermitian matrix +hermitian operator +herta regina leng +hertz vector +hertzian dipole +hessian normal form +heteroazeotrope +heterodyne detection +heusler alloy +hexaarylbiimidazole +hexadecupole deformation +hexadecupole moment +hidden measurements interpretation +hidden momentum +hidden subgroup problem +hidden symmetry +hidden variable +hidden variable model +hidden variable theory +higgs boson +higgs field +higgs mechanism +higgs phase +higgsino +high aperture lens +high definition fiber tracking +high dimension +high dimensional entangled +high dimensional entanglement +high dimensional quantum state +high dimensional system +high dimensional transformation +high dimensionally entangled +high efficiency superconducting detector +high energy density physic +high energy liquid laser area defense system +high energy nuclear physic +high energy physic +high fidelity quantum gate +high finesse cavities +high finesse cavity +high finesse optical cavities +high finesse optical cavity +high finesse optical resonator +high flux advanced neutron application reactor +high frequency approximation +high frequency behavior of dielectric constant +high harmonic generation +high intensity focused ultrasound +high order harmonic generation +high resolution electron energy loss spectroscopy +high resolution transmission electron microscopy +high sensitivity +high spatial resolution +high temperature limit +high temperature superconductivity +high visibility +higher dimension +higher dimensional gamma matrices +higher dimensional quantum system +higher dimensional system +higher moment +higher order correlation function +higher temperature +highly charged ion +highly efficient +highly efficient superconducting detector +highly entangled +highly entanglement +highly sensitive +hilbert schmidt distance +hilbert schmidt norm +hilbert space +hilbert space dimension +hilbert space formalism +hilbert space structure +hilbert spectroscopy +hiper +histidine tryptophan ketoglutarate +holbrook superconductor project +holevo bound +holevo capacity +holevo information +holevos theorem +hollow atom +hollow cathode lamp +holographic principle +holography +holomorphic +holomovement +holon +holonomic quantum computation +holstein herring method +holstein primakoff transformation +homess law +homodyne detection +homodyne detector +homodyne measurement +homodyne tomography +homogeneous broadening +homogeneous magnetic field +honeycomb lattice +hong ou mandel +hong ou mandel effect +hong ou mandel interference +hong ou mandel interferometry +hookes atom +hopfield dielectric +horava lifshitz gravity +hot band +hot particle +hpo formalism +hubbard model +hueckel method +hunds case +hunds rule +hunter saxton equation +husimi distribution +husimi function +husimi q representation +huygens fresnel principle +huygens principle +huygenss principle +hybrid entanglement +hybrid functional +hybrid quantum system +hybrid silicon laser +hybrid system +hydrocarbon dew point +hydrodynamic equations for conducting fluid +hydrodynamic quantum analog +hydrogen atom +hydrogen fluoride laser +hydrogen like atom +hydrogen maser +hydrogen molecule +hydroxyl tagging velocimetry +hypercharge +hyperdeformation +hyperfine coupling +hyperfine interaction +hyperfine interaction energy +hyperfine level +hyperfine splitting +hyperfine state +hyperfine structure +hypermultiplet +hypernucleus +hyperon +hyperpolarization +hyperspectral imaging +hypertriton +hyphomonas +hypothermia +hypsochromic shift +hysteresis +hze ion +ice type model +idealizations in electromagnetism +ideally hard superconductor +identical atom +identical boson +identical copy +identical fermion +identical particle +identical photon +identity operator +identity theorem for holomorphic function +identity theorem for power series +idler mode +idler photon +image charge +image mapping spectrometer +imaginary time +imaging spectrometer +imaging spectroscopy +immirzi parameter +immobilized enzyme electron spin resonance +immunogold labelling +impact ionization +impact parameter +impedance +implicate and explicate order +in situ electron microscopy +in vivo magnetic resonance spectroscopy +ince gauss +incoherent broad band cavity enhanced absorption spectroscopy +incoherent scattering +incompatible measurement +incompatible observable +incongruent melting +increasing temperature +incredible utility +independent electron approximation +independent parameter +independent reservoir +independent source +index of reflection +index of refraction +indistinguishability +indistinguishable particle +indistinguishable photon +indistinguishable single photon +individual addressing +individual atom +individual attack +induce charge +induced gamma emission +inductance +induction coefficient +inductive resistance +inductively coupled plasma +inductively coupled plasma atomic emission spectroscopy +inelastic collision +inelastic neutron scattering +inelastic process +inelastic scattering +inequality violation +inert pair effect +inertial redshift +infinite dimension +infinite dimensional case +infinite dimensional hilbert space +infinite dimensional quantum system +infinite dimensional system +infinite energy +infinite family +infinite temperature +information capacity +information causality +information encoded +information entropy +information exchange +information flow +information gained +information geometry +information loss +information processing task +information theoretic approach +information theoretic security +information theory +information transfer +information transmission +infraparticle +infrared divergence +infrared fixed point +infrared safety +infrared spectroscopy +infrared spectroscopy correlation table +inglis teller equation +inhomogeneous broadening +inhomogeneous plane wave +inhour +injection seeder +inner bremsstrahlung +input output formalism +insensitive nuclei enhanced by polarization transfer +instanton +instanton fluid +integer quantum hall effect +integrable system +integral equations of the first kind +integrated optic +integrated optical circuit +integrating sphere +intelligent laser speckle classification +intense laser field +intensity correlation +intensity dependent coupling +intensity fluctuation +intensity interferometer +interacting atom +interacting boson +interacting boson model +interacting electron +interacting fermion +interacting field +interacting particle +interacting particle system +interacting quantum system +interacting qubit +interacting spin +interacting system +interaction energy +interaction free measurement +interaction hamiltonian +interaction picture +interaction potential +interatomic coulombic decay +interband cascade laser +interface between two media +interference +interference effect +interference experiment +interference fringe +interference pattern +interference phenomena +interference term +interference visibility +interferometric measurement +interferometric scheme +interferometry +internal conversion +internal conversion coefficient +internal degree +internal dynamic +internal energy +internal field +internal space time symmetry +internal symmetry +interpretations of quantum mechanics +intersubband polariton +intersystem crossing +intervalence charge transfer +interventional magnetic resonance imaging +intracavity field +intralase +intralase sbk +intramolecular vibrational energy redistribution +intraoperative electron radiation therapy +intraoperative mri +intravoxel incoherent motion +intrinsic decoherence +intrinsic parity +intrinsic property +intruder state +invariance +invariance mechanics +invariant set postulate +inverse participation ratio +inverse photoemission spectroscopy +inverse scattering problem +inverse scattering transform +inverse square law +inverse square root potential +inverse temperature +inversion symmetry +inversion with respect to a sphere +inxitu +ion coulomb crystal +ion crystal +ion implantation +ion laser +ion milling machine +ion notation +ion reactor +ion trap +ionization +ionization energy +ionized impurity scattering +ionosphere +ir uv mixing +iron based superconductor +iron beam +iron group +iron tetraboride +irrational conformal field theory +irreducible representation +irrotational vector +isadore perlman +ising anyon +ising chain +ising interaction +ising model +iskra laser +island of inversion +isobar +isodiapher +isogenous serie +isolated quantum system +isolated singularity +isolated system +isomeric shift +isosbestic point +isospin +isothermal transformation diagram +isotone +isotopic shift +isotropic state +isovalent hybridization +isttok +iterative algorithm +ito equation +ivan dryer +ivar giaever +j coupling +j/psi meson +j1 j2 model +jablonski diagram +jacobi identity +jacobi matrix +jacobi operator +jacobi polynomial +jacobian +janus laser +jarzynski equality +jaynes cummings hamiltonian +jaynes cummings hubbard model +jaynes cummings model +jefimenkos expression +jellium +jemris +joanna fowler +johari goldstein relaxation +john bell +john marburger +joint quantum entropy +jones polynomial +jordan map +jordan wigner transformation +josephson charge qubit +josephson effect +josephson energy +josephson junction +josephson junction count +josephson penetration depth +josephson phase +josephson voltage standard +josephson vortex +jost function +joulean heat +judd ofelt theory +julian schwinger +k alpha +k band multi object spectrograph +k beta +k line +k space +kadomtsev petviashvili equation +kadowaki woods ratio +kagome lattice +kane quantum computer +kaon +kaonic hydrogen +kaonium +kapitsa dirac effect +kapitza dirac regime +karnovsky fixative +karplus equation +kashas rule +kato theorem +kautsky effect +kcbs pentagram +kdv hierarchy +kelvin helmholtz instability +kerr effect +kerr medium +kerr nonlinearity +kibble zurek mechanism +kicked rotator +kicked rotor +kikuchi line +killing spinor +kinetic equation +kinetic inductance +kinetic inductance detector +kinetic theory +kinoshita lee nauenberg theorem +kirchhoff diffraction +kirchhoff integral theorem +kirchhoffs diffraction formula +kirchhoffs integral +kirchhoffs integral representation +kirszbraun theorem +kitaev model +klein gordon equation +klein nishina formula +klein paradox +klein transformation +klein tunneling +klystron +kmb09 protocol +kms state +knight shift +knizhnik zamolodchikov equation +kochen specker theorem +kodama state +kogut susskind fermion +kohn sham equation +kolmogorov complexity +kondo model +konishi anomaly +kontsevich quantization formula +koopmans theorem +korringa kohn rostoker approximation +korteweg de vries equation +kosterlitz thouless transition +kozai mechanism +kramers kronig dispersion relation +kramers kronig relation +kramers law +kramers theorem +kramers wannier duality +kraus representation +krefts dichromaticity index +krypton +krypton fluoride laser +ktp crystal +kubo formula +kubo gap +kuipers theorem +kuramoto model +kurchatov medal +kurt wuethrich +kuzyk quantum gap +ladder operator +lageos +lagrangian +lagrangian density +lagrangian foliation +lagrangian grassmannian +laguerre gauss +laguerre polynomial +lamb dicke limit +lamb dicke regime +lamb moessbauer factor +lamb shift +lambda baryon +lambda configuration +lambda point +lambda system +lambda transition +lambert w step potential +laminar turbulent transition +lanczos tensor +landau level +landau pole +landau quantization +landau zener formula +landau zener problem +landau zener transition +landauer formula +landοΏ½ g factor +landοΏ½ interval rule +langevin equation +langmuir state +lanthanum barium copper oxide +laplace equation +laplace expansion +laplace transform +laplaces method +laplacian operator +laporte rule +large angular momentum +large detuning +large gauge transformation +large helical device +large molecule +large quantum system +large scale quantum computation +large scale quantum computer +large separation +larmor formula +larmor formula for power +larmor precession +laser +laser ablation +laser absorption spectrometry +laser accelerometer +laser antibunching +laser assisted new attachment procedure +laser based angle resolved photoemission spectroscopy +laser beam machining +laser beam profiler +laser beam quality +laser beam welding +laser blended vision +laser bonding +laser broom +laser capture microdissection +laser cavities +laser cavity +laser coagulation +laser communication +laser communication in space +laser communications relay demonstration +laser construction +laser converting +laser cooled atom +laser cooling +laser cutting +laser cutting bridge +laser designator +laser detuning +laser diffraction analysis +laser diode +laser diode rate equation +laser doppler velocimetry +laser doppler vibrometer +laser dye +laser engineered net shaping +laser engraving +laser fence +laser field +laser fluctuation +laser frequency +laser guide star +laser gun +laser hair removal +laser harp +laser hybrid welding +laser induced breakdown spectroscopy +laser induced fluorescence +laser induced incandescence +laser induced thermotherapy +laser inertial fusion energy +laser integration line +laser intensity +laser jammer +laser lamp +laser level +laser light +laser lighting display +laser line level +laser linewidth +laser lithotripsy +laser machine control +laser marking +laser medicine +laser mοΏ½gajoule +laser parameter +laser peening +laser physic +laser pointer +laser power +laser power scaling +laser printing +laser projector +laser propulsion +laser pulse +laser pumping +laser radiation +laser rangefinder +laser resurfacing +laser scalpel +laser scanning +laser scanning vibrometry +laser science +laser shaft alignment +laser speckle +laser surgery +laser survey +laser tag +laser tracker +laser ultrasonic +laser warning receiver +laser weapon system +lasik +lasik md +lasing threshold +lasing without inversion +lasnex +latent internal energy +lateral casimir force +lattice boltzmann method +lattice density functional theory +lattice depth +lattice field theory +lattice gauge theory +lattice light sheet microscopy +lattice model +lattice potential +lattice qcd +lattice scattering +lattice site +lattice spacing +lattice system +laughlin wavefunction +laurent serie +laurents expansion +laws of reflection +laws of refraction +lax pair +lboz +lcp theory +lead star +legendre differential equation +legendre function +legendre polynomial +leggett garg +leggett garg inequalities +leggett garg inequality +leggett inequalities +leggett inequality +lehmann spectral representation +length measurement +lenzs law +lepton +leroy radius +leslie lawrance foldy +level crossing +level repulsion +level shift +level spacing +lever rule +liblas +libquantum +libration +lidar +lidar detector +lie algebra +lie conformal algebra +lie group +lie superalgebra +lieb conjecture +lieb oxford inequalities +lieb oxford inequality +lieb robinson bound +lienard wiechert potential +lifshitz formula +lifshitz theory +ligand k edge +light cone +light dressed state +light front computational method +light front quantization +light front quantization application +light harvesting complexes +light matter interaction +light polarization +light propagation +light pulse +light scattered +light scattering +light section +light sheet fluorescence microscopy +light source +light storage +light transport +light wave +lightcraft +lightest supersymmetric particle +limit theorem +limiting speed +lindblad equation +lindblad form +lindblad master equation +lindblad operator +lindblad resonance +lindblad superoperator +lindblad theory +line integral +line laser +linear antenna +linear combination of atomic orbital +linear dichroism +linear energy transfer +linear entropy +linear momentum +linear motor +linear operator +linear optical device +linear optical element +linear optical quantum computation +linear optical quantum computing +linear optics quantum computation +linear optics quantum computing +linear paul trap +linear programming +linear quantum system +linear response theory +linear stability +linear superposition +linear transform model +linearly polarized +linewidth +liouville equation +liouville von neumann equation +liouvillian operator +lipkin meshkov glick model +lippmann schwinger equation +liquid crystal +liquid crystal laser +liquid crystal thermometer +liquid helium +liquid liquid critical point +liquid metal cooled reactor +liquid sky +liquid state nuclear magnetic resonance +liquidus +lithium atom +lithium burning +little hierarchy problem +little parks effect +lloyd cross +local action +local causality +local control +local decoherence +local density approximation +local distinguishability +local hamiltonian +local hamiltonian problem +local hidden variable +local hidden variable model +local hidden variable theory +local oscillator +local perturbation +local quantum field theory +local quantum operation +local quench +local realism +local realistic model +local realistic theory +local state +local symmetry +local system +local theory +local transformation +local unitary equivalence +local unitary invariant +local unitary operation +local unitary transformation +local variable +locality +locality condition +localizable entanglement +localized mode +localized molecular orbital +localized state +locally compact quantum group +locc +lockin effect +log wind profile +logarithmic conformal field theory +logarithmic schroedinger equation +logic gate +logical gate +logical operation +logical qubit +logical state +london equation +london moment +london penetration depth +long coherence time +long distance communication +long distance entanglement +long distance experiment +long distance quantum communication +long distance quantum experiment +long josephson junction +long lived quantum memory +long path laser +long period fiber grating +long range correlation +long range entanglement +long range interaction +long slit spectroscopy +long time behaviour +long time dynamic +long time evolution +long time limit +long time nuclear waste +loop group +loop integral +loop quantum cosmology +loop quantum gravity +loop representation +loophole +loophole free bell test +loophole free test +loopholes in bell test experiment +lorentz boost +lorentz force +lorentz gauge +lorentz group +lorentz invariance +lorentz invariance in loop quantum gravity +lorentz invariant +lorentz lorenz relation +lorentz symmetry +lorentz transformation +lorenz condition +lorenz gauge +loschmidt echo +loss divincenzo quantum computer +lossy beam splitter +lossy cavities +lossy cavity +lossy channel +low angle laser light scattering +low dimension +low energy electron diffraction +low energy electron microscopy +low energy excitation +low energy limit +low energy spectrum +low field nuclear magnetic resonance +low level laser therapy +low lying excitation +low lying state +low temperature +low temperature limit +low temperature regime +low voltage electron microscope +lower critical solution temperature +lowest landau level +lsz reduction formula +luca turin +luli2000 +luminosity +lunar atmosphere and dust environment explorer +lunar reconnaissance orbiter +lund string model +luttinger liquid +luttingers theorem +lyapunov control +lyapunov exponent +lyman alpha blob +lyman alpha forest +lyman alpha line +lyman limit +mach zehnder interferometer +mach zehnder interferometry +machine learning +macroscopic average +macroscopic body +macroscopic entanglement +macroscopic field +macroscopic limit +macroscopic maxwell equation +macroscopic object +macroscopic quantum coherence +macroscopic quantum electrodynamic +macroscopic quantum phenomena +macroscopic quantum self trapping +macroscopic quantum state +macroscopic quantum system +macroscopic quantum tunneling +macroscopic realism +macroscopic scale +macroscopic superposition +macroscopic system +macroscopic world +macroscopically distinct state +madelung equation +madison symmetric torus +magic angle +magic angle spinning +magic state +magic state distillation +magnesium diboride +magnetic bottle +magnetic catalysis +magnetic charge +magnetic circular dichroism +magnetic diffusion +magnetic dipole +magnetic dipole dipole interaction +magnetic energy +magnetic field +magnetic field gradient +magnetic field in matter +magnetic field intensity +magnetic field strength +magnetic flux +magnetic flux density +magnetic flux quantum +magnetic impurity +magnetic induction +magnetic induction tomography +magnetic inequivalence +magnetic microtrap +magnetic mirror +magnetic moment +magnetic monopole +magnetic multipole field +magnetic permeability +magnetic photon +magnetic polarization +magnetic pressure +magnetic property +magnetic proton recoil neutron spectrometer +magnetic quantum number +magnetic resonance +magnetic resonance angiography +magnetic resonance cholangiopancreatography +magnetic resonance elastography +magnetic resonance force microscopy +magnetic resonance imaging +magnetic resonance imaging of the brain +magnetic resonance microscopy +magnetic resonance neurography +magnetic resonance spectroscopic imaging +magnetic resonance velocimetry +magnetic scalar potential +magnetic semiconductor +magnetic shielding +magnetic skyrmion +magnetic susceptibility +magnetic system +magnetic tension +magnetic translation +magnetic trap +magnetic wave +magnetization +magnetization transfer +magnetized liner inertial fusion +magnetized sphere +magnetizing current +magneto inertial fusion +magneto optical trap +magnetocapacitance +magnetohydrodynamics +magnetometer +magnetophosphene +magnetoreception +magnetoresistance +magnetoresistive random access memory +magnetostatics +magnon +major actinide +majorana bound state +majorana equation +majorana fermion +majorana mode +majorana representation +majoron +majumdar ghosh model +man in the middle +mandel parameter +mandel q parameter +mandelstam variable +mangler transformation +manick sorcar +manipulation of atoms by optical field +many body dynamic +many body effect +many body entanglement +many body hamiltonian +many body interaction +many body localisation +many body physic +many body problem +many body quantum system +many body state +many body system +many body theory +many minds interpretation +many particle system +many worlds interpretation +marchenko equation +margolus levitin theorem +markov approximation +markov chain +markov chain in the ising model +markov property +markovian approximation +markovian dynamic +markovian limit +markovian master equation +mars climate sounder +mars telecommunications orbiter +martin fleischmann +maryland lidar availability +maser +mass excess +mass gap +mass motion +mass number +mass of photon +mass spectrometer +mass spectrum +massive particle +massive scalar field +massless particle +massless scalar field +master equation +material property +materials oscilloscope +mathematical formulation of quantum mechanic +mathematical universe hypothesis +matrix algebra +matrix element +matrix isolation +matrix mechanic +matrix product operator +matrix product state +matrix representation +matsubara frequency +mattauch isobar rule +matter field +matter interferometry +matter wave +matter wave clock +matter wave interferometer +matter wave interferometry +mattis bardeen theory +maxim chernodub +maximal entanglement +maximally entangled mixed state +maximally entanglement +maximally mixed state +maximon +maximum entanglement +maximum entropy principle +maximum entropy spectral estimation +maximum likelihood estimation +maximum violation +maxwell +maxwell bloch equation +maxwell equation +maxwell stress tensor +maxwell wagner sillars polarization +maxwellian stress tensor +maxwells equation +mccumber relation +mcstas +mean field approach +mean field approximation +mean field dynamic +mean field theory +mean free path +measurable quantity +measurement apparatus +measurement back action +measurement based quantum computation +measurement based quantum computing +measurement device independent quantum cryptography +measurement device independent quantum key distribution +measurement in quantum mechanic +measurement limit +measurement operator +measurement precision +measurement problem +measurement process +measurement statistic +measurement strategy +measurement strength +measurement theory +measurement time +measurement uncertainty +mechanical frequency +mechanical mode +mechanical motion +mechanical oscillator +mechanical resonator +mechanochromism +meir wingreen formula +meissner effect +melting +melting point +melting point depression +membrane paradigm +memory effect +mercury laser +mermin inequalities +mermin inequality +mermin wagner theorem +meron +meson +mesonic molecule +mesophase +mesoscopic physic +mesoscopic system +messential singularity +metal induced gap state +metal k edge +metal l edge +metallic plate +metallomesogen +metastable helium +metastable inner shell molecular state +metastable state +method of continued fraction +method of electric image +method of image +method of steepest descent +metric operator +metric tensor +metrology +mhv amplitude +michael coey +michael mckubre +michael nobel +michel parameter +michelson interferometry +michelson morley experiment +michigan spin physics center +micro cavities +micro cavity +micro spectrophotometry +micro spider +microcanonical ensemble +microcoil +microprobe +microring resonator +microscopic degree +microscopic derivation +microscopic description +microscopic dynamic +microscopic system +microscopic theory +microscopy +microwave +microwave field +microwave frequency +microwave photon +microwave radiation +microwave regime +microwave resonator +mictomagnetism +millikelvin temperature +mimos +min entropy +mindo +mini tes +minimal coupling +minimal model +minimal monotone +minimal output entropy +minimal subtraction scheme +minimal supersymmetric standard model +minimum design metal temperature +minimum distance +minimum error discrimination +minimum output entropy +minimum uncertainty state +minisuperspace +minkowski space +minkowski space time +minkowski vacuum +minnesota functional +minority interpretations of quantum mechanic +miracl +mirror nuclei +miscibility gap +mixed anomaly +mixed entanglement +mixed layer +mixed phase space +mixed quantum state +mixed state +mixed state entanglement +mixed two qubit state +mndo +moata +mode entanglement +mode locking +mode structure +mode volume +modern valence bond theory +modulation frequency +moduli +moessbauer effect +moessbauer spectroscopy +molecular aggregate +molecular beacon +molecular beam +molecular dynamic +molecular electronic transition +molecular gases +molecular hamiltonian +molecular ion +molecular magnet +molecular multipole moment +molecular orbital +molecular orbital theory +molecular physic +molecular polarizability +molecular rotation +molecular system +molecular tagging velocimetry +molecular term symbol +molecular vibration +molecule +mollow triplet +moment problem +momentum distribution +momentum entanglement +momentum observable +momentum operator +momentum representation +momentum space +momentum transfer +momentum transfer cross section +monin obukhov length +monochromatic wavelength +monochromatic wavelength dispersive x ray fluorescence +monochromator +monogamy inequalities +monogamy inequality +monogamy relation +monopole moment +monopole radiation field +monotone metric +monte carlo method +monte carlo methods for electron transport +monte carlo simulation +montonen olive duality +mood ring +morse palais lemma +morse potential +moseleys law +mosquito laser +mossbauer effect +motional degree +motional ground state +motional narrowing +motional state +mott bethe formula +mott criterion +mott insulator +mott insulator state +mott phase +mott problem +mott scattering +movable mirror +moving charge +moving mirror +moving object +moyal bracket +moyal product +mpc&a +mpemba effect +mtz black hole +mu problem +muffin tin approximation +mulliken population analysis +multi configuration time dependent hartree +multi configurational self consistent field +multi particle entangled state +multi particle entanglement +multi particle system +multi partite entangled state +multi partite entanglement +multi photon entangled state +multi photon experiment +multi photon state +multi photon state generation +multi qubit state +multi qubit system +multi scale entanglement renormalization ansatz +multi unit spectroscopic explorer +multiangle light scattering +multicritical point +multifocal diffractive lens for laser application +multifocal plane microscopy +multiparticle entanglement +multipartite case +multipartite correlation +multipartite entanglement +multipartite pure state +multipartite quantum correlation +multipartite quantum state +multipartite quantum system +multipartite setting +multipartite state +multipartite system +multipass spectroscopic absorption cell +multiphoton interference +multiple exciton generation +multiple histories +multiple integrated laser engagement system +multiple prism grating laser oscillator +multiple qubit +multiple scale analysis +multiple scattering +multiplet +multiplication factor +multiplicative quantum number +multiplicity +multipolarity of gamma radiation +multipole expansion +multipole field +multipole moment +multipole radiation +multipoles constructed of point charge +multiqubit state +multireference configuration interaction +multiscale tomography +multispectral image +multispectral segmentation +multivariate optical computing +multivariate optical element +multiverse +munnerlyn formula +muon capture +muon catalyzed fusion +muon neutrino +muon spin spectroscopy +muonium +mutual information +mutual interaction +mutually unbiased bases +mutually unbiased basis +mutually unbiased measurement +mycoplasma mycoides +myron mathisson +mοΏ½ller plesset perturbation theory +mοΏ½ller scattering +n = 4 supersymmetric yang mills theory +n electron valence state perturbation theory +n qubit state +n qubit system +n slit interferometric equation +n vector model +n00n state +n=8 supergravity +nahm equation +nakajima zwanzig equation +nambu jona lasinio model +nanocrystal solar cell +nanolaser +nanomechanical oscillator +nanomechanical resonator +nanophotonic coherent imager +nanophotonic resonator +nanowire +narrow resonance +nash equilibria +nash equilibrium +national ignition facility +national lidar dataset +national radiological protection board +natural bond orbital +natural orbital +natural width +nd:gdvo4 +nd:yag laser +nd:ycob +nddo +near infrared camera and multi object spectrometer +near infrared spectroscopy +nearest neighbor +nearest neighbor interaction +nearest neighbour interaction +nearly free electron model +negative eigenvalue +negative energy density +negative energy state +negative probability +negative refraction +negative temperature +negatively charged nitrogen vacancy +negativity +neighboring site +neighboring spin +nematicon +neodymium doped yttrium lithium fluoride +neodymium doped yttrium orthovanadate +neon +neon burning process +nephelauxetic effect +nernst heat theorem +nested neutron spectrometer +neumann boundary condition +neutral atom +neutral current +neutral kaon +neutral kaon system +neutral particle +neutral particle oscillation +neutralino +neutrino +neutrino oscillation +neutron +neutron acceptance diagram shading +neutron activation +neutron backscattering +neutron bomb +neutron capture +neutron capture nucleosynthesis +neutron cross section +neutron degenerate matter +neutron detection +neutron diffraction +neutron economy +neutron emission +neutron flux +neutron imaging +neutron interferometry +neutron moisture gauge +neutron number +neutron probe +neutron proton ratio +neutron radiation +neutron reflectometry +neutron reflector +neutron research facility +neutron scattering +neutron source +neutron spectroscopy +neutron spin echo +neutron star +neutron stimulated emission computed tomography +neutron temperature +neutron time of flight scattering +neutron transport +neutronium +new worlds mission +newton wigner localization +newtonian gravity +next to minimal supersymmetric standard model +nichols algebra +nielsen ninomiya theorem +nielsen olesen vortex +nielsen olsen string +nike laser +nikiforov uvarov method +niobium germanium +niobium nitride +niobium tin +niobium titanium +nitrogen +nitrogen 15 nuclear magnetic resonance spectroscopy +nitrogen laser +nitrogen rule +nitrogen vacancy +nitrogen vacancy center +nmr quantum computation +nmr quantum computer +nmr quantum information processor +nmr spectroscopy +nmr tube +nmrpipe +no broadcast theorem +no cloning +no communication theorem +no go theorem +no signaling +no teleportation theorem +noble gas configuration +noether theorem +noethers second theorem +noethers theorem +noise correlation +noise equivalent power +noise immune cavity enhanced optical heterodyne molecular spectroscopy +noise level +noise model +noise property +noise ratio +noise reduction +noise source +noise spectrum +noise strength +noise threshold +noiseless quantum channel +noiseless subsystem +noisy channel +noisy environment +noisy quantum channel +noisy storage model +non abelian anyon +non abelian gauge transformation +non abelian geometric phase +non abelian statistic +non adiabatic transition +non classical correlation +non classical feature +non classical light +non classical property +non classical state +non commuting observable +non commuting operator +non demolition +non equilibrium dynamic +non equilibrium steady state +non exponential decay +non extensive self consistent thermodynamical theory +non gaussian state +non hermitian hamiltonian +non hermitian operator +non hermitian system +non inertial frame +non interacting fermion +non interacting particle +non linear coherent state +non linear sigma model +non local correlation +non local property +non markovian behaviour +non markovian character +non markovian dynamic +non markovian effect +non markovian environment +non markovian master equation +non markovian noise +non markovian open quantum system +non markovian quantum dynamic +non markovian quantum state diffusion +non markovian regime +non maximally entanglement +non orthogonal quantum state +non orthogonal state +non perturbative +non relativistic case +non relativistic limit +non relativistic quantum mechanic +non topological soliton +non unitary evolution +nonclassical correlation +nonclassical effect +nonclassical feature +nonclassical light +nonclassical photon counting +nonclassical property +nonclassical state +noncommutative geometry +noncommutative quantum field theory +noncommutative quantum mechanic +noncommutative space +noncommuting observable +noncontextuality inequalities +noncontextuality inequality +nonequilibrium dynamic +nonequilibrium steady state +noninertial frame +nonlinear cavities +nonlinear cavity +nonlinear coherences +nonlinear coupling +nonlinear crystal +nonlinear dirac equation +nonlinear dynamic +nonlinear electrodynamic effect +nonlinear equation +nonlinear interaction +nonlinear medium +nonlinear optic +nonlinear optical process +nonlinear oscillator +nonlinear processe +nonlinear quantum mechanic +nonlinear refractive index +nonlinear regime +nonlinear response +nonlinear schroedinger equation +nonlinear susceptibility +nonlinear system +nonlocal correlation +nonlocal lagrangian +nonlocal nature +nonlocal property +nonlocality +nonlocality in time +nonorthogonal state +nonrelativistic limit +nonrelativistic quantum mechanic +nontrivial topology +nonzero probability +nonzero temperature +noon state +normal dispersion +normal mode +normal mode splitting +normal order +northwest nuclear consortium +nova +novette laser +novikov veselov equation +np complete +npdgamma experiment +nuclear astrophysic +nuclear binding energy +nuclear chain reaction +nuclear chemistry +nuclear collision length +nuclear cross section +nuclear data +nuclear density +nuclear drip line +nuclear emulsion +nuclear energy in kenya +nuclear energy in saudi arabia +nuclear force +nuclear forensic +nuclear fusion +nuclear instruments and methods in physics research +nuclear interaction length +nuclear isomer +nuclear magnetic moment +nuclear magnetic resonance +nuclear magnetic resonance chemical shift re referencing +nuclear magnetic resonance crystallography +nuclear magnetic resonance database method +nuclear magnetic resonance decoupling +nuclear magnetic resonance in porous media +nuclear magnetic resonance quantum computer +nuclear magnetic resonance spectra database +nuclear magnetic resonance spectroscopy +nuclear magnetic resonance spectroscopy of carbohydrate +nuclear magnetic resonance spectroscopy of nucleic acid +nuclear magnetic resonance spectroscopy of protein +nuclear magnetic resonance spectroscopy of stereoisomer +nuclear matter +nuclear microscopy +nuclear orientation +nuclear overhauser effect +nuclear physic +nuclear pumped laser +nuclear quadrupole moment +nuclear quadrupole resonance +nuclear resonance fluorescence +nuclear resonance vibrational spectroscopy +nuclear shell model +nuclear spin +nuclear structure +nuclear transparency +nucleic acid quantitation +nucleocosmogenesis +nucleogenic +nucleon +nucleon spin structure +nucleosynthesis +nuclep +nukleonik +number operator +number state +number state expansion +number theory +numerical algorithm +numerical analysis +numerical approach +numerical calculation +numerical computation +numerical evidence +numerical example +numerical experiment +numerical method +numerical optimization +numerical renormalization group +nv center +nοΏ½el temperature +objective collapse theory +oblate +obliquity factor in diffraction +oblivious transfer +observable +observable consequence +observer +obstacles in wave guide +occupation number +octacube +octupole moment +od600 +oddo harkins rule +oerstedts law +of the poisson equation +ohmic power +ohmic resistance +ohms law +oil drop experiment +old quantum theory +oldstone conference +omega baryon +omega meson +on demand source +on shell and off shell +on shell renormalization scheme +on thermonuclear war +one dimensional chain +one dimensional harmonic oscillator +one dimensional harmonic trap +one dimensional hubbard model +one dimensional lattice +one dimensional optical lattice +one dimensional quantum mechanic +one dimensional quantum system +one dimensional system +one dimensional waveguide +one electron universe +one loop feynman diagram +one parameter family +one photon interference +one qubit gate +one way quantum computation +one way quantum computer +onetep +oniom +onium +onset of deconfinement +oocyte selection +oops leon +opacity +opals +open boundary condition +open quantum dynamic +open quantum system +open shell +open system dynamic +operando spectroscopy +operating temperature +operational interpretation +operator algebra +operator norm +operator quantum error correction +oppenheimer phillips process +optical amplifier +optical autocorrelation +optical beam +optical bistability +optical bloch equation +optical cavities +optical cavity +optical coherence +optical coherence tomography +optical control +optical decay +optical depth +optical detection +optical device +optical dipole trap +optical equivalence theorem +optical excitation +optical fiber +optical fibre +optical field +optical frequency comb +optical frequency multiplier +optical interferometry +optical isolator +optical lattice +optical loss +optical microcavities +optical microcavity +optical mode +optical nanofiber +optical network +optical parametric amplification +optical parametric amplifier +optical parametric oscillator +optical phase +optical phase space +optical photon +optical potential +optical pulse +optical pumping +optical quantum computing +optical quantum information processing +optical qubit +optical realization +optical resonator +optical response +optical scheme +optical setup +optical spectrometer +optical state +optical theorem +optical transition +optical trap +optical tweezer +optical wavelength +optimal choice +optimal cloning +optimal control problem +optimal control theory +optimal discrimination +optimal entanglement witnesses +optimal fidelity +optimal measurement +optimal protocol +optimal quantum cloning +optode +optomechanic +optomechanical cavities +optomechanical cavity +optomechanical coupling +optomechanical interaction +optomechanical system +optomechanically induced transparency +oracle query +orbit modeling +orbital angular momentum +orbital free density functional theory +orbital hybridisation +orbital magnetization +orbital motion +orbital overlap +orbital stability +orbiton +orchestrated objective reduction +order operator +orders of approximation +organic laser +organic molecule +organic superconductor +orientation entanglement +orientation polarization +ornstein uhlenbeck process +orthodox quantum mechanic +orthogonal function +orthogonal state +orthogonality relation +orthomodular lattice +orthonormal bases +orthonormal basis +orthonormal system +orthonormalization +oscillating circuit +oscillation threshold +oscillator representation +oscillator strength +oscillon +osculating orbit +out of equilibrium dynamic +output correlation matrix +output coupler +ova bank +overtone band +oxygen burning process +oxypnictide +ozi rule +p adic quantum mechanic +p form electrodynamic +p nuclei +p process +page time +painted turtle +pair creation +pair production +pairwise entanglement +pake doublet +pandemonium effect +pandya theorem +parallel plate capacitor +parallel transport +paramagnetic +paramagnetic nuclear magnetic resonance spectroscopy +paramagnetism +parameter estimation +parametric amplification +parametric amplifier +parametric down conversion +parametric downconversion +parametric oscillator +parametric process +parametric resonance +parastatistic +paraxial approximation +paraxial limit +paraxial wave equation +pariser parr pople method +parity +parity anomaly +parity check matrices +parsec +parsevals equation +parsevals theorem +partial cloning +partial information +partial polarization +partial separability +partial trace +partial transposition criterion +partial wave analysis +particle creation +particle entanglement +particle in a box +particle in a one dimensional lattice +particle in a ring +particle in a spherically symmetric potential +particle induced x ray emission +particle loss +particle motion +particle number operator +particle physics and representation theory +particle production +particle trajectory +partite entanglement +partition function +parton +pascal photocoagulator +paser +path distinguishability +path entanglement +path integral +path integral formulation +path integral molecular dynamic +path integral monte carlo +path integration +path length +path ordering +patterson power cell +paul kuroda +paul trap +pauli channel +pauli equation +pauli exclusion principle +pauli group +pauli lubanski pseudovector +pauli matrix +pauli operator +pauli principle +pauli spin operator +pauli villars regularization +paulings principle of electroneutrality +pbr theorem +peakon +pearl vortex +peccei quinn theory +pegasus toroidal experiment +peierls substitution +peierls transition +penetration depth +penguin diagram +penning trap +penrose interpretation +pentaquark +per cent mille +percolation critical exponent +percolation theory +percolation threshold +perdaix +peregrine soliton +peres horodecki criterion +perfect conductor +perfect correlation +perfect quantum state transfer +perfect state transfer +perfect teleportation +periodic boundary condition +periodically poled ktp crystal +periodically poled lithium niobate +permanent magnet +permanent magnetization +permeability +permittivity +permutation group +permutation symmetry +perpendicular magnetic field +persistent current +personnel halting and stimulation response rifle +perturbation +perturbation problem beyond all order +perturbation theory +perturbative qcd +petahertz +peter l. hagelstein +peter van riper +pglo +phase boundary +phase coherence +phase control +phase damping channel +phase decoherence +phase dependent correlation function +phase diagram +phase difference +phase diffusion +phase distribution +phase error +phase estimation +phase factor +phase fluctuation +phase gate +phase information +phase instability +phase matching +phase measurement +phase modulation +phase noise +phase of plane wave +phase operator +phase quadrature +phase qubit +phase retrieval +phase sensitivity +phase separation +phase shift +phase shift for scattering by sphere +phase shifter +phase space approach +phase space density +phase space description +phase space distribution +phase space formulation +phase space representation +phase state +phase structure +phase super resolution +phase time +phase transition +phase transitions and critical phenomena +phase velocities +phase velocity +phason +phi meson +philosophical interpretation of classical physic +phonon +phonon bath +phonon drag +phonon interaction +phonon mode +phonon noise +phonon number +phonon scattering +phosphorescence +phosphorus 31 nuclear magnetic resonance +phosphorus donor +photino +photo detection +photo meson +photoacoustic effect +photoacoustic spectroscopy +photobleaching +photochromic lens +photochromism +photodarkening +photodetection +photodisintegration +photodynamic therapy +photoelectric effect +photoelectrochemical process +photoelectron photoion coincidence spectroscopy +photoemission spectroscopy +photofission +photoinduced phase transition +photoionization +photoionization mode +photoluminescence +photoluminescence excitation +photomagneton +photomedicine +photon +photon absorption +photon antibunching +photon blockade +photon bunching +photon correlation +photon counter +photon counting +photon counting distribution +photon counting statistic +photon detection +photon detector +photon distribution +photon emission +photon energy +photon entanglement +photon field +photon flux +photon generation +photon loss +photon mass +photon number +photon number distribution +photon number resolving detector +photon number splitting attack +photon number state +photon number statistic +photon pair +photon polarization +photon scattering +photon source +photon state +photon statistic +photon structure function +photon subtraction +photon wave function +photonic band gap +photonic crystal +photonic crystal cavities +photonic crystal cavity +photonic entanglement +photonic laser thruster +photonic molecule +photonic orbital angular momentum +photonic qubit +photonic state +photonic system +photorefractive keratectomy +photorejuvenation +photosynthesis +photosynthetic complexes +photothermal microspectroscopy +photothermal spectroscopy +photovoltaic +physical limit +physics applications of asymptotically safe gravity +physics of magnetic resonance imaging +pi josephson junction +pi pulse +pickering series +piezochromism +piezoelectric effect +piezoelectricity +pilot wave +pilot wave theory +pinning force +pion +pion decay constant +pionium +planck constant +planck distribution +planck einstein relation +planck length +planck mass +planck particle +planck postulate +planck scale +plancks law +plane of incidence +plane wave +plane wave expansion +planetary boundary layer +planetary fourier spectrometer +plasma +plasma acoustic shield system +plasma frequency +plasma model +plasma science society of india +plasmaron +plasmon +plasmonic laser +plasmonic nanoparticle +plate trick +plekton +plum pudding model +pockels cell +pockels effect +pocono conference +poeschl teller potential +poincare group +poincare stresses +poincarοΏ½ group +poincarοΏ½ lindstedt method +point dipole +point interaction +point particle +pointer bases +pointer basis +pointer state +poisson bracket +poisson equation +poisson superalgebra +poissonian pumping +poissonian statistic +poissons equation +polar coordinate +polar decomposition +polar molecule +polar substance +polar vector +polariton +polariton laser +polarizability +polarization +polarization correlation +polarization degree +polarization entangled photon +polarization entangled photon pair +polarization entanglement +polarization interferometer +polarization optic +polarization potential +polarization property +polarization qubit +polarization rotator +polarization sensitive imaging +polarization spectroscopy +polarization squeezing +polarization state +polarization vector +polarized light +polarized photon +polaron +polyamorphism +polymer field theory +polynomial time algorithm +polynomial wigner ville distribution +polythiazyl +pomeron +ponderomotive energy +ponderomotive force +pontecorvo maki nakagawa sakata matrix +poole frenkel effect +pople diagram +pople notation +poppers experiment +population dynamic +population imbalance +population inversion +population transfer +population trapping +porods law +port wine stain +position and momentum space +position dependent effective mass +position dependent mass +position measurement +position operator +position space +positive definite kernel +positive operator valued measure +positive partial transpose +positive partial transposition +positron +positron annihilation spectroscopy +positron emission tomography +positronium +positronium hydride +post hartree fock +post selection +postbqp +potential energy +potential energy of protein +potential energy surface +potential well +potts model +pour point +pourbaix diagram +povm +powder diffraction +power flow +power law decay +power loss +power series +poynting robertson effect +poynting theorem +poynting vector +poyntings theorem +ppt state +practical quantum key distribution +precession electron diffraction +precession frequency +precision measurement +precision tests of qed +precursor +pregeometry +preon +present day technology +presolar grain +pressuron +primary field +prime dimension +prime number +prime power dimension +primon gas +principal quantum number +principal value +principle of locality +principle of superposition +prior entanglement +prior information +prior knowledge +prior work +prism compressor +prism spectrometer +privacy amplification +probabilistic description +probabilistic interpretation +probabilistic teleportation +probability amplitude +probability current +probability density function +probability distribution +probability interpretation +probability measure +probability representation +probability theory +probe beam +probe field +probe laser +probe light +probe pulse +probe qubit +problem of time +proca action +proca lagrangian +process tomography +product bases +product basis +product numerical range +product operator formalism +product state +project 1640 +project sherwood +project valkyrie +projected entangled pair state +projection measurement +projection operator +projection postulate +projective hilbert space +projective measurement +projective superspace +projector augmented wave method +prolate +prompt neutron +propagator +proper time +protective measurement +protein chemical shift prediction +protein chemical shift re referencing +protein protein interaction +protocol on blinding laser weapon +proton +proton boron fusion +proton coupled electron transfer +proton decay +proton emission +proton enhanced nuclear induction spectroscopy +proton exchange membrane +proton exchange membrane fuel cell +proton magnetic moment +proton nuclear magnetic resonance +proton pack +proton proton chain reaction +proton pump +proton spin crisis +proton therapy +proton to electron mass ratio +proton transfer reaction mass spectrometry +proton tunneling +protonium +protonophore +proximity effect +pseudogap +pseudomonas +pseudomonas genome database +pseudopotential +pseudoscalar meson +pseudospin symmetry +pseudovector meson +psi meson +psychrophile +pt symmetric hamiltonian +pt symmetric quantum mechanic +pt symmetric system +pt symmetry +pt symmetry breaking +ptc rubber +public channel +pulay stress +pulse duration +pulse height analyzer +pulse laser +pulse programming +pulse sequence +pulse shape +pulse width +pulsed electron paramagnetic resonance +pulsed excitation +pulsed field gradient +pulsed field magnet +pulsed laser deposition +pump beam +pump depletion +pump field +pump laser +pump power +pure dephasing +pure entanglement +pure gaussian state +pure quantum state +pure spinor +pure state +pure state entanglement +pure three qubit state +purely classical +purely quantum +purification of quantum state +purity +push broom scanner +pyquante +pyroelectric effect +pyroelectricity +pyrromethene +q ball +q switching +q value +qbism +qcd matter +qcd string +qcd sum rule +qcd vacuum +qcma +qed vacuum +qkd protocol +qkd system +qma +qmc@home +qnd measurement +quadratic configuration interaction +quadrature phase measurement +quadrature phase operator +quadrature squeezing +quadrature variance +quadrupole deformation +quadrupole moment +quadrupole splitting +quadrupole transition +quantisation +quantitative susceptibility mapping +quantization +quantization commutes with reduction +quantization of charge +quantization of the electromagnetic field +quantized electromagnetic field +quantized field +quantum 1/f noise +quantum action +quantum adiabatic algorithm +quantum adiabatic evolution +quantum adiabatic theorem +quantum advantage +quantum adversary +quantum affine algebra +quantum algebra +quantum algorithm +quantum algorithm for linear systems of equation +quantum amplifier +quantum annealer +quantum annealing +quantum anomaly +quantum aspects of life +quantum attack +quantum automata +quantum baker +quantum bayesianism +quantum beat +quantum billiard +quantum biology +quantum bit +quantum bit commitment +quantum bit error rate +quantum black hole +quantum brownian motion +quantum bus +quantum byzantine agreement +quantum calculus +quantum capacitance +quantum capacity +quantum carpet +quantum cascade laser +quantum catalyst +quantum cellular automata +quantum cellular automaton +quantum channel +quantum channel capacity +quantum chaos +quantum chaotic system +quantum chemistry +quantum chemistry composite method +quantum chromodynamic +quantum circuit +quantum classical boundary +quantum classical correspondence +quantum classical transition +quantum clock +quantum cloning +quantum code +quantum cognition +quantum coherence +quantum communication +quantum communication channel +quantum communication complexity +quantum compass +quantum complex network +quantum complexity +quantum complexity theory +quantum computation +quantum computation based +quantum computer +quantum computing +quantum computing application +quantum concentration +quantum configuration space +quantum confined stark effect +quantum contextuality +quantum convolutional code +quantum correction +quantum correlation +quantum cosmology +quantum counterpart +quantum coupling +quantum cramer rao bound +quantum critical point +quantum criticality +quantum cryptographic protocol +quantum cryptography +quantum cylindrical quadrupole +quantum darwinism +quantum data bus +quantum decay +quantum decoherence +quantum defect +quantum degeneracy +quantum degree +quantum dense coding +quantum depolarizing channel +quantum description +quantum device +quantum diffusion +quantum digital signature +quantum dimer model +quantum discord +quantum dissipation +quantum dissipative system +quantum domain +quantum dot +quantum dot cellular automaton +quantum dot coupled +quantum dot display +quantum dot laser +quantum dot solar cell +quantum dynamic +quantum dynamical semigroup +quantum effect +quantum efficiency +quantum electrochemistry +quantum electrodynamic +quantum electromagnetic field +quantum emitter +quantum energy teleportation +quantum ensemble +quantum entanglement +quantum entropy +quantum equation +quantum equilibrium +quantum eraser +quantum eraser experiment +quantum erasure +quantum ergodicity +quantum error correcting code +quantum error correction +quantum error correction code +quantum espresso +quantum estimation theory +quantum evolution +quantum factoring algorithm +quantum feedback +quantum feedback control +quantum fiction +quantum fidelity +quantum field +quantum field theory +quantum field theory in curved spacetime +quantum filtering +quantum fingerprinting +quantum finite automata +quantum fisher information +quantum fluctuation +quantum fluid +quantum flux parametron +quantum foam +quantum formalism +quantum foundation +quantum fourier transform +quantum game +quantum game theory +quantum gas +quantum gate +quantum gate operation +quantum gauge theory +quantum geometry +quantum graph +quantum gravity +quantum ground state +quantum group +quantum gyroscope +quantum hall effect +quantum hamilton jacobi equation +quantum hardware +quantum harmonic oscillator +quantum heat engine +quantum heat engines and refrigerators +quantum heterostructure +quantum hilbert space +quantum history +quantum hydrodynamic +quantum hypothesis testing +quantum illumination +quantum imaging +quantum immortality +quantum indeterminacy +quantum inequalities +quantum inequality +quantum information +quantum information processor +quantum information protocol +quantum instrument +quantum interference +quantum interference effect +quantum interferometry +quantum internet +quantum inverse scattering method +quantum ising chain +quantum ising model +quantum jump +quantum jump approach +quantum jump method +quantum key +quantum key distribution +quantum kicked rotor +quantum kz equation +quantum langevin equation +quantum lattice system +quantum lc circuit +quantum light +quantum limit +quantum lithography +quantum localisation +quantum logic +quantum logic gate +quantum logic operation +quantum lower bound +quantum machine +quantum machine learning +quantum magnetism +quantum markov chain +quantum master equation +quantum matter +quantum measurement +quantum measurement problem +quantum mechanic +quantum mechanical bell test prediction +quantum mechanical modification +quantum mechanical scattering of photon and nucleus +quantum mechanics of time travel +quantum memory +quantum metamaterial +quantum metrology +quantum mirage +quantum money +quantum monte carlo +quantum mutual information +quantum network +quantum neural network +quantum no deleting theorem +quantum noise +quantum noise reduction +quantum non demolition measurement +quantum non equilibrium +quantum non locality +quantum nondemolition measurement +quantum nonlocality +quantum number +quantum operation +quantum optic +quantum optical spectroscopy +quantum optomechanic +quantum oscillator +quantum paradox +quantum parallelism +quantum parameter estimation +quantum pendulum +quantum phase +quantum phase estimation +quantum phase estimation algorithm +quantum phase gate +quantum phase space +quantum phase transition +quantum phenomena +quantum phenomenon +quantum point contact +quantum potential +quantum prediction +quantum principle +quantum probability +quantum probability theory +quantum process +quantum process tomography +quantum processor +quantum programming +quantum protocol +quantum pseudo telepathy +quantum pure state +quantum quench +quantum query complexity +quantum rabi model +quantum radar +quantum random number generator +quantum random walk +quantum randomness +quantum readout of puf +quantum reality +quantum realm +quantum recurrance phenomena +quantum refereed game +quantum reference frame +quantum reflection +quantum refrigerator +quantum regime +quantum register +quantum regression theorem +quantum relative entropy +quantum repeater +quantum resonance +quantum resource +quantum revival +quantum rotor model +quantum scattering +quantum search algorithm +quantum searching +quantum secret sharing scheme +quantum secure direct communication +quantum sensing +quantum sensor +quantum shannon theory +quantum side information +quantum signal +quantum simulator +quantum sort +quantum space time +quantum speed limit +quantum speedup +quantum spin +quantum spin chain +quantum spin hall effect +quantum spin model +quantum spin tunneling +quantum stabilizer code +quantum state diffusion +quantum state discrimination +quantum state engineering +quantum state estimation +quantum state preparation +quantum state reconstruction +quantum state reduction +quantum state space +quantum state tomography +quantum state transfer +quantum statistical mechanic +quantum statistical property +quantum steering +quantum stein +quantum stochastic calculus +quantum stochastic differential equation +quantum storage +quantum strategy +quantum structure +quantum subsystem +quantum suicide +quantum superposition +quantum superposition principle +quantum switch +quantum t design +quantum technology +quantum teleportation +quantum thermodynamic +quantum threshold theorem +quantum tic tac toe +quantum to classical transition +quantum tomography +quantum topology +quantum trajectory approach +quantum transition +quantum transport +quantum triviality +quantum tunneling +quantum tunnelling +quantum tunnelling composite +quantum turing machine +quantum two level system +quantum uncertainty +quantum universe +quantum vacuum fluctuation +quantum vacuum thruster +quantum vortex +quantum walk +quantum wave function +quantum wave packet +quantum well +quantum well laser +quantum wire +quantum yield +quantum zeno dynamic +quantum zeno effect +quark +quark gluon plasma +quark lepton complementarity +quark model +quark nova +quark star +quarkonium +quartic interaction +quasi harmonic approximation +quasi set theory +quasi static approximation +quasi stationary current +quasiatom +quasielastic neutron scattering +quasielastic scattering +quasiparticle +quasiparticle excitation +quasiprobability distribution +qubit +qubit channel +qubit coherence +qubit entanglement +qubit field theory +qubit frequency +qubit gate +qubit measurement +qudit +quench dynamic +quenched approximation +quenching +query complexity +quiteron +qunit +qutrit +r parity +r process +r symmetry +rabi cycle +rabi frequency +rabi hamiltonian +rabi model +rabi oscillation +rabi problem +rabi resonance method +racah parameter +racetrack memory +radial mode +radial number +radially polarized +radiated electromagnetic energy +radiation chemistry +radiation cross section +radiation damping +radiation field +radiation impedance +radiation length +radiation pressure +radiation pressure force +radiation reaction +radiation resistance +radiation zone +radiative auger effect +radiative energy loss +radiative heat transfer +radiative reaction +radio frequency +radio spectrum scope +radioactive displacement law +radiofrequency coil +radius of convergence +raman amplification +raman cooling +raman laser +raman nath regime +raman optical activity +raman process +raman scattering +raman spectroscopy +raman transition +ramsauer townsend effect +ramsey interferometry +ramsey spectroscopy +random bit +random coil index +random error +random laser +random matrix theory +random number +random phase approximation +random pure state +random state +random variable +random walk +randomized benchmarking +randomness +range criterion +rapid phase transition +rapid single flux quantum +rapidity +rare earth ion +rare earth ion doped crystal +rarita schwinger equation +rashba spin orbit coupling +rate equation +rational conformal field theory +rational number +rayleigh criterion +rayleigh jeans law +rayleigh scattering +rb atom +rb vapor +rds 3 +reaction center +reaction coordinate +real hilbert space +real time mri +realist interpretation +realistic interpretation +realistic theory +reality +realized experimentally +recalescence +reciprocal lattice +reciprocation theorem of green +recoil energy +recoil temperature +recrystallization +rectangular potential barrier +recycling antimatter +redfield equation +redshift +reduced density matrix +reduced density operator +reduced dynamic +reduction criterion +reed muller code +reeh schlieder theorem +reentrant superconductivity +reflection coefficient +reflection high energy electron diffraction +reflection law +reflectometric interference spectroscopy +refraction law +refractive index +regenerative amplification +regge theory +regular +regularization +regularly pumped laser +relational approach to quantum physic +relational quantum mechanic +relative entropy +relative error +relative frequency +relative intensity noise +relative locality +relative phase +relative state +relativistic addition of velocities +relativistic breit wigner distribution +relativistic causality +relativistic correction +relativistic covariance +relativistic dynamic +relativistic effect +relativistic electron beam +relativistic hamilton equation +relativistic heavy ion collider +relativistic lagrange equation +relativistic motion +relativistic particle +relativistic quantum chemistry +relativistic quantum field theory +relativistic quantum information +relativistic quantum mechanic +relativistic quantum theory +relativistic regime +relativistic runaway electron avalanche +relativistic symmetry +relativistic theory +relativistic transformation of acceleration +relativistic wave equation +relativity theory +relaxation +relaxation dynamic +relaxation process +relaxation rate +relaxation time +relaxometry +relic particle +remanence +remission +remote sensing atmospheric boundary layer +remote state preparation +renner teller effect +renninger negative result experiment +renormalization +renormalization group +renormalization procedure +renormalon +renyi entanglement entropy +renyi entropy +representation theory of the galilean group +representation theory of the lorentz group +representation theory of the poincarοΏ½ group +representations of the atmospheric boundary layer +representer theorem +reproducing kernel hilbert space +reptation monte carlo +repulsive interaction +repulsive state +research reactor +reservoir engineering +residual chemical shift anisotropy +residual dipolar coupling +residual entanglement +residual resistance ratio +residue +residue theorem +resolution +resolved sideband cooling +resolved sideband regime +resonance +resonance condition +resonance energy +resonance enhanced multiphoton ionization +resonance fluorescence +resonance frequency +resonance raman spectroscopy +resonance state +resonances in scattering +resonant absorption +resonant cavities +resonant cavity +resonant coupling +resonant enhancement +resonant excitation +resonant frequency +resonant inelastic x ray scattering +resonant interaction +resonant line shape +resonant state +resonant tunneling +resonating valence bond theory +resource theory +response factor +response function +response time +rest frame +rest mass +resting state fmri +restricted open shell hartree fock +reststrahlen effect +resummation +retarded green function +retarded potential +retarded time +retrocausality +retrograde condensation +reverse reconciliation +reversible circuit +reversibly assembled cellular composite material +revival time +rho meson +rhodamine +rhodamine 123 +rhodamine 6g +rhodamine b +riafp +richard feynman +riemann hilbert problem +riemann surface +riemann zeta function +rietveld refinement +rigged hilbert space +right hand rule +rigid rotor +ring cavities +ring cavity +ring laser +ring laser gyroscope +rishon model +ritz method +robert w. bussard +robin boundary condition +robin bullough +robinson oscillator +rodriguess formula +rolling ball argument +ron rocco +ronens golden rule +room temperature superconductor +roothaan equation +roper resonance +rosenau hyman equation +rossiter mclaughlin effect +rotating frame +rotating magnetic field +rotating wave approximation +rotation group +rotation operator +rotational invariance +rotational spectroscopy +rotational state +rotational symmetry +rotational temperature +rotational vibrational spectroscopy +roton +round trip gain +rovibronic coupling +rp process +rrkm theory +rst model +rubidium +ruby laser +rule 184 +rule of mutual exclusion +runge gross theorem +rushbrooke inequalities +rushbrooke inequality +rusi taleyarkhan +rutherford atom model +rutherford backscattering spectrometry +rutherford medal and prize +rutherford model +rutherford scattering +rydberg atom +rydberg blockade +rydberg constant +rydberg correction +rydberg excitation +rydberg formula +rydberg ionization spectroscopy +rydberg klein rees method +rydberg molecule +rydberg ritz combination principle +rydberg state +s factor +s function +s knot +s matrix +s process +s pulse +s wave scattering length +sacla +saddlepoint approximation method +sagnac interferometer +sagnac interferometry +saha ionization equation +sakurais bell inequalities +sakurais bell inequality +sam1 +sarg04 +satellite laser ranging +saturated absorption spectroscopy +saturated spectroscopy +saturation dome +saturation magnetization +saxion +scalable architecture +scalable quantum computation +scalable quantum computer +scalable quantum computing +scalable quantum information processing +scalar boson +scalar curvature +scalar electrodynamic +scalar field +scalar field theory +scalar meson +scalar potential +scalar tensor theory +scale free ideal gas +scale invariance +scale relativity +scaling behaviour +scaling dimension +scaling law +scaling limit +scaling property +scanning confocal electron microscopy +scanning electron microscope +scanning mobility particle sizer +scanning squid microscope +scanning squid microscopy +scanning transmission electron microscopy +scanning tunneling spectroscopy +scattered light +scattered photon +scattering +scattering amplitude +scattering approach +scattering channel +scattering cross section +scattering from rough surface +scattering length +scattering matrix +scattering media absorption spectroscopy +scattering of particle +scattering of radiation +scattering phase shift +scattering potential +scattering problem +scattering process +scattering state +scattering theory +schaefer bergmann diffraction +scharnhorst effect +scheelite +scherrer equation +schmidt coefficient +schmidt decomposition +schmidt number +schmidt rank +schmidts orthogonalization +schoenflies notation +schottky effect +schreinemakers analysi +schrieffer wolff transformation +schrodinger cat state +schrodinger equation +schroedinger cat +schroedinger equation +schroedinger field +schroedinger functional +schroedinger group +schroedinger newton equation +schroedinger picture +schroedingers cat +schroedingers cat trilogy +schumann resonance +schumann runge band +schwarzschild black hole +schwind eye tech solution +schwinger dyson equation +schwinger function +schwinger limit +schwinger magnetic induction +schwinger model +schwinger parametrization +schwinger variational principle +schwingers quantum action principle +sciamachy +science by press conference +scientists against nuclear arm +scientists for global responsibility +scissors mode +scop formalism +scotophor +screening by atomic electron +screening effect +scully lamb form +scully lamb laser +search algorithm +search for the higgs boson +second harmonic generation +second order correlation function +second order phase transition +second quantization +second solar spectrum +second sound +secondary electron +secondary emission +secret key rate +secret sharing +secular resonance +secure communication +secure direct communication +secure key distribution +secure key rate +seed nucleus +seesaw mechanism +seiberg duality +seiberg witten theory +selected area diffraction +selection rule +selective laser melting +selective laser sintering +self adjoint extension +self adjoint operator +self amplified spontaneous emission +self assembled quantum dot +self consistency principle in high energy physic +self correcting quantum memory +self energy +self energy part +self focusing +self force +self induction coefficient +self organized criticality +self organized criticality control +self pulsation +self pulsing +semi classical approximation +semi classical limit +semi classical theory +semi empirical mass formula +semi empirical quantum chemistry method +semi rigid molecule +semicircular potential well +semiclassical analysis +semiclassical approach +semiclassical approximation +semiclassical behaviour +semiclassical description +semiclassical dynamic +semiclassical gravity +semiclassical limit +semiclassical method +semiclassical model +semiclassical physic +semiclassical propagator +semiclassical regime +semiclassical solution +semiclassical steady state +semiconductor bloch equation +semiconductor laser theory +semiconductor luminescence equation +semiconductor microcavities +semiconductor microcavity +semiconductor nanostructures +semiconductor optical gain +semiconductor quantum dot +semiconductor quantum well +semiconductor ring laser +semidefinite program +semifluxon +semileptonic decay +semilinear response +sensitivity +separability condition +separability criteria +separability criterion +separable operation +separable quantum state +separable state +sequence transformation +sequential walking +sergio focardi +series acceleration +sery expansion +sfermion +sgoldstino +shannon entropy +shape invariance +shape invariant potential +shape resonance +shared entanglement +shared randomness +sharp series +sharp transition +shelter island conference +shielding effect +shiftcor +shim +shin sung chul +shinnar le roux algorithm +shiva laser +shoolerys rule +shors algorithm +short distance +short laser pulse +short pulse +short range interaction +short supermultiplet +short time behaviour +short time limit +short time scale +shot noise +shot noise level +shot noise limit +shpolskii matrix +siberian salamander +sic povm +sideband cooling +sidney kimmel +siegbahn notation +sievert chamber +sigma baryon +sigma model +sign problem +signal beam +signal field +signal photon +signal to noise ratio +signal variance +signal velocities +signal velocity +silicon burning process +silicon vacancy centre +silsbee effect +simon glatzel equation +simons problem +simplified perturbations model +simulated annealing +simulated fluorescence process algorithm +simultaneous measurement +sindo +sine gordon equation +single atom +single bit +single cavity mode +single crystal diamond +single electron +single electron spin +single electron transistor +single ion +single mode approximation +single mode cavity field +single mode fiber +single mode field +single mode optical fiber +single mode radiation field +single molecule +single molecule experiment +single molecule magnet +single nitrogen vacancy center +single nv center +single photon detection +single photon detector +single photon emission +single photon generation +single photon interference +single photon level +single photon pulse +single photon sensitive camera +single photon source +single photon state +single photon wave packet +single quantum dot +single qubit gate +single qubit measurement +single qubit operation +single qubit rotation +single qudit +single semiconductor quantum dot +single spin measurement +single trapped atom +single trapped ion +single two level atom +single two level system +singlet fission +singlet state +singleton field +singular perturbation +singular trace +sisyphus cooling +six state protocol +size consistency and size extensivity +skin depth +skin effect +skyrmion +slater condon rule +slater determinant +slater integral +slater type orbital +slaters rule +slavnov taylor identitie +slip melting point +slitless spectroscopy +slope efficiency +slow light +small angle neutron scattering +small angle scattering +small angle x ray scattering +small arms weapons effects simulator +small tight aspect ratio tokamak +smart onboard data interface module +smith purcell effect +snapshot hyperspectral imaging +snellius law of refraction +snells law +sobolev space +social thermodynamics theory +society for applied spectroscopy +society for cryobiology +soft collinear effective theory +soft photon +soft photon emission +soft retooling +soft susy breaking +soft tissue laser surgery +soft x ray emission spectroscopy +sokol eshelon +solar neutrino +solar pumped laser +solarization +soldering +solenoid +solenoidal vector +soler model +solid harmonic +solid state device +solid state dye laser +solid state laser +solid state nuclear magnetic resonance +solid state nuclear track detector +solid state physic +solid state quantum memory +solid state qubit +solid state system +solidus +soliton +solomon equation +solvated electron +solvatochromism +solvent suppression +sommerfeld expansion +sommerfeld kossel displacement law +sommerfeld parameter +sonochemistry +soret peak +source field +soviet laser pistol +soxs +space dimension +space like separat +space time +space time symmetry +spacetime dimension +spacetime geometry +spallation neutron source +spaser +spatial coherence +spatial correlation +spatial degree +spatial dimension +spatial distribution +spatial entanglement +spatial filter +spatial inversion +spatial light modulator +spatial mode +spatial profile +spatial resolution +spatial separation +spatial structure +spatial wavefunction +spatially offset raman spectroscopy +spatiospectral scanning +spatiotemporal wavefunction +spc file format +spdc +special conformal transformation +special sensor ultraviolet limb imager +special theory of relativity +specific heat +specim +speckle pattern +spectral analysis +spectral atlas +spectral band +spectral characteristic +spectral component +spectral correlation +spectral decomposition +spectral density +spectral diffusion +spectral distribution +spectral energy distribution +spectral feature +spectral filtering +spectral flux density +spectral function +spectral gap +spectral hole burning +spectral imaging +spectral line +spectral line ratio +spectral line shape +spectral phase interferometry +spectral property +spectral purity +spectral resolution +spectral signature +spectral singularity +spectral statistic +spectral theory +spectral wavefunction +spectral width +spectro polarimetric high contrast exoplanet research +spectrochemistry +spectrofluorometer +spectrohelioscope +spectrometer +spectronic 20 +spectrophotometer for nucleic acid measurement +spectrophotometry +spectroradiometer +spectroscopic notation +spectroscopy +spectrum analyzer +speed of light +spekkens toy model +sphaleron +spherical bases +spherical basis +spherical bessel function +spherical capacitor +spherical cavities +spherical cavity +spherical coordinate +spherical harmonic +spherical model +spherical wave +spherium +sphingomona +spin +spin 1 particle +spin 1/2 particle +spin 1/2 system +spin angular momentum +spin bath +spin boson model +spin canting +spin chain +spin charge separation +spin chemistry +spin coherence +spin component +spin connection +spin contamination +spin correlation +spin current +spin decoherence +spin destruction collision +spin diffusion +spin dynamic +spin echo +spin engineering +spin ensemble +spin entanglement +spin exchange interaction +spin foam +spin glasses +spin group +spin hall effect +spin label +spin lattice +spin lattice relaxation +spin lattice relaxation in the rotating frame +spin magnetic moment +spin model +spin network +spin operator +spin orbit coupling +spin orbit interaction +spin pair +spin polarization +spin polarized electron +spin precession +spin projection +spin pumping +spin quantum number +spin qubit +spin relaxation +spin representation +spin spherical harmonic +spin spin interaction +spin spin relaxation +spin squeezed state +spin squeezing +spin state +spin statistics connection +spin statistics theorem +spin stiffness +spin symmetry +spin system +spin tensor +spin transfer torque +spin transistor +spin transition +spin valve +spin wave +spin οΏ½ +spinhenge@home +spinless fermion +spinless particle +spinlock srl +spinmechatronic +spinodal decomposition +spinon +spinor +spinor bose einstein condensate +spinor field +spinors in three dimension +spinplasmonic +spintronic +spontaneous breaking +spontaneous decay rate +spontaneous emission +spontaneous emission rate +spontaneous four wave mixing +spontaneous parametric down conversion +spontaneous parametric downconversion +spontaneous symmetry breaking +spontaneous wave function collapse +spontaneously broken +spring peeper +spurion +sputter coating +square lattice +square lattice ising model +squashed entanglement +squeeze operator +squeezed coherence +squeezed coherent state +squeezed light +squeezed state +squeezed thermal state +squeezed vacuum +squeezed vacuum state +squeezing generator +squeezing parameter +squeezing property +squeezing spectrum +squeezing vacuum +squid +stability analysis +stability of the solar system +stabilizer code +stabilizer formalism +stabilizer group +stabilizer state +staggered fermion +standard model +standard model extension +standard quantum limit +standing wave +stanene +star product +stark effect +stark shift +stark spectroscopy +state collapse +state discrimination +state disturbance +state estimation +state evolution +state merging +state preparation +state reconstruction +state reduction +state space +state tomography +state transfer +state universal coupled cluster +state vector collapse +static disorder +static forces and virtual particle exchange +static imperfection +static light scattering +static magnetic field +stationary phase +stationary phase approximation +stationary state +stationary wave integrated fourier transform spectrometry +statistical distribution +statistical ensemble +statistical error +statistical field theory +statistical fluctuation +statistical inference +statistical interpretation +statistical mechanic +statistical mixture +statistical operator +statistical physic +statistical prediction +statistical property +statistical theory +steady state +steady state entanglement +steady state free precession imaging +steady state solution +steane code +stebbins whitford effect +steering +steering inequalities +steering inequality +stellar nucleosynthesis +stereoelectronic +stereolithography +stereoscopic spectroscopy +sterile neutrino +sterilization +stern gerlach experiment +stimulated emission +stimulated raman adiabatic passage +stochastic cellular automaton +stochastic differential equation +stochastic dynamic +stochastic electrodynamic +stochastic evolution +stochastic interpretation +stochastic local operation +stochastic master equation +stochastic matrix +stochastic mechanic +stochastic model +stochastic process +stochastic vacuum model +stokes boundary layer +stokes operator +stokes parameter +stokes shift +stokes theorem +stone von neumann theorem +stong basis set +stop squark +stopping and range of ions in matter +stopping power +storage time +storing quantum information +strain encoded magnetic resonance imaging +strain scanning +strained quantum well laser +strange b meson +strange matter +strange quark +strangelet +strangeness +strangeness production +streak +stream function +stress tensor +strictly correlated electrons density functional theory +string net liquid +stripping reaction +strong correlation +strong coupling expansion +strong coupling limit +strong coupling regime +strong interaction +strong subadditivity of quantum entropy +strongly correlated material +strongly correlated quantum spin liquid +strongly correlated system +strongly coupled +strongly interacting boson +strongly interacting regime +strongly monotone +strontium ruthenate +strontium vapor laser +structural property +structure based assignment +struve sahade effect +stueckelberg action +sub doppler cooling +sub poissonian statistic +sub shot noise +subatomic particle +subatomic scale +sublimation +sublimation apparatus +subsequent measurement +subsystem code +subtracted dispersion relation +sudden birth +sudden death +sudden quench +sudden transition +sugawara theory +sum frequency generation +sum frequency generation spectroscopy +sum rule +sum rule in quantum mechanics +super linear algebra +super minkowski space +super poincarοΏ½ algebra +super poissonian statistic +super qcd +super resolution +super vector space +superalgebra +superatom +supercharge +supercommutative algebra +superconducting cavities +superconducting cavity +superconducting charge qubit +superconducting circuit +superconducting coherence length +superconducting detector +superconducting device +superconducting flux qubit +superconducting logic +superconducting magnet +superconducting magnetic energy storage +superconducting nanowire single photon detector +superconducting phase qubit +superconducting quantum circuit +superconducting quantum computing +superconducting quantum interference device +superconducting qubits coupled +superconducting radio frequency +superconducting resonator +superconducting steel +superconducting system +superconducting transmission line resonator +superconducting tunnel junction +superconducting wire +superconductivity +superconductor classification +superconductor insulator transition +superconformal algebra +supercritical angle fluorescence microscopy +supercritical liquid gas boundaries +supercurrent +superdeformation +superdense coding +superdeterminism +superdiamagnetism +superfield +superfluid helium +superfluid phase +superfluid state +supergeometry +superghost +supergravity +supergrid +supergroup +superinsulator +superlattice +superluminal communication +superluminal propagation +superluminal signaling +superluminal signalling +supermanifold +supermathematic +supermatrix +supermembrane +supermetric +supermodule +supermultiplet +supernova nucleosynthesis +superoperator +superparamagnetic iron platinum particle +superpartner +superposition +superposition principle +superposition state +superpotential +superradiance +superradiant laser +superradiant phase +superradiant phase transition +superresolution +superselection +superselection rule +superspace +superstripe +superstructure +supersymmetric gauge theory +supersymmetric partner +supersymmetric quantum mechanic +supersymmetry +supersymmetry algebra +supersymmetry as a quantum group +supersymmetry breaking +supersymmetry breaking scale +supersymmetry nonrenormalization theorem +supertrace +surface acoustic wave +surface charge +surface charge density +surface code +surface core level shift +surface current +surface energy transfer +surface enhanced raman spectroscopy +surface extended x ray absorption fine structure +surface hopping +surface impedance +surface layer +surface phonon +surface plasmon +surface resistance +surface state +susceptibility +susceptibility weighted imaging +susskind glogower operator +svetlichny inequalities +svetlichny inequality +swampland +swap gate +swedish radiation safety authority +sweeping jet actuator +swihart velocities +swihart velocity +swissfel +switching time +symmetric group +symmetric logarithmic derivative +symmetry group +symmetry in quantum mechanic +symmetry property +symmetry protected topological order +sympathetic cooling +symplectic geometry +symplectic group +symplectic structure +symplectite +synchrotron light source +synchrotron radiation +synthesis of precious metal +synthetic gauge field +system bath coupling +system bath interaction +system density matrix +system environment coupling +system environment interaction +system evolution +systems of orthonormal function +systems of unit +systolic freedom +sznajd model +t hooft operator +t hooft polyakov monopole +t hooft symbol +t j model +t meson +t symmetry +tachyon +tachyon condensation +tachyonic antitelephone +tachyonic field +tachyons in fiction +tactical high energy laser +tadahiko mizuno +tadpole +tailing in graphics or image revelation +talbot cavities +talbot cavity +talbot effect +tangloid +tardigrade +targeted temperature management +tattoo removal +tau +tau neutrino +tauonium +tavis cummings model +taylors theorem +te wave +tea laser +technical noise +technicolor +technological applications of superconductivity +telecom band +telecom wavelength +telecommunication wavelength +telegraph equation +teleportation +teleportation fidelity +teleportation process +teleportation protocol +teleportation scheme +tem wave +temperature coefficient +temperature dependence +temperley lieb algebra +temporal mode +tensor analysis +tensor force +tensor network +tensor operator +tensor product +tensor product of hilbert space +terachem +terahertz spectroscopy and technology +terahertz time domain spectroscopy +term symbol +terra 3 +tesla turbine +tetracene +tetraneutron +tetraquark +tetron model +thallium barium calcium copper oxide +theoretical limit +thermal bath +thermal blooming +thermal casimir effect +thermal casimir force +thermal conductance quantum +thermal correction +thermal desorption spectroscopy +thermal emission spectrometer +thermal energy +thermal entanglement +thermal environment +thermal equilibrium state +thermal excitation +thermal field +thermal fluctuation +thermal hall effect +thermal infrared spectroscopy +thermal light +thermal motion +thermal noise +thermal photon +thermal printing +thermal property +thermal quantum field theory +thermal radiation +thermal reduced state +thermal reservoir +thermal shock +thermal state +thermally stimulated current spectroscopy +thermionic emission +thermochromism +thermodesulforhabdus norvegica +thermodynamic entropy +thermodynamic equilibrium +thermodynamic function +thermodynamic limit +thermodynamic property +thermodynamic quantity +thermodynamical limit +thermodynamical property +thermofield dynamic +thermonuclear fusion +theta meson +theta representation +thirring model +thirring wess model +thomas athol rafter +thomas factor +thomas fermi model +thomas jefferson national accelerator facility +thomas precession +thomson cross section +thomson formula +thomson medal and prize +thomson problem +thomson scattering +thomsons theorem +thought experiment +thouless energy +three body force +three body interaction +three body problem +three body recombination +three dimensional space +three jet event +three level atom +three level system +three qubit entanglement +three qubit pure state +three qubit state +three qubit system +three stage quantum cryptography protocol +ti polaron +ti sapphire laser +tight binding +tight binding approximation +tight binding model +time asymmetry +time bin encoding +time delay +time dependent density functional theory +time dependent electric field +time dependent frequency +time dependent green function +time dependent hamiltonian +time dependent harmonic oscillator +time dependent magnetic field +time dependent parameter +time dependent perturbation theory +time dependent potential +time dependent schrodinger equation +time dependent schroedinger equation +time dependent variational monte carlo +time dependent variational principle +time dilatation +time energy uncertainty relation +time evolution +time evolution operator +time evolving block decimation +time independent hamiltonian +time like separation +time of flight +time operator +time resolution +time resolved fluorescence energy transfer +time resolved spectroscopy +time reversal +time reversal invariance +time reversal symmetry +time reversal symmetry breaking +time scale +time symmetry +time variation +timeline of nuclear fusion +timeline of quantum computing +timir datta +tip enhanced raman spectroscopy +tm wave +tnp atp +toda field theory +toda lattice +toffoli gate +tokamak fusion test reactor +tokamak οΏ½ configuration variable +tolman electronic parameter +tomographic probability representation +tomographic reconstruction +tomography +tomography imaging spectrometer +tomography laser mammography +tonks girardeau gas +top eta meson +top quark +tophat beam +topicity +topness +topoflight +topological charge +topological code +topological defect +topological degeneracy +topological entanglement entropy +topological entropy +topological insulator +topological invariant +topological order +topological phase +topological phase transition +topological property +topological protection +topological quantum computation +topological quantum computer +topological quantum computing +topological quantum field theory +topological quantum memory +topological quantum number +topological qubit +topological state +topological tensor product +topologically protected +topos theory +tore supra +toric code +toric code model +toroidal ring model +total active reflection coefficient +total angular momentum +total angular momentum quantum number +total energy +total momentum +total noise +total reflection +total scattering cross section +totalitarian principle +townsend discharge +toy model +trace distance +trace norm +tractography +trans planckian problem +transactinide element +transactional interpretation +transcranial photobiomodulation +transfer efficiency +transfer function +transfer matrix method +transformation property +transformation theory +transformer +transistor laser +transition amplitude +transition dipole moment +transition edge sensor +transition frequency +transition matrix +transition of state +transition point +transition probability +transition rate +transition temperature +translation invariance +translation operator +translational invariance +translational motion +translational partition function +translational symmetry +transmission coefficient +transmission electron aberration corrected microscope +transmission electron microscopy +transmission line resonator +transmission probability +transmission raman spectroscopy +transmission spectrum +transmissometer +transmit information +transmittance +transmon +transmon qubit +transport efficiency +transport property +transuranium element +transverse doppler shift +transverse electric wave +transverse electromagnetic wave +transverse field ising model +transverse ising model +transverse magnetic wave +transverse mode +transverse relaxation optimized spectroscopy +transverse spatial mode +transverse vector field +transverse wave +trap electrodes +trap frequency +trapped atom +trapped atom ion +trapped bose einstein condensate +trapped ion +trapped ion quantum computer +trapped ion qubit +trapping frequency +trapping potential +traveling wave solution +treated classically +treated quantum mechanically +tree kernel +triality +triangular lattice +tribimaximal mixing +tribochromism +tricritical point +trident laser +trimaximal mixing +trinity paradox +trion +tripartite entanglement +tripartite state +tripartite system +triple alpha process +triple point +triple resonance nuclear magnetic resonance spectroscopy +triplet state +tristimulus colorimeter +trochoid +trojan wave packet +tropospheric emission spectrometer +true muonium +truncated wigner approximation +tsallis entropy +tsirelson bound +tsirelsons bound +tunable diode laser absorption spectroscopy +tunable laser +tunnel coupling +tunnel injection +tunnel ionization +tunnel junction +tunnel magnetoresistance +tunneling dynamic +tunneling probability +tunneling process +tunneling rate +tunneling time +tunnelling time +turbulent atmosphere +turbulent quantum channel +turing machine +twin beam +twisted geometries +twistor theory +two atom system +two body dirac equation +two body force +two body interaction +two component bose einstein condensate +two dimensional array +two dimensional case +two dimensional correlation analysis +two dimensional electron gas +two dimensional hilbert space +two dimensional infrared spectroscopy +two dimensional lattice +two dimensional nuclear magnetic resonance spectroscopy +two dimensional potential +two dimensional system +two electron atom +two level atom +two level quantum system +two level system +two mode gaussian state +two mode squeezed state +two mode squeezed vacuum state +two mode squeezing +two parameter family +two particle system +two path interferometer +two photon absorption +two photon entanglement +two photon interference +two photon photoelectron spectroscopy +two photon resonance +two photon state +two photon transition +two point correlation function +two qubit case +two qubit entanglement +two qubit gate +two qubit interaction +two qubit operation +two qubit state +two qubit system +two sided cavities +two sided cavity +two slit experiment +two spin system +two state quantum system +two state system +two state vector formalism +two time correlation function +tyndall effect +type 1.5 superconductor +type i superconductor +type ii superconductor +typical subspace +u bit +uk atomic energy authority constabulary +ultra cold atom +ultra high energy cosmic ray +ultra strong coupling regime +ultrabright +ultracold atom +ultracold atom gas +ultracold boson +ultracold fermion +ultracold gas +ultracold molecule +ultracold neutron +ultracold polar molecule +ultracold quantum gas +ultrafast electron diffraction +ultrafast laser spectroscopy +ultrafast x ray +ultramicrotomy +ultrashort laser pulse +ultrashort pulse +ultrashort pulse laser +ultrasonic grating +ultrasound attenuation spectroscopy +ultrastrong coupling regime +ultrastructure +ultraviolet catastrophe +ultraviolet divergence +ultraviolet fixed point +ultraviolet photoelectron spectroscopy +ultraviolet visible spectroscopy +ultraviolet visible spectroscopy of stereoisomer +umbelliferone +umklapp scattering +unambiguous discrimination +unambiguous state discrimination +unbroken pt symmetry +uncertainty principle +uncertainty relation +uncleftish beholding +uncomputation +unconditional security +unconditionally secure quantum bit commitment +unconventional superconductor +undetected photon +unentanglements +unextendible product bases +unextendible product basis +uniform acceleration +uniform magnetic field +unique ground state +uniqueness theorem +unit sphere +unit time +unitarity +unitarity gauge +unitary dynamic +unitary equivalence +unitary evolution +unitary gate +unitary group +unitary limit +unitary matrix +unitary operation +unitary operator +unitary representation +unitary time evolution +unitary transformation +universal behaviour +universal conductance fluctuation +universal control +universal feature +universal gate +universal gate set +universal linear accelerator +universal property +universal quantum computation +universal quantum computer +universal quantum computing +universal quantum gate +universal resource +universal scaling +universal set +universal wavefunction +universality +universality class +unpaired electron +unrestricted hartree fock +unruh effect +unruh temperature +unsorted database +unstable particle +unstable state +unstable system +up conversion +up quark +upper critical solution temperature +upsilon meson +uranium rhodium germanium +uv completion +v particle +vacuum +vacuum angle +vacuum energy +vacuum energy density +vacuum expectation value +vacuum field +vacuum fluctuation +vacuum level +vacuum manifold +vacuum polarization +vacuum rabi oscillation +vacuum rabi splitting +vacuum state +vafa witten theorem +vainshtein radius +vakhitov kolokolov stability criterion +valence and conduction band +valence bond theory +valence electron +valley exit jet +valleytronic +van allen belt +van der waals force +van der waals interaction +van der waerden notation +vanadium gallium +vapochromism +variable pathlength cell +variational approach +variational method +variational monte carlo +variational perturbation theory +variational principle +varphi josephson junction +vector beam +vector boson +vector diagram +vector field +vector greens theorem +vector meson +vector meson dominance +vector model of the atom +vector plane wave +vector potential +vector radiative transfer +vector space +velocity field +velocity interferometer system +verlinde algebra +vertex function +vertex model +vertex operator algebra +vertical cavity surface emitting laser +vertical external cavity surface emitting laser +vertico spatially modulated illumination +viaspan +vibration theory of olfaction +vibrational circular dichroism +vibrational degree +vibrational ground state +vibrational level +vibrational mode +vibrational motion +vibrational state +vibrational temperature +vibronic coupling +vibronic spectroscopy +video spectroscopy +vienna ab initio simulation package +virasoro algebra +virtual black hole +virtual particle +virtual photon +virtual quanta +viscous fingering +visible light photon counter +vitaly ginzburg +vitess +vitrification +vnmr +voigt profile +voigt thomson law +voitenko compressor +volterra lattice +volume operator +von kοΏ½rmοΏ½n constant +von neumann algebra +von neumann entropy +von neumann equation +von neumann measurement +von neumann wigner interpretation +vortex beam +vortex state +voter model +vsepr theory +vulcan laser +vulvar intraepithelial neoplasia +w algebra +w and z boson +w state +wannier equation +ward takahashi identity +wards conjecture +water retention on mathematical surface +waterloo institute for nanotechnology +wattless current +wave equation +wave function +wave function collapse +wave function renormalization +wave guide +wave mechanic +wave number +wave packet +wave packet dynamic +wave particle duality +wave vector +wavefront shaping +wavefunction +wavelength dispersive x ray spectroscopy +weak coherence +weak coherent pulse +weak convergence +weak coupling limit +weak coupling regime +weak equivalence principle +weak field limit +weak hypercharge +weak interaction +weak isospin +weak localization +weak measurement +weak nonlinearity +weak probe field +weak trace class operator +weak value +weakless universe +wehrl entropy +weinberg angle +weinberg witten theorem +weiss domain +weizsacker williams method +werner state +werthamer helfand hohenberg theory +wess zumino gauge +wess zumino model +wess zumino witten model +western chorus frog +wet electron +wetting layer +weyl brauer matrice +weyl equation +weyl heisenberg group +weyl quantization +weyl semimetal +weyls eigendifferential +wheeler dewitt equation +wheelers delayed choice experiment +which path information +whispering gallery mode +whistler +white noise +wick rotation +wicks theorem +wide angle x ray scattering +widom scaling +wien filter +wien2k +wiens displacement law +wiggler +wightman axiom +wightman function +wigner distribution function +wigner eckart theorem +wigner function +wigner inequalities +wigner inequality +wigner quasiprobability distribution +wigner representation +wigner rotation +wigner transform +wigner weisskopf theory +wigner weyl transform +wigners classification +wigners friend +wigners theorem +wilson bappu effect +wilson loop +wind profile power law +winding number +wiswessers rule +witness operator +witt algebra +witten index +wkb approximation +wolf effect +wood frog +woods saxon potential +woodwards rule +work function +workable approximation to +world line +worlds interpretation +wronskian +wssus model +wu experiment +wu yang monopole +x and y boson +x ray +x ray absorption fine structure +x ray absorption near edge structure +x ray burster +x ray crystallography +x ray fluorescence +x ray fluorescence holography +x ray free electron laser +x ray laser +x ray magnetic circular dichroism +x ray notation +x ray photoelectron spectroscopy +x ray raman scattering +x ray reflectivity +x ray scattering technique +x ray spectroscopy +x ray standing wave +x(3872) +xi baryon +xstream system +xy spin chain +xylomannan +y(4140) +y(4260) +yamartino method +yang baxter equation +yang mills existence and mass gap +yang mills theory +yangian +yarkovsky effect +yarkovsky okeefe radzievskii paddack effect +yb:luvo4 +yetter drinfeld category +yoshiaki arata +yoshimine sort +youngs interference experiment +yrast +yttrium aluminium garnet +yttrium barium copper oxide +yukawa interaction +yukawa potential +yvette mattern +z n model +z(4430) +zc(3900) +zeeman doppler imaging +zeeman effect +zeeman energy +zeeman slower +zeeman splitting +zeeman sublevel +zeno dynamic +zeno effect +zero curtain effect +zero field nmr +zero field splitting +zero phonon line and phonon sideband +zero point energy +zero point fluctuation +zero sound +zerona +zeta function +zinc selenide +zindo +zitterbewegung +zm 87 +zone axis +zz diboson diff --git a/.github/entrypoint/artifact/python/particle.ipynb b/.github/entrypoint/artifact/python/particle.ipynb new file mode 100644 index 000000000..0e551656a --- /dev/null +++ b/.github/entrypoint/artifact/python/particle.ipynb @@ -0,0 +1,374 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import numpy as np\n", + "from scipy import interpolate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# class Particle\n", + "\n", + "*The Particle object represents a particles with id given by:*\n", + "\n", + "|QUARKS|no|LEPTONS|no|GAUGE AND HIGGS BOSONS|no|\n", + "|------|---|------|----|--|--|\n", + "|d| 1|$e^-$|11|$g$|(9)21|\n", + "|u| 2|$\\nu_e$|12|$\\gamma$|22|\n", + "|s| 3|$\\mu^-$|13|$Z^0$|23|\n", + "|c| 4|$\\nu_\\mu$|14|$W^+$|24|\n", + "|b| 5|$\\tau^-$|15|$H^0$|25|\n", + "|t| 6|$\\nu_\\tau$|16|||\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# class QCD\n", + "\n", + "*This class includes pdf and splitting functions.*\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## $\\alpha_s$" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sp\n", + "from sympy import I, pi, oo\n", + "sp.init_printing()" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( Q^{2}, \\ Q^{2}_{0}, \\ b_{0}, \\ b_{1}, \\ C_{A}, \\ C_{F}\\right)$" + ], + "text/plain": [ + "(QΒ², QΒ²β‚€, bβ‚€, b₁, C_A, C_F)" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Q2, x, Q02, b0, b1, CA, CF = sp.symbols('Q^2, x, Q_0^2 b_0, b_1, C_A, C_F')\n", + "Q2, Q02, b0, b1, CA, CF" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left( a_{s}({Q_0^2}), \\ a_{s}({Q^2})\\right)$" + ], + "text/plain": [ + "(a_{s}({Q_0__2}), a_{s}({Q__2}))" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a0, a = sp.symbols('a_{s}({Q_0^2}), a_{s}({Q^2})')\n", + "a0, a" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIUAAAAwCAYAAAA/3bn6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFsElEQVR4Ae2cjVUUMRDHOR8FoHZwdoBagdiBaAVAB/gsATtQOxA7ACtA6UA7EOgA/799mZj9uNvkdrm9i5n3wmazk8nMP5PJx94yu7+/3ynUj8BsNtsX17nSc2F2119jezl2t1f1h9dcjrCnVr4o3Si9UJorZU/FKZZ0sYsIh7DIQU51IVpkT4+yt7AYmIxAcYpkyPKvUJwi/z5OtrA4RTJk+VcoTpF/HydbWJwiGbL8KxSnyL+Pky0sTpEMWf4VilPk38fJFhanSIYs/wqz8kJseSfreJuXYLwD4d0H199K10pXwu6jrtlRcYrsunS4QWX6GI5hdhKKU2TXpcMNKk4xHMPsJBSnyK5LhxtUnGI4htlJKE6RXZcON6g4xXAMs5Mwk0UcyHx311gDD3VwwwFOoQwRGO3wSid/5VuBTBxkNKfIBI9ihhAoa4riBi0EilO0ICkFk34M5L7A+uC6Ye6uR+4jnKjekYy5+HlzWSgSgT7Mpo4UZ+rQ9y7xJRaf5/2MtO2/+morFpNIvrkcgy/eOmlqpziWcgeBZmfKo3Dv53nieSPep3Kob1ZfZXtKF0q3Sr+sfFOvU+krzC7BRO2DYYsmnT6kzYnSj5ZWPQWAKZYPMu55yKr7O92/1nOiTbLcUNY68lPqq7Y/gpPSpdPDmzxppJAynxsK4SS/VdZ3MEZE+eStaGeINBft4vFLBOqB0vFAyWvTt6EnGIJlndQBO5uQpBXAEPL3+vQRz+0iHj1jOuIgrVfOIhkp5WqHEHyaUifkVd216hu2TV50q1TDatJIgUaQRtpcFzy29x+CMDLFt2y38ZrnMpipZBtoan3B8m0I1OhrCnUa872F05fKHynR6e+UIH7wGi4OK4dQGeDgIESMO90v6nh2KdVCCf4OwmmuJcdW1890fxG22VFnyqJR9E3FPTAYLMH+sy8TWKNOHxL8yWQqT8fwa+gqvPJM6VfwHIdg7scRLMFTC2fGz1XEIvI4LLM89ZRggqeSEZRxnjGqrU6flaePQLfB+kpWNO4hDqrHAP4Zlj1SwWgkb6WB5sIF0CwyPGk8BwxGCldLdPiy0E/Hc57RRciCXpkMu6rMb7+k55lLp1yrGtP8idWXrTbbdzBqEc9U2LRjGe6hDLAEU0+7PjdO5oc6IQz7hKVrK9O1+ldB1pTuH1s+4YpjLXIaa88/F2Bm8FPa0D3g/VHb1Tcbumf3wPRSTV/wdJF4iGDWiSEL+iCXnVOTsL1mc4MhRl8iqLVrtjTE7CTh3qhMfxGx/5GUHj2kmky1QihfeWVucsKr5LFaPgjLLK9yRpIPo5TDq0Tmjbun/r7VcWU8X2l6Qa7SSjaqXq++pqdrx0+9Vt51FW807uIFn9pubtTpQ8I9MQLdjU0djCbC4CJv93V7Mnj2IhmMqmaItZF6qbYZEdS9UwqJe+qum5bqu4oyK+AOHrXpeDSncB3OEbM5QxVO5cnhdMIpZLNDUm3HgHq4q0vw7aGTHrHdOnHtcg/VQHD3T6on6/+zTN9ebUbAHbu9DjQ4mlNIFs5AunGdAfDeAZyzXKlsKF1LwMsFQohKocOw8/kqh/i33equCDDmMN0cD1O6qr6hNkNx51VB7fR3N5Q+MM9+F/BRknXKiRyByMECjZB+ozI/lcCzImEAMrvoSIXsLNgKcz7B+iJs05wUJ7C8spVD1EYLhWugPn1jVBiKO/1V37kItAdbaD6UbBnBcXhtsRjbluptzEIzVmf4RCxooxaasXIlj6jakjnm9CH5ayM8u2sLGKOAj2Ywu2nNb5tjBDR4iDhh1Gk83ujb99KuHiVUsLU/3GVqkv4sIJPDvuoaEH8kg2mGH/psZMdKV0YzA4Awv6+EUzO6B/1vDCeX6bV1PrPNTrEncM67jFJ5oR4E3KDi+53WYNhap8Bm5+0cZPXtLnog+r8eCzeOxflxTWeU/Qu5SQi/lrfnfwAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle - \\frac{1}{x^{2} \\left(b_{0} + b_{1} x\\right)}$" + ], + "text/plain": [ + " -1 \n", + "──────────────\n", + " 2 \n", + "x β‹…(bβ‚€ + b₁⋅x)" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-1/(x**2*(b0 + b1*x))" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - \\frac{b_{1} \\left(- \\log{\\left(a_{s}({Q^2}) \\right)} + \\log{\\left(a_{s}({Q^2}) + \\frac{b_{0}}{b_{1}} \\right)}\\right)}{b_{0}^{2}} + \\frac{b_{1} \\left(- \\log{\\left(a_{s}({Q_0^2}) \\right)} + \\log{\\left(a_{s}({Q_0^2}) + \\frac{b_{0}}{b_{1}} \\right)}\\right)}{b_{0}^{2}} - \\frac{1}{a_{s}({Q_0^2}) b_{0}} + \\frac{1}{a_{s}({Q^2}) b_{0}}$" + ], + "text/plain": [ + " βŽ› βŽ› bβ‚€βŽžβŽž βŽ› \n", + " bβ‚β‹…βŽœ-log(a_{s}({Q__2})) + log⎜a_{s}({Q__2}) + β”€β”€βŽŸβŽŸ bβ‚β‹…βŽœ-log(a_{s}({Q_0__2}\n", + " ⎝ ⎝ bβ‚βŽ βŽ  ⎝ \n", + "- ────────────────────────────────────────────────── + ───────────────────────\n", + " 2 \n", + " bβ‚€ \n", + "\n", + " βŽ› bβ‚€βŽžβŽž \n", + ")) + log⎜a_{s}({Q_0__2}) + β”€β”€βŽŸβŽŸ \n", + " ⎝ bβ‚βŽ βŽ  1 1 \n", + "─────────────────────────────── - ────────────────── + ────────────────\n", + " 2 a_{s}({Q_0__2})β‹…bβ‚€ a_{s}({Q__2})β‹…bβ‚€\n", + " bβ‚€ " + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.integrate(-1/(x**2*(b0 + b1*x)), (x, a0, a))" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.6100939485189322\n", + "0.24485952713564962\n" + ] + } + ], + "source": [ + "N_c = 3.0\n", + "C_A = N_c\n", + "n_f = 5\n", + "C_F = (N_c*N_c-1)/(2.0*N_c)\n", + "b0 = (11.0*C_A - 2.0*n_f)/(12.0*np.pi)\n", + "b1 = (17.0*C_A**2 - 5.0*C_A*n_f - 3.0*C_F*n_f)/(24.0*np.pi**2)\n", + "print(b0)\n", + "print(b1)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "alphas_df = pd.read_csv('alphas.csv')\n", + "alphas_df = alphas_df.set_index('$Q$[GeV]')\n", + "alphas = interpolate.interp1d(alphas_df.index, alphas_df[r'$\\alpha_s(Q)$'])\n", + "\n", + "alphas_df.plot(logx=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(0.95798)" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alphas(0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(0.4405)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alphas(1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(0.30426603)" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alphas(2.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## PDFs" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def plot(url, width='100%', height=500):\n", + " \"\"\"Return an IFrame plot\"\"\"\n", + " from IPython.display import IFrame\n", + " return IFrame(url, width=width, height=height) " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "link_pdf = \"http://hepdata.cedar.ac.uk/pdf/pdf3.html\"\n", + "plot(link_pdf, height=900)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.github/entrypoint/artifact/python/pyproject.toml b/.github/entrypoint/artifact/python/pyproject.toml new file mode 100644 index 000000000..e4a8cb2ba --- /dev/null +++ b/.github/entrypoint/artifact/python/pyproject.toml @@ -0,0 +1,29 @@ +[tool.poetry] +name = "lgt" +version = "0.1.3" +description = "Python library for Lattice Gauge Theory" +authors = ["Sam Foreman "] + +[tool.poetry.dependencies] +python = ">=3.8,<3.11" +tensorflow = "^2.8.0" +numpy = "^1.22.3" +torch = "^1.11.0" +scipy = "^1.8.0" +itermplot = "^0.331" +ipython = "^8.2.0" + +[tool.poetry.dev-dependencies] +pyright = "^1.1.232" +pynvim = "^0.4.3" +ptipython = "^1.0.1" +# ipdb = {version = "*", optional = true} +pudb = {version = "*", optional = true} +# ptipython = {optional = true} + +[tool.poetry.extras] +dev_tools = ["pudb"] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/.github/entrypoint/artifact/python/setup.py b/.github/entrypoint/artifact/python/setup.py new file mode 100644 index 000000000..4e5b539cd --- /dev/null +++ b/.github/entrypoint/artifact/python/setup.py @@ -0,0 +1,29 @@ +import setuptools + +with open("README.md", "r", encoding="utf-8") as fh: + long_description = fh.read() + +setuptools.setup( + name="nftqcd/lgt", + version="0.1.2", + author="Sam Foreman", + author_email="saforem2@gmail.com", + description=( + "A package containing a collection of" + " utilities for Lattice Gauge Theory" + ), + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/nftqcd/lgt", + project_urls={ + "Bug Tracker": "https://github.com/nftqcd/lgt/issues", + }, + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + package_dir={"": "src"}, + packages=setuptools.find_packages(where="src"), + python_requires=">=3.8", +) diff --git a/.github/entrypoint/artifact/python/src/lgt/__init__.py b/.github/entrypoint/artifact/python/src/lgt/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/group/__init__.py b/.github/entrypoint/artifact/python/src/lgt/group/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/group/generators.py b/.github/entrypoint/artifact/python/src/lgt/group/generators.py new file mode 100644 index 000000000..0d520bc4e --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/group/generators.py @@ -0,0 +1,55 @@ +""" +generators.py + +Contains methods for generating elements of SU(2), SU(3) gauge groups. + +Note: + - The `eps` (type: float) argument to the below functions controls the + 'distance' from the identity matrix. +""" +from __future__ import absolute_import, print_function, division, annotations + +import numpy as np + +# from re import split +# from multiprocessing import pool + + +def generate_SU2(eps: float) -> np.ndarray: + """Returns a single randomly initialized SU(2) matrix.""" + r_rand_nums = np.random.uniform(0, 0.5, (4)) + r = np.empty((4)) + + r[1:] = eps * r_rand_nums[1:] / np.linalg.norm(r_rand_nums[1:]) + r[0] = np.sign(r_rand_nums[0]) * np.sqrt(1 - eps ** 2) + + r11 = +r[0] + 1j * r[3] + r12 = +r[2] + 1j * r[1] + r21 = -r[2] + 1j * r[1] + r22 = +r[0] - 1j * r[3] + + return np.array([[r11, r12], [r21, r22]]) + + +def generate_SU3(eps: float) -> np.ndarray: + """Returns a single randomly initialized SU(3) mtx.""" + r = np.identity(3, dtype=np.complexfloating) + s = np.identity(3, dtype=np.complexfloating) + t = np.identity(3, dtype=np.complexfloating) + + r[:2, :2] = generate_SU2(eps) + s[0:3:2, 0:3:2] = generate_SU2(eps) + t[1:, 1:] = generate_SU2(eps) + + return np.dot(np.dot(r, s), t) + + +def generate_SU3_array(n: int, eps: float) -> np.ndarray: + """Generates a 2*n array of SU(3) mtxs; eps controls dist from Identity""" + arr = np.zeros((2 * n, 3, 3), dtype=np.complexfloating) + for i in range(n): + mtx = generate_SU3(eps) + arr[2 * i] = mtx + arr[2 * i + 1] = mtx.conj().T + + return arr diff --git a/.github/entrypoint/artifact/python/src/lgt/group/group.py b/.github/entrypoint/artifact/python/src/lgt/group/group.py new file mode 100644 index 000000000..640499b07 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/group/group.py @@ -0,0 +1,403 @@ +""" +group.py + +Contains implementations of various (special) unitary groups. + +Date: 2022/03/25 + +Original version from: + + https://github.com/nftqcd/nthmc/blob/master/lib/group.py + +written by Xiao-Yong Jin +""" +from __future__ import absolute_import, division, print_function, annotations + + +import numpy as np +import tensorflow as tf +import math +from typing import Callable + +Array = np.array +Tensor = tf.Tensor +PI = tf.convert_to_tensor(math.pi) +SQRT1by3 = tf.math.sqrt(1. / 3.) + +TF_FLOAT = tf.keras.backend.floatx() + +# def adj(x: Array): +# return x.conj().T + + +class Group: + """Gauge group represented as matrices in the last two dims in tensors.""" + def mul( + self, + a: Tensor, + b: Tensor, + adjoint_a: bool = False, + adjoint_b: bool = False + ) -> Tensor: + return tf.linalg.matmul(a, b, adjoint_a=adjoint_a, adjoint_b=adjoint_b) + + +class U1Phase(Group): + def mul( + self, + a: Tensor, + b: Tensor, + adjoint_a: bool = False, + adjoint_b: bool = False + ) -> Tensor: + if adjoint_a and adjoint_b: + return tf.subtract(tf.math.negative(a), b) + elif adjoint_a: + return tf.add(tf.math.negative(a), b) + elif adjoint_b: + return tf.subtract(a, b) + else: + return tf.add(a, b) + + def adjoint(self, x: Tensor) -> Tensor: + return tf.math.negative(x) + + def trace(self, x: Tensor) -> Tensor: + return tf.math.cos(x) + + def diff_trace(self, x: Tensor) -> Tensor: + return tf.math.negative(tf.math.sin(x)) + + def diff2trace(self, x: Tensor) -> Tensor: + return tf.math.negative(tf.math.cos(x)) + + def compat_proj(self, x: Tensor) -> Tensor: + return tf.math.floormod(x + PI, 2 * PI) - PI + + def random(self, shape: list[int]): + return self.compat_proj(tf.random.uniform(shape, *(-4, 4))) + + def random_momentum(self, shape: list[int]) -> Tensor: + return tf.random.normal(shape) + + def kinetic_energy(self, p: Tensor) -> Tensor: + return tf.reduce_sum( + tf.square(tf.reshape(p, [p.shape[0], -1])), + axis=1 + ) + + +class SU3(Group): + dtype = tf.complex128 + size = [3, 3] + shape = (3, 3) + + def mul( + self, + a: Tensor, + b: Tensor, + adjoint_a: bool = False, + adjoint_b: bool = False, + ) -> Tensor: + return tf.linalg.matmul(a, b, adjoint_a=adjoint_a, adjoint_b=adjoint_b) + + def adjoint(self, x: Tensor) -> Tensor: + return tf.linalg.adjoint(x) + + def trace(self, x: Tensor) -> Tensor: + return tf.linalg.trace(x) + + def diff_trace(self, x: Tensor): # type: ignore + print('TODO') + + def diff2Trace(self, x: Tensor): # -> Tensor: + print('TODO') + + def exp(self, x: Tensor) -> Tensor: + return exp(x) + + def projectTAH(self, x: Tensor) -> Tensor: + return projectTAH(x) + + def random(self, shape: tuple) -> Tensor: + r = tf.random.normal(shape, dtype=TF_FLOAT) + i = tf.random.normal(shape, dtype=TF_FLOAT) + return projectSU(tf.dtypes.complex(r, i)) + + def random_momentum(self, shape: tuple) -> Tensor: + return randTAH3(shape[:-2]) + + def kinetic_energy(self, p: Tensor) -> Tensor: + p2 = norm2(p) - tf.constant(8.0) # - 8.0 ?? + return ( + 0.5 * tf.math.reduce_sum(tf.reshape(p2, [p.shape[0], -1]), axis=1) + ) + + +def norm2(x: Tensor, axis=[-2, -1]) -> Tensor: + """No reduction if axis is empty""" + n = tf.math.real(tf.math.multiply(tf.math.conj(x), x)) + if len(axis) == 0: + return n + + return tf.math.reduce_sum(n, axis=axis) + + +# Converted from qex/src/maths/matrixFunctions.nim +# Last two dims in a tensor contain matrices. +# WARNING: below only works for SU3 for now +def randTAH3(shape, s): + s2 = 0.70710678118654752440 # sqrt(1/2) + s3 = 0.577350269189625750 # sqrt(1/3) + r3 = s2 * s.normal(shape, dtype=TF_FLOAT) + r8 = s2 * s3 * s.normal(shape, dtype=TF_FLOAT) + # m00 = tf.dtypes.complex(tf.cast(0.0,TF_FLOAT), r8+r3) + # m11 = tf.dtypes.complex(tf.cast(0.0,TF_FLOAT), r8-r3) + # m22 = tf.dtypes.complex(tf.cast(0.0,TF_FLOAT), -2*r8) + m00 = tf.dtypes.complex(0.0, r8+r3) + m11 = tf.dtypes.complex(0.0, r8-r3) + m22 = tf.dtypes.complex(0.0, -2*r8) + r01 = s2 * s.normal(shape, dtype=TF_FLOAT) + r02 = s2 * s.normal(shape, dtype=TF_FLOAT) + r12 = s2 * s.normal(shape, dtype=TF_FLOAT) + i01 = s2 * s.normal(shape, dtype=TF_FLOAT) + i02 = s2 * s.normal(shape, dtype=TF_FLOAT) + i12 = s2 * s.normal(shape, dtype=TF_FLOAT) + m01 = tf.dtypes.complex(r01, i01) + m10 = tf.dtypes.complex(-r01, i01) + m02 = tf.dtypes.complex(r02, i02) + m20 = tf.dtypes.complex(-r02, i02) + m12 = tf.dtypes.complex(r12, i12) + m21 = tf.dtypes.complex(-r12, i12) + return tf.stack([ + tf.stack([m00, m10, m20], axis=-1), + tf.stack([m01, m11, m21], axis=-1), + tf.stack([m02, m12, m22], axis=-1), + ], axis=-1) + + +def eigs3(tr, p2, det): + tr3 = (1.0/3.0)*tr + p23 = (1.0/3.0)*p2 + tr32 = tr3*tr3 + q = tf.math.abs(0.5*(p23-tr32)) + r = 0.25*tr3*(5*tr32-p2) - 0.5*det + sq = tf.math.sqrt(q) + sq3 = q*sq + isq3 = 1.0/sq3 + maxv = tf.constant(3e38, shape=isq3.shape, dtype=isq3.dtype) + minv = tf.constant(-3e38, shape=isq3.shape, dtype=isq3.dtype) + isq3c = tf.math.minimum(maxv, tf.math.maximum(minv, isq3)) + rsq3c = r * isq3c + maxv = tf.constant(1, shape=isq3.shape, dtype=isq3.dtype) + minv = tf.constant(-1, shape=isq3.shape, dtype=isq3.dtype) + rsq3 = tf.math.minimum(maxv, tf.math.maximum(minv, rsq3c)) + t = (1.0/3.0)*tf.math.acos(rsq3) + st = tf.math.sin(t) + ct = tf.math.cos(t) + sqc = sq*ct + sqs = 1.73205080756887729352*sq*st # sqrt(3) + ll = tr3 + sqc + e0 = tr3 - 2*sqc + e1 = ll + sqs + e2 = ll - sqs + return e0, e1, e2 + + +def rsqrtPHM3f(tr, p2, det): + l0, l1, l2 = eigs3(tr, p2, det) + sl0 = tf.math.sqrt(tf.math.abs(l0)) + sl1 = tf.math.sqrt(tf.math.abs(l1)) + sl2 = tf.math.sqrt(tf.math.abs(l2)) + u = sl0 + sl1 + sl2 + w = sl0 * sl1 * sl2 + d = w*(sl0+sl1)*(sl0+sl2)*(sl1+sl2) + di = 1.0/d + c0 = (w*u*u+l0*sl0*(l1+l2)+l1*sl1*(l0+l2)+l2*sl2*(l0+l1))*di + c1 = -(tr*u+w)*di + c2 = u*di + return c0, c1, c2 + + +def rsqrtPHM3(x: Tensor) -> Tensor: + tr = tf.math.real(tf.linalg.trace(x)) + x2 = tf.linalg.matmul(x, x) + p2 = tf.math.real(tf.linalg.trace(x2)) + det = tf.math.real(tf.linalg.det(x)) + c0, c1, c2 = rsqrtPHM3f(tr, p2, det) + c0_ = tf.reshape(c0, c0.shape + [1, 1]) + c1_ = tf.reshape(c1, c1.shape + [1, 1]) + c2_ = tf.reshape(c2, c2.shape + [1, 1]) + term0 = tf.cast(c0_ * tf.eye(3, batch_shape=[1] * len(c0.shape)), x.dtype) + term1 = tf.multiply(x, tf.cast(c1_, x.dtype)) + term2 = tf.multiply(x, tf.cast(c2_, x.dtype)) + return term0 + term1 + term2 + + +def projectU(x: Tensor) -> Tensor: + """x (x'x)^{-1/2}""" + # nc = x.shape[-1] + t = tf.linalg.matmul(x, x, adjoint_a=True) + t2 = rsqrtPHM3(t) + return tf.linalg.matmul(x, t2) + + +def projectSU(x: Tensor) -> Tensor: + nc = tf.constant(x.shape[-1], TF_FLOAT) + m = projectU(x) + d = tf.linalg.det(m) + tmp = tf.math.atan2(tf.math.imag(d), tf.math.real(d)) + p = tmp * tf.constant(-1.0) / nc + # p = -(1.0 / nc) * tf.math.atan2(tf.math.imag(d), tf.math.real(d)) + # p = tf.math.multiply(tf.math.negative(tf.constant(1.0) / nc), + # tf.math.atan2(tf.math.imag(d), tf.math.real(d))) + p_ = tf.reshape(tf.dtypes.complex(tf.math.cos(p), tf.math.sin(p)), + p.shape + [1, 1]) + return p_ * m + + +def projectTAH(x: Tensor) -> Tensor: + """Returns R = 1/2 (X - X†) - 1/(2 N) tr(X - X†) + R = - T^a tr[T^a (X - X†)] + = T^a βˆ‚_a (- tr[X + X†]) + """ + nc = tf.constant(x.shape[-1]) + r = 0.5 * (x - tf.linalg.adjoint(x)) + d = tf.linalg.trace(r) / nc + r -= tf.reshape(d, d.shape + [1, 1]) * eyeOf(x) + + return r + +def checkU(x: Tensor) -> tuple[Tensor, Tensor]: + """Returns the average and maximum of the sum of the deviations of X†X""" + nc = tf.constant(x.shape[-1]) + d = norm2(tf.linalg.matmul(x, x, adjoint_a=True) - eyeOf(x)) + a = tf.math.reduce_mean(d, axis=range(1, len(d.shape))) + b = tf.math.reduce_max(d, axis=range(1, len(d.shape))) + c = 2 * (nc * nc + 1) + + return tf.math.sqrt(a / c), tf.math.sqrt(b / c) + + +def checkSU(x: Tensor) -> tuple[Tensor, Tensor]: + """Returns the average and maximum of the sumf of deviations of: + - X† X + - det(x) + from unitarity + """ + nc = tf.constant(x.shape[-1]) + d = norm2(tf.linalg.matmul(x, x, adjoint_a=True) - eyeOf(x)) + det = tf.linalg.det(x) + d = tf.math.add(d, norm2(tf.constant(1., dtype=det.dtype) + det, axis=[])) + # d = tf.math.add(d, norm2(tf.constant(1.) + tf.linalg.det(x), axis=[])) + # d += norm2(-1 + tf.linalg.det(x), axis=[]) + a = tf.math.reduce_mean(d, axis=range(1, len(d.shape))) + b = tf.math.reduce_max(d, axis=range(1, len(d.shape))) + c = tf.cast(2 * (nc * nc + 1), TF_FLOAT) + return tf.math.sqrt(a / c), tf.math.sqrt(b / c) + + +def su3vec(x: Tensor) -> Tensor: + """Only for x in 3x3 anti-Hermitian. + + Return 8 real numbers, X^a T^a = X - 1/3 tr(X) + + Convention: tr{T^a T^a} = -1/2 + X^a = - 2 tr[T^a X] + """ + c = -2 + x00 = x[..., 0, 0] # type:ignore + x01 = x[..., 0, 1] # type:ignore + x11 = x[..., 1, 1] # type:ignore + x02 = x[..., 0, 2] # type:ignore + x12 = x[..., 1, 2] # type:ignore + x22 = x[..., 2, 2] # type:ignore + return tf.stack([ + c * tf.math.imag(x01), + c * tf.math.real(x01), + tf.math.imag(x11) - tf.math.imag(x00), + c * tf.math.imag(x02), + c * tf.math.real(x02), + c * tf.math.imag(x12), + c * tf.math.real(x12), + SQRT1by3 * ( + 2 * tf.math.imag(x22) - tf.math.imag(x11) - tf.math.imag(x00) + ), + ], axis=-1) + + +def su3fromvec(v: Tensor) -> Tensor: + """ + X = X^a T^a + tr{X T^b} = X^a tr{T^a T^b} = X^a (-1/2) 𝛅^ab = -1/2 X^b + X^a = -2 X_{ij} T^a_{ji} + """ + s3 = 0.577350269189625751 # sqrt(1/3) + c = -0.5 + zero = tf.zeros(v[..., 0].shape, dtype=v[..., 0].dtype) # type:ignore + x01 = c * tf.dtypes.complex(v[..., 1], v[..., 0]) # type:ignore + x02 = c * tf.dtypes.complex(v[..., 4], v[..., 3]) # type:ignore + x12 = c * tf.dtypes.complex(v[..., 6], v[..., 5]) # type:ignore + x2i = s3 * v[..., 7] # type:ignore + x0i = c * (x2i + v[..., 2]) # type:ignore + x1i = c * (x2i - v[..., 2]) # type:ignore + + def neg_conj(x: Tensor) -> Tensor: + return tf.math.negative(tf.math.conj(x)) + + # ---------------------------------------------------- + # NOTE: Returns matrix of the form: + # + # M = [[ cmplx(x0i), -x01*, -x02*], + # [ x01, cmplx(x1i), -x12*], + # [ x02, x12, cmplx(x2i)]] + # ---------------------------------------------------- + v1 = tf.stack([ + tf.dtypes.complex(zero, x0i), neg_conj(x01), neg_conj(x02) + ], axis=-1) + v2 = tf.stack([ + x01, tf.dtypes.complex(zero, x1i), neg_conj(x12) + ], axis=-1) + v3 = tf.stack([ + x02, x12, tf.dtypes.complex(zero, x2i) + ], axis=-1) + + return tf.stack([v1, v2, v3]) + + +def eyeOf(m): + batch_shape = [1] * (len(m.shape) - 2) + return tf.eye(*m.shape[-2:], batch_shape=batch_shape, dtype=m.dtype) + + +def exp(m: Tensor, order: int = 12): + eye = eyeOf(m) + x = eye + m / tf.constant(order) + for i in tf.range(order-1, 0, -1): + x = eye + tf.linalg.matmul(m, x) / tf.constant(tf.cast(i, m.dtype)) + + return x + + +def SU3GradientTF( + f: Callable[[Tensor], Tensor], + x: Tensor, +) -> tuple[Tensor, Tensor]: + """Compute gradient using TensorFlow GradientTape. + + y = f(x) must be a real scalar value. + + Returns: + - (f(x), D), where D = T^a D^a = T^a βˆ‚_a f(x) + + NOTE: Use real vector derivatives, e.g. + D^a = βˆ‚_a f(x) + = βˆ‚_t f(exp(T^a) x) |_{t=0} + """ + zeros = tf.zeros(8) + with tf.GradientTape(watch_accessed_variables=False) as tape: + tape.watch(zeros) + y = f(tf.linalg.matmul(exp(su3fromvec(zeros)), x)) + d = tape.gradient(y, zeros) + + return y, d diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/lattice.py new file mode 100644 index 000000000..07964bf6e --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/numpy/lattice.py @@ -0,0 +1,178 @@ +""" +su3/numpy/lattice.py + +Implements SU3BaseLattice Class +""" +from __future__ import absolute_import, print_function, division, annotations + +# import jax.numpy as jnp +import numpy as np + +from lgt.group import group as g +# from typing import Generator +# from l2hmc.lattice.generators import generate_SU3 + +Array = np.ndarray +PI = np.pi +TWO_PI = 2. * np.pi + + +def pbc(tup: tuple[int], shape: tuple[int]) -> list: + return np.mod(tup, shape).tolist() + + +def mat_adj(mat: Array) -> Array: + return mat.conj().T + + +Site = tuple[int, int, int, int] # t, x, y, z +Link = tuple[int, int, int, int, int] # t, x, y, z, dim +Buffer = tuple[int, int, int, int, int, int] # b, t, x, y, z, dim + + +class BaseLatticeSU3: + """4D Lattice with SU(3) links.""" + dim = 4 + + def __init__( + self, + nb: int, + shape: tuple[int, int, int, int], + c1: float = 0.0, + ) -> None: + """4D SU(3) Lattice object for dealing with lattice quantities. + + NOTE: + `x.shape = [nb, 4, nt, nx, nx, nx, 3, 3]`. + + Args: + - nb (int): Batch dimension, i.e. number of chains to run in parallel + - nt (int): Temporal extent of lattice + - nx (int): Spatial extent of lattice + - dim (int): Number of dimensions, 4 by default (t, x, y, z) + """ + self.dim = 4 + self.g = g.SU3() + assert len(shape) == 4 # (nb, nt, nx, dim) + self.c1 = c1 + self.link_shape = self.g.shape + self.nt, self.nx, self.ny, self.nz = shape + self._shape = (nb, 4, *shape, *self.g.shape) + self.volume = self.nt * self.nx * self.ny * self.nz + # ---------------------------------------------------------------- + # NOTE: + # - self.link_shape: [*e] = [3, 3] + # - self.site_idxs: [nb, *n] = [nb, t, x, y, z] + # - self.link_idxs: [nb, *n, d] = [nb, t, x, y, z, d] + # - self.shape: [nb, *n, d, *e] = [nb, t, x, y, z, d, 3, 3] + # + # - where: t in [0, 1, ..., (nt - 1)] + # (x, y, z) in [0, 1, ..., (nx - 1)] + # d in [0, 1, ..., (dim - 1)] + # ---------------------------------------------------------------- + self.site_idxs = tuple( + [self.nt] + [self.nx for _ in range(self.dim - 1)] + ) + self.nplaqs = self.nt * self.nx + self._lattice_shape = shape + self.nsites = np.cumprod(shape)[-1] + self.nlinks = self.nsites * self.dim + self.link_idxs = tuple(list(self.site_idxs) + [self.dim]) + + def coeffs(self, beta: Array) -> dict[str, Array]: + """Coefficients for the plaquette and rectangle terms.""" + rect_coeff = beta * self.c1 + plaq_coeff = beta * (1.0 - 8.0 * self.c1) + + return {'plaq': plaq_coeff, 'rect': rect_coeff} + + def _link_staple_op(self, link: Array, staple: Array) -> Array: + return self.g.mul(link, staple) + + def _plaquette(self, x: Array, u: int, v: int): + xuv = self.g.mul(x[:, u], np.roll(x[:, v], shift=-1, axis=u + 1)) + xvu = self.g.mul(x[:, v], np.roll(x[:, u], shift=-1, axis=v + 1)) + return self.g.trace(self.g.mul(xuv, xvu, adjoint_b=True)) + + def _wilson_loops( + self, + x: Array, + needs_rect: bool = False + ) -> tuple[list[Array], list[Array]]: + # x.shape = [nb, nt, nx, nx, nx, d, 3, 3] + # y.shape = [nb, d, nt, nx, nx, nx, 3, 3] + assert len(x.shape) == 8 + plaqs = [] + rects = [] + for u in range(1, 4): + for v in range(0, u): + yuv = self.g.mul(x[:, u], np.roll(x[:, v], shift=-1, axis=u+1)) + yvu = self.g.mul(x[:, v], np.roll(x[:, u], shift=-1, axis=v+1)) + plaq = self.g.trace(self.g.mul(yuv, yvu, adjoint_b=True)) + plaqs.append(plaq) + if needs_rect: + yu = np.roll(x[:, u], shift=-1, axis=v+1) + yv = np.roll(x[:, v], shift=-1, axis=u+1) + uu = self.g.mul(x[:, v], yuv, adjoint_a=True) + ur = self.g.mul(x[:, u], yvu, adjoint_a=True) + ul = self.g.mul(yuv, yu, adjoint_b=True) + ud = self.g.mul(yvu, yv, adjoint_b=True) + ul_ = np.roll(ul, shift=-1, axis=u+1) + ud_ = np.roll(ud, shift=-1, axis=v+1) + rects.append( + self.g.trace(self.g.mul(ur, ul_, adjoint_b=True)) + ) + rects.append( + self.g.trace(self.g.mul(uu, ud_, adjoint_b=True)) + ) + + return plaqs, rects + + def _plaquettes(self, x: Array) -> Array: + ps, _ = self._wilson_loops(x) + psum = 0.0 + for p in ps: # NOTE: len(ps) == 6 + psum += np.sum(p.real, axis=range(1, len(p.shape))) + + # NOTE: return psum / (len(ps) * dim(link) * volume) + return psum / (6 * 3 * self.volume) + + def action(self, x: Array, beta: Array): + """Returns the action""" + coeffs = self.coeffs(beta) + ps, rs = self._wilson_loops(x, needs_rect=self.c1 != 0) + psum = 0.0 + for p in ps: + psum += np.sum( + p.real, + axis=range(1, len(p.shape)) + ) + + action = coeffs['plaq'] * psum + + if self.c1 != 0: + rsum = 0.0 + for r in rs: + rsum += np.sum( + r.real, + axis=range(1, len(r.shape)) + ) + action += coeffs['rect'] * rsum + # action += tf.math.multiply(coeffs['rect'], rsum) + + return action * (-1.0 / 3.0) + + def random(self): + return self.g.random(self._shape) + + # def grad_action(self, x: Array, beta: Array) -> Array: + # """Returns the derivative of the action""" + # if tf.executing_eagerly(): + # with tf.GradientTape(watch_accessed_variables=False) as tape: + # tape.watch(x) + # action = self.action(x, beta) + # g = tape.gradient(action, x) + # else: + # g = tf.gradients(self.action(x, beta), [x])[0] + + # return self.g.projectTAH(self.g.mul(g, x, adjoint_b=True)) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/pytorch/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/pytorch/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/lattice.py new file mode 100644 index 000000000..324479f6b --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/su3/tensorflow/lattice.py @@ -0,0 +1,169 @@ +""" +lattice.py + +Contains implementation of generic GaugeLattice object. +""" +from __future__ import absolute_import, print_function, division, annotations + +import numpy as np +import tensorflow as tf + +from lgt.group import group as g +from lgt.lattice.su3.numpy.lattice import BaseLatticeSU3 +# from typing import Generator +# from l2hmc.lattice.generators import generate_SU3 + +Array = np.ndarray +PI = np.pi +TWO_PI = 2. * np.pi + +Tensor = tf.Tensor + + +def pbc(tup: tuple[int], shape: tuple[int]) -> list: + return np.mod(tup, shape).tolist() + + +def mat_adj(mat: Array) -> Array: + return mat.conj().T + + +Site = tuple[int, int, int, int] # t, x, y, z +Link = tuple[int, int, int, int, int] # t, x, y, z, dim +Buffer = tuple[int, int, int, int, int, int] # b, t, x, y, z, dim + + +class LatticeSU3(BaseLatticeSU3): + """4D Lattice with SU(3) links.""" + dim = 4 + + def __init__( + self, + nb: int, + shape: tuple[int, int, int, int], + c1: float = 0.0, + ) -> None: + """4D SU(3) Lattice object for dealing with lattice quantities. + + NOTE: + `x.shape = [nb, 4, nt, nx, ny, nz, 3, 3]`. + + Args: + - nb (int): Batch dimension, i.e. number of chains to run in parallel + - shape: Lattice shape, list or tuple of 4 ints + - c1: Constant indicating whether or not to use rectangle terms ? + """ + self.dim = 4 + self.g = g.SU3() + assert len(shape) == 4 # (nb, nt, nx, dim) + self.c1 = tf.constant(c1) + self.link_shape = self.g.shape + self.nt, self.nx, self.ny, self.nz = shape + self._shape = (nb, 4, *shape, *self.g.shape) + self.volume = self.nt * self.nx * self.ny * self.nz + self.site_idxs = tuple( + [self.nt] + [self.nx for _ in range(self.dim - 1)] + ) + self.nplaqs = self.nt * self.nx + self._lattice_shape = shape + self.nsites = np.cumprod(shape)[-1] + self.nlinks = self.nsites * self.dim + self.link_idxs = tuple(list(self.site_idxs) + [self.dim]) + + def coeffs(self, beta: Tensor) -> dict[str, Tensor]: + """Coefficients for the plaquette and rectangle terms.""" + rect_coeff = beta * self.c1 + plaq_coeff = beta * (tf.constant(1.0) - tf.constant(8.0) * self.c1) + + return {'plaq': plaq_coeff, 'rect': rect_coeff} + + def _link_staple_op(self, link: Tensor, staple: Tensor) -> Tensor: + return self.g.mul(link, staple) + + def _plaquette(self, x: Tensor, u: int, v: int): + xuv = self.g.mul(x[:, u], tf.roll(x[:, v], shift=-1, axis=u + 1)) + xvu = self.g.mul(x[:, v], tf.roll(x[:, u], shift=-1, axis=v + 1)) + return self.g.trace(self.g.mul(xuv, xvu, adjoint_b=True)) + + def _wilson_loops( + self, + x: Tensor, + needs_rect: bool = False + ) -> tuple[list[Tensor], list[Tensor]]: + # x.shape = [nb, nt, nx, nx, nx, d, 3, 3] + # y.shape = [nb, d, nt, nx, nx, nx, 3, 3] + x = tf.reshape(x, self._shape) + assert len(x.shape) == 8 + plaqs = [] + rects = [] + for u in range(1, 4): + for v in range(0, u): + yuv = self.g.mul(x[:, u], tf.roll(x[:, v], shift=-1, axis=u+1)) + yvu = self.g.mul(x[:, v], tf.roll(x[:, u], shift=-1, axis=v+1)) + plaq = self.g.trace(self.g.mul(yuv, yvu, adjoint_b=True)) + plaqs.append(plaq) + if needs_rect: + yu = tf.roll(x[:, u], shift=-1, axis=v+1) + yv = tf.roll(x[:, v], shift=-1, axis=u+1) + uu = self.g.mul(x[:, v], yuv, adjoint_a=True) + ur = self.g.mul(x[:, u], yvu, adjoint_a=True) + ul = self.g.mul(yuv, yu, adjoint_b=True) + ud = self.g.mul(yvu, yv, adjoint_b=True) + ul_ = tf.roll(ul, shift=-1, axis=u+1) + ud_ = tf.roll(ud, shift=-1, axis=v+1) + rects.append( + self.g.trace(self.g.mul(ur, ul_, adjoint_b=True)) + ) + rects.append( + self.g.trace(self.g.mul(uu, ud_, adjoint_b=True)) + ) + + return plaqs, rects + + def _plaquettes(self, x: Tensor) -> Tensor: + ps, _ = self._wilson_loops(x) + psum = tf.constant(0.0) + for p in ps: # NOTE: len(ps) == 6 + psum += tf.reduce_sum(tf.math.real(p), axis=range(1, len(p.shape))) + + # NOTE: return psum / (len(ps) * dim(link) * volume) + return psum / (6 * 3 * self.volume) + + def action(self, x: Tensor, beta: Tensor): + """Returns the action""" + coeffs = self.coeffs(beta) + ps, rs = self._wilson_loops(x, needs_rect=self.c1 != 0) + psum = tf.constant(0.0) + for p in ps: + psum += tf.reduce_sum( + tf.math.real(p), + axis=range(1, len(p.shape)) + ) + + action = tf.math.multiply(coeffs['plaq'], psum) + + if self.c1 != 0: + rsum = tf.constant(0.0) + for r in rs: + rsum += tf.reduce_sum( + tf.math.real(r), + axis=range(1, len(r.shape)) + ) + action += tf.math.multiply(coeffs['rect'], rsum) + + return action * tf.constant(-1.0 / 3.0) + + def random(self): + return self.g.random(self._shape) + + def grad_action(self, x: Tensor, beta: Tensor) -> Tensor: + """Returns the derivative of the action""" + if tf.executing_eagerly(): + with tf.GradientTape(watch_accessed_variables=False) as tape: + tape.watch(x) + action = self.action(x, beta) + g = tape.gradient(action, x) + else: + g = tf.gradients(self.action(x, beta), [x])[0] + + return self.g.projectTAH(self.g.mul(g, x, adjoint_b=True)) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/lattice.py new file mode 100644 index 000000000..dfe88e043 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/numpy/lattice.py @@ -0,0 +1,204 @@ +""" +lattice.py + +Implements BaseLatticeU1 class in numpy +""" +from __future__ import absolute_import, division, print_function, annotations +from dataclasses import dataclass +from math import pi as PI +from typing import Optional +from scipy.special import i1, i0 + +import numpy as np + +TWO_PI = 2. * PI +Array = np.ndarray + + +@dataclass +class Charges: + intQ: Array + sinQ: Array + + def asdict(self): + return {'intQ': self.intQ, 'sinQ': self.sinQ} + + +@dataclass +class LatticeMetrics: + plaqs: Array + charges: Charges + p4x4: Array + + def asdict(self): + return { + 'plaqs': self.plaqs, + 'p4x4': self.p4x4, + 'sinQ': self.charges.sinQ, + 'intQ': self.charges.intQ, + } + + +def area_law(beta: float, nplaqs: int): + return (i1(beta) / i0(beta)) ** nplaqs + + +def plaq_exact(beta: float): + return area_law(beta, nplaqs=1) + + +def project_angle(x: Array) -> Array: + return x - TWO_PI * np.floor((x + PI) / TWO_PI) + + +class BaseLatticeU1: + def __init__(self, nb: int, shape: tuple[int, int]): + self.nb = nb + self._dim = 2 + assert len(shape) == 2 + self.nt, self.nx = shape + self.xshape = (self._dim, *shape) + self._shape = (nb, *self.xshape) + + self.nplaqs = self.nt * self.nx + self.nlinks = self.nplaqs * self._dim + + def draw_uniform_batch(self): + unif = np.random.uniform(self.xshape) + return TWO_PI * unif - PI + + def unnormalized_log_prob(self, x: Array) -> Array: + return self.action(x=x) + + def action( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Array: + """Calculate the Wilson gauge action for a batch of lattices.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return (1. - np.cos(wloops)).sum((1, 2)) + + def calc_metrics(self, x: Array) -> dict[str, Array]: + wloops = self.wilson_loops(x) + plaqs = self.plaqs(wloops=wloops) + charges = self.charges(wloops=wloops) + return {'plaqs': plaqs, 'intQ': charges.intQ, 'sinQ': charges.sinQ} + + def observables(self, x: Array) -> LatticeMetrics: + wloops = self.wilson_loops(x) + return LatticeMetrics(p4x4=self.plaqs4x4(x=x), + plaqs=self.plaqs(wloops=wloops), + charges=self.charges(wloops=wloops)) + + def wilson_loops(self, x: Array) -> Array: + """Calculate the Wilson loops by summing links in CCW direction.""" + # -------------------------- + # NOTE: Watch your shapes! + # -------------------------- + # * First, x.shape = [-1, 2, Lt, Lx], so + # (x_reshaped).T.shape = [2, Lx, Lt, -1] + # and, + # x0.shape = x1.shape = [Lx, Lt, -1] + # where x0 and x1 are the links along the 2 (t, x) dimensions. + # + # * The Wilson loop is then: + # wloop = U0(x, y) + U1(x+1, y) - U0(x, y+1) - U(1)(x, y) + # and so output = wloop.T, with output.shape = [-1, Lt, Lx] + # -------------------------- + x0, x1 = x.reshape(-1, *self.xshape).transpose(1, 2, 3, 0) + return (x0 + np.roll(x1, -1, axis=0) - np.roll(x0, -1, axis=1) - x1).T + + def wilson_loops4x4(self, x: Array) -> Array: + """Calculate the 4x4 Wilson loops""" + x0, x1 = x.reshape(-1, *self.xshape).transpose(1, 0, 2, 3) + return ( + x0 # Ux [x, y] + + x0.roll(-1, dims=2) # Ux [x+1, y] + + x0.roll(-2, dims=2) # Ux [x+2, y] + + x0.roll(-3, dims=2) # Ux [x+3, y] + + x0.roll(-4, dims=2) # Ux [x+4, y] + + x1.roll((-4, -1), dims=(2, 1)) # Uy [x+4, y+1] + + x1.roll((-4, -2), dims=(2, 1)) # Uy [x+4, y+2] + + x1.roll((-4, -3), dims=(2, 1)) # Uy [x+4, y+3] + - x0.roll((-3, -4), dims=(2, 1)) # -Ux [x+3, y+4] + - x0.roll((-2, -4), dims=(2, 1)) # -Ux [x+2, y+4] + - x0.roll((-1, -4), dims=(2, 1)) # -Ux [x+1, y+4] + - x1.roll(-4, dims=1) # -Uy [x, y+4] + - x1.roll(-3, dims=1) # -Uy [x, y+3] + - x1.roll(-2, dims=1) # -Uy [x, y+2] + - x1.roll(-1, dims=1) # -Uy [x, y+1] + - x1 # -Uy [x, y] + ).T + + def plaqs( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None, + # beta: float = None + ) -> Array: + """Calculate the average plaquettes for a batch of lattices.""" + if wloops is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops = self.wilson_loops(x) + + return np.cos(wloops).mean((1, 2)) + + def _plaqs4x4(self, wloops4x4: Array) -> Array: + return np.cos(wloops4x4).mean((1, 2)) + + def plaqs4x4( + self, + x: Optional[Array] = None, + wloops4x4: Optional[Array] = None + ) -> Array: + """Calculate the 4x4 Wilson loops for a batch of lattices.""" + if wloops4x4 is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops4x4 = self.wilson_loops4x4(x) + + return self._plaqs4x4(wloops4x4) + + def _sin_charges(self, wloops: Array) -> Array: + """Calculate sinQ from Wilson loops.""" + return np.sin(wloops).sum((1, 2)) / TWO_PI + + def _int_charges(self, wloops: Array) -> Array: + """Calculate intQ from Wilson loops.""" + return project_angle(wloops).sum((1, 2)) / TWO_PI + + def _get_wloops(self, x: Optional[Array] = None) -> Array: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + return self.wilson_loops(x) + + def sin_charges( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Array: + """Calculate the real-valued charge approximation, sin(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._sin_charges(wloops) + + def int_charges( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Array: + """Calculate the integer valued topological charge, int(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._int_charges(wloops) + + def charges( + self, + x: Optional[Array] = None, + wloops: Optional[Array] = None + ) -> Charges: + """Calculate both charge representations and return as single object""" + wloops = self._get_wloops(x) if wloops is None else wloops + sinQ = self._sin_charges(wloops) + intQ = self._int_charges(wloops) + return Charges(intQ=intQ, sinQ=sinQ) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/lattice.py new file mode 100644 index 000000000..bb16532b6 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/pytorch/lattice.py @@ -0,0 +1,258 @@ +""" +lattice.py + +Contains pytorch implementation of Lattice object. + +Author: Sam Foreman +Date: 06/02/2021 +""" +from __future__ import absolute_import, annotations, division, print_function +from dataclasses import dataclass +from typing import Optional +from math import pi as PI + +from scipy.special import i0, i1 +import torch + +from lgt.lattice.u1.numpy.lattice import BaseLatticeU1 + +TWO_PI = 2. * PI +Tensor = torch.Tensor + + +@dataclass +class Charges: + intQ: Tensor + sinQ: Tensor + + +@dataclass +class LatticeMetrics: + plaqs: Tensor + charges: Charges + p4x4: Tensor + + +def area_law(beta: float, nplaqs: int): + return (i1(beta) / i0(beta)) ** nplaqs + + +def plaq_exact(beta: float | Tensor): + return i1(beta) / i0(beta) + + +def project_angle(x: Tensor) -> Tensor: + """For x in [-4pi, 4pi], returns x in [-pi, pi].""" + return x - TWO_PI * torch.floor((x + PI) / TWO_PI) + + +class LatticeU1(BaseLatticeU1): + def __init__(self, nb: int, shape: tuple[int, int]): + super().__init__(nb, shape=shape) + + def draw_uniform_batch(self, requires_grad=True) -> Tensor: + """Draw batch of samples, uniformly from [-pi, pi).""" + unif = torch.rand(self._shape, requires_grad=requires_grad) + return TWO_PI * unif - PI + + def unnormalized_log_prob(self, x: Tensor) -> Tensor: + return self.action(x=x) + + def action( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the Wilson gauge action for a batch of lattices.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return (1. - torch.cos(wloops)).sum((1, 2)) + + def plaqs_diff( + self, + beta: float, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None, + ) -> Tensor: + """Calculate the difference between plaquettes and expected value""" + wloops = self._get_wloops(x) if wloops is None else wloops + plaqs = self.plaqs(wloops=wloops) + pexact = plaq_exact(beta) * torch.ones_like(plaqs) + return pexact - self.plaqs(wloops=wloops) + + def calc_metrics( + self, + x: Tensor, + beta: Optional[float] = None + ) -> dict[str, Tensor]: + """Calculate various metrics and return as dict""" + wloops = self.wilson_loops(x) + plaqs = self.plaqs(wloops=wloops) + charges = self.charges(wloops=wloops) + metrics = {'plaqs': plaqs} + if beta is not None: + metrics.update({ + 'plaqs_err': plaq_exact(torch.from_numpy(beta)) - plaqs + }) + metrics.update({ + 'intQ': charges.intQ, 'sinQ': charges.sinQ + }) + + return metrics + + def observables(self, x: Tensor) -> LatticeMetrics: + """Calculate observables and return as LatticeMetrics object""" + wloops = self.wilson_loops(x) + return LatticeMetrics(p4x4=self.plaqs4x4(x=x), + plaqs=self.plaqs(wloops=wloops), + charges=self.charges(wloops=wloops)) + + def wilson_loops(self, x: Tensor) -> Tensor: + """Calculate the Wilson loops by summing links in CCW direction.""" + # -------------------------- + # NOTE: Watch your shapes! + # -------------------------- + # * First, x.shape = [-1, 2, Lt, Lx], so + # (x_reshaped).T.shape = [2, Lx, Lt, -1] + # and, + # x0.shape = x1.shape = [Lx, Lt, -1] + # where x0 and x1 are the links along the 2 (t, x) dimensions. + # + # * The Wilson loop is then: + # wloop = U0(x, y) + U1(x+1, y) - U0(x, y+1) - U(1)(x, y) + # and so output = wloop.T, with output.shape = [-1, Lt, Lx] + # -------------------------- + x0, x1 = x.reshape(-1, *self.xshape).transpose(0, 1) + x0 = x0.T + x1 = x1.T + + return (x0 + x1.roll(-1, dims=0) - x0.roll(-1, dims=1) - x1).T + + def wilson_loops4x4(self, x: Tensor) -> Tensor: + """Calculate the 4x4 Wilson loops""" + x0, x1 = x.reshape(-1, *self.xshape).transpose(0, 1) + x0 = x0.T + x1 = x1.T + return ( + x0 # Ux [x, y] + + x0.roll(-1, dims=2) # Ux [x+1, y] + + x0.roll(-2, dims=2) # Ux [x+2, y] + + x0.roll(-3, dims=2) # Ux [x+3, y] + + x0.roll(-4, dims=2) # Ux [x+4, y] + + x1.roll((-4, -1), dims=(2, 1)) # Uy [x+4, y+1] + + x1.roll((-4, -2), dims=(2, 1)) # Uy [x+4, y+2] + + x1.roll((-4, -3), dims=(2, 1)) # Uy [x+4, y+3] + - x0.roll((-3, -4), dims=(2, 1)) # -Ux [x+3, y+4] + - x0.roll((-2, -4), dims=(2, 1)) # -Ux [x+2, y+4] + - x0.roll((-1, -4), dims=(2, 1)) # -Ux [x+1, y+4] + - x1.roll(-4, dims=1) # -Uy [x, y+4] + - x1.roll(-3, dims=1) # -Uy [x, y+3] + - x1.roll(-2, dims=1) # -Uy [x, y+2] + - x1.roll(-1, dims=1) # -Uy [x, y+1] + - x1 # -Uy [x, y] + ).T + + def plaqs( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None, + # beta: float = None + ) -> Tensor: + """Calculate the average plaquettes for a batch of lattices.""" + if wloops is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops = self.wilson_loops(x) + + return torch.cos(wloops).mean((1, 2)) + + def _plaqs4x4(self, wloops4x4: Tensor) -> Tensor: + return torch.cos(wloops4x4).mean((1, 2)) + + def plaqs4x4( + self, + x: Optional[Tensor] = None, + wloops4x4: Optional[Tensor] = None + ) -> Tensor: + """Calculate the 4x4 Wilson loops for a batch of lattices.""" + if wloops4x4 is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + wloops4x4 = self.wilson_loops4x4(x) + + return self._plaqs4x4(wloops4x4) + + def _sin_charges(self, wloops: Tensor) -> Tensor: + """Calculate sinQ from Wilson loops.""" + return torch.sin(wloops).sum((1, 2)) / TWO_PI + + def _int_charges(self, wloops: Tensor) -> Tensor: + """Calculate intQ from Wilson loops.""" + return project_angle(wloops).sum((1, 2)) / TWO_PI + + def _get_wloops( + self, + x: Optional[Tensor] = None + ) -> Tensor: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified.') + return self.wilson_loops(x) + + def sin_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the real-valued charge approximation, sin(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._sin_charges(wloops) + + def int_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the integer valued topological charge, int(Q).""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._int_charges(wloops) + + def charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Charges: + """Calculate both charge representations and return as single object""" + wloops = self._get_wloops(x) if wloops is None else wloops + sinQ = self._sin_charges(wloops) + intQ = self._int_charges(wloops) + return Charges(intQ=intQ, sinQ=sinQ) + + def plaq_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ) -> float: + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + dwloops = 2. * (1. - torch.cos(wloops2 - wloops1)) + ploss = acc * dwloops.sum((1, 2)) + 1e-4 + + return -ploss.mean(0) + + def charge_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ): + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + q1 = self._sin_charges(wloops=wloops1) + q2 = self._sin_charges(wloops=wloops2) + dq = (q2 - q1) ** 2 + qloss = acc * dq + 1e-4 + return -qloss.mean(0) diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/__init__.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/lattice.py b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/lattice.py new file mode 100644 index 000000000..dbb75a64d --- /dev/null +++ b/.github/entrypoint/artifact/python/src/lgt/lattice/u1/tensorflow/lattice.py @@ -0,0 +1,263 @@ +""" +lattice.py + +TensorFlow implementation of the Lattice object. +""" +from __future__ import absolute_import, annotations, division, print_function +from dataclasses import asdict, dataclass + +import numpy as np +import tensorflow as tf +from typing import Optional + +from lgt.lattice.u1.numpy.lattice import BaseLatticeU1 + +TF_FLOAT = tf.keras.backend.floatx() +PI = tf.constant(np.pi) +TWO_PI = 2. * PI + +Tensor = tf.Tensor + + +@dataclass +class Charges: + intQ: Tensor + sinQ: Tensor + + def asdict(self): + return asdict(self) + + +@dataclass +class LatticeMetrics: + plaqs: Tensor + charges: Charges + p4x4: Tensor + + def asdict(self): + return { + 'plaqs': self.plaqs, + 'sinQ': self.charges.sinQ, + 'intQ': self.charges.intQ, + 'p4x4': self.p4x4, + } + + +def area_law(beta: float, num_plaqs: int) -> float: + """Returns the expected value of the Wilson loop containing `num_plaqs`.""" + return (tf.math.bessel_i1(beta) / tf.math.bessel_i0(beta)) ** num_plaqs + + +def plaq_exact(beta: float | Tensor) -> Tensor: + """Computes the expected value of the avg. plaquette for 2D U(1).""" + beta = tf.constant(beta, dtype=TF_FLOAT) + pexact = tf.constant(tf.math.bessel_i1(beta) / tf.math.bessel_i0(beta)) + return pexact + + +def project_angle(x): + """Returns the projection of an angle `x` from [-4 Ο€, 4 Ο€] to [-Ο€, Ο€].""" + return x - TWO_PI * tf.math.floor((x + PI) / TWO_PI) + + +class LatticeU1(BaseLatticeU1): + def __init__(self, nb: int, shape: tuple[int, int]): + super().__init__(nb, shape=shape) + + def draw_uniform_batch(self) -> Tensor: + """Draw batch of samples, uniformly from [-pi, pi).""" + return tf.random.uniform(self._shape, *(-PI, PI), dtype=TF_FLOAT) + + def unnormalized_log_prob(self, x: Tensor) -> Tensor: + return self.action(x) + + def action( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the Wilson gauge action for a batch of lattices.""" + wloops = self._get_wloops(x) if wloops is None else wloops + local_action = tf.ones_like(wloops) - tf.math.cos(wloops) + return tf.reduce_sum(local_action, (1, 2)) + + def calc_metrics( + self, + x: Tensor, + beta: Optional[Tensor] = None, + ) -> dict[str, Tensor]: + wloops = self.wilson_loops(x) + plaqs = self.plaqs(wloops=wloops) + charges = self.charges(wloops=wloops) + metrics = {'plaqs': plaqs} + if beta is not None: + pexact = plaq_exact(beta) * tf.ones_like(plaqs) + metrics.update({ + 'plaqs_err': pexact - plaqs + }) + + metrics.update({ + 'intQ': charges.intQ, 'sinQ': charges.sinQ + }) + return metrics + + def observables(self, x: Tensor) -> LatticeMetrics: + """Calculate Lattice observables.""" + wloops = self.wilson_loops(x) + return LatticeMetrics(p4x4=self.plaqs4x4(x=x), + plaqs=self.plaqs(wloops=wloops), + charges=self.charges(wloops=wloops)) + + def wilson_loops(self, x: Tensor) -> Tensor: + """Calculate the Wilson loops by summing links in CCW direction.""" + # -------------------------- + # NOTE: Watch your shapes! + # -------------------------- + # * First, x.shape = [-1, 2, Lt, Lx], so + # (x_reshaped).T.shape = [2, Lx, Lt, -1] + # and, + # x0.shape = x1.shape = [Lx, Lt, -1] + # where x0 and x1 are the links along the 2 (t, x) dimensions. + # + # * The Wilson loop is then: + # wloop = U0(x, y) + U1(x+1, y) - U0(x, y+1) - U1(x, y) + # and so output = wloop.T, with output.shape = [-1, Lt, Lx] + # -------------------------- + x = tf.transpose(tf.reshape(x, self._shape), (1, 2, 3, 0)) + x0 = x[0] # type:ignore NOTE: x0 = t links + x1 = x[1] # type:ignore NOTE: x1 = x links + return tf.transpose( + x0 + tf.roll(x1, -1, axis=0) - tf.roll(x0, -1, axis=1) - x1 + ) + + def wilson_loops4x4(self, x: Tensor) -> Tensor: + """Calculate the 4x4 Wilson loops""" + x = tf.transpose(tf.reshape(x, (-1, *self.xshape)), (1, 2, 3, 0)) + x0 = x[0] # type:ignore + x1 = x[1] # type:ignore + return tf.transpose( + x0 # Ux [x, y] + + tf.roll(x0, -1, 2) # Ux [x+1, y] + + tf.roll(x0, -2, 2) # Ux [x+2, y] + + tf.roll(x0, -3, 2) # Ux [x+3, y] + + tf.roll(x0, -4, 2) # Ux [x+4, y] + + tf.roll(x1, (-4, -1), (2, 1)) # Uy [x+4, y] + + tf.roll(x1, (-4, -2), (2, 1)) # Uy [x+4, y+1] + + tf.roll(x1, (-4, -3), (2, 1)) # Uy [x+4, y+3] + - tf.roll(x0, (-3, -4), (2, 1)) # -Ux [x+3, y+4] + - tf.roll(x0, (-2, -4), (2, 1)) # -Ux [x+2, y+4] + - tf.roll(x0, (-1, -4), (2, 1)) # -Ux [x+1, y+4] + - tf.roll(x1, -4, 1) # -Uy [x, y+4] + - tf.roll(x1, -3, 1) # -Uy [x, y+3] + - tf.roll(x1, -2, 1) # -Uy [x, y+2] + - tf.roll(x1, -1, 1) # -Uy [x, y+1] + - x1 # -Uy [x, y] + ) + + def plaqs_diff( + self, + beta: float, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None, + ) -> Tensor: + wloops = self._get_wloops(x) if wloops is None else wloops + plaqs = self.plaqs(wloops=wloops) + pexact = plaq_exact(beta) * tf.ones_like(plaqs) + return pexact - self.plaqs(wloops=wloops) + + def plaqs( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the avg plaq for each of the lattices in x.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return tf.reduce_mean(tf.math.cos(wloops), (1, 2)) + + def _plaqs4x4(self, wloops4x4: Tensor) -> Tensor: + return tf.reduce_mean(tf.math.cos(wloops4x4), (1, 2)) + + def plaqs4x4( + self, + x: Optional[Tensor] = None, + wloops4x4: Optional[Tensor] = None + ) -> Tensor: + """Calculate 4x4 wilson loops.""" + if wloops4x4 is None: + if x is None: + raise ValueError('One of `x` or `wloops` must be specified') + wloops4x4 = self.wilson_loops4x4(x) + + return self._plaqs4x4(wloops4x4) + + def _sin_charges(self, wloops: Tensor) -> Tensor: + """Calculate sinQ from Wilson loops.""" + return tf.reduce_sum(tf.math.sin(wloops), (1, 2)) / TWO_PI + + def _int_charges(self, wloops: Tensor) -> Tensor: + return tf.reduce_sum(project_angle(wloops), (1, 2)) / TWO_PI + + def _get_wloops(self, x: Optional[Tensor] = None) -> Tensor: + if x is None: + raise ValueError('Expected input `x`') + return self.wilson_loops(x) + + def sin_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the real-valued charge approximation, sin(Q)""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._sin_charges(wloops) + + def int_charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Tensor: + """Calculate the integer valued charges.""" + wloops = self._get_wloops(x) if wloops is None else wloops + return self._int_charges(wloops) + + def charges( + self, + x: Optional[Tensor] = None, + wloops: Optional[Tensor] = None + ) -> Charges: + """Calculate both charge representations and return as single object""" + wloops = self._get_wloops(x) if wloops is None else wloops + sinQ = self._sin_charges(wloops) + intQ = self._int_charges(wloops) + return Charges(intQ=intQ, sinQ=sinQ) + + def plaq_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ) -> float: + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + dwl = tf.subtract(wloops2, wloops1) + dwloops = 2. * (tf.ones_like(wl1) - tf.math.cos(dwl)) + ploss = acc * tf.reduce_sum(dwloops, axis=(1, 2)) + 1e-4 + + return tf.reduce_mean(-ploss, axis=0) + + def charge_loss( + self, + acc: Tensor, + x1: Optional[Tensor] = None, + x2: Optional[Tensor] = None, + wl1: Optional[Tensor] = None, + wl2: Optional[Tensor] = None, + ) -> float: + wloops1 = self._get_wloops(x1) if wl1 is None else wl1 + wloops2 = self._get_wloops(x2) if wl2 is None else wl2 + q1 = self._sin_charges(wloops=wloops1) + q2 = self._sin_charges(wloops=wloops2) + qloss = (acc * tf.math.subtract(q2, q1) ** 2) + 1e-4 + return tf.reduce_mean(-qloss, axis=0) diff --git a/.github/entrypoint/artifact/python/src/params/spaces.json b/.github/entrypoint/artifact/python/src/params/spaces.json new file mode 100644 index 000000000..eb82ec533 --- /dev/null +++ b/.github/entrypoint/artifact/python/src/params/spaces.json @@ -0,0 +1,54 @@ +{ + "strategy_name": "fibbo", + "params": { + "roi": { + "0": 0.0786, + "4": 0.0238, + "11": 0.006, + "19": 0 + }, + "trailing": { + "trailing_stop": true, + "trailing_stop_positive": 0.099, + "trailing_stop_positive_offset": 0.178, + "trailing_only_offset_is_reached": false + }, + "max_open_trades": { + "max_open_trades": Infinity + }, + "buy": { + "SmoothK": 2, + "buy_additional_indicator": "NONE", + "buy_fast_dema": "13", + "buy_fib_level": "0.618", + "buy_rsi": 45, + "buy_slow_ema": "34", + "buy_stoch_osc": 29, + "buy_swing_period": 50, + "period": 14, + "smoothD": 3 + }, + "sell": { + "sell_additional_indicator": "NONE", + "sell_fib_level": "0.382", + "sell_rsi": 70, + "sell_rsi_threshold": 64, + "sell_stoch_osc": 85 + }, + "protection": { + "cooldown_lookback": 4, + "low_profit_trade_limit": 7, + "max_drawdown_trade_limit": 6, + "stop_duration": 36, + "trade_limit": 3, + "use_low_profit": true, + "use_max_drawdown_protection": false, + "use_stop_protection": false + }, + "stoploss": { + "stoploss": -0.104 + } + }, + "ft_stratparam_v": 1, + "export_time": "2025-03-26 11:31:32.125452+00:00" +} \ No newline at end of file diff --git a/.github/entrypoint/artifact/resum.c b/.github/entrypoint/artifact/resum.c new file mode 100644 index 000000000..62d225e04 --- /dev/null +++ b/.github/entrypoint/artifact/resum.c @@ -0,0 +1,100 @@ +#include "BosonJetNLL.h" +#include +#include +#include +#include + +//#define NLL_DEBUG + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ}; + BosonJetNLL *bj=(BosonJetNLL *)p; + double cphix=cos(y[1]); + return bj->sigmaR(y[0],cphix,y[2],y[3],y[4]); +} + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetNLL ZJ(1.3e4,&Z0); + + double R=0.4;ZJ.setR(R); + + #ifdef NLL_DEBUG + double pT=100.0,yB=0.1,yJ=0.2,muh=100.0,mu=30.0,muJ=10.0, mut=5.0, muxT=70.0, xT=1.2,qT=1.0,cphix=0.4;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muh,muJ,muxT,mut,xT,cphix); + cout << ZJ.aHqqb()<< ", " << ZJ.bHqqb() << endl; + ZJ.setLL(true); + cout << ZJ.RGInvariance(mu,muh,muxT,muJ,mut,xT,cphix) << endl; + /* + cout << M_PI*ZJ.sigmaqgR(xT, cphix, pT, yB, yJ) < +#include +#include +#include + +//#define LL_DEBUG + +using namespace std; + +double dsigmadqT(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ}; + BosonJetLL *bj=(BosonJetLL *)p; + double cphix=cos(y[1]); + return bj->sigmaR(y[0],cphix,y[2],y[3],y[4]); +} + + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetLL ZJ(1.3e4,&Z0); + + double R=0.6;ZJ.setR(R); + + #ifdef LL_DEBUG + double pT=100.0,yB=0.1,yJ=0.2,muh=100.0,mu=30.0,muJ=10.0, mut=5.0, muxT=70.0, xT=1.2,qT=1.0,cphix=0.4;ZJ.setqT(qT); + ZJ.setKinematics(pT,yB,yJ);ZJ.getKinematics(); + ZJ.setScale(mu,muh,muJ,muxT,mut,xT,cphix); + cout << ZJ.aHqqb()<< ", " << ZJ.bHqqb() << endl; + cout << ZJ.RGInvariance(mu,muh,muxT,muJ,mut,xT,cphix) << endl; + /* + cout << M_PI*ZJ.sigmaqgR(xT, cphix, pT, yB, yJ) < + +using namespace std; + +int main(){ + QCD qcd; + /* + for(double Q=0.1;Q<100;Q+=0.1) + cout << Q << " " << qcd.alphas(Q) << " " << qcd.pdf(21, 0.1,Q) << endl; + */ + double Q = + + for(double x=0.001;x<1.0;x+=0.001){ + cout << x << " " << qcd.pdf(1,x,3.3) << endl; + } + + return 0; +} diff --git a/.github/entrypoint/artifact/tot.c b/.github/entrypoint/artifact/tot.c new file mode 100644 index 000000000..330ee9718 --- /dev/null +++ b/.github/entrypoint/artifact/tot.c @@ -0,0 +1,54 @@ +#include "BosonJetNLL.h" +#include +#include +#include +#include + +using namespace std; + +double sigma(double y[], size_t dim, void *p){ + //dim=5 dimensional integration variables: y[]={xT, phi, pT, yB,yJ, qT}; + BosonJetNLL *bj=(BosonJetNLL *)p; + double cphix=cos(y[1]); + bj->setqT(y[5]); + return y[5]*(bj->sigmaR(y[0],cphix,y[2],y[3],y[4])); +} + +int main(){ + + //Particle photon("photon",Particle::photon,0.0,0.0); + Particle Z0("Z0",Particle::Z0,91.1876,0.0); + //BosonJet gammaJ(1.3e4,&photon); + BosonJetNLL ZJ(1.3e4,&Z0); + + double R=0.1;ZJ.setR(R); + + //range of the integration: from ymin to ymax + double pT=200.0; + double ymin[]={0.0,-0.5*M_PI,pT,-10.0,-2.4,0.0}; + double ymax[]={1.5,0.5*M_PI,6500.0,10.0,2.4,pT}; + + int dim=6; + size_t calls = 500000; + ZJ.setupMC( &sigma, dim, ymin,ymax, &ZJ); + ZJ.setCalls(calls); + //output file: + + ZJ.setImgcphix(true); + ZJ.setCSS(false); + ZJ.setNGL(true); + ZJ.setLL(false); + ZJ.setNonPert(false); + ZJ.setScaleVar(1.0,1.0,1.0,1.0); + + double res[2]; + double Rls[]={0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}; + + for(int i=0;i<10;i++){ + ZJ.setR(Rls[i]);ZJ.calculate(res); + cout << Rls[i] << " " << res[0] << " " << res[1] << endl; + } + ZJ.cleanupMC(); + + return 0; +} diff --git a/.github/entrypoint/cleanup_bundler.rb b/.github/entrypoint/cleanup_bundler.rb new file mode 100644 index 000000000..a579baf8b --- /dev/null +++ b/.github/entrypoint/cleanup_bundler.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +gempaths = %x(gem env gempath).split(":") +gempaths.each do |gempath| + # lookup bundler-*.gemspec files and delete them + # this is the only way to completely cleanup default bundler + # Note: the bundler gemspecs' paths are different for CRuby and JRuby + Dir.glob(gempath.strip + "/specifications/**/bundler-*.gemspec").each { |p| File.delete(p) } +end + diff --git a/.github/entrypoint/config.sh b/.github/entrypoint/config.sh new file mode 100755 index 000000000..5657f5c0c --- /dev/null +++ b/.github/entrypoint/config.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +git config --global user.name "${GITHUB_ACTOR}" +git config --global --add safe.directory "${GITHUB_WORKSPACE}" +git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" + +#git config --global credential.helper store +#echo "https://${GITHUB_ACTOR}:${GITHUB_ACCESS_TOKEN}@github.com" > ~/.git-credentials + +echo 'REMOTE_REPO="https://${GITHUB_ACTOR}:${GITHUB_ACCESS_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"' >> ${GITHUB_ENV} +COMMIT=$(curl -s "https://api.github.com/users/eq19/events/public" | jq ".[0].payload.commits[0].message") + +# Remove double quotes using parameter expansion +echo 'LATEST_COMMIT="${COMMIT//\"/}"' >> ${GITHUB_ENV} diff --git a/.github/entrypoint/dockerfile/Doxyfile b/.github/entrypoint/dockerfile/Doxyfile new file mode 100644 index 000000000..425f17c1a --- /dev/null +++ b/.github/entrypoint/dockerfile/Doxyfile @@ -0,0 +1,2473 @@ +# Doxyfile 1.8.13 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "Moxygen Example" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = YES + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ./src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = */test/* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = *internal* + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = NO + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /