Skip to content

Commit

Permalink
Cleaning up unnecessary casts.
Browse files Browse the repository at this point in the history
  • Loading branch information
cnuernber committed Jan 19, 2022
1 parent c1f5329 commit 9eb6c77
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 50 deletions.
62 changes: 52 additions & 10 deletions java_public_api/tech/v3/Clj.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,23 +49,27 @@ private Clj() {}
static final IFn metaFn = Clojure.var("clojure.core", "meta");
static final IFn withMetaFn = Clojure.var("clojure.core", "with-meta");
static final IFn varyMetaFn = Clojure.var ("clojure.core", "vary-meta");
static final IFn keysFn = Clojure.var("clojure.core", "keys");
static final IFn valsFn = Clojure.var("clojure.core", "vals");
static final IFn compileFn = Clojure.var("clojure.core", "compile");
static final Object compilePathVar = Clojure.var("clojure.core", "*compile-path*");

/**
* merge fn. Useful to pass into update or varyMeta.
*/
public static final IFn mergeFn = (IFn)Clojure.var("clojure.core", "merge");
public static final IFn mergeFn = Clojure.var("clojure.core", "merge");
/**
* dissoc fn. Useful to pass into update or varyMeta.
*/
public static final IFn assocFn = (IFn)Clojure.var("clojure.core", "assoc");
public static final IFn assocFn = Clojure.var("clojure.core", "assoc");
/**
* dissoc fn. Useful to pass into update or varyMeta.
*/
public static final IFn dissocFn = (IFn)Clojure.var("clojure.core", "dissoc");
public static final IFn dissocFn = Clojure.var("clojure.core", "dissoc");
/**
* update fn. Useful to pass into varyMeta.
*/
public static final IFn updateFn = (IFn)Clojure.var("clojure.core", "update");
public static final IFn updateFn = Clojure.var("clojure.core", "update");


/**
Expand Down Expand Up @@ -115,24 +119,24 @@ public static Object require(String ns) {
*
* @see require.
*/
public static Object var(String ns, String name) {
public static IFn var(String ns, String name) {
return Clojure.var(ns,name);
}

/**
* Perform a require and then lookup a var. Returns 'null' on failure.
*/
public static Object uncheckedRequiringResolve(String ns, String name) {
return requireresFn.invoke(symbolFn.invoke(ns,name));
public static IFn uncheckedRequiringResolve(String ns, String name) {
return (IFn)requireresFn.invoke(symbolFn.invoke(ns,name));
}
/**
* Perform a require and then lookup a var. Throws exception if the var
* isn't found. If an exception isn't desired, use 'uncheckedRequiringResolve'.
*/
public static Object requiringResolve(String ns, String name) {
Object retval = uncheckedRequiringResolve(ns, name);
public static IFn requiringResolve(String ns, String name) {
IFn retval = uncheckedRequiringResolve(ns, name);
if (retval == null)
throw new RuntimeException("Unable to resolve '" + ns + "/" + name);
throw new RuntimeException("Unable to resolve '" + ns + "/" + name + "'");
return retval;
}
/**
Expand Down Expand Up @@ -445,4 +449,42 @@ public static Object varyMeta(Object val, IFn modifyFn) {
public static Object varyMeta(Object val, IFn modifyFn, Object... args) {
return applyFn.invoke(varyMetaFn, val, modifyFn, args);
}

/**
* Return the keys of a map.
*/
public static Iterable keys(Object val) {
return (Iterable)keysFn.invoke(val);
}
/**
* Return the values of a map.
*/
public static Iterable vals(Object val) {
return (Iterable)valsFn.invoke(val);
}

/**
* Compile a clojure namespace into class files. Compilation path defaults to
* 'classes'. If this compilation pathway is on the classpath then that namespace
* will load potentially much faster next time it is 'require'd.
*/
public static void compile(String namespace) {
compileFn.invoke(symbol(namespace));
}

/**
* Compile a clojure namespace into class files located in a specific output directory.
* If this output directoryis on the classpath then that namespace will load potentially
* much faster next time it is 'require'd.
*
* outputDir must exist.
*/
public static void compile(String namespace, String outputDir) {
try(AutoCloseable binder = makeThreadBindings(hashmap(compilePathVar, outputDir))) {
compileFn.invoke(symbol(namespace));
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}
46 changes: 23 additions & 23 deletions java_public_api/tech/v3/DType.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,49 +67,49 @@ private DType() {}



static final IFn makeContainerFn = (IFn)requiringResolve("tech.v3.datatype", "make-container");
static final IFn cloneFn = (IFn)requiringResolve("tech.v3.datatype", "clone");
static final IFn toArrayFn = (IFn)requiringResolve("tech.v3.datatype", "->array");
static final IFn elemwiseDatatypeFn = (IFn)requiringResolve("tech.v3.datatype",
static final IFn makeContainerFn = requiringResolve("tech.v3.datatype", "make-container");
static final IFn cloneFn = requiringResolve("tech.v3.datatype", "clone");
static final IFn toArrayFn = requiringResolve("tech.v3.datatype", "->array");
static final IFn elemwiseDatatypeFn = requiringResolve("tech.v3.datatype",
"elemwise-datatype");
static final IFn ecountFn = (IFn)requiringResolve("tech.v3.datatype", "ecount");
static final IFn shapeFn = (IFn)requiringResolve("tech.v3.datatype", "shape");
static final IFn makeListFn = (IFn)requiringResolve("tech.v3.datatype", "make-list");
static final IFn emapFn = (IFn)requiringResolve("tech.v3.datatype.emap", "emap");
static final IFn applyFn = (IFn)requiringResolve("clojure.core", "apply");
static final IFn ecountFn = requiringResolve("tech.v3.datatype", "ecount");
static final IFn shapeFn = requiringResolve("tech.v3.datatype", "shape");
static final IFn makeListFn = requiringResolve("tech.v3.datatype", "make-list");
static final IFn emapFn = requiringResolve("tech.v3.datatype.emap", "emap");
static final IFn applyFn = requiringResolve("clojure.core", "apply");

//resource management
static final Object stackContextVar = requiringResolve("tech.v3.resource.stack",
"*resource-context*");
static final Object stackBoundVar = requiringResolve("tech.v3.resource.stack",
"*bound-resource-context?*");
static final IFn releaseResourcesFn = (IFn)requiringResolve("tech.v3.resource.stack",
static final IFn releaseResourcesFn = requiringResolve("tech.v3.resource.stack",
"release-current-resources");


static final IFn optMap = (IFn)requiringResolve("tech.v3.datatype.jvm-map", "opt-map");
static final IFn optMap = requiringResolve("tech.v3.datatype.jvm-map", "opt-map");

static final IFn setConstantFn = (IFn)requiringResolve("tech.v3.datatype", "set-constant!");
static final IFn copyFn = (IFn)requiringResolve("tech.v3.datatype", "copy!");
static final IFn subBufferFn = (IFn)requiringResolve("tech.v3.datatype", "sub-buffer");
static final IFn toBufferFn = (IFn)requiringResolve("tech.v3.datatype", "->buffer");
static final IFn wrapAddressFn = (IFn)requiringResolve("tech.v3.datatype.native-buffer",
static final IFn setConstantFn = requiringResolve("tech.v3.datatype", "set-constant!");
static final IFn copyFn = requiringResolve("tech.v3.datatype", "copy!");
static final IFn subBufferFn = requiringResolve("tech.v3.datatype", "sub-buffer");
static final IFn toBufferFn = requiringResolve("tech.v3.datatype", "->buffer");
static final IFn wrapAddressFn = requiringResolve("tech.v3.datatype.native-buffer",
"wrap-address");
static final IFn setNativeDtFn = (IFn)requiringResolve("tech.v3.datatype.native-buffer",
static final IFn setNativeDtFn = requiringResolve("tech.v3.datatype.native-buffer",
"set-native-datatype");
static final IFn asNativeBufferFn = (IFn)requiringResolve("tech.v3.datatype",
static final IFn asNativeBufferFn = requiringResolve("tech.v3.datatype",
"as-native-buffer-data");
static final IFn asArrayBufferFn = (IFn)requiringResolve("tech.v3.datatype",
static final IFn asArrayBufferFn = requiringResolve("tech.v3.datatype",
"as-array-buffer-data");
static final IFn numericByteWidthFn = (IFn)requiringResolve("tech.v3.datatype.casting",
static final IFn numericByteWidthFn = requiringResolve("tech.v3.datatype.casting",
"numeric-byte-width");

static final IFn indexedBufferFn = (IFn)requiringResolve("tech.v3.datatype.io-indexed-buffer",
static final IFn indexedBufferFn = requiringResolve("tech.v3.datatype.io-indexed-buffer",
"indexed-buffer");

static final IFn reverseFn = (IFn)requiringResolve("tech.v3.datatype-api", "reverse");
static final IFn reverseFn = requiringResolve("tech.v3.datatype-api", "reverse");

static final IFn asNioBufFn = (IFn)requiringResolve("tech.v3.datatype.nio-buffer", "as-nio-buffer");
static final IFn asNioBufFn = requiringResolve("tech.v3.datatype.nio-buffer", "as-nio-buffer");


/**
Expand Down
30 changes: 15 additions & 15 deletions java_public_api/tech/v3/Tensor.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,21 +79,21 @@ public class Tensor {
//Unnecessary
private Tensor() {}

static final IFn makeTensorFn = (IFn)requiringResolve("tech.v3.tensor", "->tensor");
static final IFn asTensorFn = (IFn)requiringResolve("tech.v3.tensor", "as-tensor");
static final IFn ensureTensorFn = (IFn)requiringResolve("tech.v3.tensor", "ensure-tensor");
static final IFn applyFn = (IFn)requiringResolve("clojure.core", "apply");
static final IFn mget = (IFn)requiringResolve("tech.v3.tensor", "mget");
static final IFn mset = (IFn)requiringResolve("tech.v3.tensor", "mset!");
static final IFn bcastFn = (IFn)requiringResolve("tech.v3.tensor", "broadcast");
static final IFn reshapeFn = (IFn)requiringResolve("tech.v3.tensor", "reshape");
static final IFn selectFn = (IFn)requiringResolve("tech.v3.tensor", "select");
static final IFn transposeFn = (IFn)requiringResolve("tech.v3.tensor", "transpose");
static final IFn sliceFn = (IFn)requiringResolve("tech.v3.tensor", "slice");
static final IFn sliceRightFn = (IFn)requiringResolve("tech.v3.tensor", "slice-right");
static final IFn computeTensFn = (IFn)requiringResolve("tech.v3.tensor", "compute-tensor");
static final IFn ensureNDBFn = (IFn)requiringResolve("tech.v3.tensor", "ensure-nd-buffer-descriptor");
static final IFn NDBToTensFn = (IFn)requiringResolve("tech.v3.tensor", "nd-buffer-descriptor->tensor");
static final IFn makeTensorFn = requiringResolve("tech.v3.tensor", "->tensor");
static final IFn asTensorFn = requiringResolve("tech.v3.tensor", "as-tensor");
static final IFn ensureTensorFn = requiringResolve("tech.v3.tensor", "ensure-tensor");
static final IFn applyFn = requiringResolve("clojure.core", "apply");
static final IFn mget = requiringResolve("tech.v3.tensor", "mget");
static final IFn mset = requiringResolve("tech.v3.tensor", "mset!");
static final IFn bcastFn = requiringResolve("tech.v3.tensor", "broadcast");
static final IFn reshapeFn = requiringResolve("tech.v3.tensor", "reshape");
static final IFn selectFn = requiringResolve("tech.v3.tensor", "select");
static final IFn transposeFn = requiringResolve("tech.v3.tensor", "transpose");
static final IFn sliceFn = requiringResolve("tech.v3.tensor", "slice");
static final IFn sliceRightFn = requiringResolve("tech.v3.tensor", "slice-right");
static final IFn computeTensFn = requiringResolve("tech.v3.tensor", "compute-tensor");
static final IFn ensureNDBFn = requiringResolve("tech.v3.tensor", "ensure-nd-buffer-descriptor");
static final IFn NDBToTensFn = requiringResolve("tech.v3.tensor", "nd-buffer-descriptor->tensor");



Expand Down
4 changes: 2 additions & 2 deletions java_test/java/jtest/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public Object invoke(Object lhs, Object rhs) {
//Base clojure functions work fine.
require("tech.v3.datatype");
//A slightly slower but more robust symbol resolution mechanism.
IFn reshape = (IFn)requiringResolve("tech.v3.tensor", "reshape");
IFn reshape = requiringResolve("tech.v3.tensor", "reshape");
//You can reshape any flat array or java.util.List implementation in-place
//into a tensor. Arrays-of-arrays need to go through the makeTensor route.
int[] ddata = new int[] {0,1,2,3,4,5,6,7,8,9};
Expand Down Expand Up @@ -245,7 +245,7 @@ public Object invoke(Object yidx, Object xidx) {
//along with detailed API documentation
//https://neanderthal.uncomplicate.org/codox/
require("uncomplicate.neanderthal.core");
IFn denseConstructor = (IFn)requiringResolve("uncomplicate.neanderthal.native", "dge");
IFn denseConstructor = requiringResolve("uncomplicate.neanderthal.native", "dge");
Object denseMatrix = call(denseConstructor, 3, 3, range(9));
System.out.println(denseMatrix.toString());
// #RealGEMatrix[double, mxn:3x3, layout:column, offset:0]
Expand Down

0 comments on commit 9eb6c77

Please sign in to comment.