# Some Julia utilities to link exports to Julia Ripserer package # Ripserer seems oriented towards Plots... using Logging using Base.CoreLogging using Printf using SparseArrays using Ripserer using PersistenceDiagrams using Plots using BSON logger = ConsoleLogger(stdout, Base.CoreLogging.Debug) global_logger(logger) """ This function reads a matrix in the triplet form i j val and returns a CSC SparseArrays. Correspond to data coming from a GraphProjection """ function cscmatLoad(fname) io = open(fname) I = Vector{Int64}() J = Vector{Int64}() V = Vector{Float64}() numline = 0 for line in eachline(io) numline += 1 sp = split(line, " ") if length(sp) != 3 @debug line, numline end # check we have 3 str # we add 1 to indexes to got 1 based indexation (we come from Rust) push!(I, 1+parse(Int64, sp[1])) push!(J, 1+parse(Int64, sp[2])) push!(V, parse(Float64, sp[3])) end cscmat = sparse(I,J,V) close(io) return cscmat end """ Reload a lower inferior matrix distance matrix from rust, in a Bson format Corresponds to local graph data """ function lowimatLoadBson(fname) bsonv = BSON.load(fname) v = bsonv[:limat] v = Vector{Float64}(v) # get back to matrix form size = sqrt(2 * length(v)) size = Int64(floor(size)) @debug "matrix size" size # now we get back to a Matrix for Ripserer distmat = zeros(Float64, size,size) rank = 1 for i=1:size for j=1:i distmat[i,j] = v[rank] distmat[j,i] = v[rank] rank += 1 end end return distmat end """ This function reloads the Bson matrix of distances dumped from Rust annembed::fromhnsw::kgproj It produces png files of persistence diagrams and barcodes corresponding to point cloud analyzed. dim_max is the maximum dimension for which homology is computed. """ function localPersistency(fname; dim_max = 1) # implicit use of GR! mat = lowimatLoadBson(fname) pers = ripserer(mat, dim_max = dim_max) persplot = Plots.plot(pers, markersize = 2) Plots.png(persplot, fname*"-pers") barplot = barcode(pers) Plots.png(barplot, fname*"-bar") end """ This function reloads the a csc matrix of distances dumped from Rust annembed::fromhnsw::kgproj It produces png files of persistence diagrams and barcodes corresponding to point cloud analyzed. dim_max is the maximum dimension for which homology is computed. """ function projectedPersistency(fname; dim_max = 1) mat = cscmatLoad(fname) pers = ripserer(mat, dim_max = dim_max) persplot = Plots.plot(pers, markersize = 2) Plots.png(persplot, fname*"-pers") barplot = barcode(pers) Plots.png(barplot, fname*"-bar") end