From 38df8e7b4066802cad38303afdf467688d67090a Mon Sep 17 00:00:00 2001
From: carlosuc3m <100329787@alumnos.uc3m.es>
Date: Thu, 13 Jun 2024 11:51:50 +0200
Subject: [PATCH 001/150] start adding workflow for icy
---
.../workflows/check_compatibility_icy.yaml | 30 ++
scripts/check_compatiblity_icy/pom.xml | 99 ++++
.../modelrunner/ci/ContinuousIntegration.java | 459 ++++++++++++++++++
.../modelrunner/ci/JavaProcessing.java | 427 ++++++++++++++++
4 files changed, 1015 insertions(+)
create mode 100644 .github/workflows/check_compatibility_icy.yaml
create mode 100644 scripts/check_compatiblity_icy/pom.xml
create mode 100644 scripts/check_compatiblity_icy/src/main/java/io/bioimage/modelrunner/ci/ContinuousIntegration.java
create mode 100644 scripts/check_compatiblity_icy/src/main/java/io/bioimage/modelrunner/ci/JavaProcessing.java
diff --git a/.github/workflows/check_compatibility_icy.yaml b/.github/workflows/check_compatibility_icy.yaml
new file mode 100644
index 00000000..0d47bb84
--- /dev/null
+++ b/.github/workflows/check_compatibility_icy.yaml
@@ -0,0 +1,30 @@
+name: check compatibility icy
+
+concurrency: icy
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - .github/workflows/check_compatibility_icy.yaml
+ - scripts/check_compatibility_icy.py
+ workflow_dispatch:
+ schedule:
+ - cron: 0 1 * * * # update compatibility once a day
+
+jobs:
+ setup:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Setup Maven Action
+ uses: stCarolas/setup-maven@v4.5
+ with:
+ java-version: 11
+ maven-version: 3.9.5
+ - name: Build with Maven
+ run: |
+ cd scripts/check_compatiblity_icy
+ mvn clean install
+
diff --git a/scripts/check_compatiblity_icy/pom.xml b/scripts/check_compatiblity_icy/pom.xml
new file mode 100644
index 00000000..8d225793
--- /dev/null
+++ b/scripts/check_compatiblity_icy/pom.xml
@@ -0,0 +1,99 @@
+
+
+ 4.0.0
+
+
+ org.scijava
+ pom-scijava
+ 37.0.0
+
+
+
+ io.bioimage
+ dl-modelrunner-ci
+ 0.0.1-SNAPSHOT
+
+ JDLL CI
+ Continuous integration code for JDLL
+
+ https://github.com/bioimage-io/pytorch-java-interface-javacpp
+ 2023
+
+ Icy Bioimage Analysis
+ https://icy.bioimageanalysis.org/
+
+
+
+ Apache License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+
+
+ carlosuc3m
+ Carlos Javier Garcia Lopez de Haro
+ https://github.com/carlosuc3m
+
+ developer
+ debugger
+ reviewer
+ support
+ maintainer
+
+
+
+
+
+ Carlos Garcia
+ https://github.com/carlosuc3m
+ carlosuc3m
+
+
+
+
+
+ Image.sc Forum
+ https://forum.image.sc/tag/bioimage-io
+
+
+
+
+ scm:git:https://github.com/Icy-imaging/icy-bioimage-io
+ scm:git:git@github.com:Icy-imaging/icy-bioimage-io
+ HEAD
+ https://github.com/Icy-imaging/icy-bioimage-io
+
+
+ GitHub Issues
+ https://github.com/Icy-imaging/icy-bioimage-io/issues
+
+
+ None
+
+
+
+ io.bioimage.modelrunner.ci
+
+ apache_v2
+ Institut Pasteur
+
+ 0.5.5-SNAPSHOT
+
+
+
+
+ scijava.public
+ https://maven.scijava.org/content/groups/public
+
+
+
+
+
+ io.bioimage
+ dl-modelrunner
+ ${dl-modelrunner.version}
+
+
+
diff --git a/scripts/check_compatiblity_icy/src/main/java/io/bioimage/modelrunner/ci/ContinuousIntegration.java b/scripts/check_compatiblity_icy/src/main/java/io/bioimage/modelrunner/ci/ContinuousIntegration.java
new file mode 100644
index 00000000..d0686bd3
--- /dev/null
+++ b/scripts/check_compatiblity_icy/src/main/java/io/bioimage/modelrunner/ci/ContinuousIntegration.java
@@ -0,0 +1,459 @@
+/*-
+ * #%L
+ * This project performs Continuous Integration tasks on the JDLL library
+ * %%
+ * Copyright (C) 2023 Institut Pasteur.
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+package io.bioimage.modelrunner.ci;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.PathMatcher;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.jar.Manifest;
+import java.util.stream.Collectors;
+
+import io.bioimage.modelrunner.bioimageio.BioimageioRepo;
+import io.bioimage.modelrunner.bioimageio.description.ModelDescriptor;
+import io.bioimage.modelrunner.bioimageio.description.TransformSpec;
+import io.bioimage.modelrunner.bioimageio.description.exceptions.ModelSpecsException;
+import io.bioimage.modelrunner.bioimageio.description.weights.ModelWeight;
+import io.bioimage.modelrunner.bioimageio.description.weights.WeightFormat;
+import io.bioimage.modelrunner.engine.EngineInfo;
+import io.bioimage.modelrunner.engine.installation.EngineInstall;
+import io.bioimage.modelrunner.model.Model;
+import io.bioimage.modelrunner.numpy.DecodeNumpy;
+import io.bioimage.modelrunner.tensor.Tensor;
+import io.bioimage.modelrunner.utils.Constants;
+import io.bioimage.modelrunner.utils.YAMLUtils;
+import net.imglib2.Cursor;
+import net.imglib2.RandomAccessibleInterval;
+import net.imglib2.loops.LoopBuilder;
+import net.imglib2.type.NativeType;
+import net.imglib2.type.numeric.RealType;
+import net.imglib2.type.numeric.real.FloatType;
+import net.imglib2.view.Views;
+
+/**
+ *
+ */
+public class ContinuousIntegration {
+
+ private static Map downloadedModelsCorrectly = new HashMap();
+ private static Map downloadedModelsIncorrectly = new HashMap();
+
+ public static void main(String[] args) throws IOException {
+
+ //String pendingMatrix = args[1];
+
+ Path currentDir = Paths.get(ContinuousIntegration.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParent();
+ Path rdfDir = currentDir.resolve("../bioimageio-gh-pages/rdfs").normalize();
+
+ // Create a matcher for the pattern 'rdf.yaml'
+ runTests(rdfDir, "**", "**", Paths.get("test_summaries"), null);
+ }
+
+
+ public static void runTests(Path rdfDir, String resourceID, String versionID, Path summariesDir, String postfix) throws IOException {
+ LinkedHashMap summaryDefaults = new LinkedHashMap();
+ postfix = getJDLLVersion();
+ summaryDefaults.put("JDLL_VERSION", postfix);
+
+ PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + resourceID + File.separator + versionID + File.separator + Constants.RDF_FNAME);
+
+ List rdfFiles = Files.walk(rdfDir).filter(matcher::matches).collect(Collectors.toList());
+ EngineInstall installer = EngineInstall.createInstaller();
+ installer.basicEngineInstallation();
+
+ for (Path rdfPath : rdfFiles) {
+ String testName = "Reproduce ouptuts with JDLL " + postfix;
+ String error = null;
+ String status = null;
+ String traceback = null;
+
+ Map rdf = new LinkedHashMap();
+ try {
+ rdf = YAMLUtils.load(rdfPath.toAbsolutePath().toString());
+ } catch (Exception ex) {
+ error = "Unable to load " + Constants.RDF_FNAME + ": " + ex.toString();
+ status = "failed";
+ traceback = stackTrace(ex);
+ ex.printStackTrace();
+ }
+
+ Object rdID = rdf.get("id");
+ Object type = rdf.get("type");
+ Object weightFormats = rdf.get("weights");
+ if (rdID == null || !(rdID instanceof String)) {
+ System.out.println("Invalid RDF. Missing/Invalid 'id' in rdf: " + rdfPath.toString());
+ } else if (type == null || !(type instanceof String) || !((String) type).equals("model")) {
+ status = "skipped";
+ error = "not a model RDF";
+ } else if (weightFormats == null || !(weightFormats instanceof Map)) {
+ status = "failed";
+ error = "Missing weights dictionary for " + rdID;
+ traceback = weightFormats.toString();
+ }
+ ModelWeight weights = null;
+ try {
+ weights = ModelWeight.build((Map) weightFormats);
+ } catch (Exception ex) {
+ status = "failed";
+ error = "Missing/Invalid weight formats for " + rdID;
+ traceback = stackTrace(ex);
+ }
+
+ if (weights != null && weights.gettAllSupportedWeightObjects().size() == 0) {
+ status = "failed";
+ error = "Missing/Invalid weight formats. No supported weigths found for " + rdID;
+ }
+
+ if (status != null) {
+ List