|
From: Eduardo O. <edu...@us...> - 2025-11-30 01:39:00
|
--- **[bugs:#4639] dim-%antideriv: a partial fix for a bug in widths** **Status:** open **Group:** None **Created:** Sun Nov 30, 2025 01:38 AM UTC by Eduardo Ochs **Last Updated:** Sun Nov 30, 2025 01:38 AM UTC **Owner:** nobody **Attachments:** - [with-setq-width.png](https://sourceforge.net/p/maxima/bugs/4639/attachment/with-setq-width.png) (25.7 kB; image/png) - [without-setq-width.png](https://sourceforge.net/p/maxima/bugs/4639/attachment/without-setq-width.png) (25.8 kB; image/png) These are the messages M1 and M2, about "dim-%antideriv": M1: <https://sourceforge.net/p/maxima/mailman/message/59178281/> M2: <https://sourceforge.net/p/maxima/mailman/message/59266596/> M1 is by Robert Dodier, in which he sent the code for "dim-%antideriv", and M2 is by me, in which I showed that by adding one line to Robert's code we can make it calculate the width correctly in most - but not all - cases. Robert asked me to send the code and the screenshots to the bug tracker, so here it goes. The code is below, with the "setq" that I added marked with ";; Edrx:", and with my tests in the comments at the end. The screenshot named "without-setq-width.png" shows that the widths were incorrect in all the four tests - o1, o2, o3, and o4 - and the screenshot named "with-setq-width.png" shows that after my fix the tests o1, o2, and o4 are good, but the width in o3 still has a one-off error. --snip--snip-- ~~~ (if (not (fboundp 'display2d-unicode-enabled)) (defun display2d-unicode-enabled () nil)) (defun dim-%antideriv (form result) (unless (= (length (cdr form)) 4) (return-from dim-%antideriv (dimension-function form result))) (let* ((args (rest form)) (expr (first args)) (my-var (second args)) (lower-val (third args)) (upper-val (fourth args)) (lower-eqn (list '(mequal) my-var lower-val)) (upper-eqn (list '(mequal) my-var upper-val)) (vertical-bar-char (if (display2d-unicode-enabled) at-char-unicode (car (coerce $absboxchar 'list)))) vertical-bar expr-result lower-result upper-result expr-w expr-h expr-d lower-w lower-h lower-d upper-w upper-h upper-d) (declare (ignorable expr-w expr-h expr-d lower-w lower-h lower-d upper-w upper-h upper-d)) (setq expr-result (dimension expr nil 'mparen 'mparen nil 0) expr-w width expr-h height expr-d depth) (setq lower-result (dimension-infix lower-eqn nil) lower-w width lower-h height lower-d depth) (setq upper-result (dimension-infix upper-eqn nil) upper-w width upper-h height upper-d depth) (setq vertical-bar (list 'd-vbar (1+ (max expr-h upper-d)) (max (1+ expr-d) lower-h) vertical-bar-char)) (setq result (append (list (append (list (- lower-w) (max expr-h upper-d)) upper-result) (append (list 0 (- (max (1+ expr-d) lower-h))) lower-result) vertical-bar (append (list 0 0) expr-result)) result)) (setq height (+ 1 (max expr-h upper-d) upper-h) depth (+ (max (1+ expr-d) lower-h) lower-d)) ;; Edrx: (setq width (+ expr-w 1 (max upper-w lower-w))) (update-heights height depth) result)) (setf (get '%antideriv 'dimension) 'dim-%antideriv) (setf (get '$antideriv 'dimension) 'dim-%antideriv) ; Edrx #| • (eepitch-maxima) • (eepitch-kill) • (eepitch-maxima) load ("dim-antideriv.lisp"); mybox(o) := [box(o)]; o1 : antideriv (F(u), u, a, b); o2 : antideriv (F(u[k]), u[k], a[k], b[k]); o3 : antideriv (a+b, u, z^2^n+y[k], x^2-z[k]); o4 : antideriv (a+b, u, z^2^n+y[k], x^2-z[k[l[u]]]); mybox(o1); mybox(o2); mybox(o3); mybox(o4); |# ~~~ --snip--snip-- Cheers, Eduardo Ochs https://anggtwu.net/eev-maxima.html http://anggtwu.net/MAXIMA/dim-antideriv.lisp.html --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |