Interval merge_if_possible (Interval const A, Interval const B) { if ( is_periodic(B) && (A.r == B.p) && (A.s == B.q) ) return (Interval) {A.p, A.q, B.r, B.s}; else return A; }
static void handle_expired_timer(struct sw_timer *swt) { set_scheduled(swt, false); /* Invoke user's callback routine */ if(swt->timeout_cb) swt->timeout_cb(swt->cb_param); /* Period timer: Set-up next iteration */ if(true == is_periodic(swt)) setup_timer_exec(swt, 0); return; }
int main (int argc, char **argv) { TimeSeries T = timeseries_from_stdin(); ValueType sigma = 0.0; IndexType max_tau = (length(T)-1)/2; if (argc>1) max_tau = atoi(argv[1]); if (max_tau > length(T)-1) { max_tau = length(T)-1; fprintf(stderr, "Warning: Lowering maximum period length to length of time series.\n"); } else if (max_tau <= 2) { max_tau = 3; fprintf(stderr, "Warning: Raising maximum period length to 3.\n"); } if (argc>2) sigma = atof(argv[2]); if (sigma<0) { sigma = 0.0; fprintf(stderr, "Warning: Raising error allowance to 0.\n"); } Interval result = periodicity_test (T, max_tau, sigma); if (is_periodic(result)) { printf( "Data complies with any period between %.16f and %.16f.", result.p/((double) result.q), result.r/((double) result.s) ); } else printf("Data does not comply with no period length in the specified interval."); timeseries_free (T); }
static PyObject * py_periodicitytest(PyObject *self, PyObject *args) { TimeSeries T; IndexType max_tau = 0; ValueType sigma = 0; if (!PyArg_ParseTuple(args, "O!|Id", &PyArray_Type, &T, &max_tau, &sigma)) return NULL; if (PyArray_NDIM(T) != 1) { PyErr_SetString(PyExc_ValueError,"Array must be one-dimensional."); return NULL; } else if ((PyArray_TYPE(T) != TYPE_INDEX) && (sigma != 0)) { PyErr_SetString(PyExc_TypeError,"Unless sigma is 0, array needs to be of type double."); return NULL; } else if (length(T) < 3) { PyErr_SetString(PyExc_ValueError,"Array length smaller than 3."); return NULL; } if (max_tau == 0) max_tau = (length(T)-1)/2; else if (max_tau > length(T)-1) { max_tau = length(T)-1; PyErr_WarnEx (NULL, "Warning: Lowering maximum period length to length of time series.\n", 1); } else if (max_tau <= 2) { max_tau = 3; PyErr_WarnEx (NULL, "Warning: Raising maximum period length to 3.\n", 1); } if (sigma < 0) { PyErr_SetString(PyExc_ValueError,"Negative sigma."); return NULL; } Interval result = periodicity_test (T, max_tau, sigma); if (is_periodic(result)) { PyObject * result_interval = PyTuple_Pack (4, PyLong_FromLong(result.p), PyLong_FromLong(result.q), PyLong_FromLong(result.r), PyLong_FromLong(result.s)); PyObject * result_interval_2 = PyTuple_Pack (2, PyFloat_FromDouble(result.p/((double) result.q)), PyFloat_FromDouble(result.r/((double) result.s))); return PyTuple_Pack (3, Py_True, result_interval, result_interval_2); } else if (max_tau == length(T)-1) { PyObject * result_interval = PyTuple_Pack (4, PyLong_FromLong(length(T)-1), PyLong_FromLong(1), PyLong_FromLong(1), PyLong_FromLong(0)); PyObject * result_interval_2 = PyTuple_Pack (2, PyFloat_FromDouble((double) length(T)-1), PyFloat_FromDouble(INFINITY)); return PyTuple_Pack (3, Py_False, result_interval, result_interval_2); } else return PyTuple_Pack (3, Py_False, Py_None, Py_None); }
bool contains_Interval (Interval A, Interval B) { return is_periodic(A) && (A.p*B.q <= B.p*A.q) && (B.r*A.s <= A.r*B.s); }