How does Pyro perform operations with Random Variables?

In Pyro there is a new experimental container class: Random Variables.

Using Random Variables you can write something like this:

from pyro.distributions.torch import Normal

X = Normal(5, 1).rv
Y = Normal(20, 3).rv

Z = 3*X + Y

where X,Y,Z are distributions.

What is the mathematical foundation behind the ‘+’ operation between Random Variables? I can imagine that multiplying with a constant number is pretty trivial, but what about performing operations with an RV? For example, in Probability Theory we have the Circular Convolution.

Although I searched the documentation, I didn’t find anything useful. I am new to Pyro, and Python, but I got lost in the Pyro-pyTorch connection.

cc @physicswizard who wrote pyro.contrib.randomvariable.

thank you