sparse-ir-capi 0.8.4

C API for SparseIR Rust implementation
Documentation
### A Pluto.jl notebook ###
# v0.20.19

using Markdown
using InteractiveUtils

# ╔═╡ 241d9650-bf6c-11f0-a388-39fe8a039b7e
begin
	using SparseIR
	using Libdl: dlext
	# Load the shared library"
	const libpath = "../../target/debug/libsparse_ir_capi.$(dlext)"
end

# ╔═╡ 1758e5e0-1908-4b30-8e86-329f979b1e0e
pkgversion(SparseIR)

# ╔═╡ 6c6f6202-02a9-416b-ba6b-4f718a42bd5d
begin
	# Opaque type
	mutable struct spir_kernel end
	"""
	Create a Logistic kernel
	"""
	function kernel_logistic_new(lambda::Float64)
	    status = Ref{Int32}(0)
	    kernel = ccall(
	        (:spir_logistic_kernel_new, libpath),
	        Ptr{spir_kernel},
	        (Float64, Ref{Int32}),
	        lambda, status
	    )
	
	    if kernel == C_NULL
	        error("Failed to create kernel: status = $(status[])")
	    end
	
	    return kernel
	end
	
	kernel = kernel_logistic_new(10.0)
end

# ╔═╡ 25d100cd-bcc1-446e-a14d-79e1ee8ccb33
begin
	# Create basis
	status_basis = Ref{Int32}(0)
	basis = ccall(
	    (:spir_basis_new, libpath),
	    Ptr{Cvoid},
	    (Int32, Float64, Float64, Float64, Ptr{Cvoid}, Ptr{Cvoid}, Int32, Ref{Int32}),
	    1,      # Fermionic
	    10.0,   # beta
	    1.0,    # omega_max
	    1e-6,   # epsilon
	    kernel, # kernel
	    C_NULL, # sve (will compute)
	    -1,     # max_size
	    status_basis
	)
end

# ╔═╡ 2b548ca0-069f-478d-90b4-ad16e93497b8
begin
	status_v = Ref{Int32}(0)
	v_funcs = ccall(
	    (:spir_basis_get_v, libpath),
	    Ptr{Cvoid},
	    (Ptr{Cvoid}, Ref{Int32}),
	    basis, status_v
	)
end

# ╔═╡ 76f6ffb2-69ef-4c84-8dac-3e92e570b3fa
let
	status_uhat = Ref{Int32}(0)
	uhat_funcs = ccall(
	    (:spir_basis_get_uhat, libpath),
	    Ptr{Cvoid},
	    (Ptr{Cvoid}, Ptr{Int32}),
	    basis, status_uhat
	)
	println(status_uhat[])

	uhat_size = Ref{Int32}(0)
	ccall(
		(:spir_funcs_get_size, libpath),
		Cint,
		(Ptr{Cvoid}, Ptr{Cint}),
		uhat_funcs, uhat_size
	)
	uhat_size[]
end

# ╔═╡ bf89ff80-c6ab-4375-901d-3714229c6a60
let
	status_uhat_full = Ref{Int32}(0)
	uhat_full_funcs = ccall(
	    (:spir_basis_get_uhat_full, libpath),
	    Ptr{Cvoid},
	    (Ptr{Cvoid}, Ptr{Int32}),
	    basis, status_uhat_full
	)
	println(status_uhat_full[])

	uhat_full_size = Ref{Int32}(0)
	ccall(
		(:spir_funcs_get_size, libpath),
		Cint,
		(Ptr{Cvoid}, Ptr{Cint}),
		uhat_full_funcs, uhat_full_size
	)
	uhat_full_size[]
end

# ╔═╡ 91eeba52-05fc-4faf-b6c1-eb3d297a0e2b
length(FiniteTempBasis{Fermionic}(10.0, 1.0, 1e-6, kernel=LogisticKernel(10.)).uhat)

# ╔═╡ 071e7e32-c8f8-4046-9547-ac33cc475c7e
length(FiniteTempBasis{Fermionic}(10.0, 1.0, 1e-6, kernel=LogisticKernel(10.)).uhat_full)

# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
SparseIR = "4fe2279e-80f0-4adb-8463-ee114ff56b7d"

[compat]
SparseIR = "~1.1.4"
"""

# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised

julia_version = "1.12.1"
manifest_format = "2.0"
project_hash = "fd19f7878d1cb7e90ceefcc4e970689f20c76395"

[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
version = "1.11.0"

[[deps.Bessels]]
git-tree-sha1 = "4435559dc39793d53a9e3d278e185e920b4619ef"
uuid = "0e736298-9ec6-45e8-9647-e4fc86a2fe38"
version = "0.2.8"

[[deps.CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
version = "1.3.0+1"

[[deps.DataStructures]]
deps = ["OrderedCollections"]
git-tree-sha1 = "6c72198e6a101cccdd4c9731d3985e904ba26037"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.19.1"

[[deps.Dates]]
deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
version = "1.11.0"

[[deps.GenericLinearAlgebra]]
deps = ["LinearAlgebra", "Printf", "Random", "libblastrampoline_jll"]
git-tree-sha1 = "ad599869948d79efd63a030c970e2c6e21fecf4a"
uuid = "14197337-ba66-59df-a3e3-ca00e7dcff7a"
version = "0.3.17"

[[deps.Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
version = "1.11.0"

[[deps.LinearAlgebra]]
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
version = "1.12.0"

[[deps.MultiFloats]]
deps = ["LinearAlgebra", "Printf", "Random", "SIMD"]
git-tree-sha1 = "39ffa6286f40544ecea725d8031c615e79d88d45"
uuid = "bdf0d083-296b-4888-a5b6-7498122e68a5"
version = "2.3.0"

[[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
version = "0.3.29+0"

[[deps.OrderedCollections]]
git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.8.1"

[[deps.PrecompileTools]]
deps = ["Preferences"]
git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77"
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
version = "1.3.3"

[[deps.Preferences]]
deps = ["TOML"]
git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.5.0"

[[deps.Printf]]
deps = ["Unicode"]
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
version = "1.11.0"

[[deps.QuadGK]]
deps = ["DataStructures", "LinearAlgebra"]
git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284"
uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
version = "2.11.2"

    [deps.QuadGK.extensions]
    QuadGKEnzymeExt = "Enzyme"

    [deps.QuadGK.weakdeps]
    Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"

[[deps.Random]]
deps = ["SHA"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
version = "1.11.0"

[[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
version = "0.7.0"

[[deps.SIMD]]
deps = ["PrecompileTools"]
git-tree-sha1 = "fea870727142270bdf7624ad675901a1ee3b4c87"
uuid = "fdea26ae-647d-5447-a871-4b548cad5224"
version = "3.7.1"

[[deps.SparseIR]]
deps = ["Bessels", "GenericLinearAlgebra", "LinearAlgebra", "MultiFloats", "PrecompileTools", "QuadGK"]
git-tree-sha1 = "175036112d3e0ff85e967ae1919b33fefa0cb637"
uuid = "4fe2279e-80f0-4adb-8463-ee114ff56b7d"
version = "1.1.4"

[[deps.TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
version = "1.0.3"

[[deps.Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
version = "1.11.0"

[[deps.libblastrampoline_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
version = "5.15.0+0"
"""

# ╔═╡ Cell order:
# ╠═241d9650-bf6c-11f0-a388-39fe8a039b7e
# ╠═1758e5e0-1908-4b30-8e86-329f979b1e0e
# ╠═25d100cd-bcc1-446e-a14d-79e1ee8ccb33
# ╠═6c6f6202-02a9-416b-ba6b-4f718a42bd5d
# ╠═2b548ca0-069f-478d-90b4-ad16e93497b8
# ╠═76f6ffb2-69ef-4c84-8dac-3e92e570b3fa
# ╠═bf89ff80-c6ab-4375-901d-3714229c6a60
# ╠═91eeba52-05fc-4faf-b6c1-eb3d297a0e2b
# ╠═071e7e32-c8f8-4046-9547-ac33cc475c7e
# ╟─00000000-0000-0000-0000-000000000001
# ╟─00000000-0000-0000-0000-000000000002