File: BeagleJNIWrapper.java

package info (click to toggle)
libhmsbeagle 4.0.1%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 46,424 kB
  • sloc: xml: 133,356; cpp: 36,477; ansic: 5,842; java: 2,400; python: 643; sh: 342; makefile: 50
file content (304 lines) | stat: -rw-r--r-- 15,165 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
/*
 * BeagleJNIjava
 *
 */

package beagle;


/*
 * BeagleJNIjava
 *
 * @author Andrew Rambaut
 * @author Marc Suchard
 *
 */

public class BeagleJNIWrapper {

    private static final String LIBRARY_NAME = getPlatformSpecificLibraryName();

    /**
     * private constructor to enforce singleton instance
     */
    private BeagleJNIWrapper() {
    }

    public native String getVersion();

    public native String getCitation();

    public native ResourceDetails[] getResourceList();

    public native BenchmarkedResourceDetails[] getBenchmarkedResourceList(
                                                    int tipCount,
                                                    int compactBufferCount,
                                                    int stateCount,
                                                    int patternCount,
                                                    int categoryCount,
                                                    final int[] resourceList,
                                                    int resourceCount,
                                                    long preferenceFlags,
                                                    long requirementFlags,
                                                    int eigenModelCount,
                                                    int partitionCount,
                                                    int calculateDerivatives,
                                                    long benchmarkFlags);

    public native int createInstance(
            int tipCount,
            int partialsBufferCount,
            int compactBufferCount,
            int stateCount,
            int patternCount,
            int eigenBufferCount,
            int matrixBufferCount,
            int categoryCount,
            int scaleBufferCount,
            final int[] resourceList,
            int resourceCount,
            long preferenceFlags,
            long requirementFlags,
            InstanceDetails returnInfo);

    public native int finalize(int instance);

    public native int setCPUThreadCount(int instance, int threadCount);

    public native int setPatternWeights(int instance, final double[] patternWeights);

    public native int setPatternPartitions(int instance, int partitionCount, final int[] patternPartitions);

    public native int setTipStates(int instance, int tipIndex, final int[] inStates);

    public native int getTipStates(int instance, int tipIndex, final int[] inStates);

    public native int setTipPartials(int instance, int tipIndex, final double[] inPartials);

    public native int setRootPrePartials(int instance, final int[] inbufferIndices, final int[] instateFrequenciesIndices, int count);

    public native int setPartials(int instance, int bufferIndex, final double[] inPartials);

    public native int getPartials(int instance, int bufferIndex, int scaleIndex,
                                  final double[] outPartials);

    public native int getLogScaleFactors(int stance, int scaleIndex, final double[] outFactors);

    public native int setEigenDecomposition(int instance,
                                            int eigenIndex,
                                            final double[] eigenVectors,
                                            final double[] inverseEigenValues,
                                            final double[] eigenValues);

    public native int setStateFrequencies(int instance,
                                          int stateFrequenciesIndex,
                                          final double[] stateFrequencies);

    public native int setCategoryWeights(int instance,
                                         int categoryWeightsIndex,
                                         final double[] categoryWeights);

    public native int setCategoryRates(int instance,
                                       final double[] inCategoryRates);

    public native int setCategoryRatesWithIndex(int instance,
                                                int categoryRatesIndex,
                                                final double[] inCategoryRates);

    public native int setTransitionMatrix(int instance, int matrixIndex, final double[] inMatrix, double paddedValue);

    public native int setDifferentialMatrix(int instance, int matrixIndex, final double[] inMatrix);

    public native int getTransitionMatrix(int instance, int matrixIndex, final double[] outMatrix);

	public native int convolveTransitionMatrices(int instance,
			                                     final int[] firstIndices,
			                                     final int[] secondIndices,
			                                     final int[] resultIndices,
			                                     int matrixCount);

    public native int addTransitionMatrices(int instance,
                                            final int[] firstIndices,
                                            final int[] secondIndices,
                                            final int[] resultIndices,
                                            int matrixCount);

	public native int transposeTransitionMatrices(int instance,
												  final int[] inIndices,
												  final int[] outIndices,
												  int matrixCount);

    public native int updateTransitionMatrices(int instance, int eigenIndex,
                                               final int[] probabilityIndices,
                                               final int[] firstDerivativeIndices,
                                               final int[] secondDervativeIndices,
                                               final double[] edgeLengths,
                                               int count);

    public native int updateTransitionMatricesWithMultipleModels(
                                               int instance,
                                               final int[] eigenIndices,
                                               final int[] categoryRateIndices,
                                               final int[] probabilityIndices,
                                               final int[] firstDerivativeIndices,
                                               final int[] secondDervativeIndices,
                                               final double[] edgeLengths,
                                               int count);

    public native int updatePrePartials(final int instance,
                                        final int[] operations,
                                        int operationCount,
                                        int cumulativeScalingIndex);


    public native int updatePrePartialsByPartition(final int instance,
                                                   final int[] operations,
                                                   int operationCount);

    public native int updatePartials(final int instance,
                                     final int[] operations,
                                     int operationCount,
                                     int cumulativeScalingIndex);

    public native int updatePartialsByPartition(final int instance,
                                                final int[] operations,
                                                int operationCount);

    public native int waitForPartials(final int instance,
                                      final int[] destinationPartials,
                                      int destinationPartialsCount);

    public native int accumulateScaleFactors(final int instance,
                                             final int[] scaleIndices,
                                             final int count,
                                             final int cumulativeScalingIndex);

    public native int accumulateScaleFactorsByPartition(final int instance,
                                                        final int[] scaleIndices,
                                                        int count,
                                                        int cumulativeScaleIndex,
                                                        int partitionIndex);

    public native int removeScaleFactors(final int instance,
                                         final int[] scaleIndices,
                                         final int count,
                                         final int cumulativeScalingIndex);

    public native int removeScaleFactorsByPartition(final int instance,
                                         final int[] scaleIndices,
                                         final int count,
                                         final int cumulativeScalingIndex,
                                         final int partitionIndex);

    public native int resetScaleFactors(final int instance,
                                        final int cumulativeScalingIndex);

    public native int resetScaleFactorsByPartition(final int instance,
                                        final int cumulativeScalingIndex,
                                        final int partitionIndex);

    public native int copyScaleFactors(final int instance,
                                       final int destScalingIndex,
                                       final int srcScalingIndex);

    public native int calculateRootLogLikelihoods(int instance,
                                                  final int[] bufferIndices,
                                                  final int[] categoryWeightsIndices,
                                                  final int[] stateFrequenciesIndices,
                                                  final int[] cumulativeScaleIndices,
                                                  int count,
                                                  final double[] outSumLogLikelihood);

    public native int calculateRootLogLikelihoodsByPartition(int instance,
                                                  final int[] bufferIndices,
                                                  final int[] categoryWeightsIndices,
                                                  final int[] stateFrequenciesIndices,
                                                  final int[] cumulativeScaleIndices,
                                                  final int[] partitionIndices,
                                                  int partitionCount,
                                                  int count,
                                                  final double[] outSumLogLikelihoodByPartition,
                                                  final double[] outSumLogLikelihood);

    /*public native int calculateEdgeLogLikelihoods(int instance,
                                                  final int[] parentBufferIndices,
                                                  final int[] childBufferIndices,
                                                  final int[] probabilityIndices,
                                                  final int[] firstDerivativeIndices,
                                                  final int[] secondDerivativeIndices,
                                                  final int[] categoryWeightsIndices,
                                                  final int[] stateFrequenciesIndices,
                                                  final int[] scalingFactorsIndices,
                                                  int count,
                                                  final double[] outSumLogLikelihood,
                                                  final double[] outSumFirstDerivative,
                                                  final double[] outSumSecondDerivative);*/

    public native int getSiteLogLikelihoods(final int instance,
                                            final double[] outLogLikelihoods);


    public native int calculateEdgeDifferentials(final int instance,
    										     final int[] postBufferIndices,
              		                             final int[] preBufferIndices,
                    	                         final int[] derivativeMatrixIndices,
                                                 final int[] categoryWeightsIndices,
                                 	             int count,
                                      		     double[] outDerivatives,
	                                             double[] outSumDerivatives,
       		                                     double[] outSumSquaredDerivatives);

    public native int calculateCrossProductDifferentials(final int instance,
    													 final int[] postBufferIndices,
        												 final int[] preBufferIndices,
    	    											 final int[] categoryRateIndices,
    	    											 final int[] categoryWeightsIndices,
        												 final double[] edgeLengths,
        												 int count,
	        											 double[] outSumDerivatives,
	        											 double[] outSumSquaredDerivatives);

    public native int calculateEdgeDerivative(int instance,
    										  final int[] postBufferIndices,
                                              final int[] preBufferIndices,
                                              final int rootBufferIndex,
                                              final int[] firstDerivativeIndices,
                                              final int[] secondDerivativeIndices,
                                              final int categoryWeightsIndex,
                                              final int categoryRatesIndex,
                                              final int stateFrequenciesIndex,
                                              final int[] cumulativeScaleIndices,
                                              int count,
                                              double[] outFirstDerivative,
                                              double[] outDiagonalSecondDerivative);

    /* Library loading routines */

    private static String getPlatformSpecificLibraryName()
    {
        String osName = System.getProperty("os.name").toLowerCase();
        String osArch = System.getProperty("os.arch").toLowerCase();
        if (osName.startsWith("windows")) {
            if(osArch.equals("x86")||osArch.equals("i386")) return "hmsbeagle32";
            if(osArch.startsWith("amd64")||osArch.startsWith("x86_64")) return "hmsbeagle64";
        }
        return "hmsbeagle-jni";
    }

    public static void loadBeagleLibrary() throws UnsatisfiedLinkError {
        String path = "";
        if (System.getProperty("beagle.library.path") != null) {
            path = System.getProperty("beagle.library.path");
            if (path.length() > 0 && !path.endsWith("/")) {
                path += "/";
            }
        }

        System.loadLibrary(path + LIBRARY_NAME);
        /// XJ: you may need to add the java.library.path in your JRE
        /// e.g. in IntelliJ you can add VM options: -Djava.library.path=/usr/local/lib
        INSTANCE = new BeagleJNIWrapper();
    }

    public static BeagleJNIWrapper INSTANCE;
}