From 59692de05ca35564eff677690699f179c362df94 Mon Sep 17 00:00:00 2001 From: Myocardinal Date: Thu, 29 Aug 2024 20:08:13 -0400 Subject: [PATCH] Added CBC solver installation step using apt-get --- .github/workflows/publish-pypi.yml | 3 ++ src/language.rs | 78 +++++++++++++++--------------- src/lib.rs | 2 + 3 files changed, 44 insertions(+), 39 deletions(-) diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index f17073e..4e89b3b 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -26,6 +26,9 @@ jobs: build maturin --user + - name: Install CBC Solver + run: sudo apt-get install -y coinor-cbc coinor-libcbc-dev + - name: Build with maturin uses: PyO3/maturin-action@v1 with: diff --git a/src/language.rs b/src/language.rs index 0b1f600..85aa575 100644 --- a/src/language.rs +++ b/src/language.rs @@ -521,45 +521,45 @@ pub fn rules>() -> Vec> { // rewrite!("div-mul-comm-r"; "(Div (Mul ?x ?y) ?z)" => "(Mul ?x (Div ?y ?z))"), ]} -// struct FMulApplier { -// foo: Var, -// bar: Var, -// } -// -// impl Applier for FMulApplier { -// fn apply_one(&self, egraph: &mut EGraph, matched_id: Id, subst: &Subst, _: Option<&PatternAst>, _: Symbol) -> Vec { -// let foo_scalar = egraph[subst[self.foo]].data.scalar; -// let bar_scalar = egraph[subst[self.bar]].data.scalar; -// let new_scalar = foo_scalar * bar_scalar; -// let new_var = egraph.add(TnsrLang::Var(new_scalar.to_string().into())); -// let new_node = egraph.add(TnsrLang::Input([new_var])); -// if egraph.union(new_node, matched_id) { -// vec![new_node, matched_id] -// } else { -// vec![] -// } -// } -// } -// -// struct FAddApplier { -// foo: Var, -// bar: Var, -// } -// -// impl Applier for FAddApplier { -// fn apply_one(&self, egraph: &mut EGraph, matched_id: Id, subst: &Subst, _: Option<&PatternAst>, _: Symbol) -> Vec { -// let foo_scalar = egraph[subst[self.foo]].data.scalar; -// let bar_scalar = egraph[subst[self.bar]].data.scalar; -// let new_scalar = foo_scalar + bar_scalar; -// let new_var = egraph.add(TnsrLang::Var(new_scalar.to_string().into())); -// let new_node = egraph.add(TnsrLang::Input([new_var])); -// if egraph.union(new_node, matched_id) { -// vec![new_node, matched_id] -// } else { -// vec![] -// } -// } -// } +struct FMulApplier { + foo: Var, + bar: Var, +} + +impl Applier for FMulApplier { + fn apply_one(&self, egraph: &mut EGraph, matched_id: Id, subst: &Subst, _: Option<&PatternAst>, _: Symbol) -> Vec { + let foo_scalar = egraph[subst[self.foo]].data.scalar; + let bar_scalar = egraph[subst[self.bar]].data.scalar; + let new_scalar = foo_scalar * bar_scalar; + let new_var = egraph.add(TnsrLang::Var(new_scalar.to_string().into())); + let new_node = egraph.add(TnsrLang::Input([new_var])); + if egraph.union(new_node, matched_id) { + vec![new_node, matched_id] + } else { + vec![] + } + } +} + +struct FAddApplier { + foo: Var, + bar: Var, +} + +impl Applier for FAddApplier { + fn apply_one(&self, egraph: &mut EGraph, matched_id: Id, subst: &Subst, _: Option<&PatternAst>, _: Symbol) -> Vec { + let foo_scalar = egraph[subst[self.foo]].data.scalar; + let bar_scalar = egraph[subst[self.bar]].data.scalar; + let new_scalar = foo_scalar + bar_scalar; + let new_var = egraph.add(TnsrLang::Var(new_scalar.to_string().into())); + let new_node = egraph.add(TnsrLang::Input([new_var])); + if egraph.union(new_node, matched_id) { + vec![new_node, matched_id] + } else { + vec![] + } + } +} pub struct TnsrCost<'a> { pub egraph: &'a EGraph, diff --git a/src/lib.rs b/src/lib.rs index 0d1d386..9f305ae 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(dead_code)] + pub mod language; use egg::*; use crate::language::*;