History¶
1.2.1 (2021-01-13)¶
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)
1.2.0 (2020-08-17)¶
Added:
via_midpoints
argument tokrotov.conversions.discretize
functionChanged: 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.
1.1.0 (2020-03-24)¶
Added: Support for Python 3.8
Added: Support for QuTiP 4.5.0
Added:
krotov.parallelization.set_parallelization
functionAdded:
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
1.0.0 (2019-12-16)¶
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)
0.5.0 (2019-12-04)¶
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)
0.4.1 (2019-10-11)¶
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)
0.4.0 (2019-10-08)¶
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 methodAdded: 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.
0.3.0 (2019-03-01)¶
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-hookAdded: 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)
0.2.0 (2019-02-14)¶
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 propagationAdded: 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.
0.1.0 (2018-12-24)¶
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