Я пытаюсь добавить новый дискретный дистрибутив в 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 вызывается при создании экземпляра переменной при настройке модели ...