iqm-benchmarks 1.5__tar.gz → 1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of iqm-benchmarks might be problematic. Click here for more details.
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/CHANGELOG.rst +8 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/PKG-INFO +7 -8
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/pyproject.toml +6 -7
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/entanglement/ghz.py +4 -3
- iqm_benchmarks-1.7/src/iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
- iqm_benchmarks-1.7/src/iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/randomized_benchmarking_common.py +6 -4
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/readout_mitigation.py +3 -8
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm_benchmarks.egg-info/PKG-INFO +7 -8
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm_benchmarks.egg-info/requires.txt +6 -7
- iqm_benchmarks-1.5/src/iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
- iqm_benchmarks-1.5/src/iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/.github/workflows/main.yml +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/.github/workflows/publish.yml +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/.github/workflows/tag_and_release.yml +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/.gitignore +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/LICENSE +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/README.md +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/benchmark_runner.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_clifford_rb.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_clops.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_experiment_all.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_gst.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_interleaved_rb.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_mirror_rb.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_qscore.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/example_quantum_volume.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/generate_2qubit_cliffords.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/examples/how_to_make_your_own_benchmark.ipynb +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/scheduled_experiments/adonis/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/scheduled_experiments/adonis/weekly.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/setup.cfg +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/benchmark.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/benchmark_definition.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/benchmark_experiment.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/compressive_gst/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/compressive_gst/compressive_gst.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/entanglement/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/logging_config.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/optimization/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/optimization/qscore.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/quantum_volume/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/quantum_volume/clops.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/quantum_volume/quantum_volume.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/multi_lmfit.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/utils.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm_benchmarks.egg-info/SOURCES.txt +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm_benchmarks.egg-info/dependency_links.txt +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm_benchmarks.egg-info/top_level.txt +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/LICENSE +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/README.md +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/additional_fns.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/algorithm.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/compatibility.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/low_level_jit.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/optimization.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/qiskit_interface.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/reporting/figure_gen.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/mGST/reporting/reporting.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/tag-from-pipeline.sh +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/tests/test_ghz.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/tests/test_gst.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/tests/test_qscore.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/tests/test_qv.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/tests/test_rb.py +0 -0
- {iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/tox.ini +0 -0
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
Changelog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
Version 1.7
|
|
6
|
+
===========
|
|
7
|
+
* Remove explicit dependency on qiskit, instead taking it from qiskit-on-iqm.
|
|
8
|
+
|
|
9
|
+
Version 1.6
|
|
10
|
+
===========
|
|
11
|
+
* Minor change in dependencies for compatibility.
|
|
12
|
+
|
|
5
13
|
Version 1.5
|
|
6
14
|
===========
|
|
7
15
|
* fit results are no longer `BenchmarkObservation`, and instead are moved into the datasets.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iqm-benchmarks
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7
|
|
4
4
|
Summary: A package for implementation of Quantum Characterization, Verification and Validation (QCVV) techniques on IQM's hardware at gate level abstraction
|
|
5
5
|
Author-email: IQM Finland Oy <developers@meetiqm.com>, Aniket Rath <aniket.rath@meetiqm.com>, Jami Rönkkö <jami@meetiqm.com>, Pedro Figueroa Romero <pedro.romero@meetiqm.com>, Vicente Pina Canelles <vicente.pina@meetiqm.com>, Raphael Brieger <raphael.brieger@meetiqm.com>, Stefan Seegerer <stefan.seegerer@meetiqm.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/iqm-finland/iqm-benchmarks
|
|
@@ -11,15 +11,14 @@ Classifier: Intended Audience :: Science/Research
|
|
|
11
11
|
Requires-Python: >=3.11
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: lmfit
|
|
15
|
-
Requires-Dist: matplotlib
|
|
14
|
+
Requires-Dist: lmfit>=1.2
|
|
15
|
+
Requires-Dist: matplotlib<4,>=3.6.3
|
|
16
16
|
Requires-Dist: more-itertools==10.1.0
|
|
17
|
-
Requires-Dist: mthree
|
|
17
|
+
Requires-Dist: mthree<2.7,>=2.6
|
|
18
18
|
Requires-Dist: networkx==3.3
|
|
19
|
-
Requires-Dist: numpy
|
|
20
|
-
Requires-Dist: qiskit
|
|
21
|
-
Requires-Dist: qiskit-
|
|
22
|
-
Requires-Dist: qiskit-iqm==15.1
|
|
19
|
+
Requires-Dist: numpy<2.0,>=1.25.2
|
|
20
|
+
Requires-Dist: qiskit>=1.0
|
|
21
|
+
Requires-Dist: qiskit-iqm>=15.1
|
|
23
22
|
Requires-Dist: scikit-optimize==0.10.2
|
|
24
23
|
Requires-Dist: tabulate==0.9.0
|
|
25
24
|
Requires-Dist: uncertainties==3.2.2
|
|
@@ -27,15 +27,14 @@ classifiers = [
|
|
|
27
27
|
]
|
|
28
28
|
requires-python = ">=3.11"
|
|
29
29
|
dependencies = [
|
|
30
|
-
"lmfit
|
|
31
|
-
"matplotlib
|
|
30
|
+
"lmfit >= 1.2",
|
|
31
|
+
"matplotlib >= 3.6.3, < 4",
|
|
32
32
|
"more-itertools == 10.1.0",
|
|
33
|
-
"mthree
|
|
33
|
+
"mthree >= 2.6, < 2.7",
|
|
34
34
|
"networkx==3.3",
|
|
35
|
-
"numpy >= 1.25.2",
|
|
36
|
-
"qiskit
|
|
37
|
-
"qiskit-
|
|
38
|
-
"qiskit-iqm == 15.1",
|
|
35
|
+
"numpy >= 1.25.2, < 2.0",
|
|
36
|
+
"qiskit >= 1.0",
|
|
37
|
+
"qiskit-iqm >= 15.1",
|
|
39
38
|
"scikit-optimize == 0.10.2",
|
|
40
39
|
"tabulate == 0.9.0",
|
|
41
40
|
"uncertainties == 3.2.2",
|
|
@@ -68,16 +68,17 @@ def append_rms(
|
|
|
68
68
|
Returns:
|
|
69
69
|
List[QuantumCircuit] of the original circuit with 1Q Clifford gates appended to it
|
|
70
70
|
"""
|
|
71
|
-
rm_circuits = []
|
|
71
|
+
rm_circuits: list[QuantumCircuit] = []
|
|
72
72
|
for _ in range(num_rms):
|
|
73
73
|
rm_circ = circuit.copy()
|
|
74
74
|
# It shouldn't matter if measurement bits get scrambled
|
|
75
75
|
rm_circ.remove_final_measurements()
|
|
76
76
|
|
|
77
77
|
active_qubits = set()
|
|
78
|
-
|
|
78
|
+
data = rm_circ.data
|
|
79
|
+
for instruction in data:
|
|
79
80
|
for qubit in instruction[1]:
|
|
80
|
-
active_qubits.add(qubit
|
|
81
|
+
active_qubits.add(rm_circ.find_bit(qubit)[0])
|
|
81
82
|
|
|
82
83
|
for q in active_qubits:
|
|
83
84
|
if backend is not None:
|
|
@@ -650,7 +650,6 @@ def plot_rb_decay(
|
|
|
650
650
|
decay_rate[rb_type] = {
|
|
651
651
|
str(q): dataset.attrs[q_idx][rb_type]["decay_rate"]["value"] for q_idx, q in enumerate(qubits_array)
|
|
652
652
|
}
|
|
653
|
-
print(dataset.attrs)
|
|
654
653
|
offset[rb_type] = {
|
|
655
654
|
str(q): dataset.attrs[q_idx][rb_type]["fit_offset"]["value"] for q_idx, q in enumerate(qubits_array)
|
|
656
655
|
}
|
|
@@ -770,11 +769,14 @@ def plot_rb_decay(
|
|
|
770
769
|
fidelity_stderr[key][str(qubits)] = np.nan
|
|
771
770
|
|
|
772
771
|
if identifier == "mrb":
|
|
773
|
-
plot_label = fr"$\overline{{F}}_
|
|
772
|
+
plot_label = fr"$\overline{{F}}_{{MRB}} (n={len(qubits)})$ = {100.0 * fidelity_value[key][str(qubits)]:.2f} +/- {100.0 * fidelity_stderr[key][str(qubits)]:.2f} (%)"
|
|
774
773
|
elif key == "interleaved":
|
|
775
|
-
plot_label = fr"$\overline{{F}}_
|
|
774
|
+
plot_label = fr"$\overline{{F}}_{{interleaved_gate}} ({qubits})$ = {100.0 * fidelity_value[key][str(qubits)]:.2f} +/- {100.0 * fidelity_stderr[key][str(qubits)]:.2f} (%)"
|
|
776
775
|
else:
|
|
777
|
-
|
|
776
|
+
print(fidelity_value)
|
|
777
|
+
print(qubits)
|
|
778
|
+
print(key)
|
|
779
|
+
plot_label = fr"$\overline{{F}}_{{CRB}}$ = {100.0 * fidelity_value[key][str(qubits)]:.2f} +/- {100.0 * fidelity_stderr[key][str(qubits)]:.2f} (%)"
|
|
778
780
|
|
|
779
781
|
ax.plot(
|
|
780
782
|
x_linspace,
|
|
@@ -25,7 +25,7 @@ from mthree.classes import QuasiCollection
|
|
|
25
25
|
from mthree.exceptions import M3Error
|
|
26
26
|
from mthree.mitigation import _job_thread
|
|
27
27
|
from mthree.utils import final_measurement_mapping
|
|
28
|
-
from qiskit import QuantumCircuit,
|
|
28
|
+
from qiskit import QuantumCircuit, transpile # pylint: disable = no-name-in-module
|
|
29
29
|
from qiskit.providers import Backend, BackendV1, BackendV2
|
|
30
30
|
|
|
31
31
|
from iqm.benchmarks.utils import get_iqm_backend, timeit
|
|
@@ -201,13 +201,8 @@ class M3IQM(mthree.M3Mitigation):
|
|
|
201
201
|
jobs = []
|
|
202
202
|
if not isinstance(self.system, Backend):
|
|
203
203
|
for circs in circs_list:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
self.system,
|
|
207
|
-
optimization_level=0,
|
|
208
|
-
shots=shots,
|
|
209
|
-
rep_delay=self.rep_delay,
|
|
210
|
-
)
|
|
204
|
+
transpiled_circuit = transpile(circs, self.system, optimization_level=0)
|
|
205
|
+
_job = self.system.run(transpiled_circuit, shots=shots, rep_delay=self.rep_delay)
|
|
211
206
|
jobs.append(_job)
|
|
212
207
|
|
|
213
208
|
# *****************************************
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iqm-benchmarks
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7
|
|
4
4
|
Summary: A package for implementation of Quantum Characterization, Verification and Validation (QCVV) techniques on IQM's hardware at gate level abstraction
|
|
5
5
|
Author-email: IQM Finland Oy <developers@meetiqm.com>, Aniket Rath <aniket.rath@meetiqm.com>, Jami Rönkkö <jami@meetiqm.com>, Pedro Figueroa Romero <pedro.romero@meetiqm.com>, Vicente Pina Canelles <vicente.pina@meetiqm.com>, Raphael Brieger <raphael.brieger@meetiqm.com>, Stefan Seegerer <stefan.seegerer@meetiqm.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/iqm-finland/iqm-benchmarks
|
|
@@ -11,15 +11,14 @@ Classifier: Intended Audience :: Science/Research
|
|
|
11
11
|
Requires-Python: >=3.11
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: lmfit
|
|
15
|
-
Requires-Dist: matplotlib
|
|
14
|
+
Requires-Dist: lmfit>=1.2
|
|
15
|
+
Requires-Dist: matplotlib<4,>=3.6.3
|
|
16
16
|
Requires-Dist: more-itertools==10.1.0
|
|
17
|
-
Requires-Dist: mthree
|
|
17
|
+
Requires-Dist: mthree<2.7,>=2.6
|
|
18
18
|
Requires-Dist: networkx==3.3
|
|
19
|
-
Requires-Dist: numpy
|
|
20
|
-
Requires-Dist: qiskit
|
|
21
|
-
Requires-Dist: qiskit-
|
|
22
|
-
Requires-Dist: qiskit-iqm==15.1
|
|
19
|
+
Requires-Dist: numpy<2.0,>=1.25.2
|
|
20
|
+
Requires-Dist: qiskit>=1.0
|
|
21
|
+
Requires-Dist: qiskit-iqm>=15.1
|
|
23
22
|
Requires-Dist: scikit-optimize==0.10.2
|
|
24
23
|
Requires-Dist: tabulate==0.9.0
|
|
25
24
|
Requires-Dist: uncertainties==3.2.2
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
lmfit
|
|
2
|
-
matplotlib
|
|
1
|
+
lmfit>=1.2
|
|
2
|
+
matplotlib<4,>=3.6.3
|
|
3
3
|
more-itertools==10.1.0
|
|
4
|
-
mthree
|
|
4
|
+
mthree<2.7,>=2.6
|
|
5
5
|
networkx==3.3
|
|
6
|
-
numpy
|
|
7
|
-
qiskit
|
|
8
|
-
qiskit-
|
|
9
|
-
qiskit-iqm==15.1
|
|
6
|
+
numpy<2.0,>=1.25.2
|
|
7
|
+
qiskit>=1.0
|
|
8
|
+
qiskit-iqm>=15.1
|
|
10
9
|
scikit-optimize==0.10.2
|
|
11
10
|
tabulate==0.9.0
|
|
12
11
|
uncertainties==3.2.2
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/compressive_gst/compressive_gst.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/quantum_volume/quantum_volume.py
RENAMED
|
File without changes
|
{iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_benchmarks-1.5 → iqm_benchmarks-1.7}/src/iqm/benchmarks/randomized_benchmarking/multi_lmfit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|