Blob Blame History Raw
#
# spec file for package python-cirq
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%define plainpython python
%define cirqmodules core aqt google ionq pasqal web rigetti
Name:           python-cirq
Version:        1.1.0
Release:        0
Summary:        Library for writing quantum circuits
License:        Apache-2.0
URL:            https://github.com/quantumlib/Cirq
Source:         https://github.com/quantumlib/Cirq/archive/v%{version}.tar.gz#/Cirq-%{version}.tar.gz
# PATCH-FIX-UPSTREAM cirq-pr5991-np1.24.patch gh#quantumlib/Cirq#5991
Patch0:         cirq-pr5991-np1.24.patch
BuildRequires:  %{python_module base >= 3.7}
BuildRequires:  %{python_module pip}
BuildRequires:  %{python_module setuptools}
BuildRequires:  %{python_module wheel}
BuildRequires:  fdupes
BuildRequires:  python-rpm-macros
# SECTION cirq-core
BuildRequires:  %{python_module duet >= 0.2}
BuildRequires:  %{python_module matplotlib >= 3.0}
BuildRequires:  %{python_module networkx >= 2.4}
BuildRequires:  %{python_module numpy >= 1.16}
BuildRequires:  %{python_module pandas}
BuildRequires:  %{python_module scipy}
BuildRequires:  %{python_module sortedcontainers >= 2.0}
BuildRequires:  %{python_module sympy}
BuildRequires:  %{python_module tqdm}
BuildRequires:  %{python_module typing_extensions}
# /SECTION
# SECTION cirq-aqt, cirq-ionq, cirq-pasqal
BuildRequires:  %{python_module requests >= 2.18}
# /SECTION
# SECTION cirq-google
BuildRequires:  %{python_module google-api-core >= 1.14.0}
BuildRequires:  %{python_module proto-plus >= 1.20.0}
BuildRequires:  %{python_module protobuf >= 3.12.0}
# google-api-core[grpc]
BuildRequires:  %{python_module grpcio}
# /SECTION
BuildRequires:  %{python_module pyquil >= 3.2.0}
# SECTION cirq-core[contrib]
BuildRequires:  %{python_module autoray}
BuildRequires:  %{python_module PyLaTeX >= 1.3.0}
BuildRequires:  %{python_module numba >= 0.53}
BuildRequires:  %{python_module opt-einsum}
BuildRequires:  %{python_module ply >= 3.6}
BuildRequires:  %{python_module quimb}
# /SECTION
# SECTION test
BuildRequires:  %{python_module flynt >= 0.60}
BuildRequires:  %{python_module filelock}
BuildRequires:  %{python_module freezegun >= 0.3.15}
BuildRequires:  %{python_module pytest-asyncio}
BuildRequires:  %{python_module pytest-randomly}
BuildRequires:  %{python_module pytest-xdist}
BuildRequires:  %{python_module pytest}
#/SECTION
Requires:       %plainpython(abi) = %python_version
Requires:       python-cirq-aqt
Requires:       python-cirq-core
Requires:       python-cirq-google
Requires:       python-cirq-ionq
Requires:       python-cirq-pasqal
Requires:       python-cirq-rigetti
Requires:       python-cirq-web
# quimb does not support 32 bit arch.
ExcludeArch:    %ix86 %arm ppc
BuildArch:      noarch
%python_subpackages

%description
Cirq is a software library for writing, manipulating, and optimizing
quantum circuits and then running them against quantum computers and
simulators.

This metapackage requires all circ subpackages

%package core
Summary:        Cirq quantum algorithms for NISQ devices
Requires:       python-duet >= 0.2.0
Requires:       python-matplotlib >= 3.0
Requires:       python-networkx >= 2.4
Requires:       python-numpy >= 1.16
Requires:       python-pandas
Requires:       python-scipy
Requires:       python-sortedcontainers >= 2.0
Requires:       python-sympy
Requires:       python-tqdm
Requires:       python-typing_extensions

%description core
Cirq is a Python library for writing, manipulating, and optimizing quantum
circuits and running them against quantum computers and simulators.

This module contains everything you'd need to write quantum algorithms for NISQ devices and run them on the built-in Cirq simulators.
In order to run algorithms on a given quantum hardware platform, you'll have to install the right cirq module as well.

%package core-contrib
Summary:        Cirq quantum algorithms for NISQ devices
Requires:       python-PyLaTeX >= 1.3.0
Requires:       python-autoray
Requires:       python-cirq-core = %{version}
Requires:       python-numba >= 0.53
Requires:       python-opt-einsum
Requires:       python-ply >= 3.6
Requires:       python-quimb

%description core-contrib
The cirq-core[contrib] extra

%package aqt
Summary:        Cirq quantum algorithms on AQT quantum computers
Requires:       python-cirq-core = %{version}
Requires:       python-requests >= 2.18

%description aqt
A Cirq package to simulate and connect to Alpine Quantum Technologies quantum computers

%package ionq
Summary:        Cirq quantum algorithms on IonQ quantum computers
Requires:       python-cirq-core = %{version}
Requires:       python-requests >= 2.18

%description ionq
A Cirq package to simulate and connect to IonQ quantum computers

%package pasqal
Summary:        Cirq quantum algorithms on Pasqal quantum computers
Requires:       python-cirq-core = %{version}
Requires:       python-requests >= 2.18

%description pasqal
A Cirq package to simulate and connect to Pasqal quantum computers

%package google
Summary:        Cirq package for Google Quantum Computing Service1
Requires:       python-cirq-core = %{version}
Requires:       python-google-api-core >= 1.14.0
# google-api-core[grpc]
Requires:       python-grpcio
Requires:       python-protobuf >= 3.13.0

%description google
A Cirq module that provides tools and access to the Google Quantum Computing Service

%package web
Summary:        Web-based 3D visualization tools for Cirq

%description web
Cirq is a Python library for writing, manipulating, and optimizing quantum
circuits and running them against quantum computers and simulators.

This package allows users to take advantage of browser based 3D visualization tools
and features in Cirq. cirq-web also provides a development environment for contributors to create and add
their own visualizations to the module.

%package rigetti
Summary:        Cirq package for Rigetti quantum computers and Quil QVM
Requires:       python-cirq-core = %{version}
Requires:       python-pyquil >= 3.2.0

%description rigetti
Cirq is a Python library for writing, manipulating, and optimizing quantum
circuits and running them against quantum computers and simulators.

This module provides everything you'll need to run Cirq quantum algorithms on Rigetti quantum computers.

%prep
%autosetup -p1 -n Cirq-%{version}

%build
for p in %cirqmodules; do
  pushd cirq-$p
  %pyproject_wheel
  popd
done
%pyproject_wheel

%install
for p in %cirqmodules; do
  cp cirq-$p/dist/*.whl dist/
done
%python_expand cp dist/*.whl build/
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}

%check
# tests assume testfiles and import path to be the same, but we test BUILDROOT
donttest="test_json_test_data_coverage"
donttest="$donttest or test_json_and_repr_data"
for p in %cirqmodules; do
  pushd cirq-$p
  %pytest -v -k "not ($donttest)" -n auto
  popd
done

%files %{python_files}
%doc README.rst
%license LICENSE
%{python_sitelib}/cirq-%{version}*-info

%files %{python_files core}
%doc cirq-core/README.rst
%license cirq-core/LICENSE
%{python_sitelib}/cirq
%{python_sitelib}/cirq_core-%{version}*-info

%files %{python_files core-contrib}
%doc cirq-core/README.rst
%license cirq-core/LICENSE

%files %{python_files aqt}
%doc cirq-aqt/README.rst
%license cirq-aqt/LICENSE
%{python_sitelib}/cirq_aqt
%{python_sitelib}/cirq_aqt-%{version}*-info

%files %{python_files ionq}
%doc cirq-ionq/README.rst
%license cirq-ionq/LICENSE
%{python_sitelib}/cirq_ionq
%{python_sitelib}/cirq_ionq-%{version}*-info

%files %{python_files pasqal}
%doc cirq-pasqal/README.rst
%license cirq-pasqal/LICENSE
%{python_sitelib}/cirq_pasqal
%{python_sitelib}/cirq_pasqal-%{version}*-info

%files %{python_files google}
%doc cirq-google/README.rst
%license cirq-google/LICENSE
%{python_sitelib}/cirq_google
%{python_sitelib}/cirq_google-%{version}*-info

%files %{python_files web}
%doc cirq-web/README.rst
%license cirq-web/LICENSE
%{python_sitelib}/cirq_ts
%{python_sitelib}/cirq_web
%{python_sitelib}/cirq_web-%{version}*-info

%files %{python_files rigetti}
%doc cirq-rigetti/README.rst
%license cirq-rigetti/LICENSE
%{python_sitelib}/cirq_rigetti
%{python_sitelib}/cirq_rigetti-%{version}*-info

%changelog