<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:www.nabble.com,2006:forum-292</id>
	<title>Nabble - Apache Commons</title>
	<updated>2008-10-06T11:08:28Z</updated>
	<link rel="self" type="application/atom+xml" href="http://www.nabble.com/Apache-Commons-f292.xml" />
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Apache-Commons-f292.html" />
	<subtitle type="html">The Commons is a Jakarta subproject focused on all aspects of reusable Java components. Jakarta Commons home is &lt;a href=&quot;http://jakarta.apache.org/commons/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:www.nabble.com,2006:post-19843175</id>
	<title>Re: To and Subject headers disappearing</title>
	<published>2008-10-06T11:08:28Z</published>
	<updated>2008-10-06T11:08:28Z</updated>
	<author>
		<name>Jaran Nilsen</name>
	</author>
	<content type="html">For anyone experiencing similar issues I thought I would post a reply
&lt;br&gt;to myself and explain how I solved this.
&lt;br&gt;&lt;br&gt;The problem was due to a custom JavaMail implementation that found
&lt;br&gt;it's way onto my classpath via Apache CXF.
&lt;br&gt;&lt;br&gt;The artifact causing the problem was:
&lt;br&gt;org.apache.geronimo.specs:geronimo-javamail_1.4_spec. To me this seems
&lt;br&gt;to be a custom Geronimo &amp;nbsp;implementation of JavaMail, or at least some
&lt;br&gt;of it's classes. I cannot imagine the need for an implementation which
&lt;br&gt;strips all the headers from the message, but I guess they have their
&lt;br&gt;reason.
&lt;br&gt;&lt;br&gt;Using Maven on my project, I simply added
&lt;br&gt;&amp;lt;exclusions&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;exclusion&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.geronimo.specs&amp;lt;/groupId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;artifactId&amp;gt;geronimo-javamail_1.4_spec&amp;lt;/artifactId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/exclusion&amp;gt;
&lt;br&gt;&amp;lt;/exclusions&amp;gt;
&lt;br&gt;&lt;br&gt;to the org.apache.cxf:cxf-rt-frontend-simple dependency.
&lt;br&gt;&lt;br&gt;Anyways, hopefully this will help anyone out there struggling with the
&lt;br&gt;same problem :)
&lt;br&gt;&lt;br&gt;Jaran
&lt;br&gt;&lt;br&gt;On Tue, Sep 30, 2008 at 2:37 PM, Jaran Nilsen &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am having a problem with commons-email 1.1. I am not sure where the
&lt;br&gt;&amp;gt; problem is,but figured this would be a good place to start trying to
&lt;br&gt;&amp;gt; figure out why this is happening to my application.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have two projects, A and B. In project A, the only dependency (Maven
&lt;br&gt;&amp;gt; 2) is commons-email 1.1. This is again dependent on JavaMail 1.4
&lt;br&gt;&amp;gt; (mail-1.4).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In project B, I have the same dependency, commons-email 1.1, but I
&lt;br&gt;&amp;gt; also have several other dependencies. One of these are xfire-core
&lt;br&gt;&amp;gt; 1.2.6, which I have seen is also dependent on JavaMail 1.4. Xfire-core
&lt;br&gt;&amp;gt; and commons-email are the ONLY artifacts depending on JavaMail in
&lt;br&gt;&amp;gt; project B.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; When I run the following codesnippet in Project A, everything works
&lt;br&gt;&amp;gt; fine. The email arrives and things are sweet like a warm summer day.
&lt;br&gt;&amp;gt; However, when I run the same piece of code in Project B, the To and
&lt;br&gt;&amp;gt; Subject headers disappear! I have been scratching my head and been
&lt;br&gt;&amp;gt; testing up and down and can't figure out what is causing this.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Are there anyone out there who have experienced anything similar and
&lt;br&gt;&amp;gt; can point me in the right direction?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Here is the code snippet:
&lt;br&gt;&amp;gt; SimpleEmail email = new SimpleEmail();
&lt;br&gt;&amp;gt; email.setHostName(&amp;quot;localhost&amp;quot;);
&lt;br&gt;&amp;gt; email.setSmtpPort(25025);
&lt;br&gt;&amp;gt; email.addTo(&amp;quot;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;quot;);
&lt;br&gt;&amp;gt; email.setFrom(&amp;quot;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;peons@...&lt;/a&gt;&amp;quot;, &amp;quot;Integrasco Peons&amp;quot;);
&lt;br&gt;&amp;gt; email.setSubject(&amp;quot;Test message&amp;quot;);
&lt;br&gt;&amp;gt; email.setMsg(&amp;quot;This is a simple test of commons-email&amp;quot;);
&lt;br&gt;&amp;gt; email.setDebug(true);
&lt;br&gt;&amp;gt; email.send();
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Debug output from Project A:
&lt;br&gt;&amp;gt; DEBUG: JavaMail version 1.4ea
&lt;br&gt;&amp;gt; DEBUG: java.io.FileNotFoundException:
&lt;br&gt;&amp;gt; /usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/javamail.providers (No such
&lt;br&gt;&amp;gt; file or directory)
&lt;br&gt;&amp;gt; DEBUG: !anyLoaded
&lt;br&gt;&amp;gt; DEBUG: not loading resource: /META-INF/javamail.providers
&lt;br&gt;&amp;gt; DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
&lt;br&gt;&amp;gt; DEBUG: Tables of loaded providers
&lt;br&gt;&amp;gt; DEBUG: Providers Listed By Class Name:
&lt;br&gt;&amp;gt; {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc]}
&lt;br&gt;&amp;gt; DEBUG: Providers Listed By Protocol:
&lt;br&gt;&amp;gt; {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc],
&lt;br&gt;&amp;gt; smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc]}
&lt;br&gt;&amp;gt; DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
&lt;br&gt;&amp;gt; DEBUG: !anyLoaded
&lt;br&gt;&amp;gt; DEBUG: not loading resource: /META-INF/javamail.address.map
&lt;br&gt;&amp;gt; DEBUG: java.io.FileNotFoundException:
&lt;br&gt;&amp;gt; /usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/javamail.address.map (No such
&lt;br&gt;&amp;gt; file or directory)
&lt;br&gt;&amp;gt; DEBUG: getProvider() returning
&lt;br&gt;&amp;gt; javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
&lt;br&gt;&amp;gt; Microsystems, Inc]
&lt;br&gt;&amp;gt; DEBUG SMTP: useEhlo true, useAuth false
&lt;br&gt;&amp;gt; DEBUG SMTP: trying to connect to host &amp;quot;localhost&amp;quot;, port 25025, isSSL false
&lt;br&gt;&amp;gt; 220 ludvig.integrasco.no ESMTP Sendmail 8.13.1/8.13.1; Tue, 30 Sep
&lt;br&gt;&amp;gt; 2008 14:35:48 +0200
&lt;br&gt;&amp;gt; DEBUG SMTP: connected to host &amp;quot;localhost&amp;quot;, port: 25025
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; EHLO jaran-laptop
&lt;br&gt;&amp;gt; 250-ludvig.integrasco.no Hello localhost.localdomain [127.0.0.1],
&lt;br&gt;&amp;gt; pleased to meet you
&lt;br&gt;&amp;gt; 250-ENHANCEDSTATUSCODES
&lt;br&gt;&amp;gt; 250-PIPELINING
&lt;br&gt;&amp;gt; 250-8BITMIME
&lt;br&gt;&amp;gt; 250-SIZE
&lt;br&gt;&amp;gt; 250-DSN
&lt;br&gt;&amp;gt; 250-ETRN
&lt;br&gt;&amp;gt; 250-AUTH DIGEST-MD5 CRAM-MD5
&lt;br&gt;&amp;gt; 250-DELIVERBY
&lt;br&gt;&amp;gt; 250 HELP
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;ENHANCEDSTATUSCODES&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;PIPELINING&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;8BITMIME&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;SIZE&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;DSN&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;ETRN&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;AUTH&amp;quot;, arg &amp;quot;DIGEST-MD5 CRAM-MD5&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;DELIVERBY&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;HELP&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: use8bit false
&lt;br&gt;&amp;gt; MAIL FROM:&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;peons@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; 250 2.1.0 &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;peons@...&lt;/a&gt;&amp;gt;... Sender ok
&lt;br&gt;&amp;gt; RCPT TO:&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; 250 2.1.5 &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt;... Recipient ok
&lt;br&gt;&amp;gt; DEBUG SMTP: Verified Addresses
&lt;br&gt;&amp;gt; DEBUG SMTP: &amp;nbsp; &amp;quot;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;quot; &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; DATA
&lt;br&gt;&amp;gt; 354 Enter mail, end with &amp;quot;.&amp;quot; on a line by itself
&lt;br&gt;&amp;gt; Date: Tue, 30 Sep 2008 14:36:46 +0200 (CEST)
&lt;br&gt;&amp;gt; From: Integrasco Peons &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;peons@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; To: &amp;quot;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;quot; &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Message-ID: &amp;lt;19058102.01222778206577.JavaMail.jaran@jaran-laptop&amp;gt;
&lt;br&gt;&amp;gt; Subject: Test message
&lt;br&gt;&amp;gt; MIME-Version: 1.0
&lt;br&gt;&amp;gt; Content-Type: text/plain; charset=us-ascii
&lt;br&gt;&amp;gt; Content-Transfer-Encoding: 7bit
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is a simple test of commons-email
&lt;br&gt;&amp;gt; .
&lt;br&gt;&amp;gt; 250 2.0.0 m8UCZmKZ029942 Message accepted for delivery
&lt;br&gt;&amp;gt; QUIT
&lt;br&gt;&amp;gt; 221 2.0.0 ludvig.integrasco.no closing connection
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Debug output from Project B:
&lt;br&gt;&amp;gt; Loading javamail.default.providers from
&lt;br&gt;&amp;gt; jar:file:/home/jaran/.m2/repository/javax/mail/mail/1.4/mail-1.4.jar!/META-INF/javamail.default.providers
&lt;br&gt;&amp;gt; DEBUG: loading new provider protocol=imap,
&lt;br&gt;&amp;gt; className=com.sun.mail.imap.IMAPStore, vendor=Sun Microsystems, Inc,
&lt;br&gt;&amp;gt; version=null
&lt;br&gt;&amp;gt; DEBUG: loading new provider protocol=imaps,
&lt;br&gt;&amp;gt; className=com.sun.mail.imap.IMAPSSLStore, vendor=Sun Microsystems,
&lt;br&gt;&amp;gt; Inc, version=null
&lt;br&gt;&amp;gt; DEBUG: loading new provider protocol=smtp,
&lt;br&gt;&amp;gt; className=com.sun.mail.smtp.SMTPTransport, vendor=Sun Microsystems,
&lt;br&gt;&amp;gt; Inc, version=null
&lt;br&gt;&amp;gt; DEBUG: loading new provider protocol=smtps,
&lt;br&gt;&amp;gt; className=com.sun.mail.smtp.SMTPSSLTransport, vendor=Sun Microsystems,
&lt;br&gt;&amp;gt; Inc, version=null
&lt;br&gt;&amp;gt; DEBUG: loading new provider protocol=pop3,
&lt;br&gt;&amp;gt; className=com.sun.mail.pop3.POP3Store, vendor=Sun Microsystems, Inc,
&lt;br&gt;&amp;gt; version=null
&lt;br&gt;&amp;gt; DEBUG: loading new provider protocol=pop3s,
&lt;br&gt;&amp;gt; className=com.sun.mail.pop3.POP3SSLStore, vendor=Sun Microsystems,
&lt;br&gt;&amp;gt; Inc, version=null
&lt;br&gt;&amp;gt; DEBUG: getProvider() returning provider protocol=smtp;
&lt;br&gt;&amp;gt; type=javax.mail.Provider$Type@106082;
&lt;br&gt;&amp;gt; class=com.sun.mail.smtp.SMTPTransport; vendor=Sun Microsystems, Inc
&lt;br&gt;&amp;gt; DEBUG SMTP: useEhlo true, useAuth false
&lt;br&gt;&amp;gt; DEBUG SMTP: trying to connect to host &amp;quot;localhost&amp;quot;, port 25025, isSSL false
&lt;br&gt;&amp;gt; 220 ludvig.integrasco.no ESMTP Sendmail 8.13.1/8.13.1; Tue, 30 Sep
&lt;br&gt;&amp;gt; 2008 14:36:44 +0200
&lt;br&gt;&amp;gt; DEBUG SMTP: connected to host &amp;quot;localhost&amp;quot;, port: 25025
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; EHLO jaran-laptop
&lt;br&gt;&amp;gt; 250-ludvig.integrasco.no Hello localhost.localdomain [127.0.0.1],
&lt;br&gt;&amp;gt; pleased to meet you
&lt;br&gt;&amp;gt; 250-ENHANCEDSTATUSCODES
&lt;br&gt;&amp;gt; 250-PIPELINING
&lt;br&gt;&amp;gt; 250-8BITMIME
&lt;br&gt;&amp;gt; 250-SIZE
&lt;br&gt;&amp;gt; 250-DSN
&lt;br&gt;&amp;gt; 250-ETRN
&lt;br&gt;&amp;gt; 250-AUTH DIGEST-MD5 CRAM-MD5
&lt;br&gt;&amp;gt; 250-DELIVERBY
&lt;br&gt;&amp;gt; 250 HELP
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;ENHANCEDSTATUSCODES&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;PIPELINING&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;8BITMIME&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;SIZE&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;DSN&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;ETRN&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;AUTH&amp;quot;, arg &amp;quot;DIGEST-MD5 CRAM-MD5&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;DELIVERBY&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: Found extension &amp;quot;HELP&amp;quot;, arg &amp;quot;&amp;quot;
&lt;br&gt;&amp;gt; DEBUG SMTP: use8bit false
&lt;br&gt;&amp;gt; MAIL FROM:&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;peons@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; 250 2.1.0 &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;peons@...&lt;/a&gt;&amp;gt;... Sender ok
&lt;br&gt;&amp;gt; RCPT TO:&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; 250 2.1.5 &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt;... Recipient ok
&lt;br&gt;&amp;gt; DEBUG SMTP: Verified Addresses
&lt;br&gt;&amp;gt; DEBUG SMTP: &amp;nbsp; &amp;quot;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;quot; &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaran.nilsen@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; DATA
&lt;br&gt;&amp;gt; 354 Enter mail, end with &amp;quot;.&amp;quot; on a line by itself
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is a simple test of commons-email
&lt;br&gt;&amp;gt; .
&lt;br&gt;&amp;gt; 250 2.0.0 m8UCaixb030029 Message accepted for delivery
&lt;br&gt;&amp;gt; QUIT
&lt;br&gt;&amp;gt; 221 2.0.0 ludvig.integrasco.no closing connection
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Appreciate any help on this. Starting to go out of hair to pull out :)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Kind regards,
&lt;br&gt;&amp;gt; Jaran Nilsen
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;user-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19843175&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;user-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---User-f319.html&quot; embed=&quot;fixTarget[319]&quot; target=&quot;_top&quot; &gt;Commons - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/To-and-Subject-headers-disappearing-tp19741222p19843175.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19839522</id>
	<title>[jira] Created: (POOL-130) GenericObjectPool.Evictor creates new objects although exactly minIdle objects are idle</title>
	<published>2008-10-06T07:51:44Z</published>
	<updated>2008-10-06T07:51:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">GenericObjectPool.Evictor creates new objects although exactly minIdle objects are idle
&lt;br&gt;---------------------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: POOL-130
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/POOL-130&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/POOL-130&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: Commons Pool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; Affects Versions: 1.4, 1.2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Torsten Feig
&lt;br&gt;&lt;br&gt;&lt;br&gt;When you 
&lt;br&gt;- create a GenericObjectPool with these parameters: maxActive=100, maxIdle=100, minIdle=10, timeBetweenEvictionRunsMillis=360000 (1h), minEvictableIdleTimeMillis=30000 (5min)
&lt;br&gt;- preload the 10 minIdle objects (10x borrowObject() + returnObject)
&lt;br&gt;you have a pool with 10 idle objects.
&lt;br&gt;&lt;br&gt;Then every 1h the evictor destroys the 10 idle objects and creates 10 new ones. Why? After all, creating and tearing down pool objects is likely to be expensive. So why destroy the old objects when they exactly represent the minIdle objects? I don't see any need for this.
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28POOL-130%29-GenericObjectPool.Evictor-creates-new-objects-although-exactly-minIdle-objects-are-idle-tp19839522p19839522.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19836795</id>
	<title>[jira] Created: (VFS-221) Memory not released in SoftRefFilesCache</title>
	<published>2008-10-06T05:17:44Z</published>
	<updated>2008-10-06T05:17:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">Memory not released in SoftRefFilesCache
&lt;br&gt;----------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: VFS-221
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/VFS-221&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/VFS-221&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: Commons VFS
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Environment: All
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Gilles Gaillard
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Priority: Trivial
&lt;br&gt;&lt;br&gt;&lt;br&gt;Implementation of method putFile(final FileObject file) does not remove references from refReverseMap when adding a new file.
&lt;br&gt;&lt;br&gt;#current implementation
&lt;br&gt;{noformat}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;synchronized (files)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; files.put(file.getName(), ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; synchronized(refReverseMap)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; refReverseMap.put(ref, key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;{noformat}
&lt;br&gt;&lt;br&gt;#should become:
&lt;br&gt;{noformat}
&lt;br&gt;&amp;nbsp; &amp;nbsp; synchronized (files)
&lt;br&gt;&amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Reference old = files.put(file.getName(), ref);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; synchronized(refReverseMap)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; refReverseMap.remove(old);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; refReverseMap.put(ref, key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;{noformat}
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28VFS-221%29-Memory-not-released-in-SoftRefFilesCache-tp19836795p19836795.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19836024</id>
	<title>Request Inormation Regarding EOL for the following Jars</title>
	<published>2008-10-06T04:06:26Z</published>
	<updated>2008-10-06T04:06:26Z</updated>
	<author>
		<name>sajoseph</name>
	</author>
	<content type="html">
&lt;br&gt;&lt;font size=2 face=&quot;sans-serif&quot;&gt;Hi&lt;/font&gt;&lt;font size=3&gt; &lt;br&gt;
&lt;/font&gt;&lt;font size=2 face=&quot;sans-serif&quot;&gt;&lt;br&gt;
We are mailing you from Inautix , India, a Bank of Newyork Mellon company.&lt;/font&gt;&lt;font size=3&gt;
&lt;/font&gt;&lt;font size=2 face=&quot;sans-serif&quot;&gt;&lt;br&gt;
We just want to know the End Of Life ( Dates) for the Following Open Source
Jars. &amp;nbsp;As we &amp;nbsp;have used these jars to build applications.&lt;/font&gt;&lt;font size=3&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font size=3&gt;&lt;br&gt;
&lt;/font&gt;&lt;font size=2 face=&quot;sans-serif&quot;&gt;&lt;br&gt;
Appreciate if you could mail us back as soon as possible.&lt;/font&gt;&lt;font size=3&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font size=2 face=&quot;sans-serif&quot;&gt;&lt;br&gt;
Thanks &amp;amp; Regards&lt;br&gt;
Ganesh Nagalingam&lt;br&gt;
D: &amp;nbsp;Development - BNY - ECSE&lt;br&gt;
A: &amp;nbsp; i|Nautix Technologies India Pvt Ltd,&lt;br&gt;
 &amp;nbsp; &amp;nbsp; 8th Floor, Ascendas IT Park (Chennai) Ltd,&lt;br&gt;
 &amp;nbsp; &amp;nbsp; Taramani Road, Taramani,&lt;br&gt;
 &amp;nbsp; &amp;nbsp; Chennai - 600 113.&lt;br&gt;
T: &amp;nbsp;91-44-22545000&lt;br&gt;
X: &amp;nbsp;4347&lt;br&gt;
E: &amp;nbsp;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19836024&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gnagalingam@...&lt;/a&gt;&lt;br&gt;
I: &amp;nbsp;www.inautix.com&lt;/font&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---User-f319.html&quot; embed=&quot;fixTarget[319]&quot; target=&quot;_top&quot; &gt;Commons - User&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Request-Inormation-Regarding-EOL-for-the-following-Jars-tp19836024p19836024.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19835014</id>
	<title>[jira] Commented: (IO-182) add new APPEND parameter for writing string into files</title>
	<published>2008-10-06T02:57:44Z</published>
	<updated>2008-10-06T02:57:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/jira/browse/IO-182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12637056#action_12637056&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/IO-182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12637056#action_12637056&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Stefan Simik commented on IO-182:
&lt;br&gt;---------------------------------
&lt;br&gt;&lt;br&gt;Yes, exactly ;)
&lt;br&gt;appendStringToFile(File file, String encoding, String textToAppend);
&lt;br&gt;is the function I was looking for.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; add new APPEND parameter for writing string into files
&lt;br&gt;&amp;gt; ------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: IO-182
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/IO-182&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/IO-182&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Commons IO
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: New Feature
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Streams/Writers
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.4
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Stefan Simik
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It would be great to have one additional parameter for writing strins into file - boolean append.
&lt;br&gt;&amp;gt; If true, string will be appended to the end of the file.
&lt;br&gt;&amp;gt; It is very useful for many purposes, for example logging and so on..
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28IO-182%29-add-new-APPEND-parameter-for-writing-string-into-files-tp19702457p19835014.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19834921</id>
	<title>[jira] Updated: (FILEUPLOAD-168) read form field parameters even if maxSize has been exceeded</title>
	<published>2008-10-06T02:49:46Z</published>
	<updated>2008-10-06T02:49:46Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/jira/browse/FILEUPLOAD-168?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/FILEUPLOAD-168?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Paul Rivera updated FILEUPLOAD-168:
&lt;br&gt;-----------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: fileupload2.patch
&lt;br&gt;&lt;br&gt;Uploaded a version of the patch named fileupload2.patch with some additional methods.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; read form field parameters even if maxSize has been exceeded
&lt;br&gt;&amp;gt; ------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: FILEUPLOAD-168
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/FILEUPLOAD-168&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/FILEUPLOAD-168&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Commons FileUpload
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Improvement
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Environment: commons fileupload 1.2.2-SNAPSHOT
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Paul Rivera
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: fileupload1.patch, fileupload2.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi!
&lt;br&gt;&amp;gt; This issue is similar to FILEUPLOAD-140. &amp;nbsp;I can't seem to reopen it so I created a new one instead. &amp;nbsp;FILEUPLOAD-140 was marked as resolve by using the streaming API, if I'm not mistaken. &amp;nbsp;No change was done. &amp;nbsp;But I disagree on the resolution of simply using the streaming API (as detailed in &lt;a href=&quot;http://commons.apache.org/fileupload/streaming.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://commons.apache.org/fileupload/streaming.html&lt;/a&gt;).
&lt;br&gt;&amp;gt; First of all, I tried to upload a big file exceeding maxSize with streaming API and got the SizeLimitExceededException even before ANY parameter has been read. &amp;nbsp;
&lt;br&gt;&amp;gt; ServletFileUpload.getItemIterator() calls FileUploadBase.getItemIterator() which creates a new FileItemIteratorImpl(). &amp;nbsp;In the constructor code of FileItemIteratorImpl, it already checks for the requestSize and throws SizeLimitExceededException if sizeMax is exceeded.
&lt;br&gt;&amp;gt; I'd like to open this discussion again and hope that in the end, we can have either:
&lt;br&gt;&amp;gt; &amp;nbsp; - form field parameters BEFORE the file parameter will still get read if requestSize is greater than sizeMax and then terminate once we reach the file
&lt;br&gt;&amp;gt; &amp;nbsp; - all form field parameters will still get read if requestSize is greater than sizeMax. &amp;nbsp;But, we should skip reading the body of the files and proceed to the next 'boundary' so as not to keep the user waiting, if ever this is possible. (preferred)
&lt;br&gt;&amp;gt; Then, we should also apply the same improvement into PortletFileUpload.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28FILEUPLOAD-168%29-read-form-field-parameters-even-if-maxSize-has-been-exceeded-tp19792563p19834921.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19832550</id>
	<title>[jira] Commented: (LANG-464) EqualsBuilder doesn't compile in 2.4 source code release</title>
	<published>2008-10-05T23:21:44Z</published>
	<updated>2008-10-05T23:21:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/jira/browse/LANG-464?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12637012#action_12637012&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/LANG-464?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12637012#action_12637012&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Henri Yandell commented on LANG-464:
&lt;br&gt;------------------------------------
&lt;br&gt;&lt;br&gt;Bit odd in that javadoc for 1.5 shows that the compareTo(Object) was removed then; though maybe it's an Apple bug that it still has compareTo(Object) in it.
&lt;br&gt;&lt;br&gt;1.4: &lt;a href=&quot;http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html&lt;/a&gt;&lt;br&gt;1.5: &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html&lt;/a&gt;&lt;br&gt;1.6: &lt;a href=&quot;http://today.java.net/download/jdk6/doc/api/java/math/BigDecimal.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://today.java.net/download/jdk6/doc/api/java/math/BigDecimal.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;So - JDK version issue. Presumably we should check that both lhs and rhs are BigDecimal and cast both.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; EqualsBuilder doesn't compile in 2.4 source code release
&lt;br&gt;&amp;gt; --------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: LANG-464
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/LANG-464&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/LANG-464&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Commons Lang
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 2.4
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Environment: Windows Vista in Eclipse
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Tim Halloran
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Line 381 of org.apache.commons.lang.EqualsBuilder fails to compile because the compareTo call requires a BigDecimal rather than an object.
&lt;br&gt;&amp;gt; 376 public EqualsBuilder append(Object lhs, Object rhs) {
&lt;br&gt;&amp;gt; ...
&lt;br&gt;&amp;gt; 379 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!lhsClass.isArray()) {
&lt;br&gt;&amp;gt; 380 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (lhs instanceof java.math.BigDecimal) {
&lt;br&gt;&amp;gt; 381 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isEquals = (((java.math.BigDecimal)lhs).compareTo(rhs) == 0);
&lt;br&gt;&amp;gt; 382 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;gt; I'm using Sun's JDK 1.6.0_07 in Eclipse, not sure if this is a JDK version issue or not.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28LANG-464%29-EqualsBuilder-doesn%27t-compile-in-2.4-source-code-release-tp19768964p19832550.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19832430</id>
	<title>[jira] Closed: (LANG-463) Ant build file does not include ReflectTestSuite</title>
	<published>2008-10-05T23:05:44Z</published>
	<updated>2008-10-05T23:05:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/jira/browse/LANG-463?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/LANG-463?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Henri Yandell closed LANG-463.
&lt;br&gt;------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Resolution: Fixed
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fix Version/s: 3.0
&lt;br&gt;&lt;br&gt;Applied in 701953.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Ant build file does not include ReflectTestSuite
&lt;br&gt;&amp;gt; ------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: LANG-463
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/LANG-463&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/LANG-463&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Commons Lang
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 2.4
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Sebb
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fix For: 3.0
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: build_xml.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ant build file does not include ReflectTestSuite.
&lt;br&gt;&amp;gt; Patch to follow.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28LANG-463%29-Ant-build-file-does-not-include-ReflectTestSuite-tp19604590p19832430.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19832425</id>
	<title>svn commit: r701953 - /commons/proper/lang/trunk/build.xml</title>
	<published>2008-10-05T23:05:32Z</published>
	<updated>2008-10-05T23:05:32Z</updated>
	<author>
		<name>hen</name>
	</author>
	<content type="html">Author: bayard
&lt;br&gt;Date: Sun Oct &amp;nbsp;5 23:05:32 2008
&lt;br&gt;New Revision: 701953
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=701953&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=701953&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;Adding reflect to the build.xml as per LANG-463
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; commons/proper/lang/trunk/build.xml
&lt;br&gt;&lt;br&gt;Modified: commons/proper/lang/trunk/build.xml
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/commons/proper/lang/trunk/build.xml?rev=701953&amp;r1=701952&amp;r2=701953&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/commons/proper/lang/trunk/build.xml?rev=701953&amp;r1=701952&amp;r2=701953&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- commons/proper/lang/trunk/build.xml (original)
&lt;br&gt;+++ commons/proper/lang/trunk/build.xml Sun Oct &amp;nbsp;5 23:05:32 2008
&lt;br&gt;@@ -147,6 +147,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test.exception,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test.math,
&lt;br&gt;&amp;nbsp;						 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test.mutable,
&lt;br&gt;+						 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test.reflect,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;						test.text,
&lt;br&gt;&amp;nbsp;						 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test.time&amp;quot; description=&amp;quot;Run all unit test cases&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp;		&amp;lt;echo message=&amp;quot;Running tests ...&amp;quot;/&amp;gt;
&lt;br&gt;@@ -181,6 +182,9 @@
&lt;br&gt;&amp;nbsp;	&amp;lt;target name=&amp;quot;test.mutable&amp;quot; depends=&amp;quot;compile.tests&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp;		&amp;lt;runTestCase classname=&amp;quot;org.apache.commons.lang.mutable.MutableTestSuite&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp;	&amp;lt;/target&amp;gt;
&lt;br&gt;+	&amp;lt;target name=&amp;quot;test.reflect&amp;quot; depends=&amp;quot;compile.tests&amp;quot;&amp;gt;
&lt;br&gt;+		&amp;lt;runTestCase classname=&amp;quot;org.apache.commons.lang.reflect.ReflectTestSuite&amp;quot;/&amp;gt;
&lt;br&gt;+	&amp;lt;/target&amp;gt;
&lt;br&gt;&amp;nbsp;	&amp;lt;target name=&amp;quot;test.text&amp;quot; depends=&amp;quot;compile.tests&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp;		&amp;lt;runTestCase classname=&amp;quot;org.apache.commons.lang.text.TextTestSuite&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp;	&amp;lt;/target&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Dev-f317.html&quot; embed=&quot;fixTarget[317]&quot; target=&quot;_top&quot; &gt;Commons - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/svn-commit%3A-r701953----commons-proper-lang-trunk-build.xml-tp19832425p19832425.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19832403</id>
	<title>[jira] Commented: (IO-182) add new APPEND parameter for writing string into files</title>
	<published>2008-10-05T23:03:44Z</published>
	<updated>2008-10-05T23:03:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; [ &lt;a href=&quot;https://issues.apache.org/jira/browse/IO-182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12637005#action_12637005&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/IO-182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12637005#action_12637005&lt;/a&gt;&amp;nbsp;] 
&lt;br&gt;&lt;br&gt;Henri Yandell commented on IO-182:
&lt;br&gt;----------------------------------
&lt;br&gt;&lt;br&gt;Bad way of doing APIs though - what you're really asking for is an appendStringToFile imo.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; add new APPEND parameter for writing string into files
&lt;br&gt;&amp;gt; ------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: IO-182
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/IO-182&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/IO-182&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Commons IO
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: New Feature
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Streams/Writers
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.4
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Stefan Simik
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It would be great to have one additional parameter for writing strins into file - boolean append.
&lt;br&gt;&amp;gt; If true, string will be appended to the end of the file.
&lt;br&gt;&amp;gt; It is very useful for many purposes, for example logging and so on..
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28IO-182%29-add-new-APPEND-parameter-for-writing-string-into-files-tp19702457p19832403.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19830391</id>
	<title>Re: [compress] What is the purpose of the reflection usage in ArchiveStreamFactory and CompressorStreamFactory?</title>
	<published>2008-10-05T17:08:37Z</published>
	<updated>2008-10-05T17:08:37Z</updated>
	<author>
		<name>Torsten Curdt-2</name>
	</author>
	<content type="html">&amp;gt; I will fix it up and suggest a patch to bring it to a workable state.
&lt;br&gt;&lt;br&gt;I guess we could also just get rid of the reflection. What do you think?
&lt;br&gt;&lt;br&gt;cheers
&lt;br&gt;--
&lt;br&gt;Torsten
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19830391&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19830391&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Dev-f317.html&quot; embed=&quot;fixTarget[317]&quot; target=&quot;_top&quot; &gt;Commons - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/COMPRESS-REDESIGN%3A-What-is-the-purpose-of-the-reflection-usage-in-ArchiveStreamFactory-and-CompressorStreamFactory--tp19824922p19830391.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19830013</id>
	<title>[jira] Updated: (SANDBOX-262) COMPRESS-REDESIGN: ArchiveStreamFactory does not handle exceptions for createArchiveInputStream(InputStream)</title>
	<published>2008-10-05T16:07:44Z</published>
	<updated>2008-10-05T16:07:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;https://issues.apache.org/jira/browse/SANDBOX-262?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/SANDBOX-262?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Tim Pinet updated SANDBOX-262:
&lt;br&gt;------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: ArchiveStreamFactory.patch
&lt;br&gt;&lt;br&gt;Attached patch throws exceptions properly. Also, cleaned up some strings in the class.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; COMPRESS-REDESIGN: ArchiveStreamFactory does not handle exceptions for createArchiveInputStream(InputStream)
&lt;br&gt;&amp;gt; ------------------------------------------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: SANDBOX-262
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/SANDBOX-262&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/SANDBOX-262&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: Commons Sandbox
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Compress
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Environment: N/A
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Tim Pinet
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: ArchiveStreamFactory.patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; Original Estimate: 5h
&lt;br&gt;&amp;gt; &amp;nbsp;Remaining Estimate: 5h
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Reflection handles the checked exceptions for Constructor.newInstance() appropriately for:
&lt;br&gt;&amp;gt; public ArchiveInputStream createArchiveInputStream( final String archiverName, final InputStream out ) throws ArchiveException {...}
&lt;br&gt;&amp;gt; However, the other method:
&lt;br&gt;&amp;gt; public ArchiveInputStream createArchiveInputStream( final InputStream input ) throws IOException {...}
&lt;br&gt;&amp;gt; is not implemented to handle checked constructor exceptions since all Exception catches are not handled. It looks as though this method was not completed. This method should handle exceptions similar to its counterpart.
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28SANDBOX-262%29-COMPRESS-REDESIGN%3A-ArchiveStreamFactory-does-not-handle-exceptions-for-createArchiveInputStream%28InputStream%29-tp19830003p19830013.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19830003</id>
	<title>[jira] Created: (SANDBOX-262) COMPRESS-REDESIGN: ArchiveStreamFactory does not handle exceptions for createArchiveInputStream(InputStream)</title>
	<published>2008-10-05T16:05:44Z</published>
	<updated>2008-10-05T16:05:44Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">COMPRESS-REDESIGN: ArchiveStreamFactory does not handle exceptions for createArchiveInputStream(InputStream)
&lt;br&gt;------------------------------------------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: SANDBOX-262
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/jira/browse/SANDBOX-262&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/SANDBOX-262&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: Commons Sandbox
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Components: Compress
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Environment: N/A
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Tim Pinet
&lt;br&gt;&lt;br&gt;&lt;br&gt;Reflection handles the checked exceptions for Constructor.newInstance() appropriately for:
&lt;br&gt;&lt;br&gt;public ArchiveInputStream createArchiveInputStream( final String archiverName, final InputStream out ) throws ArchiveException {...}
&lt;br&gt;&lt;br&gt;However, the other method:
&lt;br&gt;&lt;br&gt;public ArchiveInputStream createArchiveInputStream( final InputStream input ) throws IOException {...}
&lt;br&gt;&lt;br&gt;is not implemented to handle checked constructor exceptions since all Exception catches are not handled. It looks as though this method was not completed. This method should handle exceptions similar to its counterpart.
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Issues-f25499.html&quot; embed=&quot;fixTarget[25499]&quot; target=&quot;_top&quot; &gt;Commons - Issues&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-jira--Created%3A-%28SANDBOX-262%29-COMPRESS-REDESIGN%3A-ArchiveStreamFactory-does-not-handle-exceptions-for-createArchiveInputStream%28InputStream%29-tp19830003p19830003.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19829970</id>
	<title>svn commit: r701899 - in /commons/proper/net/tags/NET_2_0_RC_4: ./ pom.xml</title>
	<published>2008-10-05T16:01:30Z</published>
	<updated>2008-10-05T16:01:30Z</updated>
	<author>
		<name>rwinston</name>
	</author>
	<content type="html">Author: rwinston
&lt;br&gt;Date: Sun Oct &amp;nbsp;5 16:01:29 2008
&lt;br&gt;New Revision: 701899
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=701899&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=701899&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;made a copy
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; commons/proper/net/tags/NET_2_0_RC_4/
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - copied from r699798, commons/proper/net/branches/NET_2_0/
&lt;br&gt;&amp;nbsp; &amp;nbsp; commons/proper/net/tags/NET_2_0_RC_4/pom.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - copied unchanged from r700919, commons/proper/net/branches/NET_2_0/pom.xml
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Dev-f317.html&quot; embed=&quot;fixTarget[317]&quot; target=&quot;_top&quot; &gt;Commons - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/svn-commit%3A-r701899---in--commons-proper-net-tags-NET_2_0_RC_4%3A-.--pom.xml-tp19829970p19829970.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19829875</id>
	<title>Re: [compress] What is the purpose of the reflection usage in ArchiveStreamFactory and CompressorStreamFactory?</title>
	<published>2008-10-05T15:44:21Z</published>
	<updated>2008-10-05T15:44:21Z</updated>
	<author>
		<name>Timothy James Pinet</name>
	</author>
	<content type="html">Reflection does handle checked exceptions for Constructor.newInstance() and 
&lt;br&gt;this is handled appropriately for:
&lt;br&gt;&lt;br&gt;public ArchiveInputStream createArchiveInputStream( final String 
&lt;br&gt;archiverName, final InputStream out ) throws ArchiveException {...}
&lt;br&gt;&lt;br&gt;However, the other method:
&lt;br&gt;&lt;br&gt;public ArchiveInputStream createArchiveInputStream( final InputStream 
&lt;br&gt;input ) throws IOException {...}
&lt;br&gt;&lt;br&gt;is not implemented to handle checked constructor exceptions since all 
&lt;br&gt;Exception catches are not handled. It looks as though this method was not 
&lt;br&gt;completed. I will fix it up and suggest a patch to bring it to a workable 
&lt;br&gt;state.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;Tim
&lt;br&gt;&lt;br&gt;--------------------------------------------------
&lt;br&gt;From: &amp;quot;Torsten Curdt&amp;quot; &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19829875&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tcurdt@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Sent: Sunday, October 05, 2008 10:27 AM
&lt;br&gt;To: &amp;quot;Commons Developers List&amp;quot; &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19829875&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Subject: [compress] What is the purpose of the reflection usage in 
&lt;br&gt;ArchiveStreamFactory and CompressorStreamFactory?
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hey there
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Out of curiosity why must reflection be used for the create*Stream() 
&lt;br&gt;&amp;gt;&amp;gt; methods in the ArchiveStreamFactory and CompressorStreamFactory? &amp;nbsp;There 
&lt;br&gt;&amp;gt;&amp;gt; is a cast at the end of each method to a corresponding &amp;nbsp;interface anyway 
&lt;br&gt;&amp;gt;&amp;gt; (ex ArchiveInputStream, ArchiveOutputStream, etc) &amp;nbsp;so why cant we use 
&lt;br&gt;&amp;gt;&amp;gt; this knowledge ahead of time and execute on the &amp;nbsp;interface?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I think the idea that it makes &amp;quot;dropping in&amp;quot; a new implementation &amp;nbsp;easier. 
&lt;br&gt;&amp;gt; But I agree with you.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; As the registerArchive*Stream methods need to be called to register &amp;nbsp;the 
&lt;br&gt;&amp;gt; implementation this becomes a moo point.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I would change the factory to
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; public ArchiveInputStream createArchiveInputStream( final String 
&lt;br&gt;&amp;gt; archiverName, final InputStream stream ) throws ArchiveException {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;ar&amp;quot;.equals(archiverName)) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new ArAchiveInputStream(stream)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;..
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; and then instead of registering a new implementation you just extend &amp;nbsp;the 
&lt;br&gt;&amp;gt; factory and overload the create*Stream methods to add your custom &amp;nbsp;impl 
&lt;br&gt;&amp;gt; ...and of course delegate to the super class.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; The current implementation makes it next to impossible to capture &amp;nbsp;errors 
&lt;br&gt;&amp;gt;&amp;gt; being thrown by the constructors of new implementations since &amp;nbsp;the 
&lt;br&gt;&amp;gt;&amp;gt; reflective methods discard any Exceptions and simply return null.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hm ... I thought that would be indeed possible:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://java.sun.com/docs/books/tutorial/reflect/member/ctorTrouble.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://java.sun.com/docs/books/tutorial/reflect/member/ctorTrouble.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; cheers
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Torsten
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19829875&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19829875&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19829875&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19829875&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://www.nabble.com/Commons---Dev-f317.html&quot; embed=&quot;fixTarget[317]&quot; target=&quot;_top&quot; &gt;Commons - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/COMPRESS-REDESIGN%3A-What-is-the-purpose-of-the-reflection-usage-in-ArchiveStreamFactory-and-CompressorStreamFactory--tp19824922p19829875.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19829826</id>
	<title>svn commit: r701897 - in /commons/proper/math/branches/MATH_2_0/src: java/org/apache/commons/math/linear/ test/org/apache/commons/math/linear/</title>
	<published>2008-10-05T15:38:14Z</published>
	<updated>2008-10-05T15:38:14Z</updated>
	<author>
		<name>luc-17</name>
	</author>
	<content type="html">Author: luc
&lt;br&gt;Date: Sun Oct &amp;nbsp;5 15:38:13 2008
&lt;br&gt;New Revision: 701897
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=701897&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=701897&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;added a first version of eigen decomposition implementation
&lt;br&gt;this version is not finished yet, but it does work when
&lt;br&gt;eigenvalues are well separated and is faster than JAMA for
&lt;br&gt;dimensions above 100.
&lt;br&gt;It still needs work as the MRRR algorithm is not implemented
&lt;br&gt;yet (only the basic parts with twisted factorization is there).
&lt;br&gt;I continue working on this, but wanted to have a first version
&lt;br&gt;committed to let people play with it and as a basis for comparison.
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java &amp;nbsp; (with props)
&lt;br&gt;&amp;nbsp; &amp;nbsp; commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/GershgorinCirclesUnion.java &amp;nbsp; (with props)
&lt;br&gt;&amp;nbsp; &amp;nbsp; commons/proper/math/branches/MATH_2_0/src/test/org/apache/commons/math/linear/EigenDecompositionImplTest.java &amp;nbsp; (with props)
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecomposition.java
&lt;br&gt;&lt;br&gt;Modified: commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecomposition.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecomposition.java?rev=701897&amp;r1=701896&amp;r2=701897&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecomposition.java?rev=701897&amp;r1=701896&amp;r2=701897&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecomposition.java (original)
&lt;br&gt;+++ commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecomposition.java Sun Oct &amp;nbsp;5 15:38:13 2008
&lt;br&gt;@@ -35,7 +35,11 @@
&lt;br&gt;&amp;nbsp; * &amp;nbsp; been added (in the superinterface),&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp; * &amp;nbsp; &amp;lt;li&amp;gt;a {@link DecompositionSolver#getInverse() getInverse} method has been
&lt;br&gt;&amp;nbsp; * &amp;nbsp; added (in the superinterface),&amp;lt;/li&amp;gt;
&lt;br&gt;- * &amp;nbsp; &amp;lt;li&amp;gt;a {@link #getVt() getVt} method has been added,&amp;lt;/li&amp;gt;
&lt;br&gt;+ * &amp;nbsp; &amp;lt;li&amp;gt;a {@link #getVT() getVt} method has been added,&amp;lt;/li&amp;gt;
&lt;br&gt;+ * &amp;nbsp; &amp;lt;li&amp;gt;a {@link #getEigenvalue(int) getEigenvalue} method to pick up a single
&lt;br&gt;+ * &amp;nbsp; eigenvalue has been added,&amp;lt;/li&amp;gt;
&lt;br&gt;+ * &amp;nbsp; &amp;lt;li&amp;gt;a {@link #getEigenvector(int) getEigenvector} method to pick up a single
&lt;br&gt;+ * &amp;nbsp; eigenvector has been added,&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp; * &amp;nbsp; &amp;lt;li&amp;gt;the &amp;lt;code&amp;gt;getRealEigenvalues&amp;lt;/code&amp;gt; method has been renamed as {@link
&lt;br&gt;&amp;nbsp; * &amp;nbsp; #getEigenValues() getEigenValues},&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp; * &amp;nbsp; &amp;lt;li&amp;gt;the &amp;lt;code&amp;gt;getImagEigenvalues&amp;lt;/code&amp;gt; method has been removed&amp;lt;/li&amp;gt;
&lt;br&gt;@@ -76,15 +80,43 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @exception IllegalStateException if {@link
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * DecompositionSolver#decompose(RealMatrix) decompose} has not been called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;RealMatrix getVt() throws IllegalStateException;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;RealMatrix getVT() throws IllegalStateException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Returns the eigenvalues of the original matrix.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @return eigenvalues of the original matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Returns a copy of the eigenvalues of the original matrix.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return a copy of the eigenvalues of the original matrix
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @exception IllegalStateException if {@link
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * DecompositionSolver#decompose(RealMatrix) decompose} has not been called
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @see #getD()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;double[] getEigenValues() throws IllegalStateException;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;double[] getEigenvalues() throws IllegalStateException;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Returns the i&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; eigenvalue of the original matrix.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return i&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; eigenvalue of the original matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception IllegalStateException if {@link
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * DecompositionSolver#decompose(RealMatrix) decompose} has not been called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception ArrayIndexOutOfBoundsException if i is not
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @see #getD()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;double getEigenvalue(int i) throws IllegalStateException;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Returns a copy of the i&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; eigenvector of the original matrix.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return copy of the i&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; eigenvector of the original matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception IllegalStateException if {@link
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * DecompositionSolver#decompose(RealMatrix) decompose} has not been called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @see #getD()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;RealVector getEigenvector(int i) throws IllegalStateException;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Return the determinant of the matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return determinant of the matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception IllegalStateException if {@link
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * DecompositionSolver#decompose(RealMatrix) decompose} has not been called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @see #isNonSingular()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;double getDeterminant() throws IllegalStateException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Added: commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java?rev=701897&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java?rev=701897&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java (added)
&lt;br&gt;+++ commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java Sun Oct &amp;nbsp;5 15:38:13 2008
&lt;br&gt;@@ -0,0 +1,658 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Licensed to the Apache Software Foundation (ASF) under one or more
&lt;br&gt;+ * contributor license agreements. &amp;nbsp;See the NOTICE file distributed with
&lt;br&gt;+ * this work for additional information regarding copyright ownership.
&lt;br&gt;+ * The ASF licenses this file to You under the Apache License, Version 2.0
&lt;br&gt;+ * (the &amp;quot;License&amp;quot;); you may not use this file except in compliance with
&lt;br&gt;+ * the License. &amp;nbsp;You may obtain a copy of the License at
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;+ *
&lt;br&gt;+ * Unless required by applicable law or agreed to in writing, software
&lt;br&gt;+ * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
&lt;br&gt;+ * See the License for the specific language governing permissions and
&lt;br&gt;+ * limitations under the License.
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+package org.apache.commons.math.linear;
&lt;br&gt;+
&lt;br&gt;+import java.util.ArrayList;
&lt;br&gt;+import java.util.Arrays;
&lt;br&gt;+import java.util.List;
&lt;br&gt;+import java.util.SortedSet;
&lt;br&gt;+import java.util.TreeSet;
&lt;br&gt;+
&lt;br&gt;+import org.apache.commons.math.ConvergenceException;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * Calculates the eigen decomposition of a matrix.
&lt;br&gt;+ * &amp;lt;p&amp;gt;The eigen decomposition of matrix A is a set of two matrices:
&lt;br&gt;+ * V and D such that A = V &amp;times; D &amp;times; V&amp;lt;sup&amp;gt;T&amp;lt;/sup&amp;gt;.
&lt;br&gt;+ * Let A be an m &amp;times; n matrix, then V is an m &amp;times; m orthogonal matrix
&lt;br&gt;+ * and D is a m &amp;times; n diagonal matrix.&amp;lt;/p&amp;gt;
&lt;br&gt;+ * &amp;lt;p&amp;gt;This implementation is based on Inderjit Singh Dhillon thesis
&lt;br&gt;+ * &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://www.cs.utexas.edu/users/inderjit/public_papers/thesis.pdf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.cs.utexas.edu/users/inderjit/public_papers/thesis.pdf&lt;/a&gt;&amp;quot;&amp;gt;A
&lt;br&gt;+ * New O(n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) Algorithm for the Symmetric Tridiagonal Eigenvalue/Eigenvector
&lt;br&gt;+ * Problem&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
&lt;br&gt;+ * @version $Revision$ $Date$
&lt;br&gt;+ * @since 2.0
&lt;br&gt;+ */
&lt;br&gt;+public class EigenDecompositionImpl implements EigenDecomposition {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Serializable version identifier. */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private static final long serialVersionUID = -8550254713195393577L;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Eigenvalues. */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private double[] eigenvalues;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Eigenvectors. */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private RealVectorImpl[] eigenvectors;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Cached value of V. */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private RealMatrix cachedV;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Cached value of D. */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private RealMatrix cachedD;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Cached value of Vt. */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private RealMatrix cachedVt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Build a new instance.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;Note that {@link #decompose(RealMatrix)} &amp;lt;strong&amp;gt;must&amp;lt;/strong&amp;gt; be called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * before any of the {@link #getV()}, {@link #getD()}, {@link #getVT()},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * {@link #getEignevalues()}, {@link #solve(double[])}, {@link #solve(RealMatrix)},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * {@link #solve(RealVector)} or {@link #solve(RealVectorImpl)} methods can be
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * called.&amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @see #decompose(RealMatrix)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public EigenDecompositionImpl() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Calculates the eigen decomposition of the given matrix. 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;Calling this constructor is equivalent to first call the no-arguments
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * constructor and then call {@link #decompose(RealMatrix)}.&amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param matrix The matrix to decompose.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception InvalidMatrixException (wrapping a {@link ConvergenceException}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * if algorithm fails to converge
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public EigenDecompositionImpl(RealMatrix matrix)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;decompose(matrix);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void decompose(RealMatrix matrix)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cachedV &amp;nbsp;= null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cachedD &amp;nbsp;= null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cachedVt = null;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// transform the matrix to tridiagonal
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TriDiagonalTransformer transformer = new TriDiagonalTransformer(matrix);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] main &amp;nbsp; &amp;nbsp; &amp;nbsp;= transformer.getMainDiagonalRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] secondary = transformer.getSecondaryDiagonalRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = main.length;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// pre-compute the square of the secondary diagonal
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double[] squaredSecondary = new double[secondary.length];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; squaredSecondary.length; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double s = secondary[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;squaredSecondary[i] = s * s;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// compute the eigenvalues bounds
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List&amp;lt;GershgorinCirclesUnion&amp;gt; bounds =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getEigenvaluesBounds(main, secondary);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// TODO this implementation is not finished yet
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// the MRRR algorithm is NOT implemented, Gershgorin circles are
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// merged together when they could be separated, we only perform blindly
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// the basic steps, we search all eigenvalues with an arbitrary
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// threshold, we use twisted factorization afterwards with no
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// heuristic to speed up the selection of the twist index ...
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// The decomposition does work in its current state and seems reasonably
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// efficient when eigenvalues are separated. However, it is expected to
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// fail in difficult cases and its performances can obviously be improved
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// for now, it is slower than JAMA for dimensions below 100 and faster
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// for dimensions above 100. The speed gain with respect to JAMA increase
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// regularly with dimension
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// find eigenvalues using bisection
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eigenvalues = new double[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double low &amp;nbsp;= bounds.get(0).getLow();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double high = bounds.get(bounds.size() - 1).getHigh();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double threshold =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1.0e-15 * Math.max(Math.abs(low), Math.abs(high));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;findEigenvalues(main, squaredSecondary, low, high, threshold, 0, m);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// find eigenvectors
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eigenvectors = new RealVectorImpl[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] eigenvector = new double[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] lp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= new double[m - 1];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] dp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= new double[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] um &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= new double[m - 1];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] dm &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= new double[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] gamma &amp;nbsp; &amp;nbsp; &amp;nbsp; = new double[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; m; ++i) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// find the eigenvector of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;findEigenvector(eigenvalues[i], eigenvector,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;main, secondary, lp, dp, um, dm, gamma);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// find the eigenvector of the original matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eigenvectors[i] =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new RealVectorImpl(transformer.getQ().operate(eigenvector), true);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealMatrix getV()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (cachedV == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cachedV = getVT().transpose();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// return the cached matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return cachedV;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealMatrix getD()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (cachedD == null) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkDecomposed();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = eigenvalues.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[][] sData = new double[m][m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sData[i][i] = eigenvalues[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// cache the matrix for subsequent calls
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cachedD = new RealMatrixImpl(sData, false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return cachedD;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealMatrix getVT()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (cachedVt == null) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkDecomposed();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[][] vtData = new double[eigenvectors.length][];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int k = 0; k &amp;lt; eigenvectors.length; ++k) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vtData[k] = eigenvectors[k].getData();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// cache the matrix for subsequent calls
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cachedVt = new RealMatrixImpl(vtData, false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// return the cached matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return cachedVt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public double[] getEigenvalues()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkDecomposed();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return eigenvalues.clone();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public double getEigenvalue(final int i)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException, ArrayIndexOutOfBoundsException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkDecomposed();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return eigenvalues[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealVector getEigenvector(final int i)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws InvalidMatrixException, ArrayIndexOutOfBoundsException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkDecomposed();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return eigenvectors[i].copy();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isNonSingular()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalStateException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (double lambda : eigenvalues) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lambda == 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public double[] solve(final double[] b)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalArgumentException, InvalidMatrixException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkNonSingular();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = eigenvalues.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (b.length != m) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;constant vector has wrong length&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] bp = new double[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final RealVectorImpl v = eigenvectors[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double s = v.dotProduct(b) / eigenvalues[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] vData = v.getDataRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int j = 0; j &amp;lt; m; ++j) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bp[j] += s * vData[j];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return bp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealVector solve(final RealVector b)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalArgumentException, InvalidMatrixException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return solve((RealVectorImpl) b);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (ClassCastException cce) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkNonSingular();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = eigenvalues.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (b.getDimension() != m) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;constant vector has wrong length&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] bp = new double[m];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final RealVectorImpl v = eigenvectors[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double s = v.dotProduct(b) / eigenvalues[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] vData = v.getDataRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int j = 0; j &amp;lt; m; ++j) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bp[j] += s * vData[j];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RealVectorImpl(bp, false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Solve the linear equation A &amp;times; X = B.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;The A matrix is implicit here. It is &amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param b right-hand side of the equation A &amp;times; X = B
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return a vector X such that A &amp;times; X = B
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @throws IllegalArgumentException if matrices dimensions don't match
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @throws InvalidMatrixException if decomposed matrix is singular
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealVectorImpl solve(final RealVectorImpl b)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalArgumentException, InvalidMatrixException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RealVectorImpl(solve(b.getDataRef()), false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealMatrix solve(final RealMatrix b)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalArgumentException, InvalidMatrixException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkNonSingular();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = eigenvalues.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (b.getRowDimension() != m) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;Incorrect row dimension&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int nColB = b.getColumnDimension();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[][] bp = new double[m][nColB];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int k = 0; k &amp;lt; nColB; ++k) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] vData = eigenvectors[i].getDataRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double s = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int j = 0; j &amp;lt; m; ++j) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s += vData[j] * b.getEntry(j, k);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s /= eigenvalues[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int j = 0; j &amp;lt; m; ++j) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bp[j][k] += s * vData[j];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RealMatrixImpl(bp, false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RealMatrix getInverse()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalStateException, InvalidMatrixException {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkNonSingular();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = eigenvalues.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[][] invData = new double[m][m];
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] invI = invData[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int j = 0; j &amp;lt; m; ++j) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double invIJ = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int k = 0; k &amp;lt; m; ++k) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] vK = eigenvectors[k].getDataRef();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;invIJ += vK[i] * vK[j] / eigenvalues[k];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;invI[j] = invIJ;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RealMatrixImpl(invData, false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** {@inheritDoc} */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public double getDeterminant()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalStateException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double determinant = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (double lambda : eigenvalues) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;determinant *= lambda;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return determinant;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Compute a set of possible bounding intervals for eigenvalues
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * of a symmetric tridiagonal matrix.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;The intervals are computed by applying the Gershgorin circle theorem.&amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param main main diagonal
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param secondary secondary diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return a collection of disjoint intervals where eigenvalues must lie,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * sorted in increasing order
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private List&amp;lt;GershgorinCirclesUnion&amp;gt; getEigenvaluesBounds(final double[] main,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] secondary) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final SortedSet&amp;lt;GershgorinCirclesUnion&amp;gt; rawCircles =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new TreeSet&amp;lt;GershgorinCirclesUnion&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = main.length;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// compute all the Gershgorin circles independently
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rawCircles.add(new GershgorinCirclesUnion(main[0],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Math.abs(secondary[0])));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 1; i &amp;lt; m - 1; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rawCircles.add(new GershgorinCirclesUnion(main[i],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Math.abs(secondary[i - 1]) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Math.abs(secondary[i])));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rawCircles.add(new GershgorinCirclesUnion(main[m - 1],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Math.abs(secondary[m - 2])));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// combine intersecting circles
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final ArrayList&amp;lt;GershgorinCirclesUnion&amp;gt; combined =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new ArrayList&amp;lt;GershgorinCirclesUnion&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GershgorinCirclesUnion current = null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (GershgorinCirclesUnion rawCircle : rawCircles) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (current == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;current = rawCircle;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (current.intersects(rawCircle)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;current.swallow(rawCircle);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combined.add(current);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;current = rawCircle;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (current != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;combined.add(current);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return combined;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/** Find eigenvalues in an interval.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param main main diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param squaredSecondary squared secondary diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param low lower bound of the search interval
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param high higher bound of the search interval
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param threshold convergence threshold
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param iStart index of the first eigenvalue to find
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param iEnd index one unit past the last eigenvalue to find
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void findEigenvalues(final double[] main, final double[] squaredSecondary,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final double low, final double high, final double threshold,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final int iStart, final int iEnd) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// use a simple loop to handle tail-recursion cases
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double currentLow &amp;nbsp; = low;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double currentHigh &amp;nbsp;= high;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int &amp;nbsp; &amp;nbsp;currentStart = iStart;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (true) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double middle = 0.5 * (currentLow + currentHigh);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (currentHigh - currentLow &amp;lt; threshold) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// we have found an elementary interval containing one or more eigenvalues
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Arrays.fill(eigenvalues, currentStart, iEnd, middle);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// compute the number of eigenvalues below the middle interval point
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int iMiddle = countEigenValues(main, squaredSecondary, middle);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (iMiddle == currentStart) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// all eigenvalues are in the upper half of the search interval
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// update the interval and iterate
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;currentLow = middle;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (iMiddle == iEnd) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// all eigenvalues are in the lower half of the search interval
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// update the interval and iterate
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;currentHigh = middle; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// split the interval and search eigenvalues in both sub-intervals
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;findEigenvalues(main, squaredSecondary, currentLow, middle, threshold,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;currentStart, iMiddle);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;currentLow &amp;nbsp; = middle;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;currentStart = iMiddle;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Count the number of eigenvalues below a point.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param main main diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param squaredSecondary squared secondary diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param mu value below which we must count the number of eigenvalues
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return number of eigenvalues smaller than mu
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private int countEigenValues(final double[] main, final double[] squaredSecondary,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final double mu) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double ratio = main[0] - mu;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int count = (ratio &amp;gt; 0) ? 0 : 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 1; i &amp;lt; main.length; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ratio = main[i] - squaredSecondary[i - 1] / ratio - mu;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ratio &amp;lt;= 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;++count;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return count;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Decompose the shifted tridiagonal matrix A - lambda I as L&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;times; D&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; &amp;times; U&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt;.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;A shifted symmetric tridiagonal matrix can be decomposed as
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * L&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; &amp;times; D&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; &amp;times; U&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; where L&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * is a lower bi-diagonal matrix with unit diagonal, D&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; is a diagonal
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * matrix and U&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; is the transpose of L&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt;. The '+' indice
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * comes from Dhillon's notation since decomposition is done in
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * increasing rows order).&amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param main main diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param secondary secondary diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param lambda shift to apply to the matrix before decomposing it
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param r index at which factorization should stop (if r is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;lt;code&amp;gt;main.length&amp;lt;/code&amp;gt;, complete factorization is performed)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param lp placeholder where to put the (r-1) first off-diagonal
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * elements of the L&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param dp placeholder where to put the r first diagonal elements
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * of the D&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void lduDecomposition(final double[] main, final double[] secondary,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double lambda, final int r,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] lp, final double[] dp) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double di = main[0] - lambda;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dp[0] = di;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 1; i &amp;lt; r; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double eiM1 = secondary[i - 1];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double ratio = eiM1 / di;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;di = main[i] - lambda - eiM1 * ratio;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lp[i - 1] = ratio;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dp[i] = di;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Decompose the shifted tridiagonal matrix A - lambda I as U&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;times; D&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; &amp;times; L&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt;.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;A shifted symmetric tridiagonal matrix can be decomposed as
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * U&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; &amp;times; D&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; &amp;times; L&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; where U&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * is an upper bi-diagonal matrix with unit diagonal, D&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; is a diagonal
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * matrix and L&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; is the transpose of U&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt;. The '-' indice
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * comes from Dhillon's notation since decomposition is done in
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * decreasing rows order).&amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param main main diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param secondary secondary diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param lambda shift to apply to the matrix before decomposing it
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param r index at which factorization should stop (if r is 0, complete
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * factorization is performed)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param um placeholder where to put the m-(r-1) last off-diagonal elements
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * of the U&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; matrix, where m is the size of the original matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param dm placeholder where to put the m-r last diagonal elements
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * of the D&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; matrix, where m is the size of the original matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void udlDecomposition(final double[] main, final double[] secondary,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double lambda, final int r,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double[] um, final double[] dm) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int mM1 = main.length - 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double di = main[mM1] - lambda;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dm[mM1] = di;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = mM1 - 1; i &amp;gt;= r; --i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double ei = secondary[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double ratio = ei / di;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;di = main[i] - lambda - ei * ratio;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;um[i] = ratio;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dm[i] = di;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Find an eigenvector corresponding to an eigenvalue.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param eigenvalue eigenvalue for which eigenvector is desired
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param eigenvector placeholder where to put the eigenvector
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param main main diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param secondary secondary diagonal of the tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param lp placeholder where to put the off-diagonal elements of the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * L&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param dp placeholder where to put the diagonal elements of the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * D&amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param um placeholder where to put the off-diagonal elements of the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * U&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param dm placeholder where to put the diagonal elements of the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * D&amp;lt;sub&amp;gt;-&amp;lt;/sub&amp;gt; matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param gamma placeholder where to put the twist elements for all
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * possible twist indices
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void findEigenvector(final double eigenvalue, final double[] eigenvector,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final double[] main, final double[] secondary,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final double[] lp, final double[] dp,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final double[] um, final double[] dm,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; final double[] gamma) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// compute the LDU and UDL decomposition of the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// perfectly shifted tridiagonal matrix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int m = main.length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lduDecomposition(main, secondary, eigenvalue, m, lp, dp);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;udlDecomposition(main, secondary, eigenvalue, 0, um, dm);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// select the twist index leading to
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// the least diagonal element in the twisted factorization
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int r = 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double g = dp[0] + dm[0] + eigenvalue - main[0];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gamma[0] = g;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double minG = Math.abs(g);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 1; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (i &amp;lt; m - 1) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g *= dm[i + 1] / dp[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g = dp[m - 1] + dm[m - 1] + eigenvalue - main[m - 1];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gamma[i] = g;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double absG = Math.abs(g);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (absG &amp;lt; minG) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = i;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;minG = absG;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// solve the singular system by ignoring the equation
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// at twist index and propagating upwards and downwards
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double n2 = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eigenvector[r] = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double z = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = r - 1; i &amp;gt;= 0; --i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;z *= -lp[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eigenvector[i] = z;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n2 += z * z;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;z = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = r + 1; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;z *= -um[i-1];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eigenvector[i] = z;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n2 += z * z;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// normalize vector
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final double inv = 1.0 / Math.sqrt(n2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; m; ++i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eigenvector[i] *= inv;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Check if decomposition has been performed.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception IllegalStateException if {@link #decompose(RealMatrix) decompose}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * has not been called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void checkDecomposed()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalStateException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (eigenvalues == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;no matrix have been decomposed yet&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Check if decomposed matrix is non singular.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception IllegalStateException if {@link #decompose(RealMatrix) decompose}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * has not been called
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @exception InvalidMatrixException if decomposed matrix is singular
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void checkNonSingular()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throws IllegalStateException, InvalidMatrixException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checkDecomposed();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!isNonSingular()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;matrix is singular&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Propchange: commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; svn:eol-style = native
&lt;br&gt;&lt;br&gt;Propchange: commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/EigenDecompositionImpl.java
&lt;br&gt;------------------------------------------------------------------------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; svn:keywords = Author Date Id Revision
&lt;br&gt;&lt;br&gt;Added: commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/GershgorinCirclesUnion.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/commons/proper/math/branches/MATH_2_0/src/java/org/apache/commons/math/linear/GershgorinCirclesUnion.java?rev=701897&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/commons/prop