go-python / go-python/gopy

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

オープン
#345 コメント 0 件 リアクション 1 件 担当者 0 名 GitHub で見る
主要言語
Go
スター
2.3k
フォーク
136
平均マージ
14分
マージ済み PR(30日)
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 はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。