bloqade-analog
QuEra's Neutral Atom SDK for Analog QPUs
Science Score: 77.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 1 DOI reference(s) in README -
✓Academic publication links
Links to: zenodo.org -
✓Committers with academic emails
1 of 18 committers (5.6%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.9%) to scientific vocabulary
Keywords
Keywords from Contributors
Repository
QuEra's Neutral Atom SDK for Analog QPUs
Basic Info
- Host: GitHub
- Owner: QuEraComputing
- License: other
- Language: Python
- Default Branch: main
- Homepage: https://queracomputing.github.io/bloqade-analog/
- Size: 95.5 MB
Statistics
- Stars: 80
- Watchers: 7
- Forks: 18
- Open Issues: 106
- Releases: 44
Topics
Metadata Files
README.md
[!IMPORTANT]
Bloqade has been restructured to make room for new features and improvements. Please refer to the migration guide for more information.
Welcome to Bloqade -- QuEra's Neutral Atom SDK
What is Bloqade?
Bloqade is an SDK designed to make writing and analyzing the results of analog quantum programs on QuEra's neutral atom quantum computers as seamless and flexible as possible. Currently, QuEra's hardware is on Amazon Braket, the primary method of accessing QuEra's quantum hardware. Over the alpha phase, we plan to expand the emulator capabilities to include a performance Python emulator but also a direct integration with Julia via Bloqade.jl.
Why A Python Version of Bloqade?
Those coming from Bloqade.jl will most likely have this as their first question in mind. For newcomers the following information is still relevant.
Bloqade.jl was designed as an emulation-first SDK enabling users to investigate novel physical phenomena and develop complex algorithms with bleeding-edge performance. The result of this focus is that not everything made in Bloqade.jl is compatible with quantum hardware. While the ability to submit to Braket is available in Bloqade.jl it becomes cumbersome to analyze results and keep track of parameter sweeps.
In our mission to make neutral atom quantum computing more accessible to a broader community and the valuable feedback we've received in users of our quantum hardware, we took the opportunity to create a hardware-first SDK. One that is perfectly positioned to make it even easier to reap the benefits of neutral atoms while minimizing the pain points of initial program creation and post-processing results.
What does Bloqade do?
Bloqade makes writing analog quantum programs for neutral atom quantum computers a cinch. Its interface is designed to make designing a program, analyzing its results, and building more complex algorithms as seamless as possible.
Our interface is designed to guide our users through the process of defining an analog quantum program as well as different methods to run the program, whether it be real quantum hardware or an emulator. Bloqade also provides a simple interface for analyzing the results of the program, whether it is a single run, a batch of runs, or even some types of hybrid quantum-classical algorithms.
Direct feedback
In order to better understand more about Bloqade users we would kindly ask that you take a few minutes fill out our online survey here.
Installation
You can install the package with pip in your Python environment of choice via:
sh
pip install bloqade-analog
Documentation
If you're already convinced about what Bloqade brings to the table, feel free to take a look at our documentation with examples here.
If you aren't convinced, keep scrolling!
Features
Smart Documentation
Get where you need to go in your program development with documentation that knows where and when it's needed. Never get lost developing your algorithm ever again!
If you're a novice to neutral atoms, smart docs have your back. If you're an expert with neutral atoms, let smart docs give you some guidance on some new avenues for algorithm development.

Fully Parameterized Analog Programs
Parameter Sweeps are a common element of programs for analog quantum computers where you want to observe differences in output from systematically varying value(s) in your program.
You used to have to manually keep track of all the small variations of your program per parameter, keeping careful track not to forget to submit one variation or lose one on top of a convoluted post-processing pipeline to incorporate all the results in one place.
Bloqade eliminates this with its own support for variables and internal handling of program parameter variations. Just drop in a variable in almost any place a single value can live and you can either assign a value later or a whole sequence of values to create a parameter sweep.
Let Bloqade handle keeping track of all the variations while you focus on becoming a master of neutral atoms.
Did we mention you can throw your program at hardware and emulation and still keep your parameter sweeps?
```python from bloqade.analog import var from bloqade.analog.atom_arrangement import Square
import numpy as np
adiabatic_durations = [0.4, 3.2, 0.4]
create variables explicitly...
maxdetuning = var("maxdetuning")
...or implicitly inside the program definition.
adiabaticprogram = ( Square(3, latticespacing="latticespacing") .rydberg.rabi.amplitude.uniform.piecewiselinear( durations=adiabaticdurations, values=[0.0, "maxrabi", "maxrabi", 0.0] ) .detuning.uniform.piecewiselinear( durations=adiabaticdurations, values=[ -maxdetuning, # scalar variables support direct arithmetic operations -maxdetuning, maxdetuning, maxdetuning, ], ) .assign(maxrabi=15.8, maxdetuning=16.33) .batchassign(lattice_spacing=np.arange(4.0, 7.0, 0.5)) )
Launch your program on your choice of Braket or in-house emulator...
emuresults = adiabaticprogram.braket.localemulator().run(10000) fasteremuresults = adiabaticprogram.bloqade.python().run(10000)
...as well as hardware without stress
hwresults = adiabaticprogram.parallelize(24).braket.aquila().run_async(100) ```
Integrated Visualization Tools
Simple and fast visualization for programs no matter how complex your program gets:

The same holds for results:

Maximum Composability
You can save any intermediate steps in your program construction, enabling you to build on top of a base program to produce all sorts of variants with ease.
Feel free to let your waveforms grow to your liking too!:
```python from bloqade.analog import start
Save your intermediate steps any way you like
initialgeometry = start.addposition((0, 0)) targetrabiwf = initialgeometry.rydberg.rabi.amplitude.uniform program1 = targetrabiwf.piecewise_linear( durations=[0.4, 2.1, 0.4], values=[0, 15.8, 15.8, 0] )
Tinker with new ideas in a snap
program2 = targetrabiwf.piecewiselinear( durations=[0.5, 1.0, 0.5], values=[0, 10.0, 11.0, 0] ).constant(duration=0.4, value=5.1)
```
Want to focus on building one part of your program first before others (or, just want that same Bloqade.jl flavor?) We've got you covered:
```python from bloqade.analog import piecewise_linear, var from bloqade.analog.ir.location import Square import numpy as np
Create a geometry without worrying about pulses yet
squarelattice = Square(3, latticespacing="lattice_spacing")
Develop your waveforms any way you like
adiabaticdurations = [0.8, 2.4, 0.8] separaterabiampwf = piecewiselinear( durations=adiabaticdurations, values=[0.0, "maxrabi", "maxrabi", 0.0] )
maxdetuning = var("maxdetuning") separaterabidetuning = piecewiselinear( durations=adiabaticdurations, values=[-maxdetuning, -maxdetuning, maxdetuning, maxdetuning], )
Now bring it all together!
And why not sprinkle in some parameter sweeps for fun?
fullprogram = ( squarelattice.rydberg.rabi.amplitude.uniform.apply(separaterabiampwf) .detuning.uniform.apply(separaterabidetuning) .assign(maxrabi=15.8, maxdetuning=16.33) .batchassign( latticespacing=np.arange(4.0, 7.0, 0.5), maxrabi=np.linspace(2 * np.pi * 0.5, 2 * np.pi * 2.5, 6), ) ) ```
Efficient Atom Usage
Have an atom geometry that doesn't use up the entire FOV (Field of View) of the machine or all the possible qubits? Give .parallelize a spin!
If your geometry is compact enough, Bloqade can automatically duplicate/"tile" it in each shot with each copy separated by a distance of your specification to minimize interaction between copies. This lets you get more data per shot for more robust results.
Don't sweat the necessary post-processing of data for this, Bloqade does that for you and you can still preserve your standard post-processing pipelines:
```python
you could just run your program and leave free qubits on the table...
programwithfewatoms.braket.aquila().runasync(100)
...or you can take all you can get!
programwithfewatoms.parallelize(24).braket.aquila(24).runasync(100) ```
Contributing
Bloqade wouldn't exist if we weren't fortunate enough to obtain feedback from awesome members of our community such as yourself (:
If you find a bug, have an idea, or find an issue with our documentation, please feel free to file an issue on the Github repo itself.
After using/experimenting/tinkering/hacking with Bloqade it would also be helpful to us for you to fill out this form which allows us to get some more detailed feedback.
May the van der Waals force be with you!
Owner
- Name: QuEra Computing Inc.
- Login: QuEraComputing
- Kind: organization
- Email: info@quera.com
- Location: United States of America
- Website: https://www.quera.com/
- Twitter: QueraComputing
- Repositories: 8
- Profile: https://github.com/QuEraComputing
Building scalable quantum machines to make impossible problems simple.
Citation (CITATION.bib)
@software{bloqade_2024_11114110,
author = {Weinberg, Phillip and
Wu, Kai-Hsin and
John Long and
Luo, Xiu-zhe (Roger)},
title = {QuEraComputing/bloqade-python: v0.15.11},
month = may,
year = 2024,
publisher = {Zenodo},
version = {v0.15.11},
doi = {10.5281/zenodo.11114110},
url = {https://doi.org/10.5281/zenodo.11114110}
}
GitHub Events
Total
- Create event: 27
- Release event: 7
- Issues event: 24
- Watch event: 11
- Delete event: 22
- Issue comment event: 64
- Member event: 2
- Push event: 134
- Pull request review comment event: 7
- Pull request review event: 12
- Pull request event: 41
- Fork event: 1
Last Year
- Create event: 27
- Release event: 7
- Issues event: 24
- Watch event: 11
- Delete event: 22
- Issue comment event: 64
- Member event: 2
- Push event: 134
- Pull request review comment event: 7
- Pull request review event: 12
- Pull request event: 41
- Fork event: 1
Committers
Last synced: 8 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Phillip Weinberg | w****8@g****m | 360 |
| github-actions[bot] | 4****] | 178 |
| Roger-luo | r****8@g****m | 103 |
| John Long | j****l@p****h | 57 |
| Kai-Hsin Wu | k****u@g****m | 44 |
| Kai-Hsin Wu | k****u@K****l | 18 |
| dependabot[bot] | 4****] | 10 |
| Kai-Hsin Wu | k****u@K****t | 4 |
| SHUBHAM SHARMA | 9****n | 3 |
| Manvi-Agrawal | 4****l | 2 |
| Angela Guo | m****o@g****m | 1 |
| David Plankensteiner | d****l | 1 |
| Ryan Hill | r****8@g****m | 1 |
| Shengtao Wang | W****o | 1 |
| WingCode | s****4@g****m | 1 |
| Blake Wilson | w****2@p****u | 1 |
| Jing Chen | y****5@g****m | 1 |
| Jonathan Wurtz | j****z@q****m | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 36
- Total pull requests: 85
- Average time to close issues: 11 days
- Average time to close pull requests: 14 days
- Total issue authors: 11
- Total pull request authors: 13
- Average comments per issue: 1.39
- Average comments per pull request: 2.61
- Merged pull requests: 62
- Bot issues: 0
- Bot pull requests: 14
Past Year
- Issues: 20
- Pull requests: 46
- Average time to close issues: 7 days
- Average time to close pull requests: 11 days
- Issue authors: 9
- Pull request authors: 8
- Average comments per issue: 0.55
- Average comments per pull request: 2.48
- Merged pull requests: 36
- Bot issues: 0
- Bot pull requests: 11
Top Authors
Issue Authors
- Roger-luo (14)
- weinbe58 (6)
- cduck (4)
- jon-wurtz (3)
- Manvi-Agrawal (2)
- yzcj105 (2)
- HongyeY (1)
- Dirtydan1013 (1)
- plquera (1)
- balewski (1)
- Jurglex (1)
Pull Request Authors
- weinbe58 (21)
- johnzl-777 (17)
- shubhusion (10)
- github-actions[bot] (7)
- dependabot[bot] (7)
- Manvi-Agrawal (5)
- jon-wurtz (4)
- Roger-luo (4)
- yzcj105 (4)
- kaihsin (2)
- david-pl (2)
- WingCode (1)
- AbdullahKazi500 (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
-
Total downloads:
- pypi 3,841 last-month
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 8
- Total maintainers: 1
pypi.org: bloqade-analog
Analog neutral atom software development kit
- Documentation: https://bloqade-analog.readthedocs.io/
- License: Apache License 2.0
-
Latest release: 0.16.7
published 7 months ago
Rankings
Maintainers (1)
Dependencies
- actions/checkout v4 composite
- actions/setup-python v4 composite
- codecov/codecov-action v3 composite
- fkirc/skip-duplicate-actions master composite
- pdm-project/setup-pdm v3 composite
- actions/cache v3 composite
- actions/checkout v4 composite
- actions/setup-python v4 composite
- pdm-project/setup-pdm v3 composite
- actions/cache v3 composite
- actions/checkout v4 composite
- actions/setup-python v4 composite
- lewagon/wait-on-check-action v1.3.1 composite
- pdm-project/setup-pdm v3 composite
- actions/cache v3 composite
- actions/checkout v4 composite
- actions/setup-python v4 composite
- pdm-project/setup-pdm v3 composite
- rossjrw/pr-preview-action v1 composite
- actions/checkout v4 composite
- chartboost/ruff-action v1 composite
- psf/black stable composite
- actions/checkout v4 composite
- pdm-project/update-deps-action main composite
- actions/checkout v4 composite
- pdm-project/setup-pdm v3 composite
- amazon-braket-sdk >=1.55.0
- beartype >=0.15.0
- bokeh >=3.2.2
- juliacall >=0.9.14
- numpy >=1.25.2
- pandas >=2.1.0
- plotext >=5.2.8
- pydantic >=1.10.12
- requests-sigv4 >=0.1.6
- scipy >=1.9.3
- simplejson >=3.19.1
- tabulate >=0.9.0