function sym_poly = poly2sym(p, var)
    % POLY2SYM 将北太天元多项式系数向量转换为 sympy 符号多项式对象
    % 输入：
    %   p    - 多项式系数向量（降幂排列，如 [1 0 -2] 对应 x²-2）
    %   var  - 可选，符号变量（sympy.Symbol 类对象/字符型变量名），缺省为 'x'
    % 输出：
    %   sym_poly - sympy.Expr 类对象（符号多项式）
    
    % ===================== 步骤 1：初始化 sympy 环境 =====================
    py = pyroot();
    sp = sympy__sp();  % 复用 dsolve.m 的 sympy 环境初始化
    
    % ===================== 步骤 2：处理 var 缺省 & 类型适配 =====================
    if nargin < 2 || isempty(var)
        var = sym('x');  % 缺省变量为 x
    else
        if ischar(var)
            var = sym(var);  % 字符型变量名转 sympy.Symbol
        end
    end
    
    % ===================== 步骤 3：输入参数强校验 & 预处理 =====================
    % 1. 校验系数向量类型，强制转为一维数值数组
    if ~isnumeric(p)
        error('多项式系数 p 必须是数值型向量！');
    end
    p = reshape(p, 1, []);  % 强制转为行向量（解决二维/列向量问题）
    
    % 2. 校验符号变量类型
    if ~isa(var, 'sympy.Symbol')
        error('变量 var 必须是 sympy.Symbol 类对象或字符型变量名！');
    end
    
    % ===================== 步骤 4：智能系数转换（核心优化） =====================
    % 获取 sympy 类型用于判断
    sp_Rational = sp.Rational;
    sp_Integer = sp.Integer;
    
    % 构建 sympy 系数列表（保持原始类型）
    coeffs_py = pylist();
    for i = 1:length(p)
        coeff = p(i);
        
        % 智能判断系数类型并转换
        try
            % 检查是否为整数（允许浮点误差）
            if abs(coeff - round(coeff)) < 1e-10
                % 是整数，使用 sympy.Integer 保持精确整数形式
                coeff_sp = sp_Integer(int64(round(coeff)));
                
            % 检查是否为有限小数可表示的分数
            elseif isfinite(coeff)
                % 尝试用最简分数表示
                [num, den] = rat(coeff, 1e-10);  % 有理数近似
                
                % 如果分母为 1，说明实际是整数
                if den == 1
                    coeff_sp = sp_Integer(num);
                else
                    % 使用 sympy.Rational 保持精确分数形式
                    coeff_sp = sp_Rational(int64(num), int64(den));
                end
            else
                % 无穷大或 NaN，设为 0
                coeff_sp = sp_Integer(0);
            end
            
        catch
            % 异常处理：直接使用 Integer(0)
            coeff_sp = sp_Integer(0);
        end
        
        coeffs_py.append(coeff_sp);
    end
    
    % ===================== 步骤 5：构建 sympy 多项式 =====================
    var_sp = getObj(var);
    
    % 容错：空系数向量处理为 0
    if isempty(coeffs_py)
        poly_sp = sp.Integer(0);
    else
        % 使用 Poly 构造（系数已是最优 sympy 类型）
        poly_sp = sp.Poly(coeffs_py, var_sp);
    end
    
    % 转为表达式并封装为自定义类
    expr_sp = poly_sp.as_expr();
    sym_poly = sympy.Expr(expr_sp);
end