class_docstr: Base class for associative algorithms which have 2 layers and first
  one is has step function as activation.
  
  Parameters
  ----------
  {BaseAssociative.n_inputs}
  
  {BaseAssociative.n_outputs}
  
  n_unconditioned : int
      Number of unconditioned units in neural networks. All these
      units wouldn't update during the training procedure.
      Unconditioned should be the first feature in the dataset.
  
  weight : array-like
      Neural network weights.
      Value defined manually should have shape ``(n_inputs, n_outputs)``.
      Defaults to ``None`` which means that all unconditional
      weights will be equal to ``1``. Other weights equal to ``0``.
  
  bias : array-like, Initializer
      Neural network bias units.
      Defaults to :class:`Constant(-0.5) <neupy.init.Constant>`.
  
  {BaseNetwork.Parameters}
  
  Methods
  -------
  {BaseAssociative.Methods}
class_docstr_tok: ["Base","class","for","associative","algorithms","which","have","2","layers","and","first","one","is","has","step","function","as","activation",".","Parameters","--","--","--","--","--","{","BaseAssociative.n_inputs","}","{","BaseAssociative.n_outputs","}","n_unconditioned",":","int","Number","of","unconditioned","units","in","neural","networks",".","All","these","units","would","n't","update","during","the","training","procedure",".","Unconditioned","should","be","the","first","feature","in","the","dataset",".","weight",":","array-like","Neural","network","weights",".","Value","defined","manually","should","have","shape","``","(","n_inputs",",","n_outputs",")","``",".","Defaults","to","``","None","``","which","means","that","all","unconditional","weights","will","be","equal","to","``","1","``",".","Other","weights","equal","to","``","0","``",".","bias",":","array-like",",","Initializer","Neural","network","bias","units",".","Defaults","to",":","class",":","`","Constant","(","-0.5",")","<","neupy.init.Constant",">","`",".","{","BaseNetwork.Parameters","}","Methods","--","--","--","-","{","BaseAssociative.Methods","}"]
code: def one_training_update(self, X_train, y_train):
      weight = self.weight
      n_unconditioned = self.n_unconditioned
      predict = self.predict
      weight_delta = self.weight_delta
  
      error = 0
  
      for x_row in X_train:
          x_row = np.expand_dims(x_row, axis=0)
          layer_output = predict(x_row)
  
          delta = weight_delta(x_row, layer_output)
          weight[n_unconditioned:, :] += delta
  
          # This error can tell us whether network has converged
          # to some value of weights. Low errors will mean that weights
          # hasn't been updated much during the training epoch.
          error += np.linalg.norm(delta)
  
      return error
  
file_path: neupy/neupy/algorithms/associative/base.py
imports: import numpy
  from neupy import init
  from neupy.utils import format_data
  from neupy.core.properties import IntProperty, ParameterProperty, ArrayProperty
  from neupy.algorithms.base import BaseNetwork
label_desc: Use image node_id 4 for calling the BaseStepAssociative obj's underlying member method code with example usage: obj.one_training_update(X_train, y_train) and returns: error