# $Source: /u/maple/research/lib/DEtools/src/RCS/gen_exp,v $ # $Notify: hoeij@sci.kun.nl $ # The purpose of this file is to do the type checking and conversions # for `DEtools/diffop/gen_exp` macro( x=`DEtools/diffop/x`, DF=`DEtools/diffop/DF`, gen_exp=`DEtools/diffop/gen_exp` ): # Both for operator and equation syntax. # args[4..nargs] are options of the form x=point and such. `DEtools/gen_exp`:=proc(L,d,T) global x,DF; local a,p,rt,g; option `Copyright (c) 1997 Waterloo Maple Inc. All rights reserved.`; a:=[args]; if indets(a,radical)<>{} then a:=procname(op(subs(readlib(`radnormal/radfield2`)(a,'g'),a))); RETURN(subs(eval(g),a)) fi; if type(d,function) then RETURN(procname(readlib(`DEtools/de2diffop`)(L,d,[DF,op(d)]), [DF,op(d)],args[3..nargs])) elif not(type(d,list)) then if d=_Envdiffopdomain then ERROR(`differential algebra not specified`) else RETURN(procname(L,_Envdiffopdomain,args[2..nargs])) fi fi; if nargs<3 then ERROR(`wrong number of arguments`) fi; _Envdiffopdomain:=d; # for the userinfo's in diffop. a:=[args[4..nargs]]; p:=0; hasoption(a,d[2],'p','a'); # point is given by x=point rt:={}; # restrict_to = subset of {minimal,integer,ramification1,rational} hasoption(a,'restrict_to','rt','a'); g:=NULL; hasoption(a,'groundfield','g','a'); if a<>[] then ERROR(`wrong arguments`) fi; # Load the necessary code: readlib(`DEtools/diffop/readlibs`)(gen_exp): subs(x=`if`(p=infinity,1/d[2],d[2]-p),DF=T, gen_exp(subs(d[1]=DF,d[2]=x,L),p,DF,op(rt),g)) end: #savelib('`DEtools/gen_exp`','`DEtools/gen_exp.m`'):