Skip to content

Releases: Quandela/Perceval

v1.1.0 The Round Table

20 Nov 12:47
aad5f0b

Choose a tag to compare

New features

  • Python 3.14 is now supported.
  • JobGroup
    • Two new async methods to launch jobs, launch_async_jobs and relaunch_async_failed_jobs, that launch as many jobs as possible.
    • New cancel_all method.
    • Jobs coming from a JobGroup should now be grouped together on the Quandela Cloud interface using the name of the JobGroup.
  • PPNR detectors have a new wire_efficiency parameter, allowing to represent losses directly within the detector.
  • The cloud target url can now be saved in RemoteConfig.

Improvements

  • PersistentData folder can now be specified using a PCVL_PERSISTENT_PATH environment variable, or falls back to a temp folder if the default path is not writable.
  • Sped-up computation with Heralds and non-perfect detectors.
  • HTTP errors received during the use of a RemoteProcessor or a RemoteJob are more explicit.
  • SLAP backend can now directly simulate feed-forward in usual cases.

Bug fixes

  • Duplicated Parameter names are now correctly detected when inserting a new component into a Processor.
  • Processor.get_parameters now successfully gives the parameters defined in any inserted FFCircuitProvider.
  • RemoteProcessor.estimate_required_shots and RemoteProcessor.estimate_expected_samples now work with non-unitary experiments.
  • Conversion from BSDistribution to BSCount or BSSamples was forgetting the 0-photon states.
  • JobGroup was unable to take a Job containing an iteration list containing an input state or a noise model.
  • PNR detectors can now limit the number of photons.
  • Tomography will now work with RemoteProcessor.

Breaking changes

Even though the changes in the API brought by the 1.1.0 version were targeted to be minimal, there are still a few breaking changes:

  • Following Python cycle of life, python 3.9 is no longer supported.
  • Linux version requirement has been increased. We now support:
    • Debian 10+
    • Ubuntu 18.10+
    • Fedora 29+
    • CentOS/RHEL 8+
  • RemoteConfig.set_cloud_maximal_job_count is deprecated as JobGroup now retrieves the number of launchable jobs directly from the cloud.
  • The order of the parameters in Circuit.compute_unitary was inconsistent with the order for this method on components, so it has been changed.
  • The .copy() methods now perform deepcopies (was previously something between shallow and deep copies). This method has been removed for Processors.

A detailed documentation on how to update your Perceval code to version 1.1 is available here: https://perceval.quandela.net/docs/v1.1/legacy.html

You can contact us on Quandela community forum

v1.0.1 - The Grail Encounter

22 Sep 13:05
2746d65

Choose a tag to compare

Improvements

  • In legacy, we clarified that BasicState with distinguishability noise should use the new NoisyFockState format (i.e. "|{0}>" instead of "|{_:0}>")

Bug fixes

  • Fix Expression and Parameter copy.
  • Circuit and Experiment containing several times the same Parameter can now be copied properly using .copy().
  • Simulator allowed AnnotatedFockState inputs when it shouldn't
  • BasicState can be initialised from a numpy.array again
  • Fixed Two-particle bosonic-fermionic quantum walk example notebook
  • Fixed typos and missing links in the user documentation

v1.0.0 - The Grail Encounter

04 Sep 08:39
1638dea

Choose a tag to compare

After a long wait, Perceval has finally reached version 1!

New features and reasons to upgrade

  • The user documentation has been completely revamped.

    • Its improved structure is more natural, especially for newcomers,
    • The tutorials section was split in lessons divided into three levels (beginner, advanced and expert),
    • A particular care was given to Perceval and exqalibur code reference which now covers all existing features!
  • It is now possible to send Experiments containing feed-forward to the Cloud. Please note that only a limited list of platforms can handle feed-forward (at the time of its release, only "sim:slos" has this capability).

  • Noisy simulations were optimised a lot, through an improved preprocessing of noisy input states, the use of light-weight FockState representation during computations and an improved algorithm. It is now consuming way less memory and shows speed-ups up to 50x on larger noisy simulations.

Improvements

  • CircuitOptimizer now supports an initial guess

  • A Herald can be added on only one side of an Experiment, making it asymmetrical (user input state and output state won't have the same size anymore)

  • Better probability threshold management in chained tensor products of distributions

  • Use herald values during an imperfect Detector simulation

  • Heralds and PostSelect are now transmitted between simulation layers for LC and TD components

  • Optimized usage of an FSMask in SLAP

  • Optimized the SLAP.prob_distribution call

  • Optimized the Source model algorithm (by moving it to exqalibur)

  • NoiseModel now provides pythonic access to its attributes

  • A request payload may now be generated without connecting to a Cloud provider

  • Enhanced Scaleway provider code

  • Shor's algorithm example notebook has been modernised

  • Rendering

    • pdisplay handles BSSamples
    • Sped up the rendering of large SVDistribution
  • Remote computing

    • Perceval now checks a new constraint from remote platforms, telling whether they can handle multiple input photons per mode
    • Read RemoteProcessor.status property to know the current status of the corresponding remote platform
    • Add field cloud_maximal_job_count to RemoteConfig, limiting the number of concurrent Job run at once when calling JobGroup.run_parallel
    • JobGroup.list_existing() method was renamed to list_locally_saved(), for clarity
    • The behaviour of get_results is now consistent for failed jobs (LocalJob or RemoteJob).

Bug fixes

  • Experiment composition

    • When composing two experiments or processors, the right-hand-side detectors now have priority
    • Adding a single component to an Experiment on non-consecutive modes correctly applies an inverted permutation after it
  • Circuit and Processor rendering

    • Modes are now rendered below the input ports
    • Fixed a bug where a subcircuit and its container box would be shifted
    • Fixed a bug in specific feed-forwarded circuits rendering
  • Fix handling of min_detected_photons in the NoisySamplingSimulator

  • Fix Expression.fixed property

  • Fix a crash that could occur in Clifford & Clifford 2017 sampling back-end

  • Internal logger can now be setup to write in a file at a path containing non-ASCII characters

  • A Job does not forget its name anymore when reloaded from a JobGroup

  • Fix the result of PS.definition()

Breaking changes

With the release of Perceval version 1 comes a list of updated features and syntax. Here's a list of the major potential code breaks:

  • To achieve large performance gains in noisy simulations, the FockState class was split into three. While the pcvl.BasicState retains most of its versatility, user code might be broken by this code.
  • In some computations, physical_perf and logical_perf scores have been merged into a global_perf
  • Gate based to LO circuits converters were moved from Perceval to a new package perceval-interop. Read its documentation.

A detailed documentation on how to update your Perceval code to version 1 is available here: https://perceval.quandela.net/docs/v1.0/legacy.html

You can contact us on Quandela community forum

v0.13.2 - Castle of Wonders

10 Jul 05:52
b24fd68

Choose a tag to compare

Bug fixes

  • Fixed copy of Experiment when holding a defined state
  • Fixed a memory leak in Experiment

v0.13.1 - Castle of Wonders

27 May 08:30
c7d4380

Choose a tag to compare

New Features

  • The StateGenerator is now able to generate photonic states based on new rules

Improvements

  • The catalog items now expose a build_experiment method that allows creating an Experiment without creating a Processor, allowing easier integration into RemoteProcessor.
  • Non BasicState input in a Processor require setting the min_detected_photons_filter. The error message when omitting it was not human readable. The message is now clearer.

Bug fixes

  • Fixed copy of Experiment and Processor that now give a deep copy of the original object.

v0.13.0 - Castle of Wonders

31 Mar 08:26
96bb453

Choose a tag to compare

New features and reasons to upgrade

Improvements

  • Native optimised library (exqalibur) is now available for Linux ARM64, making Perceval installable on such an environment (i.e. you can now install Perceval in a Linux virtual machine running on a recent Mac computer)
  • Detectors may now be simulated in non-unitary Processors
  • Perceval component catalog now contains all major 1-qubit gates
    See: https://perceval.quandela.net/docs/reference/catalog.html
  • JobGroup now has __len__ and __getitem__ operators
  • Simulator masks as much of the Fock space as possible to improve memory consumption and computation times (in case of superposed and/or noisy input)
  • PostSelect.merge method ignores duplicate conditions
  • Components containing variable parameters can now be inverted
  • Beam splitter reflectivity to theta conversion manages variable parameters
  • Removed several meaningless user warnings

Bug fixes

  • Fixed Perceval logging system using a Python logger
  • Circuit and Processor renderers wrap and/or reduce text size when it's too long
  • Circuits using the same named variable multiple times will now be correctly serialised/deserialised

Other changes

  • Perceval no longer deduces the min_detected_photon_filter for noisy and remote simulations. It is now mandatory to pass a value.
  • min_detected_photons_filter value in a processor containing heralds is now the minimum expected photon count ignoring any ancillary mode and herald
  • Source is no longer a valid parameter when instantiating a Processor

For more information, see: https://perceval.quandela.net/docs/v0.13/legacy.html

You can contact us on the Perceval forum

v0.12.2 - The Bleeding Lance

26 Feb 14:18
5f2757e

Choose a tag to compare

Improvements

  • Detector simulation now uses the optional progress callback
  • Renamed JobGroup method list_unfinished_jobs to list_unsuccessful_jobs for clarity
  • Removed a warning which always occurred when injecting noise in a converter

Bug fixes

  • Fixed post-selection conditions composition in converters
  • Fixed heralds display in highly nested circuits
  • Fixed JobGroup not saving the refreshed jobs status in a parallel run

v0.12.1 - The Bleeding Lance

30 Jan 11:15
75f2281

Choose a tag to compare

New features

Improvements

  • The catalog now includes usual 1-qubit gates.
  • The CircuitOptimizer can now ignore columns of the unitary given a list of modes that won't receive input photons.
  • Perceval's Qiskit bridge is now using Qiskit 1.3.1
  • Feed-forward simulation is now faster when using heralds.
  • Noisy input state generation is now faster and is now only dependant on the number of photons.

Bug fixes

  • LC and TD simulation now succeed if there are empty modes at the end of the Processor.
  • Fixed performance computation when using LC and TD.
  • Fixed potentially wrong results when using several layers of feed-forward.
  • The Sampler iterator no longer need heralded modes to be defined in the input state.
  • Fixed a crash when trying to display a circuit having empty sub-circuits.

You can contact us on the Perceval forum

v0.12.0 - The Bleeding Lance

11 Dec 17:07
fba3acf

Choose a tag to compare

New features

Improvements

  • Perceval now supports Python 3.13.
  • PostSelect syntax now supports nested logical expressions of 'and', 'or', 'xor' and 'not' operators.
  • Gate-based circuits to linear optics converters now save heralded photons (by using as many post-selected CNOT as possible).
  • Strong simulation now automatically uses heralds to mask the Fock space when possible, saving computation time and memory.
  • Failed and cancelled jobs may now be programmatically restarted.
  • Barrier components can now be invisible (used only for alignments).
  • Improved circuit rendering.
  • DisplayConfig enabling to select a rendering skin can now be persistent.
  • Modernized some example notebooks.

Bug fixes

  • Tensor product between BasicState and SVDistribution now always succeeds

Other information & known issues

  • Python 3.8 is no longer supported.
  • Perceval is compatible with both numpy versions 1 and 2. However, installing a fresh Perceval, then a dependency requiring numpy<2 may result in a pip conflict. If it happens, try to install them both in a single pip command.
  • You may have to update pip and setuptools to the latest version before installing Perceval in a Python 3.13 virtual environment.

See syntax changes here: https://perceval.quandela.net/docs/v0.12/legacy.html
You can contact us on the Perceval forum

v0.11.2 - Sir Gawain

23 Sep 12:53
2c9fd40

Choose a tag to compare

Improvements

  • Add a Symmetric MZI in the component catalog
  • Rectangular GenericInterferometer can now autogenerate any 1-mode component whenever the first or last mode is MZI-free
  • Fix typos in logging documentation
  • Remove deprecated calls from user documentation

Bug fixes

  • Remove a small sleep time in local sampling simulation (that would hinder low photon count sampling)
  • Fix how unit tests requiring extra dependencies are run