go-python / go-python/gopy

Methods with two outputs are expected to return an error, methods aren't visible from python

未关闭
#345 0 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Go
星标
2.3k
派生
136
平均合并
14 分钟
30 天内合并 PR
2

描述

Hi, I'm trying to build this project, https://github.com/holiman/uint256, but I've run into multiple issues:

Suppose we have a function with multiple outputs: `func (z *Int) AddOverflow(x, y *Int) (*Int, bool)`, bind expects second argument to be an `error` and outputs the following `gopy: second result value must be of type error`.

To reproduce, minimized testcase:
```go
package uint256

import (
"math/bits"
)

type Int [4]uint64

func NewInt(val uint64) *Int {
z := &Int{}
z.SetUint64(val)
return z
}

func (z *Int) SetUint64(x uint64) *Int {
z[3], z[2], z[1], z[0] = 0, 0, 0, x
return z
}

func (z *Int) AddOverflow(x, y *Int) (*Int, bool) {
var carry uint64
z[0], carry = bits.Add64(x[0], y[0], 0)
z[1], carry = bits.Add64(x[1], y[1], carry)
z[2], carry = bits.Add64(x[2], y[2], carry)
z[3], carry = bits.Add64(x[3], y[3], carry)
return z, carry != 0
}
```

The second issue I'm having is that after compiling the project, public methods of type `Int` aren't exposed to Python, e.g. the following code won't run:
```python
from uint256_py import uint256

x, y, z = uint256.NewInt(123), uint256.NewInt(456), uint256.NewInt(0)
z.Add(x, y) # doesn't work, method isn't visible
```

I suspect this has something to do with `Int` being represented as an array `[4]uint64`.
Versions I'm using: Go 1.21.3 & Python 3.11.5

It seemed related to #315, so I've run this in docker with Go 1.19.5 & Python3.10.12 but the issue persisted.

Thank you.

贡献指南

这个仓库没有索引到贡献指南

调研方向

从 issue 中所示的最小化 Go 包以及生成的 Python import 和方法调用开始。检查 gopy 对多个返回值和基于数组的类型上的方法的处理方式;当 testcase 绑定 (*Int, bool) 结果并向 Python 暴露 Int 方法时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
go, python
领域
developer-experience, tooling
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
32/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。