- Changed: minimum supported Python version is Python 3.10 (drop support for Python 3.7-3.9)
- Bugfix: ∫gₐdt and total functional were reported incorrectly (#96, thanks to @daviehh)
- Bugfix: Restrict
qutip
to version 4. Support forqutip 5.0
will be added in a later release - Changed: Dropped support for Python 3.5 and Python 3.6
- Changed: The documentation will no longer be provided in PDF format
- Changed: Development is now organized around hatch instead of tox
- Bugfix: Crash when initializing discretized numpy-array controls (#79, thanks to @loganbvh)
- Bugfix: Corrected definition of co-states in Dissipative Qubit Reset example (#80, thanks to Alberto Castro)
- Update: Switched Testing and Documentation deployment from Travis to Github Actions (#82)
- Added:
via_midpoints
argument tokrotov.conversions.discretize
function - Changed: Controls and update shapes are now discretized in a way that ensures numerical stability (#74, thanks to @zachmanson)
- Changed: Replaced
uniseg
dependency withgrapheme
(#76)
Note: due to the changes in the time discretization of the controls and update shapes, this version will generally not reproduce optimization results from previous versions to machine precision.
- Added: Support for Python 3.8
- Added: Support for QuTiP 4.5.0
- Added: Support for parallelization with loky (#72)
- Added:
krotov.parallelization.set_parallelization
function - Added:
krotov.parallelization.parallel_map
function (improved implementation of QuTiP'sparallel_map
) - Added: Ability to use threadpoolctl to limit unwanted threading
- Added: limit_thread_pool option to
krotov.optimize_pulses
- Changed:
krotov.propagators.expm
now guarantees single-threaded execution
- Update: Citation info now points to SciPost paper (#61)
- Added: parameters col_formats and col_headers to customize the output of
krotov.info_hooks.print_table
(#65) - Added: info-hooks now have access to the additional arguments propagator, chi_constructor, mu, sigma, iter_start, and iter_stop (#66)
- Added: parameter keep_original_objectives to
krotov.objectives.ensemble_objectives
(#67) - Added: "Related Software" in the documentation
- Update: Documentation is now hosted on gh-pages and deployed by Doctr (#68)
- Update: Documentation now contains all information from https://arxiv.org/abs/1902.11284v5
- Added: Allow to pass args to time-dependent control functions (#56, thanks to @timohillmann)
- Changed: Renamed
krotov.structural_conversions
tokrotov.conversions
- Bugfix: Crash when
krotov.optimize_pulses
is called withiter_stop=0
(#58) - Added:
krotov.result.Result
is now exposed at the top level of the API, askrotov.Result
(#59, thanks to @nathanshammah) - Added: str-representation of
krotov.result.Result
now includes the total running time (#60, thanks to @nathanshammah)
- Update: Documentation now contains all information from https://arxiv.org/abs/1902.11284v4 (#54)
- Added: a PDF of the documentation is now available at https://github.com/qucontrol/krotov/tree/master/docs/pdf (#52, thanks to @TejasAvinashShetty)
- Added: Support for Python 3.7
- Changed: The
'shape'
key inpulse_options
was renamed to'update_shape'
, to further avoid confusion between pulse shapes and update shapes. - Changed: The
.adjoint
property ofObjective
is now a method - Added: Ability to not use QuTiP
Qobj
objects, but arbitrary low-level objects instead. - Improved: Printing an
Objective
now uses internal counters and a symbolic notation to identify objects shared between different objectives. (#43) - Improved:
gate_objectives
now takes into account if target states are (reshuffled) basis states and does not create unnecessary new copies. - Bugfix: Two
Objective
instances that contain numpy arrays as controls can now be compared with==
(#44) - Bugfix: Custom attributes (such as
weight
) are now preserved when copying anObjective
(#44) - Bugfix: Calling
copy.deepcopy
on anObjective
now preserves control functions (#44) - Improved: The
Objective.mesolve
andObjective.propagate
methods can now receive argumentsH
andc_ops
to override the respective attributes of the objectives. This make is easier to analyze perform a robustness analysis, where the result of an optimization should be propagated under a perturbed Hamiltonian. - Improved: The
print_table
andprint_debug_information
info-hooks now flush their output buffers after each iteration. As a result, when writing to a file, that file can be watched withtail -f
. - Changed: Redefine
tau_vals
as their complex conjugate, fixing a bug inchis_ss
andchis_sm
(#46) - Bugfix: Correctly calculate ∂H/∂ϵ if ϵ occurs in H multiple times (#47, thanks to @uiofgh)
- Bugfix: Correctly calculate ∂H/∂ϵ=0 if the specific ϵ currently being updated does not occur in H (#48)
- Added: Method
objectives_with_controls
forResult
object.
- Added: Preprint citation information (
krotov.__arxiv__
,krotov.__citation__
,krotov.__bibtex__
) - Added: Ability to continue from a previous optimization (#26)
- Added: Parameter
out
toprint_table
info-hook - Added: Parameter
finalize
toResult.load
- Added: Ability to dump optimization result every so many iterations (
dump_result
check-convergence routine) - Added: re-entrant option for
DensityMatrixODEPropagator
- Bugfix: Discretize controls to float values (#41)
- Bugfix: Fix overlap for non-Hermitian operators (#39)
- Bugfix: Interface for passing
tau_vals
tochi_constructor
(#36) - Added: function
above_value
for convergence check (#35)
- Added: Implementation of all the standard functionals
- Added: The
info_hook
receives additional information, including ∫gₐ(t)dt (#32) - Added: Initialization of objectives for gate optimization in Liouville space
- Added: A new propagator
DensityMatrixODEPropagator
for faster density matrix propagation - Added: Support for "stateful" propagators by subclassing from
krotov.propagators.Propagator
- Changed: more flexibility for parallelization (#29)
- Added: Support for the second-order pulse update
- Changed: The options for the controls (λₐ, update-shape) are now passed through a simplified
dict
interface, instead of a customPulseOptions
class.
- Initial release with complete implementation of first-order Krotov's method
- Support for state-to-state and gate optimization, for both closed and open systems