qojulia / QuantumOpticsBase.jl

Base functionality library for QuantumOptics.jl
Other
64 stars 34 forks source link

`embed(::NotCompositeBasis, 1, operator)` #159

Open Krastanov opened 7 months ago

Krastanov commented 7 months ago

I have some generic code looking like this:

embed(SpinBasis(1//2)^n, i, gate)

that occasionally at runtime ends up being embed(SpinBasis(1//2), i, gate) which fails.

embed expects a composite basis and basis^1 autosimplifies to basis, so the generic code above fails.

We need a small stub distpatch for these "do not operation" edge cases.

a-eghrari commented 5 months ago

My first impression is a simple dispatch like embed(b::Basis, indices, ops) = ops is enough. Am I right?

Krastanov commented 5 months ago

Yes, but I am worried something as simple would cause surprises down the line. Having indices == 1 || indices == (1,) || indices == [1] with a clear error message would be safer.

Also, ops should probably be typed, to avoid type piracy against QuantumInterface.jl