openqasm / qe-compiler Goto Github PK
View Code? Open in Web Editor NEWAn MLIR based compiler dynamic circuit compiler for real-time control systems supporting OpenQASM 3
License: Other
An MLIR based compiler dynamic circuit compiler for real-time control systems supporting OpenQASM 3
License: Other
Running qss-compiler 128c937 on a fresh Ubuntu 22.04 VM with Python 3.10.6.
Observed behaviour
from qss_compiler import compile as compiler
res = compiler.compile_str("OPENQASM 3.0; qubit $0;")
Does not change depending on the input string. The corresponding MLIR output is an empty 1000-shot experiment.
Digging deeper, a command line such as:
qss-compiler/build/bin/qss-compiler -X=qasm --emit=mlir --target=mock --config=auxiliary.cfg --mlir-print-op-generic --canonicalize --direct 'OPENQASM 3.0; qubit $0; bit c; U(1.57079632679, 0.0, 3.14159265359) $0; measure $0 -> c;' 2> 0
Also yields the same empty experiment.
Expected behaviour
Seeing output from the target pipeline's processed MLIR of the input code.
Additional info
The two described issues seem tightly related to me, but feel free to split in case additional complexity in the Python case needs to be addressed.
$ cat auxiliary.cfg
num_qubits 1
acquire_multiplexing_ratio_to_1 5
controllerNodeId 1000
qss-compiler: 3019de5
os: fedora
EDIT: It looks like this problem is caused by building qss-compiler via a submodule that includes a sort of out-of-tree build. So python_lib
itself does not contain expected compiled shared libraries at the time pip install -e
is run.
I'm following instructions in the README:
https://github.com/Qiskit/qss-compiler/blob/b1c39741a67804801d7d9bb4ddbaac6c5cd944e7/python_lib/README.md?plain=1#L43-L45
This fails (using venv with each of Python 3.9 and 3.10)
$ cd python_lib
$ pip install -e .
with error messages that end with:
File "/home/lapeyre/github/IBM-Q-Software/ibm-qss-compiler/ \
.venvs/py310-venv1/lib64/python3.10/site-packages/setuptools/config.py", line 553, in _parse_version
raise DistutilsOptionError(tmpl.format(**locals()))
distutils.errors.DistutilsOptionError: Version loaded from file: VERSION.txt does not comply with PEP 440:
Investigating setuptools/config.py
shows that the error message is misleading. In fact setup is trying to read ./python_lib/VERSION.txt
. But the file does not exist.
This line is relevant:
https://github.com/Qiskit/qss-compiler/blob/b1c39741a67804801d7d9bb4ddbaac6c5cd944e7/python_lib/setup.cfg#L3
Perhaps related to ibm-qss-compiler #866
We should have a coherent naming convention for the QASM library:
https://github.com/Qiskit/qss-compiler/blob/main/CMakeLists.txt#L43
and
https://github.ibm.com/IBM-Q-Software/qss-qasm/blob/master/CMakeLists.txt#L170-L180
I propose the following options:
(a) qss-compiler
adheres to qss-qasm
naming, i.e.,
find_package(qasm REQUIRED)
-> find_package(OpenQASM REQUIRED)
; or
(b) qss-qasm
adheres to qss-compiler
, namely,
OpenQASMConfig.cmake
-> qasmConfig.cmake
OpenQASMConfigVersion.cmake
-> qasmConfigVersion.cmake
I'm, in a sense, torn between the options, but believe that we should go with (a), i.e., qss-compiler
(and thusly Conan) conformance to qss-qasm
conventions, esp. if qss-qasm
will be open sourced.
In general, coherence is needed to prevent divergence between build envs/systems for all developers/users.
Running qss-compiler 128c937
After building a target pipeline with qss-compiler/include/Dialect/Pulse/Transforms/*
passes, qss-compiler
currently can not parse OpenQASM 3 input with said target.
Additional info
This issue exists to track the Pulse Dialect feature, and to enable us to post links to someplace. In case this is premature or a better location exists, please notify and close.
When attempting to compile an expression like
OPENQASM 3.0;
qubit $0;
gate x q {}
bit[4] qc0_c0;
if ((qc0_c0[0] & qc0_c0[1] | qc0_c0[0] & qc0_c0[2] | qc0_c0[1] & qc0_c0[2]) & ~(qc0_c0[0] & qc0_c0[1] & qc0_c0[2])) {
x $0;
}
qc0_c0[3] = measure $0;
this is likely a qss-qasm parsing issue.
From the Quantum team we will be publishing a package with the QEM payload definition (schemas and serialization), so we can implement a Payload
class that writes this format.
External target does not find custom resources due to a variable misnaming in cmake/AddQSSC.cmake
.
Hi Team,
Currently I still cannot figure out how to make this project dependent on qe-compiler. qe-compiler
is an excellent project, I believe many users would like to develop their own full compilers based on this framework. Thus it would be helpful if you could provide some instructions on how to achieve this. I am also very willing to contribute if it requires more effort to make this project a conan package that other projects can depend on.
Here are two ways I have tried but failed. Note that I can seamlessly build qe-compiler locally, but I just cannot build a conan package of it and then make my own project dependent on qe-compiler.
This is done by copying conandata.yml
and conanfile.py
to the path ./conan/qec
and create a conan_deps.sh
, which essentially calls conan export
Direclly use the original
conanfile.py
does not work because it setsexports_sources = "*"
, resulting in a non-empty directory~/.conan/data/qss-compiler/0.1.0/qss-compiler/stable/export_source/
. Thenconan
will copyconandata.yml
,conanfile.py
,conanmanifest.txt
into~/.conan/data/qss-compiler/0.1.0/qss-compiler/stable/source/
. But conan cannot deleteconandata.yml
, resulting in a non-emptysource
dir, preventing cloning source file of qe-compiler.
Manually create a conan package and export it to local cache and then build it
./conan_deps.sh
Then install qe-compiler through conan
mkdir build && cd build
cd build
conan install .. --build=outdated -pr:h default -pr:b default
This method finally results in
CMake Error at /root/miniconda3/envs/quos-dev/lib/python3.10/site-packages/cmake/data/share/cmake-3.23/Modules/CMakeDetermineSystem.cmake:130 (message):
Could not find toolchain file: conan_toolchain.cmake
Call Stack (most recent call first):
CMakeLists.txt:46 (enable_language)
CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_ASM_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
Then I tried using conan create
to create a local conan package.
In the root directory of qe-compiler
cd build
conan create .. zhaoyilun/qe-compiler --build=outdated -pr:h default -pr:b default -e QSSC_VERSION=0.1.0
Initially, I met following error
fatal: not a git repository (or any of the parent directories): .git
-- Root CMake project Git directory (used for version):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/root/miniconda3/envs/quos-dev/lib/python3.10/site-packages/setuptools_scm/__init__.py", line 148, in get_version
_version_missing(config)
File "/root/miniconda3/envs/quos-dev/lib/python3.10/site-packages/setuptools_scm/__init__.py", line 108, in _version_missing
raise LookupError(
LookupError: setuptools-scm was unable to detect version for /root/.conan/data/qss-compiler/0.1.0/zhaoyilun/qe-compiler/build/d28c692a69e3ccd7dc8cd629cfb34b8fd367905b.
Make sure you're either building from a fully intact git repository or PyPI tarballs. Most other sources (such as GitHub's tarballs, a git checkout without the .git folder) don't contain the necessary metadata and will not work.
The root cause is that conan will not copy .git
directory into the local cache, resulting in the error of setuptools_scm
. After checking the CMakeLists.txt, I found that I can explicitly set VERSION_STRING
to avoid using setuptools_scm
.
After fixing the above error, it results in a cyclic dependency error
CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle):
"QSSPythonSources.Dialects.quir" of type INTERFACE_LIBRARY
depends on "QSSPythonModules.sources.QSSPythonSources.Dialects.quir" (strong)
"QSSPythonModules.sources.QSSPythonSources.Dialects.quir" of type UTILITY
depends on "QSSPythonSources.Dialects.quir" (strong)
At least one of these targets is not a STATIC_LIBRARY. Cyclic dependencies are allowed only among static libraries.
CMake Generate step failed. Build files cannot be regenerated correctly.
PRETTY_NAME="Ubuntu Jammy Jellyfish (development branch)"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
We want to define a new library as a CMake target (same contents as QSSCLib, yet manifested as a static library) to enable calling compile()
via the new library.
Tested on current master, 128c937.
ninja
fails while trying to execute the unit tests:
CMake Error at /Users/tinow/venv-py311/lib/python3.11/site-packages/cmake/data/share/cmake-3.26/Modules/GoogleTestAddTests.cmake:112 (message):
Error running test executable.
Path: '/Users/tinow/zi/git/ibm/qss-compiler/build-release/test/unittest/unittest-qss-compiler'
Result: Segmentation fault
Output:
Debugger output (release build, but it has some context):
❯ lldb ./test/unittest/unittest-qss-compiler
(lldb) target create "./test/unittest/unittest-qss-compiler"
Current executable set to '/Users/tinow/zi/git/ibm/qss-compiler/build-release/test/unittest/unittest-qss-compiler' (arm64).
(lldb) run
Process 5819 launched: '/Users/tinow/zi/git/ibm/qss-compiler/build-release/test/unittest/unittest-qss-compiler' (arm64)
Process 5819 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x00000001022aa6cc unittest-qss-compiler`QASM::ASTDeclarationContextTracker::Init() [inlined] std::__1::__tree<std::__1::__value_type<unsigned int, QASM::ASTDeclarationContext const*>, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, QASM::ASTDeclarationContext const*>, std::__1::less<unsigned int>, true>, std::__1::allocator<std::__1::__value_type<unsigned int, QASM::ASTDeclarationContext const*> > >::__insert_node_at(this=<unavailable>, __parent=0x0000000103108bd8, __child=0x0000000103108bd8, __new_node=0x0000600000c001e0) at __tree:2078:25 [opt]
2075 __new_node->__parent_ = __parent;
2076 // __new_node->__is_black_ is initialized in __tree_balance_after_insert
2077 __child = __new_node;
-> 2078 if (__begin_node()->__left_ != nullptr)
2079 __begin_node() = static_cast<__iter_pointer>(__begin_node()->__left_);
2080 _VSTD::__tree_balance_after_insert(__end_node()->__left_, __child);
2081 ++size();
Target 0: (unittest-qss-compiler) stopped.
warning: unittest-qss-compiler was compiled with optimization - stepping may behave oddly; variables may not be available.
(lldb)
Additional info:
❯ conan install .. --profile default --update --build=outdated
Configuration:
[settings]
arch=armv8
arch_build=armv8
build_type=Release
compiler=apple-clang
compiler.libcxx=libc++
compiler.version=14
os=Macos
os_build=Macos
[options]
[build_requires]
[env]
...
❯ clang --version
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-darwin22.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
From #63 (comment)
Every source file needs to have a copyright notice in the first lines. When changing a file, we have to update this copyright notice with the year it was last modified. Of course it can happen at most once every year for each file.... however many contributors (and reviewers) might forget about it.
Is there anything we can do as a pre-commit hook or CI level to check that these notes are updated?
cc/ @taalexander
We should create a PR that adds the initial implementation of the Payload class for the Capnproto QEM schema. We must also incorporate capnproto as a dependency and add the schema to the build system.
Open questions:
Running qss-compiler 128c937 on a fresh Ubuntu 22.04 VM with Python 3.10.6.
Default Conan 1.59.0 profile and CMake updated to 3.26.1.
Observed behaviour
The build fails with
CMake Error at CMakeLists.txt:81 (string):
string sub-command REGEX, mode MATCHALL needs at least 5 arguments total to
command.
Expected behaviour
Should build.
Workaround
Telling CMake explicitly that qss-compiler
is a C++ target lets it compile successfully:
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -106,7 +106,7 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
endif()
endif()
-project(qss-compiler)
+project(qss-compiler CXX)
Curiously, but not investigated further: after a successful build, removing the CXX
continues to build just fine.
We need to add support for compiling and outputting with the latest Capnproto QEM as an option.
For constant ops from arithmetic constants, MLIR chooses SSA value names that reflect the constant. That failed for ints with > 64 bits as the function that derived that name used a shortcut that did not apply (and assert(), as here) for ints with more than 64 bits.
We have contributed a fix to upstream LLVM in llvm/llvm-project@1ef32e7 and need to add this patch into our build of LLVM 14.0.6. (the fix will be included in LLVM 15).
Surfaced by #43
I'm seeing the following assertion error when compiling the adder_n4.qasm test from the QASMBench Benchmark Suite
File: "qelib1.inc", Line: 220, Col: 5 ASTGateQOp c3sqrtx does not have a Local SymbolTable Entry.
OK.
loc("small/adder_n4/adder_n4.qasm":10:25): error: Unnamed expressions not supported by QUIRGen yet, assign to an identifier
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /Users/kbarton/bin/qss-compiler --emit=qem -o test.qem -I . small/adder_n4/adder_n4.qasm
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0 qss-compiler 0x00000001071ddc54 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1 qss-compiler 0x00000001071dcc4c llvm::sys::RunSignalHandlers() + 112
2 qss-compiler 0x00000001071de2e0 SignalHandler(int) + 344
3 libsystem_platform.dylib 0x000000019e2bf2a4 _sigtramp + 56
4 qss-compiler 0x00000001071066d4 mlir::Operation::create(mlir::Location, mlir::OperationName, mlir::TypeRange, mlir::ValueRange, mlir::DictionaryAttr, mlir::BlockRange, unsigned int) + 560
5 qss-compiler 0x00000001071066d4 mlir::Operation::create(mlir::Location, mlir::OperationName, mlir::TypeRange, mlir::ValueRange, mlir::DictionaryAttr, mlir::BlockRange, unsigned int) + 560
6 qss-compiler 0x00000001071068b0 mlir::Operation::create(mlir::OperationState const&) + 168
7 qss-compiler 0x00000001070a69c4 mlir::OpBuilder::createOperation(mlir::OperationState const&) + 28
8 qss-compiler 0x0000000105148978 mlir::quir::Builtin_UOp mlir::OpBuilder::create<mlir::quir::Builtin_UOp, mlir::Value&, mlir::Value&, mlir::Value&, mlir::Value&>(mlir::Location, mlir::Value&, mlir::Value&, mlir::Value&, mlir::Value&) + 168
9 qss-compiler 0x0000000105148760 qssc::frontend::openqasm3::QUIRGenQASM3Visitor::visit(QASM::ASTUGateOpNode const*) + 1124
10 qss-compiler 0x0000000105146fb0 qssc::frontend::openqasm3::QUIRGenQASM3Visitor::visit(QASM::ASTGateDeclarationNode const*) + 928
11 qss-compiler 0x0000000105135c2c qssc::frontend::openqasm3::BaseQASM3Visitor::visit(QASM::ASTStatementList const*) + 168
12 qss-compiler 0x0000000105142058 qssc::frontend::openqasm3::QUIRGenQASM3Visitor::walkAST() + 20
13 qss-compiler 0x0000000105134f04 qssc::frontend::openqasm3::parse(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, bool, bool, mlir::ModuleOp&) + 788
14 qss-compiler 0x0000000104cb9d2c compile(int, char const**, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) + 2968
15 dyld 0x000000019df67e50 start + 2544
This requires a recent version of qss-qasm to fix an issue in the Qasm parser (Jan 27, 2023 or newer).
Reproduce with the following command:
bin/qss-compiler --emit=qem -o test.qem -I . adder_n4.qasm
adder_n4.qasm.txt
qelib1.inc.txt
This error is preventing all the benchmarks from the QASMBench suite from building using the qss-compiler
.
Note If you get the files directly from the QASMBench repo, you may need to run dos2unix
on the files first to eliminate the Windows special characters in the file.
The VariableEliminationPass
is causing unit test failures on Apple M1 due to the assertion error:
Assertion failed: (op->use_empty() && "expected 'op' to have no uses"), function eraseOp, file PatternMatch.cpp, line 260.
The failing tests are:
LesPaul Static :: integration/openqasm3/bitindices.qasm
LesPaul Static :: integration/openqasm3/bool_conditional_assign.qasm
The cause has been determined to be the fact that erasing a user while iterating over getUsers is changing the results of the iteration causing some users not to be dropped. This causes the assert when the op is erased. See https://github.com/Qiskit/qss-compiler/blob/e1e4dd3dae9baab14de76eae27a9ea8d7ec0b3d1/lib/Dialect/QUIR/Transforms/VariableElimination.cpp#L282-L286
Copying the users into a SmallVector
and then erasing while iterating over the SmallVector
fixes the assert.
Running qss-compiler 128c937 on a fresh Ubuntu 22.04 VM with Python 3.10.6.
Default Conan 1.59.0 profile and CMake updated to 3.26.1.
Observed behaviour
The build fails with
CMake Error at cmake/AddQSSC.cmake:115 (target_link_libraries):
Target "QSSCPayloadZip" links to:
libzip::zip
but the target was not found. Possible reasons include:
* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.
Expected behaviour
The build system should pick up on libzip.
Workaround
Telling CMake to use the OS's zip library works, but requires additional intervention.
--- a/lib/Payload/ZipPayload/CMakeLists.txt
+++ b/lib/Payload/ZipPayload/CMakeLists.txt
@@ -24,7 +24,7 @@ qssc_add_plugin(QSSCPayloadZip QSSC_PAYLOAD_PLUGIN
LINK_LIBS
QSSCPayload
- libzip::zip
+ zip
qss-compiler expresses variable references and assignments in OpenQASM 3 source code as MLIR operations that directly reflect these references and assignments in the initial MLIR -- that is, the initial MLIR uses memory semantics for variables. For later optimization, it is beneficial to resolve these operations with memory semantics such that the use of a variable directly uses the SSA value that has been assigned to the variable at that point.
Currently, the compiler uses the pass VariableElimination
towards that goal. That pass takes a detour through the affine
dialect and its scalar replacement pass. As a downside, that approach currently cannot resolve variable memory semantics around control flow.
We should revise the VariableElimination
pass to fully resolve the OpenQASM 3 variable operations into SSA form.
VariableElimination
pass.Running qss-compiler 128c937
Currently handing off processing to a Python-based program requires writing/reading a text-based MLIR dump. This is clumsy, slow and involves additional parsing. Any parser needs to formally define QSSC-specific dialects.
In the ideal case, the AST/IR tree could be walked from a Python program.
Additional info
This issue exists to track the downstream vendor Python stack interaction, and to enable us to post links to someplace. In case this is premature or a better location exists, please notify and close.
Only one target system will ever be instantiated for a compilation. Therefore we should have a single target pointer with accessors that are globally visible. This would eliminate the need for the changes made here: #86 and allow the target plugin factory to hand over ownership of the target after construction.
As part of migrating to the open source we are renaming this project from the qss (quantum systems software) prefix to qe (quantum engine).
Steps:
From #63 review, some of the ///
comments were a bit of unexpected for reviewers. They are doxygen-style comments for documentation.
We need to decide if we want to document the source or not so we can enforce it in either direction in our reviews.
cc/ @vrpascuzzi
QUIR should support const
in statements like: const int[64] x = 2
.
The QASM code uint x = 1;
and const uint x = 1;
emit the same mlir. Furthermore, in both cases, x
may be mutated.
The information is available in the AST via node->IsConst()
. So you would discrimination when processing the variable -declaration node here
https://github.com/Qiskit/qss-compiler/blob/7180bf9a96b6109c0ff9491c15f8330f5a4ff7ef/lib/Frontend/OpenQASM3/QUIRVariableBuilder.cpp#L34-L36
by including another parameter bool isConst
. And select either
https://github.com/Qiskit/qss-compiler/blob/7180bf9a96b6109c0ff9491c15f8330f5a4ff7ef/lib/Frontend/OpenQASM3/QUIRVariableBuilder.cpp#L49
as now or declareOp = builder.create<mlir::quir::DeclareConstantOp>
.
Then copy/paste this
https://github.com/Qiskit/qss-compiler/blob/7180bf9a96b6109c0ff9491c15f8330f5a4ff7ef/include/Dialect/QUIR/IR/QUIROps.td#L137-L138
like this:
def QUIR_DeclareConstantOp : QUIR_Op<"declare_constant", [Symbol]> {
And give the constant the same semantics except that it can't be assigned to. Even if adding an operation declare_constant
is the right approach, some kind of refactoring rather than copying 50 lines verbatim should be done.
Running qss-compiler 128c937
The compiler CLI flag --config
expects a file on drive, such as:
num_qubits 1
acquire_multiplexing_ratio_to_1 5
controllerNodeId 1000
In our use case, it would be preferable to either pass the whole as a string, or enable passing the individual lines as options.
This is a minor issue: the current workaround is to write the file to drive on the fly where it's needed.
Edit: to avoid a XY-problem description... what we're actually after is not having to write the file to disk in the Python library interface.
VariableAssignOp
, for instance, here
https://github.com/Qiskit/qss-compiler/blob/c3d553cff42ff8229b57786a3b9afe2104661679/include/Dialect/QUIR/IR/QUIROps.td#L282
is the odd man out among the following set of identifiers:
DeclareVariableOp
, UseVariableOp
, DeclareQubitOp
, DeclareArrayOp
, AssignCbitOp
, etc.
To translate operations from a dialect to LLVMIR, the dialect must have a registered implementation of LLVMTranslationDialectInterface
. Due to changes during the migration to LLVM-14, the mock_target
implementation of QUIRToStandard
was not updated to accommodate the new interface. When testing the generation of a QuantumExecutionModule (QEM) from a QASM 3.0 input, the following error is observed:
$ /path/to/qss-compiler --target=mock --config /path/to/mock_target/test/test.cfg /path/to/qic-rta-driver/compiler/qss-compiler/test/Frontend/OpenQASM3/bell-v0.qasm --emit=qem --plaintext-payload
<...>
error: cannot be converted to LLVM IR: missing
`LLVMTranslationDialectInterface` registration for dialect for
op: builtin.unrealized_conversion_cast
<...>
ultimately, producing no controller binary for the mock target. Furthermore, there is presently no test to check for this failure.
Invoking pytest test/python_lib
gives:
Current thread 0x0000000108bc6600 (most recent call first):
File "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 1173 in create_module
File "<frozen importlib._bootstrap>", line 565 in module_from_spec
File "<frozen importlib._bootstrap>", line 666 in _load_unlocked
File "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1007 in _find_and_load
File "/Users/thomas/Devel/ibm/internal/qss-compiler/build/qss-compiler/python_lib/qss_compiler/__init__.py", line 7 in <module>
File "<frozen importlib._bootstrap>", line 228 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 855 in exec_module
File "<frozen importlib._bootstrap>", line 680 in _load_unlocked
File "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1007 in _find_and_load
File "/Users/thomas/Devel/ibm/internal/qss-compiler/qss-compiler/test/python_lib/test_compile.py", line 11 in <module>
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/assertion/rewrite.py", line 171 in exec_module
File "<frozen importlib._bootstrap>", line 680 in _load_unlocked
File "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1007 in _find_and_load
File "<frozen importlib._bootstrap>", line 1030 in _gcd_import
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/importlib/__init__.py", line 127 in import_module
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/pathlib.py", line 533 in import_path
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/python.py", line 599 in _importtestmodule
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/python.py", line 510 in _getobj
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/python.py", line 296 in obj
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/python.py", line 527 in _inject_setup_module_fixture
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/python.py", line 513 in collect
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/runner.py", line 371 in <lambda>
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/runner.py", line 340 in from_call
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/runner.py", line 371 in pytest_make_collect_report
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/runner.py", line 544 in collect_one_node
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/main.py", line 825 in genitems
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/main.py", line 657 in perform_collect
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/main.py", line 332 in pytest_collection
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/main.py", line 321 in _main
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/main.py", line 268 in wrap_session
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/main.py", line 315 in pytest_cmdline_main
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_callers.py", line 39 in _multicall
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_manager.py", line 80 in _hookexec
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/pluggy/_hooks.py", line 265 in __call__
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/config/__init__.py", line 165 in main
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/lib/python3.9/site-packages/_pytest/config/__init__.py", line 188 in console_main
File "/Users/thomas/opt/anaconda3/envs/qss-compiler/bin/pytest", line 8 in <module>
zsh: segmentation fault pytest ../qss-compiler/test/python_lib
Similarily import qss_compiler
segfaults.
Of note when building is ld: warning: -undefined dynamic_lookup may not work with chained fixups
Failing tests on latest 2283e40 with qasm/02.12
.
$ . conan_deps.sh
$ cd build && \
conan install .. -pr macos_arm64_apple-clang_14_debug \
-o qasm:shared=True --build=missing --build=gtest
$ cmake ../ -G "Ninja" -DCONAN=ON -DINSTALL_CONAN_DEPS=OFF \
-DCMAKE_BUILD_TYPE=Debug
$ ninja check-tests
<...>
[2/3] Running the QSS Compiler Core regression tests
-- Testing: 122 tests, 10 workers --
Testing: 0.
FAIL: QSS Compiler Core :: Frontend/OpenQASM3/bitstring-init.qasm (6 of 122)
******************** TEST 'QSS Compiler Core :: Frontend/OpenQASM3/bitstring-init.qasm' FAILED ********************
<...>
File: "/Users/vrpascuzzi/devel/ibm-q-restricted-system/qic-rta-driver/compiler/qss-compiler/test/Frontend/OpenQASM3/bitstring-init.qasm", Line: 28, Col: 13 Assignment may result in truncation.
Assertion failed: (getSignificantBits() <= 64 && "Too many bits for int64_t"), function getSExtValue, file APInt.h, line 1482.
<...>
Full log with stack dump: err-test-bitstring-init.qasm.log
mpc
fails to build after #80 introduces the following:
https://github.com/Qiskit/qss-compiler/blob/cb29d2e0db8f9806548d1a93bc0042ab3d75d8f2/conan/qasm/conanfile.py#L27-L33
conan install .. -pr macos_arm64_apple-clang_14_release -o qasm:shared=True --build=missing --build=gtest
<...>
configure:3788: gcc -O3 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -arch arm64 -I/Users/vrpascuzzi/.conan/data/mpfr/4.1.0/_/_/package/af76b3032063867730da46ec5e9b40ac59d3532e/include -I/Users/vrpascuzzi/.conan/data/gmp/6.2.1/_/_/package/357093134535fd7246c58058fb3584d8f7d26c34/include -DNDEBUG -L/Users/vrpascuzzi/.conan/data/mpfr/4.1.0/_/_/package/af76b3032063867730da46ec5e9b40ac59d3532e/lib -L/Users/vrpascuzzi/.conan/data/gmp/6.2.1/_/_/package/357093134535fd7246c58058fb3584d8f7d26c34/lib conftest.c -lmpfr -lgmpxx -lgmp >&5
configure:3792: $? = 0
configure:3840: result: yes
configure:3843: checking for C compiler default output file name
configure:3845: result: a.out
configure:3851: checking for suffix of executables
configure:3858: gcc -o conftest -O3 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -arch arm64 -I/Users/vrpascuzzi/.conan/data/mpfr/4.1.0/_/_/package/af76b3032063867730da46ec5e9b40ac59d3532e/include -I/Users/vrpascuzzi/.conan/data/gmp/6.2.1/_/_/package/357093134535fd7246c58058fb3584d8f7d26c34/include -DNDEBUG -L/Users/vrpascuzzi/.conan/data/mpfr/4.1.0/_/_/package/af76b3032063867730da46ec5e9b40ac59d3532e/lib -L/Users/vrpascuzzi/.conan/data/gmp/6.2.1/_/_/package/357093134535fd7246c58058fb3584d8f7d26c34/lib conftest.c -lmpfr -lgmpxx -lgmp >&5
configure:3862: $? = 0
configure:3884: result:
configure:3906: checking whether we are cross compiling
configure:3914: gcc -o conftest -O3 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -arch arm64 -I/Users/vrpascuzzi/.conan/data/mpfr/4.1.0/_/_/package/af76b3032063867730da46ec5e9b40ac59d3532e/include -I/Users/vrpascuzzi/.conan/data/gmp/6.2.1/_/_/package/357093134535fd7246c58058fb3584d8f7d26c34/include -DNDEBUG -L/Users/vrpascuzzi/.conan/data/mpfr/4.1.0/_/_/package/af76b3032063867730da46ec5e9b40ac59d3532e/lib -L/Users/vrpascuzzi/.conan/data/gmp/6.2.1/_/_/package/357093134535fd7246c58058fb3584d8f7d26c34/lib conftest.c -lmpfr -lgmpxx -lgmp >&5
configure:3918: $? = 0
configure:3925: ./conftest
dyld[25403]: Library not loaded: libgmpxx.4.dylib
Referenced from: <ABC1A17C-9B7E-318C-B2B8-F181EC3ACD18> /Users/vrpascuzzi/.conan/data/mpc/1.2.0/_/_/build/02453b5a41cfd72adb4b7842b2cd3f45b945168b/conftest
Reason: tried: 'libgmpxx.4.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibgmpxx.4.dylib' (no such file), 'libgmpxx.4.dylib' (no such file), '/usr/local/lib/libgmpxx.4.dylib' (no such file), '/usr/lib/libgmpxx.4.dylib' (no such file, not in dyld cache), '/Users/vrpascuzzi/.conan/data/mpc/1.2.0/_/_/build/02453b5a41cfd72adb4b7842b2cd3f45b945168b/libgmpxx.4.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/vrpascuzzi/.conan/data/mpc/1.2.0/_/_/build/02453b5a41cfd72adb4b7842b2cd3f45b945168b/libgmpxx.4.dylib' (no such file), '/Users/vrpascuzzi/.conan/data/mpc/1.2.0/_/_/build/02453b5a41cfd72adb4b7842b2cd3f45b945168b/libgmpxx.4.dylib' (no such file), '/usr/local/lib/libgmpxx.4.dylib' (no such file), '/usr/lib/libgmpxx.4.dylib' (no such file, not in dyld cache)
source_subfolder/configure: line 3927: 25403 Abort trap: 6 ./conftest$ac_cv_exeext
configure:3929: $? = 134
configure:3936: error: in `/Users/vrpascuzzi/.conan/data/mpc/1.2.0/_/_/build/02453b5a41cfd72adb4b7842b2cd3f45b945168b':
configure:3938: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
<...>
libgmpxx.4.dylib
library is not loaded. (rpath
problem?)
Successful build.
FYI: @kevinhartman
Running qss-compiler 128c937 on a fresh Ubuntu 22.04 VM with Python 3.10.6.
Default Conan 1.59.0 profile and CMake updated to 3.26.1.
By default, Conan goes for compiler=gcc
.
Observed behaviour
Compiling from scratch (calling Conan with --build=missing
) can take a few hours depending on hardware. If anything goes wrong, the whole single big chunk has to be redone.
This is tedious for the initial development encounter as well as for further build deployment.
Expected behaviour
Help the contributor out by either chunking the dependency into multiple units, or (under the assumption that ld
is the performance culprit, TBD?) providing instructions for setting the build system up with lld
.
I am seeing the following four tests fail with a debug build of qe-compiler:
********************
Testing: 0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..
********************
Failed Tests (4):
Mock Static :: static/Conversion/QUIRToStd/llvmgen.mlir
Mock Static :: static/integration/mlir/mlir-timing.mlir
Mock Static :: static/integration/openqasm3/example.qasm
Mock Static :: static/integration/openqasm3/reset-v0.qasm
All of these failures have the same output:
loc("-":0:0): error: empty block: expect at least a terminator
Note that there are currently more failures then this, but I have branches/PRs that fix all but these four tests.
Running qss-compiler 4986bfd on Ubuntu 22.04 with Python 3.10.6.
Observed behaviour
The following file:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import multiprocessing
from qss_compiler import compile as compiler
program = """\
OPENQASM 3.0;
qubit $0;
bit c;
U(1.5707963, 0.0, 1.5707963) $0;
measure $0 -> c;
"""
copts = compiler.CompileOptions(
target="mock",
config_path="auxiliary.cfg",
output_type=compiler.OutputType.MLIR,
extra_args=["--mlir-print-op-generic", "--canonicalize"],
)
if __name__ == "__main__":
multiprocessing.freeze_support()
with open("compiler_input", "w") as fp:
fp.write(program)
mlir = compiler.compile_file("compiler_input", compile_options=copts)
Throws an exception:
$ ./main.py
params passed from python to C++:
qss-compiler
-X=qasm
--emit=mlir
--target=mock
--config=auxiliary.cfg
--mlir-print-op-generic
--canonicalize
compiler_input
Config:
num_qubits 2
multiplexing_ratio 5
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision sinh(1) and cosh(1).
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Euler Number.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision sinh(1) and cosh(1).
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Euler Number.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
OK.
Process ForkServerProcess-1:
Traceback (most recent call last):
File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/home/donjan/code/qiskit/qss-compiler/build/python_lib/build/__editable__.qss_compiler-0.1.dev64+g6d5dc3b.d20230413-cp310-cp310-linux_x86_64/qss_comr
status, output = _compile_child_backend(execution, on_diagnostic)
File "/home/donjan/code/qiskit/qss-compiler/build/python_lib/build/__editable__.qss_compiler-0.1.dev64+g6d5dc3b.d20230413-cp310-cp310-linux_x86_64/qss_comd
success, output = _compile_with_args(args, output_as_return, on_diagnostic)
ValueError: stoi
Traceback (most recent call last):
File "/home/donjan/code/qiskit/qss-compiler/build/python_lib/build/__editable__.qss_compiler-0.1.dev64+g6d5dc3b.d20230413-cp310-cp310-linux_x86_64/qss_come
received = parent_side.recv()
File "/usr/lib/python3.10/multiprocessing/connection.py", line 250, in recv
buf = self._recv_bytes()
File "/usr/lib/python3.10/multiprocessing/connection.py", line 414, in _recv_bytes
buf = self._recv(4)
File "/usr/lib/python3.10/multiprocessing/connection.py", line 383, in _recv
raise EOFError
EOFError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/donjan/code/qiskit/openqasm_demo/qss-compiler/foo.py", line 27, in <module>
mlir = compiler.compile_file("compiler_input", compile_options=copts)
File "/home/donjan/code/qiskit/qss-compiler/build/python_lib/build/__editable__.qss_compiler-0.1.dev64+g6d5dc3b.d20230413-cp310-cp310-linux_x86_64/qss_come
return _do_compile(execution)
File "/home/donjan/code/qiskit/qss-compiler/build/python_lib/build/__editable__.qss_compiler-0.1.dev64+g6d5dc3b.d20230413-cp310-cp310-linux_x86_64/qss_come
raise QSSCompilerError(
qss_compiler.compile.QSSCompilerError: compile process exited before delivering output.
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision sinh(1) and cosh(1).
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision Euler Number.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision sinh(1) and cosh(1).
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning: OpenQASM 3 parse error
File: compiler_input, Line: 1, Col: 1
Possible loss of precision in calculating multiple-precision Euler Number.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
If we change the qubit variable name from q
to $0
:
program = """\
OPENQASM 3.0;
qubit $0;
bit c;
U(1.5707963, 0.0, 1.5707963) $0;
measure $0 -> c;
"""
Then the program runs to completion with:
$ ./main.py
params passed from python to C++:
qss-compiler
-X=qasm
--emit=mlir
--target=mock
--config=auxiliary.cfg
--mlir-print-op-generic
--canonicalize
compiler_input
Config:
num_qubits 2
multiplexing_ratio 5
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision sinh(1) and cosh(1).
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Euler Number.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Pi.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision sinh(1) and cosh(1).
compiler_input:1:1: warning:
OPENQASM 3.0;
^
Warning while parsing OpenQASM 3 input
File: compiler_input, Line: 1, Col: 1 Possible loss of precision in calculating multiple-precision Euler Number.
compiler_input:1:1: warning:
OPENQASM 3.0;
^
OK.
Compile successful
Also tested calling the variable $1
, which compiles successfully.
Expected behaviour
The compilation success should not depend on the variable name.
Additional info
$ cat auxiliary.cfg
num_qubits 1
acquire_multiplexing_ratio_to_1 5
controllerNodeId 1000
#263 adds support for binary/unary expressions on integers and floats to the compiler. However, currently these are evaluated with left-right infix ordering. This means that if parentheses aren't added expressions like a * b ** c
will be evaluated as (a * b) ** c)
which disobeys standard arithmetic operation precedence. The qe-qasm parser has a ASTOperatorPrecdeanceController that can be used to build the correct expressions.
EDIT: You can turn off the shot loop when compiling qasm code. And --add-shot-loop
does what it should when the input is mlir. @mhillenbrand explains below.
A shot loop wrapping all code is inserted unconditionally when producing quir
dialect from the QASM
AST. As part of broadening the uses of quir
, the shot loop should be made optional.
EDIT: Setting the option num-shots
to zero, that is --num-shots=0
, causes the loop to be omitted. (still a useless variable numShots
is inserted in the mlir code) However the option add-shot-loop
appears to do nothing. Perhaps it should be removed.
Although there is a cli option --add-shot-loop
, I think the shot loop may be hardwired here:
https://github.com/Qiskit/qss-compiler/blob/7180bf9a96b6109c0ff9491c15f8330f5a4ff7ef/lib/Dialect/QUIR/Transforms/AddShotLoop.cpp#L96
In this comment on the LLVM forums @joker-eph noted that the current API itself is not threadsafe if concurrent calls are made to compileMLIR which might concurrently access and use the same pass manager.
Currently, we only make one call per target compilation manager. As we have plans to extend how the C++ API is called/used this may be an issue in the nearish future.
We need to add a codeowners file and a maintainers Github team attached to this.
This work is to upgrade the uses of MLIR in the qss-source compiler repo to work with the MLIR interfaces provided in LLVM 16 (the latest release of LLVM).
I have not done such an upgrade before, but I expect some of the interfaces in the open source MLIR APIs will have changed between LLVM 14 and LLVM 16 and we will need to change our code accordingly.
This will also require updating the conandata.yml
file to use LLVM 16.0.5 branch, instead of the current 14.0.6-2 branch.
This problem was reported by ZI when trying to build qss-compiler
on a vanilla Ubuntu 22 image.
The Default conan profile is using libstdc++ instead of libstdc++11. Hopefully there is a way to update the Conan profile to indicate that it needs to use libstdc++11. At the very least, we should add a comment in the README to indicate this.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.