Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
15 changes: 5 additions & 10 deletions .github/workflows/verification.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,6 @@ jobs:
repository: 'goplus/llcppg'
path: .llcppg
ref: ${{matrix.llcppg}}
- name: Check out LLPyg
uses: actions/checkout@v4
with:
repository: 'goplus/llgo'
path: .llpyg
ref: ${{matrix.llgo}}
- name: Set up Go
uses: actions/setup-go@v4
with:
Expand Down Expand Up @@ -82,12 +76,13 @@ jobs:
run: |
sudo apt install -y python3 python3-pip
python3 -m pip install --upgrade pip
python3 -m pip install conan pydump pysigfetch
python3 -m pip install conan pydump
go install github.com/goplus/hdq/chore/pysigfetch@v0.8.1
- name: Pre setup Python and Conan
if: startsWith(matrix.os, 'macos')
run: |
python3 -m pip install --upgrade pip --break-system-packages
python3 -m pip install conan pydump pysigfetch --break-system-packages
python3 -m pip install conan pydump --break-system-packages
go install github.com/goplus/hdq/chore/pysigfetch@v0.8.1
- name: Set up Conan
run: |
conan profile detect
Expand Down Expand Up @@ -138,4 +133,4 @@ jobs:
- name: Run demotest process
env:
LLPKG_PATH: ${{ env.LLPKG_PATH }}
run: llpkgstore demotest
run: llpkgstore demotest
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
276 changes: 276 additions & 0 deletions math/math.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,276 @@
package math

import (
"github.com/goplus/lib/py"
_ "unsafe"
)

const LLGoPackage = "py.math"
// Return the arc cosine (measured in radians) of x.
//
// The result is between 0 and pi.
//
//go:linkname Acos py.acos
func Acos(x *py.Object) *py.Object
// Return the inverse hyperbolic cosine of x.
//
//go:linkname Acosh py.acosh
func Acosh(x *py.Object) *py.Object
// Return the arc sine (measured in radians) of x.
//
// The result is between -pi/2 and pi/2.
//
//go:linkname Asin py.asin
func Asin(x *py.Object) *py.Object
// Return the inverse hyperbolic sine of x.
//
//go:linkname Asinh py.asinh
func Asinh(x *py.Object) *py.Object
// Return the arc tangent (measured in radians) of x.
//
// The result is between -pi/2 and pi/2.
//
//go:linkname Atan py.atan
func Atan(x *py.Object) *py.Object
// Return the arc tangent (measured in radians) of y/x.
//
// Unlike atan(y/x), the signs of both x and y are considered.
//
//go:linkname Atan2 py.atan2
func Atan2(y *py.Object, x *py.Object) *py.Object
// Return the inverse hyperbolic tangent of x.
//
//go:linkname Atanh py.atanh
func Atanh(x *py.Object) *py.Object
// Return the cube root of x.
//
//go:linkname Cbrt py.cbrt
func Cbrt(x *py.Object) *py.Object
// Return the ceiling of x as an Integral.
//
// This is the smallest integer >= x.
//
//go:linkname Ceil py.ceil
func Ceil(x *py.Object) *py.Object
// Return a float with the magnitude (absolute value) of x but the sign of y.
//
// On platforms that support signed zeros, copysign(1.0, -0.0)
// returns -1.0.
//
//
//go:linkname Copysign py.copysign
func Copysign(x *py.Object, y *py.Object) *py.Object
// Return the cosine of x (measured in radians).
//
//go:linkname Cos py.cos
func Cos(x *py.Object) *py.Object
// Return the hyperbolic cosine of x.
//
//go:linkname Cosh py.cosh
func Cosh(x *py.Object) *py.Object
// Convert angle x from radians to degrees.
//
//go:linkname Degrees py.degrees
func Degrees(x *py.Object) *py.Object
// Return the Euclidean distance between two points p and q.
//
// The points should be specified as sequences (or iterables) of
// coordinates. Both inputs must have the same dimension.
//
// Roughly equivalent to:
// sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))
//
//go:linkname Dist py.dist
func Dist(p *py.Object, q *py.Object) *py.Object
// Error function at x.
//
//go:linkname Erf py.erf
func Erf(x *py.Object) *py.Object
// Complementary error function at x.
//
//go:linkname Erfc py.erfc
func Erfc(x *py.Object) *py.Object
// Return e raised to the power of x.
//
//go:linkname Exp py.exp
func Exp(x *py.Object) *py.Object
// Return 2 raised to the power of x.
//
//go:linkname Exp2 py.exp2
func Exp2(x *py.Object) *py.Object
// Return exp(x)-1.
//
// This function avoids the loss of precision involved in the direct evaluation of exp(x)-1 for small x.
//
//go:linkname Expm1 py.expm1
func Expm1(x *py.Object) *py.Object
// Return the absolute value of the float x.
//
//go:linkname Fabs py.fabs
func Fabs(x *py.Object) *py.Object
// Find n!.
//
// Raise a ValueError if x is negative or non-integral.
//
//go:linkname Factorial py.factorial
func Factorial(n *py.Object) *py.Object
// Return the floor of x as an Integral.
//
// This is the largest integer <= x.
//
//go:linkname Floor py.floor
func Floor(x *py.Object) *py.Object
// Return fmod(x, y), according to platform C.
//
// x % y may differ.
//
//go:linkname Fmod py.fmod
func Fmod(x *py.Object, y *py.Object) *py.Object
// Return the mantissa and exponent of x, as pair (m, e).
//
// m is a float and e is an int, such that x = m * 2.**e.
// If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0.
//
//go:linkname Frexp py.frexp
func Frexp(x *py.Object) *py.Object
// Return an accurate floating-point sum of values in the iterable seq.
//
// Assumes IEEE-754 floating-point arithmetic.
//
//go:linkname Fsum py.fsum
func Fsum(seq *py.Object) *py.Object
// Gamma function at x.
//
//go:linkname Gamma py.gamma
func Gamma(x *py.Object) *py.Object
// Greatest Common Divisor.
//
//go:linkname Gcd py.gcd
func Gcd(__llgo_va_list ...interface{}) *py.Object
// Return x * (2**i).
//
// This is essentially the inverse of frexp().
//
//go:linkname Ldexp py.ldexp
func Ldexp(x *py.Object, i *py.Object) *py.Object
// Natural logarithm of absolute value of Gamma function at x.
//
//go:linkname Lgamma py.lgamma
func Lgamma(x *py.Object) *py.Object
// Return the base 10 logarithm of x.
//
//go:linkname Log10 py.log10
func Log10(x *py.Object) *py.Object
// Return the base 2 logarithm of x.
//
//go:linkname Log2 py.log2
func Log2(x *py.Object) *py.Object
// Return the fractional and integer parts of x.
//
// Both results carry the sign of x and are floats.
//
//go:linkname Modf py.modf
func Modf(x *py.Object) *py.Object
// Return x**y (x to the power of y).
//
//go:linkname Pow py.pow
func Pow(x *py.Object, y *py.Object) *py.Object
// Convert angle x from degrees to radians.
//
//go:linkname Radians py.radians
func Radians(x *py.Object) *py.Object
// Difference between x and the closest integer multiple of y.
//
// Return x - n*y where n*y is the closest integer multiple of y.
// In the case where x is exactly halfway between two multiples of
// y, the nearest even value of n is used. The result is always exact.
//
//go:linkname Remainder py.remainder
func Remainder(x *py.Object, y *py.Object) *py.Object
// Return the sine of x (measured in radians).
//
//go:linkname Sin py.sin
func Sin(x *py.Object) *py.Object
// Return the hyperbolic sine of x.
//
//go:linkname Sinh py.sinh
func Sinh(x *py.Object) *py.Object
// Return the square root of x.
//
//go:linkname Sqrt py.sqrt
func Sqrt(x *py.Object) *py.Object
// Return the tangent of x (measured in radians).
//
//go:linkname Tan py.tan
func Tan(x *py.Object) *py.Object
// Return the hyperbolic tangent of x.
//
//go:linkname Tanh py.tanh
func Tanh(x *py.Object) *py.Object
// Return the sum of products of values from two iterables p and q.
//
// Roughly equivalent to:
//
// sum(itertools.starmap(operator.mul, zip(p, q, strict=True)))
//
// For float and mixed int/float inputs, the intermediate products
// and sums are computed with extended precision.
//
//go:linkname Sumprod py.sumprod
func Sumprod(p *py.Object, q *py.Object) *py.Object
// Truncates the Real x to the nearest Integral toward 0.
//
// Uses the __trunc__ magic method.
//
//go:linkname Trunc py.trunc
func Trunc(x *py.Object) *py.Object
// Calculate the product of all the elements in the input iterable.
//
// The default start value for the product is 1.
//
// When the iterable is empty, return the start value. This function is
// intended specifically for use with numeric values and may reject
// non-numeric types.
//
//go:linkname Prod py.prod
func Prod(iterable *py.Object) *py.Object
// Number of ways to choose k items from n items without repetition and with order.
//
// Evaluates to n! / (n - k)! when k <= n and evaluates
// to zero when k > n.
//
// If k is not specified or is None, then k defaults to n
// and the function returns n!.
//
// Raises TypeError if either of the arguments are not integers.
// Raises ValueError if either of the arguments are negative.
//
//go:linkname Perm py.perm
func Perm(n *py.Object, k *py.Object) *py.Object
// Number of ways to choose k items from n items without repetition and without order.
//
// Evaluates to n! / (k! * (n - k)!) when k <= n and evaluates
// to zero when k > n.
//
// Also called the binomial coefficient because it is equivalent
// to the coefficient of k-th term in polynomial expansion of the
// expression (1 + x)**n.
//
// Raises TypeError if either of the arguments are not integers.
// Raises ValueError if either of the arguments are negative.
//
//go:linkname Comb py.comb
func Comb(n *py.Object, k *py.Object) *py.Object
// Return the floating-point value the given number of steps after x towards y.
//
// If steps is not specified or is None, it defaults to 1.
//
// Raises a TypeError, if x or y is not a double, or if steps is not an integer.
// Raises ValueError if steps is negative.
//
//go:linkname Nextafter py.nextafter
func Nextafter(x *py.Object, y *py.Object) *py.Object
// Return the value of the least significant bit of the float x.
//
//go:linkname Ulp py.ulp
func Ulp(x *py.Object) *py.Object
2 changes: 1 addition & 1 deletion math3/math_autogen_link.go → math/math_autogen_link.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ package math

import _ "github.com/goplus/lib/py"

const LLGoPackage string = "py.math"
// LLGoPackage is defined in the main binding file
10 changes: 10 additions & 0 deletions math4/_demo/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module test_math3

go 1.24.5

replace github.com/goplus/llpkg/math => ../

require (
github.com/goplus/lib v0.2.0
github.com/goplus/llpkg/math v0.0.0-00010101000000-000000000000
)
2 changes: 2 additions & 0 deletions math4/_demo/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/goplus/lib v0.2.0 h1:AjqkN1XK5H23wZMMlpaUYAMCDAdSBQ2NMFrLtSh7W4g=
github.com/goplus/lib v0.2.0/go.mod h1:SgJv3oPqLLHCu0gcL46ejOP3x7/2ry2Jtxu7ta32kp0=
29 changes: 29 additions & 0 deletions math4/_demo/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package main

import (
"github.com/goplus/lib/py"
"github.com/goplus/lib/py/std"
"github.com/goplus/llpkg/math"
)

func main() {
// 初始化 Python
py.Initialize()
defer py.Finalize()

// 测试 math.Sqrt
result1 := math.Sqrt(py.Float(4.0))
std.Print(py.Str("sqrt(4) = "), result1)

// 测试 math.Cos
result2 := math.Cos(py.Float(0.0))
std.Print(py.Str("cos(0) = "), result2)

// 测试 math.Pow
result3 := math.Pow(py.Float(2.0), py.Float(3.0))
std.Print(py.Str("2^3 = "), result3)

// 测试 math.Sin
result4 := math.Sin(py.Float(1.57)) // 接近 pi/2
std.Print(py.Str("sin(1.57) = "), result4)
}
5 changes: 5 additions & 0 deletions math4/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module github.com/goplus/llpkg/math

go 1.23

require github.com/goplus/lib v0.2.0
16 changes: 16 additions & 0 deletions math4/llpkg.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"type": "python",
"upstream": {
"installer": {
"name": "pip",
"config": {
"python_version": "3.12",
"index_url": "https://pypi.org/simple/"
}
},
"package": {
"name": "math",
"version": "builtin"
}
}
}
Loading
Loading