Вектор пользовательской структуры в PyO3

Используя Мгновенный и Длительность из нового API Java 8,

Instant start = Instant.now();
Thread.sleep(5000);
Instant end = Instant.now();
System.out.println(Duration.between(start, end));

,

PT5S

0
задан kentwait 16 January 2019 в 16:57
поделиться

3 ответа

На какой версии PyO3 вы работаете? Ваш код работает для меня на 0.5.3 и 0.6.0-alpha.1.

Из-за этого я не могу проверить это, но я думаю, что вам нужно вернуть

0
ответ дан Chronial 16 January 2019 в 16:57
поделиться

FromPyObject предназначен для использования типами, которые могут быть извлечены из мира Python. Вот почему я думаю, что вы пытались написать fn to_blocks(list: Vec<Block>) -> Vec<i32> вместо fn to_blocks(list: Vec<i32>) -> Vec<Block>. Если это так, давайте перейдем к цепочке реализации.

FromPyObject имеет реализацию по умолчанию для any & amp; T, которая реализует PyTryFrom , а PyTryFrom имеет реализацию по умолчанию для любого T, который реализует PyTypeInfo . [pyclass] реализует PyObjectAlloc или PyObjectWithFreeList в соответствии с методом impl_class , и обе черты имеют ограниченную черту PyTypeInfo. Следовательно, ваш класс / структура будет отлично работать со ссылками, например :

#[pyfunction]
fn to_blocks(list: Vec<&Block>) -> Vec<i32>

Вы можете увидеть в официальной документации это объяснение в обобщенном виде.

FromPyObject реализован различными типами, которые могут быть извлечены из объекта Python , ссылка .

0
ответ дан Caio 16 January 2019 в 16:57
поделиться

Похоже, что атрибут pyfunction генерирует код, который требует, чтобы возвращаемый тип реализовывал черту FromPyObject. Хотя существует полная реализация FromPyObject for Vec<T> where T: FromPyObject, похоже, что код, сгенерированный для атрибута pyclass, не включает реализацию FromPyObject для вашего типа Block.

Так как я незнаком с PyO3, за исключением нескольких минут, которые я только посмотрел на его API-документацию, чтобы подтвердить этот ответ, я не уверен, как вам лучше получить FromPyObject реализацию - возможно, есть derive за это?

0
ответ дан djc 16 January 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: