Skip to content

Commit

Permalink
feat: stratification related support functions (#1356)
Browse files Browse the repository at this point in the history
  • Loading branch information
mwdchang authored Jul 12, 2023
1 parent 3914d50 commit b4212cf
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import _ from 'lodash';
import API from '@/api/api';
import { IGraph } from '@graph-scaffolder/types';
import { PetriNetModel, Model, PetriNetTransition } from '@/types/Types';
import { PetriNetModel, Model, PetriNetTransition, TypingSemantics } from '@/types/Types';
import { PetriNet } from '@/petrinet/petrinet-service';

export interface NodeData {
Expand Down Expand Up @@ -259,6 +260,8 @@ export const removeTransition = (amr: Model, id: string) => {
}
};

// Update a transition's expression and expression_mathml fields based on
// mass-kinetics
export const updateRateExpression = (amr: Model, transition: PetriNetTransition) => {
const rate = amr.semantics?.ode.rates.find((d) => d.target === transition.id);
if (!rate) return;
Expand Down Expand Up @@ -360,3 +363,33 @@ export const updateTransitioneId = (amr: Model, id: string, newId: string) => {
if (!rate) return;
rate.target = newId;
};

// Replace typing semantics
export const addTyping = (amr: Model, typing: TypingSemantics) => {
if (amr.semantics) {
amr.semantics.typing = typing;
}
};

// Add a reflexive transition loop to the state
// This is a special type of addTransition that creates a self loop
export const addReflexives = (amr: Model, stateId: string, reflexiveId: string) => {
addTransition(amr, reflexiveId, reflexiveId);
const transition = (amr.model as PetriNetModel).transitions.find((t) => t.id === reflexiveId);
if (transition) {
transition.input = [stateId];
transition.output = [stateId];
}
};

export const mergeMetadata = (amr: Model, amrOld: Model) => {
console.log(amr, amrOld);
};

export const stratify = async (baseAMR: Model, fluxAMR: Model) => {
const response = await API.post('/modeling-request/stratify', {
baseModel: baseAMR,
fluxModel: fluxAMR
});
return response.data as Model;
};
6 changes: 3 additions & 3 deletions packages/client/hmi-client/src/types/Types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ export interface PetriNetTransition {
id: string;
input: string[];
output: string[];
grounding: ModelGrounding;
grounding?: ModelGrounding;
properties: PetriNetTransitionProperties;
}

Expand Down Expand Up @@ -311,8 +311,8 @@ export interface ModelExpression {

export interface PetriNetTransitionProperties {
name: string;
grounding: ModelGrounding;
rate: ModelExpression;
description: string;
grounding?: ModelGrounding;
}

export interface Extraction {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@
@Accessors(chain = true)
public class TypingSemantics {

@JsonProperty("type_system")
private TypeSystem typeSystem;
private TypeSystem type_system;

@JsonProperty("type_map")
private List<List<String>> typeMap;
private List<List<String>> type_map;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package software.uncharted.terarium.hmiserver.models.dataservice.petrinet;

import software.uncharted.terarium.hmiserver.models.dataservice.modelparts.ModelGrounding;
import software.uncharted.terarium.hmiserver.annotations.TSOptional;

import lombok.Data;
import lombok.experimental.Accessors;
Expand All @@ -13,7 +14,10 @@ public class PetriNetTransition {
private String id;
private List<String> input;
private List<String> output;

@TSOptional
private ModelGrounding grounding;

private PetriNetTransitionProperties properties;
}

Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@

import lombok.Data;
import lombok.experimental.Accessors;
import software.uncharted.terarium.hmiserver.annotations.TSOptional;

@Data
@Accessors(chain = true)
public class PetriNetTransitionProperties {
private String name;
private String description;

@TSOptional
private ModelGrounding grounding;
private ModelExpression rate;
}

Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,12 @@ public interface ModelServiceProxy {
Response petrinetToLatex(
PetriNet content
);

@POST
@Path("/api/stratify")
@Consumes(MediaType.APPLICATION_JSON)
Response stratify(
Object baseModel,
Object fluModel
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package software.uncharted.terarium.hmiserver.resources.modelservice;

import org.eclipse.microprofile.openapi.annotations.tags.Tag;
import org.eclipse.microprofile.rest.client.inject.RestClient;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;


import software.uncharted.terarium.hmiserver.proxies.modelservice.ModelServiceProxy;


@Path("/api/modeling-request")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Tag(name = "Modeling Service REST Endpoint")
public class ModelingRequestResource {

@RestClient
ModelServiceProxy modelServiceProxy;

@POST
@Path("/stratify")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Tag(name = "Stratify two AMR models together")
public Object stratify(
final Object baseModel,
final Object fluxModel
) {
return modelServiceProxy.stratify(baseModel, fluxModel);
}
}

0 comments on commit b4212cf

Please sign in to comment.