31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
|
from sympy.core.basic import Basic
|
||
|
from sympy.stats.rv import PSpace, _symbol_converter, RandomMatrixSymbol
|
||
|
|
||
|
class RandomMatrixPSpace(PSpace):
|
||
|
"""
|
||
|
Represents probability space for
|
||
|
random matrices. It contains the mechanics
|
||
|
for handling the API calls for random matrices.
|
||
|
"""
|
||
|
def __new__(cls, sym, model=None):
|
||
|
sym = _symbol_converter(sym)
|
||
|
if model:
|
||
|
return Basic.__new__(cls, sym, model)
|
||
|
else:
|
||
|
return Basic.__new__(cls, sym)
|
||
|
|
||
|
@property
|
||
|
def model(self):
|
||
|
try:
|
||
|
return self.args[1]
|
||
|
except IndexError:
|
||
|
return None
|
||
|
|
||
|
def compute_density(self, expr, *args):
|
||
|
rms = expr.atoms(RandomMatrixSymbol)
|
||
|
if len(rms) > 2 or (not isinstance(expr, RandomMatrixSymbol)):
|
||
|
raise NotImplementedError("Currently, no algorithm has been "
|
||
|
"implemented to handle general expressions containing "
|
||
|
"multiple random matrices.")
|
||
|
return self.model.density(expr)
|