qojulia / QuantumCumulants.jl

Generalized mean-field equations in open quantum systems
Other
70 stars 13 forks source link

Typed parameters #199

Open david-pl opened 5 months ago

david-pl commented 5 months ago

The update to MTK v9 #197 required an overload of concrete_symtype to work:

MTK.concrete_symtype(::Symbolics.BasicSymbolic{T}) where T <: CNumber = ComplexF64

That isn't exactly great but should work for most use cases.

However, this now enables us to actually change the implementation of Parameter such that we can represent actual types. The whole parallel implementation for RealParameter could go and we can represent also e.g. 32-bit floats.

We'd just need to add another type parameter, something like

struct Parameter{T<:Number} <: CNumber
...
end

Then, changing the overload to something like

MTK.concrete_symtype(::Symbolics.BasicSymbolic{T}) where {S<:Number, T <: Parameter{S}} = S

could work.

This could be complemented by some syntactic sugar for the @cnumbers macro, basically just stealing the syntax from Symbolics, @cnumbers p::Float32...

david-pl commented 2 weeks ago

In the latest MTK update, concrete_symtype got removed again. Instead of using that, we could now finally think about getting rid of CNumbers altogether and just using a BasicSymbolic with appropriate symtype and set the parameter metadata.