diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..916c94b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,53 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Common editor configurations for this project. +# +# EditorConfig is a file format for specifying some common style parameters. +# Many IDEs & editors read .editorconfig files, either natively or via plugins. +# We mostly follow Google's style guides (https://google.github.io/styleguide/) +# with only a few deviations for line length and indentation in some files. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +root = true + +[*] +charset = utf-8 +indent_style = space +insert_final_newline = true +spelling_language = en-US +trim_trailing_whitespace = true +max_line_length = 120 + +[{BUILD,*.BUILD,*.bzl,*.bazel,.bazelrc}] +indent_size = 4 + +[{*.cc,*.h}] +indent_size = 4 + +[{*.js,*.ts}] +indent_size = 4 + +[*.json] +indent_size = 2 + +[*.py] +indent_size = 4 + +[*.sh] +indent_size = 4 + +[{*.yaml,*.yml}] +indent_size = 2 diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..77bd1bf --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,36 @@ +# Reporting security issues + +This project's developers and community are committed to addressing security +bugs promptly and effectively. We appreciate your efforts to disclose your +findings responsibly, and will make every effort to acknowledge your +contributions. + +Please **do not** use GitHub issues to report security vulnerabilities; GitHub +issues are public, and doing so could allow someone to exploit the information +before the problem can be addressed. Instead, please use the *Report a +vulnerability* interface from the *Security* tab at the top of this GitHub +repository page. + +
+Location of the report button on the repository page +
+ +Please report security issues in third-party modules to the person or team +maintaining the module rather than this project's stewards, unless you believe +that some action needs to be taken specifically with this project in order to +guard against the effects of a security vulnerability in third-party software. + +## Responses to security reports + +The project stewards at Google Quantum AI will send a response indicating the +next steps in handling your report. After the initial reply to your report, the +project stewards will keep you informed of the progress towards a fix and full +announcement, and may ask for additional information or guidance. + +## Additional points of contact + +Please contact the project stewards at Google Quantum AI via email at +quantum-oss-maintainers@google.com if you have questions or other concerns. If +for any reason you are uncomfortable reaching out to the project stewards, +please email opensource@google.com instead. diff --git a/.github/report-vulnerability-button.png b/.github/report-vulnerability-button.png new file mode 100644 index 0000000..bfaabdc Binary files /dev/null and b/.github/report-vulnerability-button.png differ diff --git a/.markdownlintrc b/.markdownlintrc new file mode 100644 index 0000000..91a0483 --- /dev/null +++ b/.markdownlintrc @@ -0,0 +1,160 @@ +{ // -*- jsonc -*- + // Copyright 2025 Google LLC + // + // Licensed under the Apache License, Version 2.0 (the "License"); + // you may not use this file except in compliance with the License. + // You may obtain a copy of the License at + // + // https://www.apache.org/licenses/LICENSE-2.0 + // + // Unless required by applicable law or agreed to in writing, software + // distributed under the License is distributed on an "AS IS" BASIS, + // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + // See the License for the specific language governing permissions and + // limitations under the License. + + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Markdownlint linter configuration for this project. + // + // Note: there are multiple programs programs named "markdownlint". We use + // https://github.com/igorshubovych/markdownlint-cli/, which is the one you + // get with "brew install markdownlint" on MacOS. + // + // These settings try to stay close to the Google Markdown Style as + // described at https://google.github.io/styleguide/docguide/style.html + // with very few differences. + // + // For a list of possible configuration options, see the following page: + // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md + // (Beware that the above looks similar but is NOT the same as the page + // https://github.com/markdownlint/markdownlint/blob/main/docs/RULES.md.) + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json", + + // Require ATX-style headings. + // https://google.github.io/styleguide/docguide/style.html#atx-style-headings + "headings": { + "style": "atx" + }, + + // Google style does not require that the first line of a file is a heading + // for the title; it only states that the first heading should be a level 1. + // https://google.github.io/styleguide/docguide/style.html#document-layout + "first-line-heading": false, + + // The Google style does not define what to do about trailing punctuation in + // headings. The markdownlint default disallows exclamation points, which + // seems likely to be more annoying than useful – I have definitely seen + // people use exclamation points in headings in README files on GitHub. + // This setting removes exclamation point from the banned characters. + "no-trailing-punctuation": { + "punctuation": ".,;:。,;:" + }, + + // No trailing spaces. + // https://google.github.io/styleguide/docguide/style.html#trailing-whitespace + "whitespace": { + "br_spaces": 0 + }, + + // Google style is 80 characters. + // Google style exempts some constructs from the line-length limit: + // https://google.github.io/styleguide/docguide/style.html#exceptions + "line-length": { + "line_length": 120, + "code_block_line_length": 120, + "heading_line_length": 120, + "code_blocks": false, + "headings": false, + "tables": false + }, + + // Google Markdown style specifies 2 spaces after item numbers, 3 spaces + // after bullets, so that the text itself is consistently indented 4 spaces. + // https://google.github.io/styleguide/docguide/style.html#nested-list-spacing + "list-marker-space": { + "ol_multi": 2, + "ol_single": 2, + "ul_multi": 3, + "ul_single": 3 + }, + + "ul-indent": { + "indent": 4 + }, + + // Bare URLs are allowed in GitHub-flavored Markdown and in Google’s style. + "no-bare-urls": false, + + // Basic Markdown allows raw HTML. Both GitHub & PyPI support subsets of + // HTML, though it's unclear what subset PyPI supports. Google's style guide + // recommends against using raw HTML, but does allow it. (C.f. the bottom of + // https://google.github.io/styleguide/docguide/style.html) Google's in-house + // documentation system allows many inline and block-level tags, but strips + // others that can pose security risks (e.g., and standalone ). + // The list below tries to capture the intersection of what GitHub allows + // (c.f. https://github.com/github/markup/issues/245#issuecomment-682231577), + // what PyPI seems to allow, what Google allows, and what seems likely to be + // most useful in situations where someone needs to reach for HTML. + "html": { + "allowed_elements": [ + "a", + "abbr", + "b", + "blockquote", + "br", + "caption", + "cite", + "code", + "dd", + "del", + "details", + "dfn", + "div", + "dl", + "dt", + "em", + "figcaption", + "figure", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "hr", + "i", + "img", + "ins", + "kbd", + "li", + "mark", + "ol", + "p", + "picture", + "pre", + "q", + "s", + "samp", + "small", + "span", + "strong", + "sub", + "summary", + "sup", + "table", + "tbody", + "td", + "tfoot", + "th", + "thead", + "time", + "tr", + "tt", + "ul", + "var", + "wbr" + ] + } +} diff --git a/.yamllint.yaml b/.yamllint.yaml new file mode 100644 index 0000000..7b914bc --- /dev/null +++ b/.yamllint.yaml @@ -0,0 +1,27 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Yamllint configuration to match project settings like line length. +# See https://yamllint.readthedocs.io/ for info about configuration options. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +rules: + line-length: + max: 120 + # When the last item on a line can't be broken (e.g., a URL as a value), + # it's rarely useful to flag it. The next 2 settings save developer time by + # not requiring comment directives to disable warnings at every occurrence. + allow-non-breakable-words: true + allow-non-breakable-inline-mappings: true diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..34ac21b --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,91 @@ +# 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, education, socio-economic status, 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. + +This Code of Conduct also applies outside the project spaces when the Project +Stewards have a reasonable belief that an individual's behavior may have a +negative impact on the project or its community. + +## Conflict Resolution + +We do not believe that all conflict is bad; healthy debate and disagreement +often yield positive results. However, it is never okay to be disrespectful or +to engage in behavior that violates the project’s Code of Conduct. + +If you see someone violating the Code of Conduct, you are encouraged to address +the behavior directly with those involved. Many issues can be resolved quickly +and easily, and this gives people more control over the outcome of their +dispute. If you are unable to resolve the matter for any reason, or if the +behavior is threatening or harassing, report it. We are dedicated to providing +an environment where participants feel welcome and safe. + +Reports should be directed to quantumai-oss-maintainers@googlegroups.com, +the project stewards at Google Quantum AI. They will then work with a committee +consisting of representatives from the Open Source Programs Office and the +Google Open Source Strategy team. If for any reason you are uncomfortable +reaching out to the Project Stewards, please email opensource@google.com. + +We will investigate every complaint, but you may not receive a direct response. +We will use our discretion in determining when and how to follow up on reported +incidents, which may range from not taking action to permanent expulsion from +the project and project-sponsored spaces. We will notify the accused of the +report and provide them an opportunity to discuss it before any action is taken. +The identity of the reporter will be omitted from the details of the report +supplied to the accused. In potentially harmful situations, such as ongoing +harassment or threats to anyone's safety, we may take action without notice. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, +available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bc23aae..8da0653 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,33 +1,48 @@ # How to contribute -We'd love to accept your patches and contributions to this project. +We'd love to accept your patches and contributions to this project. We do have +some guidelines to follow, covered in this document, but don't be concerned +about getting everything right the first time! Create a pull request (discussed +below) and we'll nudge you in the right direction. ## Before you begin ### Sign our Contributor License Agreement -Contributions to this project must be accompanied by a -[Contributor License Agreement](https://cla.developers.google.com/about) (CLA). -You (or your employer) retain the copyright to your contribution; this simply -gives us permission to use and redistribute your contributions as part of the -project. - -If you or your current employer have already signed the Google CLA (even if it -was for a different project), you probably don't need to do it again. - -Visit to see your current agreements or to -sign a new one. +Contributions to this project must be accompanied by a [Contributor License +Agreement](https://cla.developers.google.com/about) (CLA). You (or your +employer) retain the copyright to your contribution; the CLA simply gives us +permission to use and redistribute your contributions as part of the project. +Please visit https://cla.developers.google.com/ to see your current agreements +on file or to sign a new one. You generally only need to submit a Google CLA +once, so if you've already submitted one (even if it was for a different +project), you probably don't need to do it again. + +> [!WARNING] +> Please note carefully clauses [#5](https://cla.developers.google.com/about/google-corporate#:~:text=You%20represent%20that%20each%20of%20Your%20Contributions%20is%20Your%20original%20creation) +> and [#7](https://cla.developers.google.com/about/google-corporate#:~:text=Should%20You%20wish%20to%20submit%20work%20that%20is%20not%20Your%20original%20creation%2C%20You%20may%20submit%20it%20to%20Google%20separately) +> in the CLA. Any code that you contribute to this project must be **your** +> original creation. Code generated by artificial intelligence tools **does +> not** qualify as your original creation. ### Review our community guidelines -This project follows -[Google's Open Source Community Guidelines](https://opensource.google/conduct/). +We have a [code of conduct](CODE_OF_CONDUCT.md) to make the project an open and +welcoming community environment. Please make sure to read and abide by the code +of conduct. ## Contribution process -### Code reviews - All submissions, including submissions by project members, require review. We -use GitHub pull requests for this purpose. Consult -[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more -information on using pull requests. \ No newline at end of file +use the tools provided by GitHub for [pull +requests](https://docs.github.com/articles/about-pull-requests) for this +purpose. The preferred manner for submitting pull requests is to +[fork](https://docs.github.com/articles/fork-a-repo) the repository, create a +new [git branch](https://docs.github.com/articles/about-branches) in this fork +to do your work, and when ready, create a pull request from your branch to the +main project repository. + +We follow the [Google coding style](https://google.github.io/styleguide/) for +the programming languages used in this project, with only a few deviations. The +[`.editorconfig`](.editorconfig) file in this repository defines the settings +we use. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..b21b871 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,21 @@ +# Support + +Thank you for your interest in this project! If you are experiencing problems +or have questions, the following are some suggestions for how to get help. + +> [!NOTE] +> Before participating in our community, please read our [code of +> conduct](CODE_OF_CONDUCT.md). By interacting with this repository, +> organization, or community, you agree to abide by its terms. + +## Report an issue or request a feature + +To report an issue or request a feature, please first search this project's +issue tracker on GitHub to check if there is already an open issue identical or +similar to your bug report/feature request. If there is none, go ahead and file +a new issue in the issue tracker. + +## Contact the maintainers + +For any questions or concerns not addressed here, please email +quantum-oss-maintainers@google.com.