Проблема с типом FreeRV при добавлении нового дистрибутива - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь добавить новый дискретный дистрибутив в PyMC3 (нецентральный гипергеометрический Wallenius), обернув его версией Agner Fogs c ++ (https://www.agner.org/random/).

Я успешно поместил соответствующие функции в расширение c ++ и добавил широковещательную рассылку, чтобы она работала как распределение scipy. (На данный момент вещание выполняется на Python. .. позже попробуем привязки xtensor-python для более производительной векторизации в c ++.)

Я сталкиваюсь со следующей проблемой: когда я создаю экземпляр RV нового дистрибутива в контексте модели, я получаю «TypeError: требуется целое число (получило тип FreeRV)», откуда «value» передан функции logp () нового дистрибутива.

Я понимаю, что PyMC3, возможно, потребуется подключить RV к функциям, но я не нахожу способа превратить их во что-то, с чем могут работать мои новые функции.

Любые советы о том, как решить эту или общую информацию о добавлении новых дистрибутивов в PyMC3 или о внутренней работе дистрибутивов, будут чрезвычайно полезны.

Заранее спасибо! Jan

РЕДАКТИРОВАТЬ: я заметил, что FreeRV наследует от theanos TensorVariable, поэтому я попытался вызвать .eval (). Это приводит к другой ошибке в том, что вход не подключен. (У меня нет точного сообщения об ошибке прямо сейчас). Одна вещь, которая озадачивает меня, - почему logp вызывается при создании экземпляра переменной при настройке модели ...

...