Event shape is the shape of a single sample from an underlying distribution.
Batch shape is a set of independent draws from the underlying distribuiton.
Your first distribution object, `batch_bernoulli_dist`, has `batch_shape=[2], event_shape=[]`: it is two independent one-dimensional Poisson distributions. `tfd.Independent` turns batch dimensions into event dimensions. So `batch_bernoulli_dist_ind` has `batch_shape=[], event_shape[2]`. It is a single two-dimensional Poisson distribution (independent across the dimensions).
It is possible that you're wondering what the difference is. If all you're doing is sampling, there is no difference --- if you generate n samples from the same seed, the two objects will give you identical tensors with shape `[n, 2]`. The difference shows up when computing log probabilities: in the simplest case, `batch_bernoulli_dist.log_prob([3, 4]).shape == (2,)`, but `batch_bernoullid_dist_ind.log_prob([3, 4]).shape == ()`. The first object is computing log probs of two indepedent one-dimensional distributions, while the second is computing the log prob of a single two-dimensional distribution.
Hope this helps.
Best,
rif