Package org.encog.persist

Source Code of org.encog.persist.EncogFileSection

/*
* Encog(tm) Core v3.3 - Java Version
* http://www.heatonresearch.com/encog/
* https://github.com/encog/encog-java-core
* Copyright 2008-2014 Heaton Research, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*  
* For more information on Heaton Research copyrights, licenses
* and trademarks visit:
* http://www.heatonresearch.com/copyright
*/
package org.encog.persist;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.encog.app.analyst.AnalystError;
import org.encog.engine.network.activation.ActivationFunction;
import org.encog.mathutil.matrices.Matrix;
import org.encog.util.csv.CSVFormat;
import org.encog.util.csv.NumberList;
import org.encog.util.csv.ParseCSVLine;

/**
* This class is used internally to parse Encog files. A file section is part of
* a name-value pair file.
*
*/
public class EncogFileSection {

  private List<double[]> largeArrays = new ArrayList<double[]>();
 
  /**
   * Parse an activation function from a value.
   * @param value The value.
   * @return The activation function.
   */
  public static ActivationFunction parseActivationFunction(String value) {
    ActivationFunction af = null;
    final String[] cols = value.split("\\|");

    final String afName = "org.encog.engine.network.activation." + cols[0];
    try {
      final Class<?> clazz = Class.forName(afName);
      af = (ActivationFunction) clazz.newInstance();
    } catch (final ClassNotFoundException e) {
      throw new PersistError(e);
    } catch (final InstantiationException e) {
      throw new PersistError(e);
    } catch (final IllegalAccessException e) {
      throw new PersistError(e);
    }

    for (int i = 0; i < af.getParamNames().length; i++) {
      af.setParam(i, CSVFormat.EG_FORMAT.parse(cols[i + 1]));
    }
    return af;
  }
 
  /**
   * Parse an activation function from a string.
   * @param params The params.
   * @param name The name of the param to parse.
   * @return The parsed activation function.
   */
  public static ActivationFunction parseActivationFunction(
      final Map<String, String> params, final String name) {
    String value = null;
    try {
      value = params.get(name);
      if (value == null) {
        throw new PersistError("Missing property: " + name);
      }

      return parseActivationFunction(value);

    } catch (final Exception ex) {
      throw new PersistError(ex);
    }
  }

  /**
   * Parse a boolean from a name-value collection of params.
   * @param params The name-value pairs.
   * @param name The name to parse.
   * @return The parsed boolean value.
   */
  public static boolean parseBoolean(final Map<String, String> params,
      final String name) {
    String value = null;
    try {
      value = params.get(name);
      if (value == null) {
        throw new PersistError("Missing property: " + name);
      }

      return value.trim().toLowerCase().charAt(0) == 't';

    } catch (final NumberFormatException ex) {
      throw new PersistError("Field: " + name + ", "
          + "invalid integer: " + value);
    }
  }

  /**
   * Parse a double from a name-value collection of params.
   * @param params The name-value pairs.
   * @param name The name to parse.
   * @return The parsed double value.
   */
  public static double parseDouble(final Map<String, String> params,
      final String name) {
    String value = null;
    try {
      value = params.get(name);
      if (value == null) {
        throw new PersistError("Missing property: " + name);
      }

      return CSVFormat.EG_FORMAT.parse(value);

    } catch (final NumberFormatException ex) {
      throw new PersistError("Field: " + name + ", "
          + "invalid integer: " + value);
    }
  }

  /**
   * Parse a double array from a name-value collection of params.
   * @param params The name-value pairs.
   * @param name The name to parse.
   * @return The parsed double array value.
   */
  public double[] parseDoubleArray(final Map<String, String> params,
      final String name) {
    String value = null;
    try {
      value = params.get(name);
      if (value == null) {
        throw new PersistError("Missing property: " + name);
      }
     
      if( value.startsWith("##") ) {
        int i = Integer.parseInt(value.substring(2));
        return this.largeArrays.get(i);
      } else {
        return NumberList.fromList(CSVFormat.EG_FORMAT, value);
      }

    } catch (final NumberFormatException ex) {
      throw new PersistError("Field: " + name + ", "
          + "invalid integer: " + value);
    }
  }

  /**
   * Parse an int from a name-value collection of params.
   * @param params The name-value pairs.
   * @param name The name to parse.
   * @return The parsed int value.
   */
  public static int parseInt(final Map<String, String> params,
      final String name) {
    String value = null;
    try {
      value = params.get(name);
      if (value == null) {
        throw new PersistError("Missing property: " + name);
      }

      return Integer.parseInt(value);

    } catch (final NumberFormatException ex) {
      throw new PersistError("Field: " + name + ", "
          + "invalid integer: " + value);
    }
  }

  /**
   * Parse an int array from a name-value collection of params.
   * @param params The name-value pairs.
   * @param name The name to parse.
   * @return The parsed int array value.
   */
  public static int[] parseIntArray(final Map<String, String> params,
      final String name) {
    String value = null;
    try {
      value = params.get(name);
      if (value == null) {
        throw new PersistError("Missing property: " + name);
      }

      return NumberList.fromListInt(CSVFormat.EG_FORMAT, value);

    } catch (final NumberFormatException ex) {
      throw new PersistError("Field: " + name + ", "
          + "invalid integer: " + value);
    }
  }

  /**
   * Parse a matrix from a name-value collection of params.
   * @param params The name-value pairs.
   * @param name The name to parse.
   * @return The parsed matrix value.
   */
  public static Matrix parseMatrix(final Map<String, String> params,
      final String name) {

    if (!params.containsKey(name)) {
      throw new PersistError("Missing property: " + name);
    }

    final String line = params.get(name);

    final double[] d = NumberList.fromList(CSVFormat.EG_FORMAT, line);
    final int rows = (int) d[0];
    final int cols = (int) d[1];

    final Matrix result = new Matrix(rows, cols);

    int index = 2;
    for (int r = 0; r < rows; r++) {
      for (int c = 0; c < cols; c++) {
        result.set(r, c, d[index++]);
      }
    }

    return result;
  }

  /**
   * Split a delimited string into columns.
   * @param line THe string to split.
   * @return The string split.
   */
  public static List<String> splitColumns(final String line) {
    ParseCSVLine csvLine = new ParseCSVLine(CSVFormat.EG_FORMAT);
    return csvLine.parse(line);
  }

  /**
   * The name of this section.
   */
  private final String sectionName;

  /**
   * The name of this subsection.
   */
  private final String subSectionName;

  /**
   * The lines in this section/subsection.
   */
  private final List<String> lines = new ArrayList<String>();

  /**
   * Construct the object.
   * @param theSectionName The section name.
   * @param theSubSectionName The sub section name.
   */
  public EncogFileSection(final String theSectionName,
      final String theSubSectionName) {
    super();
    this.sectionName = theSectionName;
    this.subSectionName = theSubSectionName;
  }

  /**
   * @return The lines.
   */
  public final List<String> getLines() {
    return this.lines;
  }

  /**
   * @return All lines separated by a delimiter.
   */
  public final String getLinesAsString() {
    final StringBuilder result = new StringBuilder();
    for (final String line : this.lines) {
      result.append(line);
      result.append("\n");
    }
    return result.toString();
  }

  /**
   * @return The section name.
   */
  public final String getSectionName() {
    return this.sectionName;
  }

  /**
   * @return The section name.
   */
  public final String getSubSectionName() {
    return this.subSectionName;
  }

  /**
   * @return The params.
   */
  public final Map<String, String> parseParams() {
    final Map<String, String> result = new HashMap<String, String>();

    for (String line : this.lines) {
      line = line.trim();
      if (line.length() > 0) {
        final int idx = line.indexOf('=');
        if (idx == -1) {
          throw new AnalystError("Invalid setup item: " + line);
        }
        final String name = line.substring(0, idx).trim();
        final String value = line.substring(idx + 1).trim();

        result.put(name, value);
      }
    }

    return result;
  }

  /** {@inheritDoc} */
  @Override
  public final String toString() {
    final StringBuilder result = new StringBuilder("[");
    result.append(getClass().getSimpleName());
    result.append(" sectionName=");
    result.append(this.sectionName);
    result.append(", subSectionName=");
    result.append(this.subSectionName);
    result.append("]");
    return result.toString();
  }
 
 

  /**
   * @return the largeArrays
   */
  public List<double[]> getLargeArrays() {
    return largeArrays;
  }

  /**
   * @param largeArrays the largeArrays to set
   */
  public void setLargeArrays(List<double[]> largeArrays) {
    this.largeArrays = largeArrays;
  }
}
TOP

Related Classes of org.encog.persist.EncogFileSection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.