You can subscribe to this list here.
2001 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}

_{Aug}

_{Sep}

_{Oct}

_{Nov}
(20) 
_{Dec}
(17) 

2002 
_{Jan}
(39) 
_{Feb}
(21) 
_{Mar}
(33) 
_{Apr}
(135) 
_{May}
(53) 
_{Jun}
(88) 
_{Jul}
(47) 
_{Aug}
(59) 
_{Sep}
(207) 
_{Oct}
(40) 
_{Nov}
(7) 
_{Dec}
(26) 
2003 
_{Jan}
(49) 
_{Feb}
(39) 
_{Mar}
(117) 
_{Apr}
(50) 
_{May}
(62) 
_{Jun}
(6) 
_{Jul}
(19) 
_{Aug}
(24) 
_{Sep}
(11) 
_{Oct}
(11) 
_{Nov}
(49) 
_{Dec}
(9) 
2004 
_{Jan}
(29) 
_{Feb}
(123) 
_{Mar}
(32) 
_{Apr}
(53) 
_{May}
(52) 
_{Jun}
(19) 
_{Jul}
(33) 
_{Aug}
(10) 
_{Sep}
(76) 
_{Oct}
(86) 
_{Nov}
(171) 
_{Dec}
(163) 
2005 
_{Jan}
(147) 
_{Feb}
(121) 
_{Mar}
(120) 
_{Apr}
(126) 
_{May}
(120) 
_{Jun}
(213) 
_{Jul}
(76) 
_{Aug}
(79) 
_{Sep}
(140) 
_{Oct}
(83) 
_{Nov}
(156) 
_{Dec}
(202) 
2006 
_{Jan}
(181) 
_{Feb}
(171) 
_{Mar}
(157) 
_{Apr}
(98) 
_{May}
(96) 
_{Jun}
(97) 
_{Jul}
(193) 
_{Aug}
(76) 
_{Sep}
(130) 
_{Oct}
(63) 
_{Nov}
(196) 
_{Dec}
(253) 
2007 
_{Jan}
(256) 
_{Feb}
(293) 
_{Mar}
(276) 
_{Apr}
(258) 
_{May}
(181) 
_{Jun}
(91) 
_{Jul}
(108) 
_{Aug}
(69) 
_{Sep}
(107) 
_{Oct}
(179) 
_{Nov}
(137) 
_{Dec}
(121) 
2008 
_{Jan}
(124) 
_{Feb}
(129) 
_{Mar}
(192) 
_{Apr}
(201) 
_{May}
(90) 
_{Jun}
(86) 
_{Jul}
(115) 
_{Aug}
(142) 
_{Sep}
(49) 
_{Oct}
(91) 
_{Nov}
(95) 
_{Dec}
(218) 
2009 
_{Jan}
(230) 
_{Feb}
(149) 
_{Mar}
(118) 
_{Apr}
(72) 
_{May}
(77) 
_{Jun}
(68) 
_{Jul}
(102) 
_{Aug}
(72) 
_{Sep}
(89) 
_{Oct}
(76) 
_{Nov}
(125) 
_{Dec}
(86) 
2010 
_{Jan}
(75) 
_{Feb}
(90) 
_{Mar}
(89) 
_{Apr}
(121) 
_{May}
(111) 
_{Jun}
(66) 
_{Jul}
(75) 
_{Aug}
(66) 
_{Sep}
(66) 
_{Oct}
(166) 
_{Nov}
(121) 
_{Dec}
(73) 
2011 
_{Jan}
(74) 
_{Feb}

_{Mar}

_{Apr}
(14) 
_{May}
(22) 
_{Jun}
(31) 
_{Jul}
(53) 
_{Aug}
(37) 
_{Sep}
(23) 
_{Oct}
(25) 
_{Nov}
(31) 
_{Dec}
(28) 
2012 
_{Jan}
(18) 
_{Feb}
(11) 
_{Mar}
(32) 
_{Apr}
(17) 
_{May}
(48) 
_{Jun}
(37) 
_{Jul}
(23) 
_{Aug}
(54) 
_{Sep}
(15) 
_{Oct}
(11) 
_{Nov}
(19) 
_{Dec}
(22) 
2013 
_{Jan}
(11) 
_{Feb}
(32) 
_{Mar}
(24) 
_{Apr}
(37) 
_{May}
(31) 
_{Jun}
(14) 
_{Jul}
(26) 
_{Aug}
(33) 
_{Sep}
(40) 
_{Oct}
(21) 
_{Nov}
(36) 
_{Dec}
(84) 
2014 
_{Jan}
(23) 
_{Feb}
(20) 
_{Mar}
(27) 
_{Apr}
(24) 
_{May}
(31) 
_{Jun}
(27) 
_{Jul}
(34) 
_{Aug}
(26) 
_{Sep}
(21) 
_{Oct}
(45) 
_{Nov}
(23) 
_{Dec}
(73) 
2015 
_{Jan}
(33) 
_{Feb}
(8) 
_{Mar}
(24) 
_{Apr}
(45) 
_{May}
(27) 
_{Jun}
(19) 
_{Jul}
(21) 
_{Aug}
(3) 
_{Sep}

_{Oct}

_{Nov}

_{Dec}

S  M  T  W  T  F  S 




1
(1) 
2
(1) 
3
(1) 
4
(2) 
5
(6) 
6
(2) 
7
(1) 
8

9

10
(1) 
11

12
(1) 
13

14

15

16

17
(1) 
18

19

20

21

22
(1) 
23
(1) 
24
(1) 
25

26

27
(3) 
28
(7) 
29

30

31
(1) 

From: Rupert Swarbrick <rswarbrick@us...>  20130522 11:32:12

This is an automated email from the git hooks/postreceive script. It was generated because a ref change was pushed to the repository containing the project "Maxima CAS". The branch, master has been updated via a5d5e72f8435f7bfc45319076e887d58ea5c6e3b (commit) via d7c8841c011620f842259f22c3f3980a5faab94d (commit) via b650fb35311b33070c1bcc9c640d66671e89a7d6 (commit) from 452263546898ba7280700b12f06444c05823f03b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.  Log  commit a5d5e72f8435f7bfc45319076e887d58ea5c6e3b Author: Rupert Swarbrick <rswarbrick@...> Date: Wed May 22 12:28:27 2013 +0100 Add a test for sign of squared expressions diff git a/tests/rtest_sign.mac b/tests/rtest_sign.mac index 0a6bd73..f43a3e4 100644  a/tests/rtest_sign.mac +++ b/tests/rtest_sign.mac @@ 1005,9 +1005,6 @@ false; (declare (x, constant), declare (y, constant), assume (x > y), is (x>y)); true$ kill(all); done$  /* facts in assume database not cleaned up by 'sign' */ (kill (foo), foo : %e^(abs(uu)+uu)*(uu/abs(uu)+1)+%e^(abs(uu)uu)*(uu/abs(uu)1), 0); @@ 1026,3 +1023,12 @@ map('sign,[sqrt(x),x]); buddy(sqrt(x),abs(x))); abs(x); +/* Ensure that asksign1 deals correctly with squared expressions */ +(assume (notequal(n, 1)), 0); +0$ + +is ((n1)^2 > 0); +true$ + +kill(all); +done$ commit d7c8841c011620f842259f22c3f3980a5faab94d Author: Rupert Swarbrick <rswarbrick@...> Date: Wed May 22 12:25:03 2013 +0100 Reorder the contents of asksign1 slightly to avoid repetition This also avoids a silly bug where I had a missing CDR call on one branch when executing this (almost) repeated code. Now making such a mistake is impossible... diff git a/src/compar.lisp b/src/compar.lisp index b59a3cb..44be823 100644  a/src/compar.lisp +++ b/src/compar.lisp @@ 886,19 +886,22 @@ relational knowledge is contained in the default context GLOBAL.") (let ($radexpand) (declare (special $radexpand)) (sign1 $askexp))  (cond ((hasintsymbols $askexp) '$pnz)  ((member sign '($pos $neg $zero $imaginary) :test #'eq) sign)  ((null odds)  (setq $askexp (lmul evens)  sign (cdr (assol $askexp *localsigns*)))  (ensuresign $askexp '$znz t))  (t  (if minus (setq sign (flip sign)))  (setq $askexp  (lmul (nconc odds (mapcar #'(lambda (l) (pow l 2)) evens))))  (let ((domain sign))  (setf sign (assol $askexp *localsigns*))  (ensuresign $askexp domain))))) + (cond + ((hasintsymbols $askexp) '$pnz) + ((member sign '($pos $neg $zero $imaginary) :test #'eq) sign) + (t + (let ((domain sign) (squared nil)) + (cond + ((null odds) + (setq $askexp (lmul evens) + domain '$znz + squared t)) + (t + (if minus (setq sign (flip sign))) + (setq $askexp + (lmul (nconc odds (mapcar #'(lambda (l) (pow l 2)) evens)))))) + (setq sign (cdr (assol $askexp *localsigns*))) + (ensuresign $askexp domain squared))))) (defun matchsign (sgn domain expression squared) "If SGN makes sense for DOMAIN store the result (see ENSURESIGN) and return commit b650fb35311b33070c1bcc9c640d66671e89a7d6 Author: Rupert Swarbrick <rswarbrick@...> Date: Wed May 22 12:15:05 2013 +0100 Fix bug in asksign I introduced this bug when refactoring the code in February. Basically, I hadn't realised that when someone calls asksign(x^2), we actually ask for the sign of x (asking whether it's zero or nonzero) and then treat any negatives as positives. This patch puts the behaviour back in. diff git a/src/compar.lisp b/src/compar.lisp index 0f3d5ce..b59a3cb 100644  a/src/compar.lisp +++ b/src/compar.lisp @@ 891,7 +891,7 @@ relational knowledge is contained in the default context GLOBAL.") ((null odds) (setq $askexp (lmul evens) sign (cdr (assol $askexp *localsigns*)))  (ensuresign $askexp '$znz)) + (ensuresign $askexp '$znz t)) (t (if minus (setq sign (flip sign))) (setq $askexp @@ 900,36 +900,48 @@ relational knowledge is contained in the default context GLOBAL.") (setf sign (assol $askexp *localsigns*)) (ensuresign $askexp domain))))) (defun matchsign (sgn domain expression) +(defun matchsign (sgn domain expression squared) "If SGN makes sense for DOMAIN store the result (see ENSURESIGN) and return it. Otherwise, return NIL."  ;; We have a hit if the answer (sign) is one of the first list and the  ;; question (domain) was one of the second. +it. Otherwise, return NIL. If SQUARED is true, we are actually looking for the +sign of the square, so any negative results are converted to positive." + ;; The entries in BEHAVIOUR are of the form + ;; (MATCH DOMAINS REGISTRAR SIGN SIGNSQ) + ;; + ;; The algorithm goes as follows: + ;; + ;; Look for SGN in MATCH. If found, use REGISTRAR to store SIGN for the + ;; expression and then return SIGN if SQUARED is false or SIGNSQ if it is + ;; true. (let* ((behaviour  '((($pos $P $p $positive) (nil $znz $pz $pn $pnz) tdpos $pos)  (($neg $N $n $negative) (nil $znz $nz $pn $pnz) tdneg $neg)  (($zero $Z $z 0 0.0) (nil $znz $pz $nz $pnz) tdzero $zero)  (($pn $nonzero $nz $nonz $non0) ($znz) tdpn $pn))) + '((($pos $P $p $positive) (nil $znz $pz $pn $pnz) tdpos $pos $pos) + (($neg $N $n $negative) (nil $znz $nz $pn $pnz) tdneg $neg $pos) + (($zero $Z $z 0 0.0) (nil $znz $pz $nz $pnz) tdzero $zero $zero) + (($pn $nonzero $nz $nonz $non0) ($znz) tdpn $pn $pos))) (hit (findif (lambda (bh) (and (member sgn (first bh) :test #'equal) (member domain (second bh) :test #'eq))) behaviour))) (when hit  (funcall (third hit) expression)  (setq sign  (if minus (flip (fourth hit)) (fourth hit)))))) + (let ((registrar (third hit)) + (foundsign (if squared (fifth hit) (fourth hit)))) + (funcall registrar expression) + (setq sign + (if (and minus (not squared)) (flip foundsign) foundsign)))))) (defun ensuresign (expr &optional domain) +(defun ensuresign (expr &optional domain squared) "Try to determine the sign of EXPR. If DOMAIN is not one of the special values described below, we try to tell whether EXPR is positive, negative or zero. It can be more specialised ($pz => positive or zero; $nz => negative or zero; $pn => positive or negative; $znz => zero or nonzero). +If SQUARED is true, then we're actually interested in the sign of EXPR^2. As +such, a nonzero sign should be regarded as positive. + When calling ENSURESIGN, set the special variable SIGN to the best current guess for the sign of EXPR. The function returns the sign, calls one of (TDPOS TDNEG TDZERO TDPN) to store it, and also sets SIGN." (loop  (let ((newsign (matchsign sign domain expr))) + (let ((newsign (matchsign sign domain expr squared))) (when newsign (return newsign))) (setf sign (retrieve (list '(mtext)  Summary of changes: src/compar.lisp  69 ++++++++++++++++++++++++++++++ tests/rtest_sign.mac  12 ++++++ 2 files changed, 51 insertions(+), 30 deletions() hooks/postreceive  Maxima CAS 