You can do that with Mixture.
You can specify one set of weights and Mixture will broadcast it to each observation or you can define one set of weights per observation. Pretty much like any other paramerers in PyMC distributions.
For example:
pm.Mixture(
"y",
w=[[0.9, 0.1], [0.1, 0.9]],
comp_dists=[pm.Normal.dist(-1), pm.Normal.dist(1)],
observed=[-1, 1],
)
Here I wrote the weights manually for each observation, just for illustration purposes. You can use advanced indexing, or concatenate the 2 kinds of weights. Or maybe another form that feels more natural to define your weights programmatically.
For you case, I would probably do something like:
import pytensor as pt
weights = pt.empty((len(y), 2)
weights = set_subtensor(weights[:t], [w1, 1-w1])
weights = set_subtensor(weights[t:], [w2, 1-w2])