Exemple #1
0
void unit_unpack_array(UNUSED(void **state))
{
  array params;

  init_unpack_array(MSGPACK_OBJECT_NIL);
  assert_int_equal(0, unpack_params(&deserialized, &params));
  init_unpack_array(MSGPACK_OBJECT_ARRAY);
  assert_int_equal(0, unpack_params(&deserialized, &params));
  init_unpack_array(MSGPACK_OBJECT_FLOAT);
  assert_int_equal(0, unpack_params(&deserialized, &params));
  init_unpack_array(MSGPACK_OBJECT_MAP);
  assert_int_equal(0, unpack_params(&deserialized, &params));
  init_unpack_array(MSGPACK_OBJECT_POSITIVE_INTEGER);
  assert_int_equal(0, unpack_params(&deserialized, &params));
}
Exemple #2
0
/* estimate free parameters */
double bd_estimate_transitions(BDPhyloHmm *bdphmm, MSA *msa) {
  int i, nparams = 0;
  Vector *params, *lb, *ub;
  double retval;

  if (bdphmm->phmm->forward == NULL) {
    bdphmm->phmm->forward = smalloc(bdphmm->phmm->hmm->nstates * 
                                    sizeof(double*));
    for (i = 0; i < bdphmm->phmm->hmm->nstates; i++)
      bdphmm->phmm->forward[i] = smalloc(bdphmm->phmm->alloc_len * 
                                         sizeof(double));
  }

  if (bdphmm->estim_omega) nparams++;
  if (bdphmm->estim_gamma) nparams++;
  if (bdphmm->estim_phi) nparams++;

  params = vec_new(nparams);
  lb = vec_new(nparams);
  ub = vec_new(nparams);
  vec_set_all(lb, 1e-6);

  nparams = 0;
  if (bdphmm->estim_omega) {
    vec_set(params, nparams, 1/bdphmm->mu);
    vec_set(ub, nparams++, INFTY);
  }
  if (bdphmm->estim_gamma) {
    vec_set(params, nparams, bdphmm->nu / (bdphmm->mu + bdphmm->nu));
    vec_set(ub, nparams++, 0.5 /* 1-1e-6 */);
  }
  if (bdphmm->estim_phi) {
    vec_set(params, nparams, bdphmm->phi);
    vec_set(ub, nparams++, 0.7 /* 1-1e-6 */);
  }

  opt_bfgs(lnl_wrapper, params, bdphmm, &retval, lb, ub, stderr, NULL, 
           OPT_HIGH_PREC, NULL, NULL);

  unpack_params(params, bdphmm);

  vec_free(params);
  vec_free(lb);
  vec_free(ub);

  return retval;
}
Exemple #3
0
int message_deserialize_error_response(struct message_response *res,
    msgpack_object *obj, struct api_error *api_error)
{
  msgpack_object *type, *msgid, *params;
  uint64_t tmp_msgid;

  if (!api_error)
    return (-1);

  if (!res || !obj) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "Error");
    return (-1);
  }

  /* type */
  if (obj->via.array.ptr[0].type != MSGPACK_OBJECT_POSITIVE_INTEGER) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "type field has wrong type");
    return (-1);
  }

  type = &obj->via.array.ptr[0];

  if (!type) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "unpack type failed");
    return (-1);
  }

  if (unpack_uint(type) != MESSAGE_TYPE_RESPONSE) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "type must be 1");
    return (-1);
  }

  /* message id */
  msgid = &obj->via.array.ptr[1];

  if (!msgid || msgid->type != MSGPACK_OBJECT_POSITIVE_INTEGER) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "illegal msgid");
    return (-1);
  }

  tmp_msgid = unpack_uint(msgid);

  if (tmp_msgid >= UINT32_MAX) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "invalid msgid");
    return (-1);
  }

  res->msgid = (uint32_t)tmp_msgid;

  /* params */
  if (obj->via.array.ptr[2].type != MSGPACK_OBJECT_ARRAY) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "params field has wrong type");
    return (-1);
  }

  params = &obj->via.array.ptr[2];

  if (!params) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "unpack params failed");
    return (-1);
  }

  if (unpack_params(params, &res->params) == -1) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "Error unpacking params");
    return (-1);
  }

  /* nil */
  if (obj->via.array.ptr[3].type != MSGPACK_OBJECT_NIL) {
    free_params(res->params);
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "nil field has wrong type");
    return (-1);
  }

  return (0);
}
Exemple #4
0
int message_deserialize_request(struct message_request *req,
    msgpack_object *obj, struct api_error *api_error)
{
  msgpack_object *type, *msgid, *method, *params;
  uint64_t tmp_type;
  uint64_t tmp_msgid;

  if (!api_error)
    return (-1);

  if (!req || !obj) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "Error");
    return (-1);
  }

  /* type */
  if (obj->via.array.ptr[0].type != MSGPACK_OBJECT_POSITIVE_INTEGER) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "type field has wrong type");
    return (-1);
  }

  type = &obj->via.array.ptr[0];
  if (!type) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "unpack type failed");
    return (-1);
  }

  tmp_type = unpack_uint(type);

  if (tmp_type != MESSAGE_TYPE_REQUEST) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "type must be 0 or 1");
    return (-1);
  }

  /* message id */
  msgid = &obj->via.array.ptr[1];

  if (!msgid || msgid->type != MSGPACK_OBJECT_POSITIVE_INTEGER) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "illegal msgid");
    return (-1);
  }

  tmp_msgid = unpack_uint(msgid);

  if (tmp_msgid >= UINT32_MAX) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "invalid msgid");
    return (-1);
  }

  req->msgid = (uint32_t)tmp_msgid;

  /* method */
  if (obj->via.array.ptr[2].type != MSGPACK_OBJECT_STR) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "method field has wrong type");
    return (-1);
  }

  method = &obj->via.array.ptr[2];

  if (!method) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "unpack method failed");
    return (-1);
  }

  req->method = unpack_string(method);

  if (!req->method.str) {
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "Error unpacking method");
    return (-1);
  }

  /* params */
  if (obj->via.array.ptr[3].type != MSGPACK_OBJECT_ARRAY) {
    free_string(req->method);
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "params field has wrong type");
    return (-1);
  }

  params = &obj->via.array.ptr[3];

  if (!params) {
    free_string(req->method);
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "unpack params failed");
    return (-1);
  }

  if (unpack_params(params, &req->params) == -1) {
    free_string(req->method);
    error_set(api_error, API_ERROR_TYPE_VALIDATION, "Error unpacking params");
    return (-1);
  }

  return (0);
}
Exemple #5
0
double lnl_wrapper(Vector *params, void *data) {
  BDPhyloHmm *bdphmm = data;
  unpack_params(params, data);
  return -hmm_forward(bdphmm->phmm->hmm, bdphmm->phmm->emissions, 
                      bdphmm->phmm->alloc_len, bdphmm->phmm->forward);
}