Subversion Repositories wimsdev

Rev

Rev 11194 | Blame | Compare with Previous | Last modification | View Log | RSS feed

option:split_coeff split_column split_row

dd=!rawmatrix $(reply$i)
!if $wims_warn_rawmatrix!=$empty
  test=NaN
  !exit
!endif

m_reply$i=$dd
reply_$i=!lines2rows $dd
!if $wims_read_parm=nocompare
  reply_$i=\([$(reply_$i)])
  !exit
!endif

good=!trim $(replygood$i)
good=!rawmatrix $good
!if $wims_warn_rawmatrix!=$empty
  Test=bad $i
  !exit
!endif
replyGood$i=!lines2rows $good
replyGood$i=\([$(replyGood$i)])

n1=!linecnt $good
n2=!linecnt $dd
l1=!line 1 of $good
l2=!line 1 of $dd
m1=!itemcnt $l1
m2=!itemcnt $l2

ok=yes
!if $n1!=$n2 or $m1!=$m2
  badsize$i=true
  ok=
!else
  !reset mat_reply bad_row bad_column
  bad_coeff_cnt=0
  !for k= 1 to $m1
    bad_column_test$k=1
  !next
  !for j=1 to $n1
    l1=!line $j of $good
    l2=!line $j of $dd
    bad_row_test=1
    !for k=1 to $m1
      x_=!item $k of $l1
      y_=!item $k of $l2
      y_=!nospace $y_
      test=$[$y_]
      !if NaN isin $test
        !exit
      !endif
      !ifval $x_!=$y_
        ok=
        mat_reply=!append item 0 to $mat_reply
        bad_row_test=0
        bad_column_test$k=0
        !increase bad_coeff_cnt
        !read slib/text/matrixinsert [$(reply_$i)],$j,$k,\special{color=red}{$y_}
        reply_$i=$slib_out
      !else
        mat_reply=!append item 1 to $mat_reply
        !read slib/text/matrixinsert [$(reply_$i)],$j,$k,\special{color=green}{$y_}
        reply_$i=$slib_out
      !endif
    !next k
    mat_reply=$mat_reply\

    !if $bad_row_test=0
      bad_row=!append item $j to $bad_row
    !endif
  !next j
  !for k=1 to $m1
    !if $(bad_column_test$k)=0
      bad_column=!append item $k to $bad_column
    !endif
  !next
!endif
mat_reply=!replace internal $\
, by ; in $mat_reply
bad_row_cnt=!itemcnt $bad_row
bad_column_cnt=!itemcnt $bad_column

:bailout
reply_$i=!replace internal , by & in $(reply_$i)
reply_$i=!replace internal ; by \cr$ $ in $(reply_$i)
reply_$i=\(\begin{pmatrix}$(reply_$i)\end{pmatrix}\)

m_result$i=$mat_reply

m_sc_reply$i=0
!if $ok=yes
  diareply$i=good
  !advance freegot
  m_sc_reply$i=1
!else
  !if split_row iswordof $(replyoption$i)
    !ifval $bad_row_cnt <= $[ceil($n1*0.5)]
      diareply$i=good
      partialgood$i=yes
      freegot=$[$freegot + ($n1-$bad_row_cnt)/$n1]
    !else
      diareply$i=bad
    !endif
  !else
    !if split_column iswordof $(replyoption$i)
      !ifval $bad_column_cnt <= $[ceil($m1*0.5)]
        diareply$i=good
        partialgood$i=yes
        freegot=$[$freegot + ($m1-$bad_column_cnt)/$m1]
      !else
        diareply$i=bad
      !endif
    !else
      !if split_coeff iswordof $(replyoption$i)
        !ifval $bad_coeff_cnt <= $[ceil($n1*$m1*0.5)]
          diareply$i=good
          partialgood$i=yes
          freegot=$[$freegot + ($m1*$n1-$bad_coeff_cnt)/($n1*$m1)]
        !else
          diareply$i=bad
        !endif
      !else
        diareply$i=bad
      !endif
    !endif
  !endif
!endif