Package org.encog.app.analyst.script

Source Code of org.encog.app.analyst.script.AnalystScript

/*
* Encog(tm) Core v3.0 - Java Version
* http://www.heatonresearch.com/encog/
* http://code.google.com/p/encog-java/
* Copyright 2008-2011 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.app.analyst.script;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.encog.Encog;
import org.encog.app.analyst.AnalystFileFormat;
import org.encog.app.analyst.script.normalize.AnalystField;
import org.encog.app.analyst.script.normalize.AnalystNormalize;
import org.encog.app.analyst.script.prop.ScriptProperties;
import org.encog.app.analyst.script.segregate.AnalystSegregate;
import org.encog.app.analyst.script.task.AnalystTask;
import org.encog.util.csv.CSVFormat;

/**
* Holds a script for the Encog Analyst.
*/
public class AnalystScript {
 
  /**
   * The default MAX size for a class.
   */
  public static final int DEFAULT_MAX_CLASS = 50;

  /**
   * The data fields, these are the raw data from the CSV file.
   */
  private DataField[] fields;
 
  /**
   * Information about how to normalize.
   */
  private final AnalystNormalize normalize = new AnalystNormalize(this);
 
  /**
   * Information about how to segregate.
   */
  private final AnalystSegregate segregate = new AnalystSegregate();
 
  /**
   * Tracks which files were generated.
   */
  private final Set<String> generated = new HashSet<String>();
 
  /**
   * The tasks.
   */
  private final Map<String, AnalystTask> tasks
    = new HashMap<String, AnalystTask>();
 
  /**
   * The properties.
   */
  private final ScriptProperties properties = new ScriptProperties();
 
  /**
   * The base path.
   */
  private String basePath;

  /**
   * Construct an analyst script.
   */
  public AnalystScript() {
    this.properties.setProperty(ScriptProperties.SETUP_CONFIG_CSV_FORMAT,
        AnalystFileFormat.DECPNT_COMMA);
    this.properties.setProperty(
        ScriptProperties.SETUP_CONFIG_MAX_CLASS_COUNT,
        DEFAULT_MAX_CLASS);
    this.properties
        .setProperty(ScriptProperties.SETUP_CONFIG_ALLOWED_CLASSES,
            "integer,string");
  }

  /**
   * Add a task.
   * @param task The task to add.
   */
  public final void addTask(final AnalystTask task) {
    this.tasks.put(task.getName(), task);
  }

  /**
   * Clear all tasks.
   */
  public final void clearTasks() {
    this.tasks.clear();
  }

  /**
   * Determine the input format for the specified file.
   * @param sourceID The file.
   * @return The input format.
   */
  public final CSVFormat determineInputFormat(final String sourceID) {
    final String rawID = getProperties().getPropertyString(
        ScriptProperties.HEADER_DATASOURCE_RAW_FILE);
    CSVFormat result;

    if (sourceID.equals(rawID)) {
      result = getProperties().getPropertyCSVFormat(
          ScriptProperties.HEADER_DATASOURCE_SOURCE_FORMAT);
    } else {
      result = getProperties().getPropertyCSVFormat(
          ScriptProperties.SETUP_CONFIG_CSV_FORMAT);
    }

    return result;
  }

  /**
   * Determine the output format.
   * @return The output format.
   */
  public final CSVFormat determineOutputFormat() {
    return getProperties().getPropertyCSVFormat(
        ScriptProperties.SETUP_CONFIG_CSV_FORMAT);
  }

  /**
   * Determine if input headers are expected.
   * @param filename The filename.
   * @return True if headers are expected.
   */
  public final boolean expectInputHeaders(final String filename) {
    if (isGenerated(filename)) {
      return true;
    } else {
      return this.properties.getPropertyBoolean(
            ScriptProperties.SETUP_CONFIG_INPUT_HEADERS);
    }
  }

  /**
   * Find the specified data field.  Use name to find, and ignore case.
   * @param name The name to search for.
   * @return The specified data field.
   */
  public final DataField findDataField(final String name) {
    for (final DataField dataField : this.fields) {
      if (dataField.getName().equalsIgnoreCase(name)) {
        return dataField;
      }
    }

    return null;
  }

  /**
   * Find the specified data field and return its index.
   * @param df The data field to search for.
   * @return The index of the specified data field, or -1 if not found.
   */
  public final int findDataFieldIndex(final DataField df) {
    for (int result = 0; result < this.fields.length; result++) {
      if (df == this.fields[result]) {
        return result;
      }
    }
    return -1;
  }

  /**
   * Find the specified normalized field.  Search without case.
   * @param name The name of the field we are searching for.
   * @param slice The timeslice.
   * @return The analyst field that was found.
   */
  public final AnalystField findNormalizedField(final String name,
      final int slice) {
    for (final AnalystField field : getNormalize().getNormalizedFields()) {
      if (field.getName().equalsIgnoreCase(name)
          && (field.getTimeSlice() == slice)) {
        return field;
      }
    }

    return null;
  }

  /**
   * @return The base path.
   */
  public final String getBasePath() {
    return this.basePath;
  }

  /**
   * @return the data fields.
   */
  public final DataField[] getFields() {
    return this.fields;
  }

  /**
   * @return the normalize
   */
  public final AnalystNormalize getNormalize() {
    return this.normalize;
  }

  /**
   * @return The precision.
   */
  public final int getPrecision() {
    return Encog.DEFAULT_PRECISION;
  }

  /**
   * @return the properties
   */
  public final ScriptProperties getProperties() {
    return this.properties;
  }

  /**
   * @return the segregate
   */
  public final AnalystSegregate getSegregate() {
    return this.segregate;
  }

  /**
   * Get the specified task.
   * @param name The name of the testk.
   * @return The analyst task.
   */
  public final AnalystTask getTask(final String name) {
    if (!this.tasks.containsKey(name)) {
      return null;
    }
    return this.tasks.get(name);
  }

  /**
   * @return The tasks.
   */
  public final Map<String, AnalystTask> getTasks() {
    return this.tasks;
  }

  /**
   * Init this script.
   */
  public final void init() {
    this.normalize.init(this);
  }

  /**
   * Determine if the specified file was generated.
   * @param filename The filename to check.
   * @return True, if the specified file was generated.
   */
  public final boolean isGenerated(final String filename) {
    return this.generated.contains(filename);
  }

  /**
   * Load the script.
   * @param stream The stream to load from.
   */
  public final void load(final InputStream stream) {
    final ScriptLoad s = new ScriptLoad(this);
    s.load(stream);
  }

  /**
   * Mark the sepcified filename as generated.
   * @param filename The filename.
   */
  public final void markGenerated(final String filename) {
    this.generated.add(filename);
  }

  /**
   * Resolve the specified filename.
   * @param sourceID The filename to resolve.
   * @return The file path.
   */
  public final File resolveFilename(final String sourceID) {
    final String name = getProperties().getFilename(sourceID);

    if( new File(name).getParent()==null && this.basePath!=null ) {
      return new File(this.basePath, name);
    } else {
      return new File(name);
    }
  }

  /**
   * Save to the specified output stream.
   * @param stream The output stream.
   */
  public final void save(final OutputStream stream) {
    final ScriptSave s = new ScriptSave(this);
    s.save(stream);
  }

  /**
   * Set the base path.
   * @param theBasePath The base path.
   */
  public final void setBasePath(final String theBasePath) {
    this.basePath = theBasePath;
  }

  /**
   * @param theFields
   *            the fields to set
   */
  public final void setFields(final DataField[] theFields) {
    this.fields = theFields;
  }
}
TOP

Related Classes of org.encog.app.analyst.script.AnalystScript

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.