Mon Dec 12 15:38:56 1988  John Harper  (harper at manitou.astro)

	* problem with det and multiplier not being able to (as
	advertised) SIMP the value in place by using a second arg of T.
	(if you use t, that gets put in, T causes a seg violation). So this
	is removed (from RESIMPSCALAR). If you want to do it in place, do
	something like det(g,sub(det(g))); makes more sense.

        Also need a way to allow det to reexamine the object in case it
	has changed. Only way now is to remove the det with 
	PUT('g,'DET,'NIL); 

Tue Dec  6 19:36:26 1988  John Harper  (harper at manitou.astro)

	* COPY was forgetting to set the lisp value of the output object
	to itself to autoquote the name.

Wed Nov  9 15:44:55 1988  John Harper  (harper at manitou.astro)

	* small bug in EQUALPARSE where we (did) check IDP (CADR EX1) to
	see if a valid left-hand-side was there. This can be true
	with statements like sin(x)[] which are wrong but not
	caught. Why not just use CHECKTYPE here?? This should be fixed in
	mutensor too.

Tue Nov  8 12:41:10 1988  John Harper  (harper at manitou.astro)

	* brought redten up to level of mutensor, with fixes to various
	functions to give scalar objects a more uniform treatment in the
	system. at v2.65 (eesh what a pain!). riccisc and frriccisc are no
	longer scalar objects.

Mon Oct 31 14:21:10 1988  John Harper  (harper at manitou.astro)

	* added !*USEGETCONSYM switch to conprod so user can turn off this
	code if we find another bug in it.

Sun Oct 30 21:57:52 1988  John Harper  (harper at manitou.astro)

	* fixed MAKEDIFSYM which was producing a symlist even when there
	was only 1 derivative index to work with. Made things like q[|a]
	come out wrong since it flipped the a and | (q is scalar).

	* COV checks that its arg is indexed.

Mon Aug  1 16:09:53 1988  John Harper  (harper at manitou)

	* bad conditional in NDIFF1 when checking if a temp is needed. had
	not (multip.... > multip...) which meant that things like
	p[a]==df(k[a],t,r) made a temp (really rude). 2.64
 
Sat Jul 30 15:49:56 1988  John Harper  (harper at manitou)

	* reworked how derivatives are handled at the input level based on
	what kind of object they are applied to, and what form the index
	is. Originally, we had the following scenario (k implicit, k[0]
	has an explicit value):
	df(k[0],t) --> real derivative of k[0] wrt t
	df(k[1],t) --> (RDR k (1 #BR 0))
	k[1,|0]  -->  (RDR k (1 #BR 0))
	df(k[a],t)  --> (RDR k (a #BR 0))
	However, this causes problems for implicit objects because k[1,|0]
	is really a scalar, even though k[1] has no value. So now we convert
	all derivative ops involving integer indices to the df form, and
	do not convert to df form to the (RDR k (0 #BR 0)) form when the
	object is implicit and the index is integer.
	df(k[0],t) --> real derivative of k[0] wrt t
	df(k[1],t) --> df (RDR k (1)) t)   ie same form as input
	k[1,|0]  -->  df (RDR k (1)) t)
	df(k[a],t)  --> (RDR k (a #BR 0))

	This way, if p:=k[1,|0] and k[1] is later given a value, sub(p)
	will show the correct derivative, the only way to do this before
	was to assign using ==. Another effect of the conversion if that
	k[0,|0] immediately evaluates, rather than just sitting there.

	Changes were made to DFRDRMERGE, SIMPRDR where a new routine
	(CNVRTDIF) is now called, DFRDR to add code to
	get the system to order  the kernals in the
	deriv op, and finally to EQUALPARSE1 to prevent things like
	k[0,|1] = 34;
	These changes also make it possible to use let rules to clear
	derivatives of implicit objects, one can now say let df(k[1],t)=0;
	and it works.

Thu Jul 28 20:11:12 1988  John Harper  (harper at manitou)

	* in NDIFF1 was code to immediately eval a derivative if the
	output index was integer. This messed up if the object was implicit
	because the eval had #BR in the index, which made MAPINDEX
	unhappy. Added check so that this kind of thing is deferred. So we
	can now do l==k[1,|0] properly. This bug is in mutensor too.

	* bug in SIMPRDR, code was hooked for implicit objects, hence  was
	not evaluating any explicit components. So k[0] came out as k[0]
	rather than whatever value it really had if k was implicit. That
	hook was not in the mutensor code.

Mon Jul 25 19:57:44 1988  John Harper  (harper at manitou)

	* also replaced a piece of code with a call to FORMRDR in SYMI.
	should have been done long ago. at v2.63

	* Fixed bug in sorting of derivative indices (which was not
	happening at all), found by brett. Added function
	MAKEDIFSYM and modified SYMI and DIFRDRMERGE to allow the system
	to sort derivative indices following a | into a canonical order.
	Allows things like df(k[a],t,r) - df(k[a],r,t) to go to 0 when k
	is implicit. Same bug exists in muTENSOR.

Fri Jul 22 13:55:53 1988  John Harper  (harper at manitou)

	* moved diffp from dif.red to local.red in case 3.3 sources are
	different here.

	* missed a couple of declarations of the global'ness of INAMES in
	gr and frme. (noted while building a pc version)

	* brett found a bug in doing lie derivatives of objects with more
	than 2 indices. Traced it to a problem in SUBLIST, where if N >
	length (LIS) then PNTH is very unhappy.

Wed Jun 22 19:51:55 1988  John Harper  (harper at manitou)

	* altered code which assigned some global lisp values to use setq
	directly, so that pc-reduce (3.3) would load properly. eg.
	SYMBOLIC A:='T becomes SYMBOLIC SETQ (A, 'T).

Tue Mar 29 21:05:46 1988  John Harper  (harper at manitou)

	* moved location of number of elements as printed in a directory
	back 2 spaces.

Sat Mar  5 16:17:32 1988  John Harper  (harper at manitou)

	* added checks in frame code to ensure metrics and connections
	required are there before the objects are created.

Wed Mar  2 15:08:03 1988  John Harper  (harper at manitou)

	* also declared riccisc and frriccisc as scalar objects.

	* moved the code which checked for an empty object from preprocess
	to process. that way one gets the concov structure correct.

	* added calls to mktnsr in all gr, frme, and spinor code to
	ensure the object is made correctly.

Thu Feb 18 20:47:01 1988  John Harper  (harper at manitou)

	* forgot to change an INDEX to FINDEX in pdf

Sat Feb 13 16:09:38 1988  John Harper  (harper at manitou)

	* at version 2.62

	* deleted reference to IDF from PREPROCESS. (IDF has been removed)

	* added new deriv. code to dif.red paralleling that added to
	mutensor this day.

Sat Jan 23 19:33:37 1988  John Harper  (harper at manitou)

	* added function CANONINDEX to utility1.red to produce
	canonicalized indices.

Fri Jan 22 18:57:43 1988  John Harper  (harper at manitou)

	* added function FORMRDR called from SIMPRDR (and maybe elsewhere
	if needed) which makes the RDR form of an indexed object,
	including the SYMLST if it is not nil, and in that case, calling
	FKERN on the result too. Replaces the mod below.

Wed Jan 13 20:15:25 1988  John Harper  (harper at manitou)

	* in SIMPRDR added an FKERN around the return value for an
	implicit object (ie. it came in as (QRDR ...)). Sometimes the
	implicit elements were not combining properly.

Tue Jan 12 18:57:35 1988  John Harper  (harper at manitou)

	* wrapped a REVAL around the value passed to EVALTNSR1 from
	EQUALPARSE. This is needed so that things like g[0]==g[a]+1 will
	err out properly. Is related to a similar bug in mutensor, fixed
	this day.

Mon Oct 19 13:55:30 1987  John Harper  (harper at manitou)

	* fixed message in saveic so it actually prints ". must use
	writechar to do this.

Fri Oct 16 14:42:02 1987  John Harper  (harper at manitou)

	* added double quotes (actually '') to reload message from saveic.
	If you dont use the quotes, it wont read in properly.

Sat Jul 11 16:35:03 1987  John Harper  (harper at utmanitou)

	* changed atom 'INDEX to 'FINDEX in parselsqb because the hephys
	package wants INDEX to be a function and the return from parselsqb
	looks just like that. (ie it trys to execute)

Sat May 30 21:59:28 1987  John Harper  (harper at utmanitou)

	* added global var pagerprog!* holding the name of the program used
	to view the helpfile. should be "more" for general distributions,
	but can be "less" if thats available.

Wed May 27 21:22:36 1987  John Harper  (harper at utmanitou)

	* fixed mascii to use int2id and id2int for conversions.

Sun May 24 15:32:47 1987  John Harper  (harper at utmanitou)

	* fixed div to use pdf.

	* made printpdf and printdf check !*nat.

	* changed method in ndiff1 of decideing when to make temp objects
	by using multip.

Sat May 23 15:46:50 1987  John Harper  (harper at utmanitou)

	* fixed dir's output in a number of ways (need to use flatsize2
	not flatsize in computing print-widths).

Fri May 22 21:18:56 1987  John Harper  (harper at utmanitou)

	* added functions isitten and isitfr analagous to isitsp.

	* modified dir so that one always gets info on an object whose
	name is given as an arg, regardless of the status of the nodir
	flag or emptiness of inames.

Tue May 19 15:24:50 1987  John Harper  (harper at utmanitou)

	* killing puts CKILLING as the type of the matrix out if the
	conformal flag is on.

	* changed way printrdr is called for printing indexed objects by
	the system. put infix property on RDR (value = 31 < EXPT) and
	removed SPECPRN prop. now get parens around object when under a
	power. required a hook in INPRINT which is redefined.


	* added code for smart contraction indices using symmetries of
	objects involved. still somewhat rudimentary but the hooks are
	there.

	* fixed newsym1 so it properly handles hermitian symmetries. was
	crashing out before.

Mon May 18 20:43:24 1987  John Harper  (harper at utmanitou)

	* altered method of calling newsym in shift. now newsym is a
	function that does the mapping over the symmetry list (using
	newsym1). is much neater.

Sun May 17 14:44:58 1987  John Harper  (harper at utmanitou)

	* made savei2 write code to test if indexed object name is on
	inames list rather than push it twice.

	* fixed readtnsr to multiply implicit elements by sign of symmetry
	only.


Fri May 15 15:30:55 1987  John Harper  (harper at utmanitou)

	* fixed dispf2 to correctly check if value is 0. 0 is (nil . 1) not
	just nil.

Thu May  7 20:49:36 1987  John Harper  (harper at utmanitou)

	* added IF in tracesym to avoid redoing work on top of previously
	done. was ending up with indices like (((((a))))) because of
	repeated applications of tracesym.

Sun May  3 18:36:46 1987  John Harper  (harper at utmanitou)

	* added d'Alambertian function.

	* major bug fix to processvalue.

	* fixed tracesym in a number of ways. deleted indextype.

Sat May  2 14:46:44 1987  John Harper  (harper at utmanitou)

	* copy must not copy the *at* property, so it doesn;t now.

	* added pdf function to provide partial derivatives of expressions
	which may involve indexed objects. added hook in preprocess to
	catch these things.

Fri May  1 13:56:48 1987  John Harper  (harper at utmanitou)

	* kill now only removes 'tensor' properties from scalar objects,
	it leaves all others alone (eg. avalue).

Thu Apr 30 13:59:10 1987  John Harper  (harper at utmanitou)

	* below is not proper. fixed idiff to change leading #DBR to #BR
	and insert another #DBR between 2'nd and 3'rd indice if an op is
	not already there.

	* fixed cov* to use real name of scalar object and not
	non-existent pname. can now do cov(p) where p is scalar. of course
	this reduces to normal differentiation.

Wed Apr 29 21:18:20 1987  John Harper  (harper at utmanitou)

	* removed code from simprdr to make || into | when applied to
	scalar objects, since p[||a,b]-->p[|a,b] is not valid.

Tue Apr 28 19:23:58 1987  John Harper  (harper at utmanitou)

	* in evaltnsr1 when flgdot is on the * is printed only for scalar
	outputs.

	* modified metric's method of hunting through line-elements to
	find terms. now use substitutions for d(t) etc of either 0 or 1 to
	isolate the required term. this allows unexpanded line-elements to
	be examined properly.

Mon Apr 27 15:08:22 1987  John Harper  (harper at utmanitou)

	* made frmetric accept a flag which when t, causes it to make a
	minkowski looking frame metric.

Sun Apr 26 14:48:51 1987  John Harper  (harper at utmanitou)

	* added trace function to matrix package.

	* modified metric to accept a rank-2 object and turn that into a
	metric tensor, with all the required properties.

Mon Apr 20 20:49:13 1987  John Harper  (harper at utmanitou)

	* added code to SAVEI(?) to hunt down and save variables and user
	defined operators in all objects being saved. Also added function
	(UNIQKERN) which FKERNS incoming kernals so they are correctly
	linked in the system when reloading saved objects.

Sun Apr 19 14:20:16 1987  John Harper  (harper at utmanitou)

	* modified HELP to be FORMFN etc and it now uses more to look into
	the help file. The help file is set up like a regular cat output
	for a man page, HELPLIST!* contains an assoc list of functions
	with what their man entry begins with.

Fri Feb 27 18:43:07 1987  John Harper  (harper at utmanitou)

	* fixed collecterms (again) so it does not attempt to look deeper
	into an atomic element (caused internal memory errors).

	* made mktnsr place coordinate depends on implicit objects.

Thu Feb 26 21:32:40 1987  John Harper  (harper at utmanitou)

	* fixed spchristoffel to not call getcon(-2), which failed.
	somehow this code has been changed from the last time it worked.

Mon Feb 23 15:10:06 1987  John Harper  (harper at utmanitou)

	* changed printdf to printdif to avoid conflict with reduce
	function defined in integration package.

Sat Feb 14 19:58:03 1987  John Harper  (harper at utmanitou)

	* fixed simpd so that it handles numbers, i.e d(0) = 0 (it will
	not give a warning error for a number)

Fri Feb 13 15:05:22 1987  John Harper  (harper at utmanitou)

	* removed an extra ; from collecterms which caused the else
          clause of the IF to always be executed.

Thu Dec  4 16:07:03 1986  John Harper  (harper at utmanitou)

	* printdf forgot to check ymax when moving back up to the regular line.

Mon Dec  1 21:05:29 1986  John Harper  (harper at utmanitou)

	* printdf does not leave a space after the df when !*nat is nil

Fri Nov 28 21:51:46 1986  John Harper  (harper at utmanitou)

	* printconj now checks the status of !*nat

