28 #ifndef __beagle_impl__
29 #define __beagle_impl__
31 #include "libhmsbeagle/beagle.h"
33 #ifdef DOUBLE_PRECISION
46 virtual int createInstance(
int tipCount,
47 int partialsBufferCount,
48 int compactBufferCount,
52 int matrixBufferCount,
57 long requirementFlags) = 0;
61 virtual int setTipStates(
int tipIndex,
62 const int* inStates) = 0;
64 virtual int setTipPartials(
int tipIndex,
65 const double* inPartials) = 0;
67 virtual int setPartials(
int bufferIndex,
68 const double* inPartials) = 0;
70 virtual int getPartials(
int bufferIndex,
72 double* outPartials) = 0;
74 virtual int setEigenDecomposition(
int eigenIndex,
75 const double* inEigenVectors,
76 const double* inInverseEigenVectors,
77 const double* inEigenValues) = 0;
79 virtual int setStateFrequencies(
int stateFrequenciesIndex,
80 const double* inStateFrequencies) = 0;
82 virtual int setCategoryWeights(
int categoryWeightsIndex,
83 const double* inCategoryWeights) = 0;
85 virtual int setPatternWeights(
const double* inPatternWeights) = 0;
87 virtual int setCategoryRates(
const double* inCategoryRates) = 0;
89 virtual int setTransitionMatrix(
int matrixIndex,
90 const double* inMatrix,
91 double paddedValue) = 0;
93 virtual int setTransitionMatrices(
const int* matrixIndices,
94 const double* inMatrices,
95 const double* paddedValues,
98 virtual int getTransitionMatrix(
int matrixIndex,
99 double* outMatrix) = 0;
101 virtual int updateTransitionMatrices(
int eigenIndex,
102 const int* probabilityIndices,
103 const int* firstDerivativeIndices,
104 const int* secondDerivativeIndices,
105 const double* edgeLengths,
108 virtual int updatePartials(
const int* operations,
110 int cumulativeScalingIndex) = 0;
112 virtual int waitForPartials(
const int* destinationPartials,
113 int destinationPartialsCount) = 0;
115 virtual int accumulateScaleFactors(
const int* scalingIndices,
117 int cumulativeScalingIndex) = 0;
119 virtual int removeScaleFactors(
const int* scalingIndices,
121 int cumulativeScalingIndex) = 0;
123 virtual int resetScaleFactors(
int cumulativeScalingIndex) = 0;
125 virtual int copyScaleFactors(
int destScalingIndex,
126 int srcScalingIndex) = 0;
128 virtual int calculateRootLogLikelihoods(
const int* bufferIndices,
129 const int* categoryWeightsIndices,
130 const int* stateFrequenciesIndices,
131 const int* scalingFactorsIndices,
133 double* outSumLogLikelihood) = 0;
135 virtual int calculateEdgeLogLikelihoods(
const int* parentBufferIndices,
136 const int* childBufferIndices,
137 const int* probabilityIndices,
138 const int* firstDerivativeIndices,
139 const int* secondDerivativeIndices,
140 const int* categoryWeightsIndices,
141 const int* stateFrequenciesIndices,
142 const int* scalingFactorsIndices,
144 double* outSumLogLikelihood,
145 double* outSumFirstDerivative,
146 double* outSumSecondDerivative) = 0;
148 virtual int getSiteLogLikelihoods(
double* outLogLikelihoods) = 0;
150 virtual int getSiteDerivatives(
double* outFirstDerivatives,
151 double* outSecondDerivatives) = 0;
159 int partialsBufferCount,
160 int compactBufferCount,
163 int eigenBufferCount,
164 int matrixBufferCount,
166 int scaleBufferCount,
168 long preferenceFlags,
169 long requirementFlags,
172 virtual const char* getName() = 0;
174 virtual const long getFlags() = 0;
179 #endif // __beagle_impl__