001/* 002 * $Id: JLAdapterFactory.java 5244 2015-05-01 13:29:44Z kredel $ 003 */ 004 005package edu.jas.jlinalg; 006 007 008import java.util.Random; 009 010import org.jlinalg.IRingElement; 011import org.jlinalg.IRingElementFactory; 012import org.jlinalg.Matrix; 013import org.jlinalg.Vector; 014 015import edu.jas.structure.ElemFactory; 016import edu.jas.structure.Element; 017import edu.jas.structure.RingElem; 018import edu.jas.structure.RingFactory; 019 020 021/** 022 * Class that wraps a JAS <code>RingFactory</code> in an JLinALg 023 * <code>IRingElementFactory</code>. 024 * @param <C> JAS ring element type 025 * @author Heinz Kredel 026 */ 027 028public class JLAdapterFactory<C extends RingElem<C>> implements IRingElementFactory<JLAdapter<C>> { 029 030 031 public final RingFactory<C> fac; 032 033 034 /** 035 * @param f 036 */ 037 public JLAdapterFactory(RingFactory<C> f) { 038 fac = f; 039 } 040 041 042 /** 043 * @param f element factory 044 */ 045 @SuppressWarnings("unchecked") 046 public JLAdapterFactory(ElemFactory<C> f) { 047 this((RingFactory<C>) f); 048 } 049 050 051 /** 052 * Get the string representation. 053 * @see java.lang.Object#toString() 054 */ 055 @SuppressWarnings("unchecked") 056 @Override 057 public String toString() { 058 StringBuffer s = new StringBuffer(); 059 //s.append("JLAdapterFactory("); 060 String f = null; 061 try { 062 f = ((Element<C>) fac).toScriptFactory(); 063 } catch (Exception ignored) { 064 f = fac.toScript(); 065 } 066 if (f != null) { 067 s.append(f); 068 } 069 //s.append(")"); 070 return s.toString(); 071 } 072 073 074 /** 075 * @see java.lang.Object#equals(java.lang.Object) 076 */ 077 @SuppressWarnings("unchecked") 078 @Override 079 public boolean equals(Object obj) { 080 //System.out.println("factory equals, this = " + this + ", obj = " + obj); 081 if (!(obj instanceof IRingElementFactory)) { 082 return false; 083 } 084 IRingElementFactory other = (IRingElementFactory) obj; 085 if (!(other instanceof JLAdapterFactory)) { 086 return false; 087 } 088 JLAdapterFactory<C> fother = (JLAdapterFactory<C>) other; 089 RingFactory<C> ofac = fother.fac; 090 //System.out.println("factory equals, this = " + fac.getClass() + ", obj = " + ofac.getClass()); 091 if (!fac.getClass().getName().equals(ofac.getClass().getName())) { 092 return false; 093 } 094 RingFactory<C> ofac1 = null; 095 try { 096 ofac1 = (RingFactory<C>) ((RingElem<C>) ofac).factory(); 097 } catch (ClassCastException e) { 098 } 099 if ( /*fac*/ofac.equals(ofac1)) { // case BigInteger etc 100 return true; 101 } 102 System.out.println("factory equals, this = " + ofac + ", obj = " + ofac1); 103 // if (fac.characteristic().equals(ffac.characteristic())) { 104 // return true; 105 // } 106 return fac.equals(ofac); 107 } 108 109 110 /** 111 * @see java.lang.Object#hashCode() 112 */ 113 @Override 114 public int hashCode() { 115 RingFactory<C> fac1 = null; 116 try { 117 fac1 = (RingFactory<C>) ((RingElem<C>) fac).factory(); 118 } catch (ClassCastException e) { 119 } 120 if (fac.equals(fac1)) { // case BigInteger etc 121 //int h = fac.getClass().getSimpleName().hashCode(); 122 //h = h * 37 + fac.characteristic().hashCode(); 123 return fac.getClass().getName().hashCode(); 124 } 125 return fac.hashCode(); 126 } 127 128 129 @Override 130 public JLAdapter<C> get(Object o) { 131 if (o == null) { 132 return null; 133 } 134 String s = o.toString(); 135 return new JLAdapter<C>(fac.parse(s)); 136 } 137 138 139 @Override 140 public JLAdapter<C> get(int i) { 141 return new JLAdapter<C>(fac.fromInteger(i)); 142 } 143 144 145 @Override 146 public JLAdapter<C> get(long i) { 147 return new JLAdapter<C>(fac.fromInteger(i)); 148 } 149 150 151 @Override 152 public JLAdapter<C> get(double d) { 153 throw new RuntimeException("not implemented " + d); 154 } 155 156 157 @SuppressWarnings({ "unchecked", "cast" }) 158 @Override 159 public JLAdapter<C>[] getArray(int size) { 160 JLAdapter<C>[] arr = (JLAdapter<C>[]) new JLAdapter[size]; 161 for (int i = 0; i < arr.length; i++) { 162 arr[i] = zero(); 163 } 164 return arr; 165 } 166 167 168 @SuppressWarnings({ "unchecked", "cast" }) 169 @Override 170 public JLAdapter<C>[][] getArray(int rows, int columns) { 171 JLAdapter<C>[][] arr = (JLAdapter<C>[][]) new JLAdapter[rows][columns]; 172 for (int i = 0; i < arr.length; i++) { 173 arr[i] = getArray(columns); 174 } 175 return arr; 176 } 177 178 179 /** 180 * Minus one? OK 181 * @see org.jlinalg.IRingElementFactory#m_one() 182 */ 183 @Override 184 public JLAdapter<C> m_one() { 185 return new JLAdapter<C>(fac.getONE().negate()); 186 } 187 188 189 @Override 190 public JLAdapter<C> one() { 191 return new JLAdapter<C>(fac.getONE()); 192 } 193 194 195 @Override 196 public JLAdapter<C> zero() { 197 return new JLAdapter<C>(fac.getZERO()); 198 } 199 200 201 @Deprecated 202 @Override 203 public JLAdapter<C> randomValue(Random random) { 204 return new JLAdapter<C>(fac.random(3, random)); 205 } 206 207 208 @Override 209 public JLAdapter<C> randomValue() { 210 return new JLAdapter<C>(fac.random(3)); 211 } 212 213 214 @Deprecated 215 @Override 216 public JLAdapter<C> gaussianRandomValue(Random random) { 217 throw new RuntimeException("not implemented " + random); 218 } 219 220 221 @Override 222 public JLAdapter<C> gaussianRandomValue() { 223 throw new RuntimeException("not implemented"); 224 } 225 226 227 @Deprecated 228 @Override 229 public JLAdapter<C> randomValue(Random random, JLAdapter<C> min, JLAdapter<C> max) { 230 throw new RuntimeException("not implemented"); 231 } 232 233 234 @Override 235 public JLAdapter<C> randomValue(JLAdapter<C> min, JLAdapter<C> max) { 236 throw new RuntimeException("not implemented"); 237 } 238 239 240 @SuppressWarnings({ "unchecked", "cast" }) 241 @Override 242 public Vector<JLAdapter<C>> convert(Vector<? extends IRingElement<?>> from) { 243 //if (true) { 244 // throw new RuntimeException("not implemented"); 245 //} 246 JLAdapter<C>[] to = (JLAdapter<C>[]) new JLAdapter[from.length()]; 247 for (int row = 0; row < from.length(); row++) { 248 to[row] = this.get(from.getEntry(row)); 249 } 250 return new Vector<JLAdapter<C>>(to, this); 251 } 252 253 254 @SuppressWarnings({ "unchecked", "cast" }) 255 @Override 256 public Matrix<JLAdapter<C>> convert(Matrix<? extends IRingElement<?>> from) { 257 //if (true) { 258 // throw new RuntimeException("not implemented"); 259 //} 260 JLAdapter<C>[][] to = (JLAdapter<C>[][]) new JLAdapter[from.getRows()][from.getCols()]; 261 for (int row = 0; row < from.getRows(); row++) { 262 for (int col = 0; col < from.getCols(); col++) { 263 to[row][col] = this.get(from.get(row, col)); 264 } 265 } 266 return new Matrix<JLAdapter<C>>(to, this); 267 } 268 269}