Skip to content

Commit 5d6d4a7

Browse files
committed
refactor: remove dead code from wrapper.jl
Remove 16 unused functions: calculus wrappers (_giac_diff, _giac_integrate, _giac_limit, _giac_series), algebra wrappers (_giac_factor, _giac_expand, _giac_simplify, _giac_solve), standalone matrix ops (_giac_det, _giac_inv_matrix, _giac_trace), and helpers (_giac_create_context, _find_giac_library, _type_code_to_symbol, _apply_func_generic). These were superseded by Giac.Commands which uses giac_eval strings. Improves code coverage from 70% to 75%.
1 parent efca321 commit 5d6d4a7

1 file changed

Lines changed: 0 additions & 223 deletions

File tree

src/wrapper.jl

Lines changed: 0 additions & 223 deletions
Original file line numberDiff line numberDiff line change
@@ -73,23 +73,6 @@ const _giac_lib_handle = Ref{Ptr{Cvoid}}(C_NULL)
7373
const _cxxwrap_lib_handle = Ref{Ptr{Cvoid}}(C_NULL)
7474
const _wrapper_lib_handle = Ref{Ptr{Cvoid}}(C_NULL)
7575

76-
# Find libgiac given a wrapper path
77-
function _find_giac_library(wrapper_path::String)
78-
wrapper_dir = dirname(wrapper_path)
79-
for giac_name in ["libgiac.so", "libgiac.so.0", "libgiac.so.1", "libgiac.dylib"]
80-
for parent in [wrapper_dir, dirname(wrapper_dir), dirname(dirname(wrapper_dir))]
81-
# Check GIAC 2.0.0 location first, then fallback locations
82-
for subdir in ["", "lib", "../giac-2.0.0/src/.libs", "build_julia", "../giac/build_julia"]
83-
test_path = joinpath(parent, subdir, giac_name)
84-
if isfile(test_path)
85-
return test_path
86-
end
87-
end
88-
end
89-
end
90-
return "libgiac.so" # Fall back to system search
91-
end
92-
9376
# CxxWrap module for GIAC bindings
9477
# The @wrapmodule macro must be called at compile time, so we need the library
9578
# path available then via environment variable.
@@ -332,13 +315,6 @@ function _giac_free_expr(ptr::Ptr{Cvoid})
332315
nothing
333316
end
334317

335-
function _giac_create_context()::Ptr{Cvoid}
336-
# Always return a stub pointer for now
337-
# The real context is managed by CxxWrap's GiacContext type
338-
# TODO: integrate properly with CxxWrap context
339-
return Ptr{Cvoid}(1)
340-
end
341-
342318
function _giac_free_context(ptr::Ptr{Cvoid})
343319
if ptr == C_NULL
344320
return
@@ -366,28 +342,6 @@ function _giac_expr_type(ptr::Ptr{Cvoid})::Symbol
366342
end
367343
end
368344

369-
function _type_code_to_symbol(code::Cint)::Symbol
370-
if code == 0
371-
return :integer
372-
elseif code == 1
373-
return :float
374-
elseif code == 2
375-
return :complex
376-
elseif code == 3
377-
return :rational
378-
elseif code == 4
379-
return :infinity
380-
elseif code == 5
381-
return :undefined
382-
elseif code == 6
383-
return :vector
384-
elseif code == 7
385-
return :matrix
386-
else
387-
return :symbolic
388-
end
389-
end
390-
391345
function _giac_to_int64(ptr::Ptr{Cvoid})::Int64
392346
expr_str = _giac_expr_to_string(ptr)
393347
# Handle GIAC boolean representations
@@ -480,82 +434,6 @@ function _giac_free_matrix(ptr::Ptr{Cvoid})
480434
nothing
481435
end
482436

483-
# ============================================================================
484-
# Calculus operations - use string-based GIAC evaluation
485-
# ============================================================================
486-
487-
function _giac_diff(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, n::Int, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
488-
expr_str = _giac_expr_to_string(expr_ptr)
489-
var_str = _giac_expr_to_string(var_ptr)
490-
giac_cmd = n == 1 ? "diff($expr_str, $var_str)" : "diff($expr_str, $var_str, $n)"
491-
return _giac_eval_string(giac_cmd, ctx_ptr)
492-
end
493-
494-
function _giac_integrate(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
495-
expr_str = _giac_expr_to_string(expr_ptr)
496-
var_str = _giac_expr_to_string(var_ptr)
497-
return _giac_eval_string("integrate($expr_str, $var_str)", ctx_ptr)
498-
end
499-
500-
function _giac_integrate_definite(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid},
501-
a_ptr::Ptr{Cvoid}, b_ptr::Ptr{Cvoid},
502-
ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
503-
expr_str = _giac_expr_to_string(expr_ptr)
504-
var_str = _giac_expr_to_string(var_ptr)
505-
a_str = _giac_expr_to_string(a_ptr)
506-
b_str = _giac_expr_to_string(b_ptr)
507-
return _giac_eval_string("integrate($expr_str, $var_str, $a_str, $b_str)", ctx_ptr)
508-
end
509-
510-
function _giac_limit(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, point_ptr::Ptr{Cvoid},
511-
dir::Int, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
512-
expr_str = _giac_expr_to_string(expr_ptr)
513-
var_str = _giac_expr_to_string(var_ptr)
514-
point_str = _giac_expr_to_string(point_ptr)
515-
# dir: -1 = left, 0 = both, 1 = right
516-
giac_cmd = if dir == -1
517-
"limit($expr_str, $var_str, $point_str, -1)"
518-
elseif dir == 1
519-
"limit($expr_str, $var_str, $point_str, 1)"
520-
else
521-
"limit($expr_str, $var_str, $point_str)"
522-
end
523-
return _giac_eval_string(giac_cmd, ctx_ptr)
524-
end
525-
526-
function _giac_series(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, point_ptr::Ptr{Cvoid},
527-
order::Int, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
528-
expr_str = _giac_expr_to_string(expr_ptr)
529-
var_str = _giac_expr_to_string(var_ptr)
530-
point_str = _giac_expr_to_string(point_ptr)
531-
return _giac_eval_string("series($expr_str, $var_str=$point_str, $order)", ctx_ptr)
532-
end
533-
534-
# ============================================================================
535-
# Algebra operations - use string-based GIAC evaluation
536-
# ============================================================================
537-
538-
function _giac_factor(expr_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
539-
expr_str = _giac_expr_to_string(expr_ptr)
540-
return _giac_eval_string("factor($expr_str)", ctx_ptr)
541-
end
542-
543-
function _giac_expand(expr_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
544-
expr_str = _giac_expr_to_string(expr_ptr)
545-
return _giac_eval_string("expand($expr_str)", ctx_ptr)
546-
end
547-
548-
function _giac_simplify(expr_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
549-
expr_str = _giac_expr_to_string(expr_ptr)
550-
return _giac_eval_string("simplify($expr_str)", ctx_ptr)
551-
end
552-
553-
function _giac_solve(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
554-
expr_str = _giac_expr_to_string(expr_ptr)
555-
var_str = _giac_expr_to_string(var_ptr)
556-
return _giac_eval_string("solve($expr_str, $var_str)", ctx_ptr)
557-
end
558-
559437
function _giac_gcd(a_ptr::Ptr{Cvoid}, b_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
560438
a_str = _giac_expr_to_string(a_ptr)
561439
b_str = _giac_expr_to_string(b_ptr)
@@ -614,21 +492,6 @@ end
614492
# Matrix operations - use string-based GIAC evaluation
615493
# ============================================================================
616494

617-
function _giac_det(m_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
618-
m_str = _giac_expr_to_string(m_ptr)
619-
return _giac_eval_string("det($m_str)", ctx_ptr)
620-
end
621-
622-
function _giac_inv_matrix(m_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
623-
m_str = _giac_expr_to_string(m_ptr)
624-
return _giac_eval_string("inv($m_str)", ctx_ptr)
625-
end
626-
627-
function _giac_trace(m_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
628-
m_str = _giac_expr_to_string(m_ptr)
629-
return _giac_eval_string("trace($m_str)", ctx_ptr)
630-
end
631-
632495
function _giac_matrix_mul(a_ptr::Ptr{Cvoid}, b_ptr::Ptr{Cvoid}, ctx_ptr::Ptr{Cvoid})::Ptr{Cvoid}
633496
a_str = _giac_expr_to_string(a_ptr)
634497
b_str = _giac_expr_to_string(b_ptr)
@@ -684,48 +547,6 @@ function _giac_matrix_getindex(ptr::Ptr{Cvoid}, i::Int, j::Int)::Ptr{Cvoid}
684547
return _giac_eval_string("($m_str)[$i][$j]", C_NULL)
685548
end
686549

687-
# ============================================================================
688-
# Simplified wrappers that use DEFAULT_CONTEXT
689-
# These are convenience functions used by api.jl and operators.jl
690-
# ============================================================================
691-
692-
function _giac_diff(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, n::Int)::Ptr{Cvoid}
693-
return _giac_diff(expr_ptr, var_ptr, n, DEFAULT_CONTEXT[].ptr)
694-
end
695-
696-
function _giac_integrate(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid})::Ptr{Cvoid}
697-
return _giac_integrate(expr_ptr, var_ptr, DEFAULT_CONTEXT[].ptr)
698-
end
699-
700-
function _giac_integrate_definite(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid},
701-
a_ptr::Ptr{Cvoid}, b_ptr::Ptr{Cvoid})::Ptr{Cvoid}
702-
return _giac_integrate_definite(expr_ptr, var_ptr, a_ptr, b_ptr, DEFAULT_CONTEXT[].ptr)
703-
end
704-
705-
function _giac_limit(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, point_ptr::Ptr{Cvoid}, dir::Int)::Ptr{Cvoid}
706-
return _giac_limit(expr_ptr, var_ptr, point_ptr, dir, DEFAULT_CONTEXT[].ptr)
707-
end
708-
709-
function _giac_series(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid}, point_ptr::Ptr{Cvoid}, order::Int)::Ptr{Cvoid}
710-
return _giac_series(expr_ptr, var_ptr, point_ptr, order, DEFAULT_CONTEXT[].ptr)
711-
end
712-
713-
function _giac_factor(expr_ptr::Ptr{Cvoid})::Ptr{Cvoid}
714-
return _giac_factor(expr_ptr, DEFAULT_CONTEXT[].ptr)
715-
end
716-
717-
function _giac_expand(expr_ptr::Ptr{Cvoid})::Ptr{Cvoid}
718-
return _giac_expand(expr_ptr, DEFAULT_CONTEXT[].ptr)
719-
end
720-
721-
function _giac_simplify(expr_ptr::Ptr{Cvoid})::Ptr{Cvoid}
722-
return _giac_simplify(expr_ptr, DEFAULT_CONTEXT[].ptr)
723-
end
724-
725-
function _giac_solve(expr_ptr::Ptr{Cvoid}, var_ptr::Ptr{Cvoid})::Ptr{Cvoid}
726-
return _giac_solve(expr_ptr, var_ptr, DEFAULT_CONTEXT[].ptr)
727-
end
728-
729550
function _giac_gcd(a_ptr::Ptr{Cvoid}, b_ptr::Ptr{Cvoid})::Ptr{Cvoid}
730551
return _giac_gcd(a_ptr, b_ptr, DEFAULT_CONTEXT[].ptr)
731552
end
@@ -794,50 +615,6 @@ function _giac_create_matrix(expr::String, rows::Int, cols::Int)::Ptr{Cvoid}
794615
return _giac_create_matrix(expr, rows, cols, DEFAULT_CONTEXT[].ptr)
795616
end
796617

797-
# ============================================================================
798-
# Generic Dispatch via C++ apply_func (Tier 2)
799-
# These use the new C++ apply_func* functions for better performance than
800-
# string concatenation and evaluation.
801-
# ============================================================================
802-
803-
"""
804-
_apply_func_generic(name::String, args::Vector{String}) -> Ptr{Cvoid}
805-
806-
Call a GIAC function by name using the C++ generic dispatch mechanism.
807-
Falls back to string evaluation if the Gen-based approach fails.
808-
"""
809-
function _apply_func_generic(name::String, args::Vector{String})::Ptr{Cvoid}
810-
try
811-
# Convert string args to Gen objects
812-
gen_args = [GiacCxxBindings.giac_eval(arg) for arg in args]
813-
814-
# Call appropriate apply_func based on arity
815-
result_gen = if length(gen_args) == 0
816-
GiacCxxBindings.apply_func0(name)
817-
elseif length(gen_args) == 1
818-
GiacCxxBindings.apply_func1(name, gen_args[1])
819-
elseif length(gen_args) == 2
820-
GiacCxxBindings.apply_func2(name, gen_args[1], gen_args[2])
821-
elseif length(gen_args) == 3
822-
GiacCxxBindings.apply_func3(name, gen_args[1], gen_args[2], gen_args[3])
823-
else
824-
# N>3 args: use apply_funcN with StdVector
825-
std_vec = GiacCxxBindings.StdVector{GiacCxxBindings.Gen}()
826-
for g in gen_args
827-
push!(std_vec, g)
828-
end
829-
GiacCxxBindings.apply_funcN(name, std_vec)
830-
end
831-
832-
return _make_gen_ptr(result_gen)
833-
catch e
834-
# Fall back to string evaluation on error
835-
@debug "apply_func failed, falling back to string eval: $e"
836-
cmd_string = name * "(" * join(args, ",") * ")"
837-
return _giac_eval_string(cmd_string, C_NULL)
838-
end
839-
end
840-
841618
# ============================================================================
842619
# Tier 1 High-Performance Wrappers
843620
# These use the direct C++ Tier 1 functions (no name lookup overhead)

0 commit comments

Comments
 (0)