class Sooth::Predictor

Public Class Methods

new(p1) click to toggle source
VALUE
method_sooth_native_initialize(VALUE self, VALUE error_event)
{
  SoothPredictor * predictor = NULL;
  Check_Type(error_event, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  predictor->error_event = NUM2UINT(error_event);
  return self;
}

Public Instance Methods

clear() click to toggle source
VALUE
method_sooth_native_clear(VALUE self)
{
  SoothPredictor * predictor = NULL;
  Data_Get_Struct(self, SoothPredictor, predictor);
  sooth_predictor_clear(predictor);
  return Qnil;
}
count(p1) click to toggle source
VALUE
method_sooth_native_count(VALUE self, VALUE context)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  uint32_t count = sooth_predictor_count(predictor, NUM2UINT(context));
  return UINT2NUM(count);
}
distribution(p1) click to toggle source
VALUE
method_sooth_native_distribution(VALUE self, VALUE context)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  uint32_t c_context = NUM2UINT(context);
  SoothStatistic * statistics = sooth_predictor_distribution(predictor, c_context);
  if (statistics == NULL)
  {
    return Qnil;
  }
  uint32_t size = sooth_predictor_size(predictor, c_context);
  double count = (double)sooth_predictor_count(predictor, c_context);
  VALUE r_array = rb_ary_new2(size);
  for (uint32_t i = 0; i < size; ++i)
  {
    SoothStatistic statistic = statistics[i];
    VALUE pair = rb_ary_new2(2);
    rb_ary_store(pair, 0, UINT2NUM(statistic.event));
    rb_ary_store(pair, 1, DBL2NUM((double)statistic.count/count));
    rb_ary_store(r_array, i, pair);
  }
  return r_array;
}
frequency(p1, p2) click to toggle source
VALUE
method_sooth_native_frequency(VALUE self, VALUE context, VALUE event)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Check_Type(event, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  return DBL2NUM(sooth_predictor_frequency(predictor, NUM2UINT(context), NUM2UINT(event)));
}
load(p1) click to toggle source
VALUE
method_sooth_native_load(VALUE self, VALUE filename)
{
  SoothPredictor * predictor = NULL;
  Check_Type(filename, T_STRING);
  Data_Get_Struct(self, SoothPredictor, predictor);
  if (!sooth_predictor_load(RSTRING_PTR(filename), predictor))
  {
    rb_raise(rb_eIOError, "problem loading predictor");
  }
  return Qnil;
}
observe(p1, p2) click to toggle source
VALUE
method_sooth_native_observe(VALUE self, VALUE context, VALUE event)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Check_Type(event, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  uint32_t count = sooth_predictor_observe(predictor, NUM2UINT(context), NUM2UINT(event));
  return UINT2NUM(count);
}
save(p1) click to toggle source
VALUE
method_sooth_native_save(VALUE self, VALUE filename)
{
  SoothPredictor * predictor = NULL;
  Check_Type(filename, T_STRING);
  Data_Get_Struct(self, SoothPredictor, predictor);
  if (!sooth_predictor_save(RSTRING_PTR(filename), predictor))
  {
    rb_raise(rb_eIOError, "problem saving predictor");
  }
  return Qnil;
}
select(p1, p2) click to toggle source
VALUE
method_sooth_native_select(VALUE self, VALUE context, VALUE limit)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Check_Type(limit, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  uint32_t event = sooth_predictor_select(predictor, NUM2UINT(context), NUM2UINT(limit));
  return UINT2NUM(event);
}
size(p1) click to toggle source
VALUE
method_sooth_native_size(VALUE self, VALUE context)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  uint32_t size = sooth_predictor_size(predictor, NUM2UINT(context));
  return UINT2NUM(size);
}
surprise(p1, p2) click to toggle source
VALUE
method_sooth_native_surprise(VALUE self, VALUE context, VALUE event)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Check_Type(event, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  double surprise = sooth_predictor_surprise(predictor, NUM2UINT(context), NUM2UINT(event));
  if (surprise < 0)
  {
    return Qnil;
  }
  return DBL2NUM(surprise);
}
uncertainty(p1) click to toggle source
VALUE
method_sooth_native_uncertainty(VALUE self, VALUE context)
{
  SoothPredictor * predictor = NULL;
  Check_Type(context, T_FIXNUM);
  Data_Get_Struct(self, SoothPredictor, predictor);
  double uncertainty = sooth_predictor_uncertainty(predictor, NUM2UINT(context));
  if (uncertainty < 0)
  {
    return Qnil;
  }
  return DBL2NUM(uncertainty);
}