From olefc at daimi.au.dk  Tue Jan  3 11:32:24 2006
From: olefc at daimi.au.dk (Ole F. Christensen)
Date: Tue, 03 Jan 2006 11:32:24 +0100
Subject: [Rd] R crash with complex matrix algebra when using EISPACK=TRUE
In-Reply-To: <Pine.LNX.4.61.0601021810440.19500@gannet.stats>
References: <43B92527.4040003@daimi.au.dk>
	<Pine.LNX.4.61.0601021810440.19500@gannet.stats>
Message-ID: <43BA52B8.4000407@daimi.au.dk>

Brain, Thank you very much for your help.
Using gctorture I was able to produce a simple function call showing the 
problem.


Gm <- rbind(c(-0.3194373786, 0.2444066686, 0.0428108831,  3.221983e-02),
                     c(0.0002071301, -0.0003282719,  0.0001211418,  
5.128830e-12),
                     c(0.0621332005,  0.0545850010, -0.2098487035,  
9.313050e-02),
                     c(0.0280936142,  0.0586642184,  0.1658310277, 
-2.525889e-01)
)
print(Gm)
temp <- eigen(Gm)
print(temp)
gctorture(TRUE)
temp <- eigen(Gm, EISPACK = TRUE)



###
# On my computer I get :
##

 > gctorture(TRUE)
 >
 > source("http://www.daimi.au.dk/~olefc/TEST/Gm.R")
 > print(Gm)
              [,1]          [,2]          [,3]          [,4]
[1,] -0.3194373786  0.2444066686  0.0428108831  3.221983e-02
[2,]  0.0002071301 -0.0003282719  0.0001211418  5.128830e-12
[3,]  0.0621332005  0.0545850010 -0.2098487035  9.313050e-02
[4,]  0.0280936142  0.0586642184  0.1658310277 -2.525889e-01
 >
 > temp <- eigen(Gm)
 > print(temp)
$values
[1] -3.464342e-01+1.3161e-03i -3.464342e-01-1.3161e-03i
[3] -8.933476e-02+0.0000e+00i  9.052031e-19+0.0000e+00i

$vectors
                          [,1]                      [,2]            [,3]
[1,] -0.3419128709-0.03748199i -0.3419128709+0.03748199i -0.222056433+0i
[2,]  0.0003508445+0.00001921i  0.0003508445-0.00001921i  0.001421758+0i
[3,] -0.4179745717+0.01301547i -0.4179745717-0.01301547i -0.664932225+0i
[4,]  0.8407249376+0.00000000i  0.8407249376+0.00000000i -0.713129761+0i
        [,4]
[1,] -0.5+0i
[2,] -0.5+0i
[3,] -0.5+0i
[4,] -0.5+0i

 > temp <- eigen(Gm, EISPACK = TRUE)
*** glibc detected *** free(): invalid pointer: 0x08c4e778 ***
Aborted



# Should I submit this as a bug report also ?


Best

Ole



Prof Brian Ripley wrote:

> Try valgrind.  That is reporting use outside arrays in rg, that is the 
> non-complex case of eigen().
>
> Otherwise, using gctorture(TRUE) will help precipitate the error.
>
> On Mon, 2 Jan 2006, Ole F. Christensen wrote:
>
>>
>> Dear subscribers of R-devel
>>
>> I am experiencing that R crashes (further details are given below) in
>> some complex matrix calculations when EISPACK=TRUE has been specified in
>> eigen().
>> I discovered the behaviour some months ago just after the
>> release of R-2.2.0, and it has been lying on my desk since.
>> I apologise for not having nailed the problem down to a simple function
>> call, but I thought I should better report the problem now
>> instead of waiting.
>> My hope is that someone will either spot the cause
>> of the crash in a minute, or otherwise provide some help for me to
>> investigate further.
>>
>>
>> ## The code :
>>
>>
>> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
>> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>>
>> for(l.v in 1:4){
>>  for(r.v in 1:4){
>>    for(l.x in 1:4){
>>      for(r.x in 1:4){
>>        hvad <-
>> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]), 
>>
>> EISPACK=TRUE)
>>        print(c(l.v,r.v,l.x,r.x))
>>      }
>>    }
>>  }
>> }
>>
>>
>> ## gives
>>
>> [1] 1 1 1 1
>> [1] 1 1 1 2
>> [1] 1 1 1 3
>> [1] 1 1 1 4
>> [1] 1 1 2 1
>> Segmentation fault
>>
>>
>>
>> ### whereas the code seems to work fine when EISPACK=FALSE :
>>
>>
>> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
>> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>>
>> for(l.v in 1:4){
>>  for(r.v in 1:4){
>>    for(l.x in 1:4){
>>      for(r.x in 1:4){
>>        hvad <-
>> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]), 
>>
>> EISPACK=FALSE)
>>        print(c(l.v,r.v,l.x,r.x))
>>      }
>>    }
>>  }
>> }
>>
>> ## works fine.
>>
>>
>> ## There is some randomness in how and when the crash happens.
>> ## The crash is either :
>>
>> Segmentation fault
>>
>> #
>>
>> *** glibc detected *** double free or corruption (!prev): 0x08aa7298
>>    ***
>>
>> # or
>>
>> *** glibc detected *** free(): invalid pointer: 0x082bfd20 ***
>>
>>
>>
>> ## Seen on R-2.2-1 and  R-2.2-0 .
>> ## Not seen in R-2.1.1 !
>> ## I haven't investiated whether it happens on Windows also.
>>
>>
>> ### A few details on the matrix calculations :
>> The eigenvalue decomposition is done on 4 * 4 matrices where the rows
>> sum to 0.
>> The matrices may be on the edge of not being complex diagonalizable.
>>
>>
>> version
>>         _
>> platform i686-pc-linux-gnu
>> arch     i686
>> os       linux-gnu
>> system   i686, linux-gnu
>> status
>> major    2
>> minor    2.1
>> year     2005
>> month    12
>> day      20
>> svn rev  36812
>> language R
>>
>>
>> Thanks in advance of any help.
>>
>> Ole Christensen
>>
>> -- 
>> Ole F. Christensen
>> BiRC - Bioinformatics Research Center
>> University of Aarhus
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>

-- 
Ole F. Christensen
BiRC - Bioinformatics Research Center
University of Aarhus



[Rd] R crash with complex matrix algebra when using EISPACK=TRUE
Ole F. Christensen