* Implementation of GiNaC's initially known functions. */
/*
- * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "matrix.h"
#include "mul.h"
#include "power.h"
+#include "operators.h"
#include "relational.h"
#include "pseries.h"
#include "symbol.h"
static ex abs_eval(const ex & arg)
{
- if (is_ex_exactly_of_type(arg, numeric))
+ if (is_exactly_a<numeric>(arg))
return abs(ex_to<numeric>(arg));
else
return abs(arg).hold();
static ex csgn_eval(const ex & arg)
{
- if (is_ex_exactly_of_type(arg, numeric))
+ if (is_exactly_a<numeric>(arg))
return csgn(ex_to<numeric>(arg));
- else if (is_ex_of_type(arg, mul) &&
- is_ex_of_type(arg.op(arg.nops()-1),numeric)) {
+ else if (is_exactly_a<mul>(arg) &&
+ is_exactly_a<numeric>(arg.op(arg.nops()-1))) {
numeric oc = ex_to<numeric>(arg.op(arg.nops()-1));
if (oc.is_real()) {
if (oc > 0)
seq.push_back(expair(Li2(x_pt), _ex0));
// compute the intermediate terms:
ex replarg = series(Li2(x), s==foo, order);
- for (unsigned i=1; i<replarg.nops()-1; ++i)
+ for (size_t i=1; i<replarg.nops()-1; ++i)
seq.push_back(expair((replarg.op(i)/power(s-foo,i)).series(foo==point,1,options).op(0).subs(foo==s),i));
// append an order term:
seq.push_back(expair(Order(_ex1), replarg.nops()-1));
static ex factorial_eval(const ex & x)
{
- if (is_ex_exactly_of_type(x, numeric))
+ if (is_exactly_a<numeric>(x))
return factorial(ex_to<numeric>(x));
else
return factorial(x).hold();
static ex binomial_eval(const ex & x, const ex &y)
{
- if (is_ex_exactly_of_type(x, numeric) && is_ex_exactly_of_type(y, numeric))
+ if (is_exactly_a<numeric>(x) && is_exactly_a<numeric>(y))
return binomial(ex_to<numeric>(x), ex_to<numeric>(y));
else
return binomial(x, y).hold();
static ex Order_eval(const ex & x)
{
- if (is_ex_exactly_of_type(x, numeric)) {
+ if (is_exactly_a<numeric>(x)) {
// O(c) -> O(1) or 0
if (!x.is_zero())
return Order(_ex1).hold();
else
return _ex0;
- } else if (is_ex_exactly_of_type(x, mul)) {
+ } else if (is_exactly_a<mul>(x)) {
const mul &m = ex_to<mul>(x);
// O(c*expr) -> O(expr)
- if (is_ex_exactly_of_type(m.op(m.nops() - 1), numeric))
+ if (is_exactly_a<numeric>(m.op(m.nops() - 1)))
return Order(x / m.op(m.nops() - 1)).hold();
}
return Order(x).hold();
{
// Just wrap the function into a pseries object
epvector new_seq;
- GINAC_ASSERT(is_exactly_a<symbol>(r.lhs()));
+ GINAC_ASSERT(is_a<symbol>(r.lhs()));
const symbol &s = ex_to<symbol>(r.lhs());
new_seq.push_back(expair(Order(_ex1), numeric(std::min(x.ldegree(s), order))));
return pseries(r, new_seq);
if (!eqns.info(info_flags::list)) {
throw(std::invalid_argument("lsolve(): 1st argument must be a list"));
}
- for (unsigned i=0; i<eqns.nops(); i++) {
+ for (size_t i=0; i<eqns.nops(); i++) {
if (!eqns.op(i).info(info_flags::relation_equal)) {
throw(std::invalid_argument("lsolve(): 1st argument must be a list of equations"));
}
if (!symbols.info(info_flags::list)) {
throw(std::invalid_argument("lsolve(): 2nd argument must be a list"));
}
- for (unsigned i=0; i<symbols.nops(); i++) {
+ for (size_t i=0; i<symbols.nops(); i++) {
if (!symbols.op(i).info(info_flags::symbol)) {
throw(std::invalid_argument("lsolve(): 2nd argument must be a list of symbols"));
}
matrix rhs(eqns.nops(),1);
matrix vars(symbols.nops(),1);
- for (unsigned r=0; r<eqns.nops(); r++) {
+ for (size_t r=0; r<eqns.nops(); r++) {
const ex eq = eqns.op(r).op(0)-eqns.op(r).op(1); // lhs-rhs==0
ex linpart = eq;
- for (unsigned c=0; c<symbols.nops(); c++) {
+ for (size_t c=0; c<symbols.nops(); c++) {
const ex co = eq.coeff(ex_to<symbol>(symbols.op(c)),1);
linpart -= co*symbols.op(c);
sys(r,c) = co;
}
// test if system is linear and fill vars matrix
- for (unsigned i=0; i<symbols.nops(); i++) {
+ for (size_t i=0; i<symbols.nops(); i++) {
vars(i,0) = symbols.op(i);
if (sys.has(symbols.op(i)))
throw(std::logic_error("lsolve: system is not linear"));
// return list of equations of the form lst(var1==sol1,var2==sol2,...)
lst sollist;
- for (unsigned i=0; i<symbols.nops(); i++)
+ for (size_t i=0; i<symbols.nops(); i++)
sollist.append(symbols.op(i)==solution(i,0));
return sollist;
/* Force inclusion of functions from inifcns_gamma and inifcns_zeta
* for static lib (so ginsh will see them). */
-unsigned force_include_tgamma = function_index_tgamma;
-unsigned force_include_zeta1 = function_index_zeta1;
+unsigned force_include_tgamma = tgamma_SERIAL::serial;
+unsigned force_include_zeta1 = zeta1_SERIAL::serial;
} // namespace GiNaC