void unit_unpack_array(UNUSED(void **state)) { array params; init_unpack_array(MSGPACK_OBJECT_NIL); assert_int_equal(0, unpack_params(&deserialized, ¶ms)); init_unpack_array(MSGPACK_OBJECT_ARRAY); assert_int_equal(0, unpack_params(&deserialized, ¶ms)); init_unpack_array(MSGPACK_OBJECT_FLOAT); assert_int_equal(0, unpack_params(&deserialized, ¶ms)); init_unpack_array(MSGPACK_OBJECT_MAP); assert_int_equal(0, unpack_params(&deserialized, ¶ms)); init_unpack_array(MSGPACK_OBJECT_POSITIVE_INTEGER); assert_int_equal(0, unpack_params(&deserialized, ¶ms)); }
/* 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; }
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); }
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); }
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); }