Skip to content

Commit

Permalink
Remove flattenValues
Browse files Browse the repository at this point in the history
  • Loading branch information
InversionSpaces committed Jul 25, 2023
1 parent 49b0f45 commit e199c56
Show file tree
Hide file tree
Showing 8 changed files with 31 additions and 45 deletions.
16 changes: 4 additions & 12 deletions model/inline/src/main/scala/aqua/model/inline/Inline.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,10 @@ object SeqMode extends MergeMode
object ParMode extends MergeMode

/**
* @param flattenValues values that need to be resolved before `predo`.
* ListMap for keeping order of values (mostly for debugging purposes)
* @param predo operations tree
* @param mergeMode how `flattenValues` and `predo` must be merged
* @param mergeMode how `predo` must be merged
*/
private[inline] case class Inline(
flattenValues: ListMap[String, ValueRaw] = ListMap.empty,
predo: Chain[OpModel.Tree] = Chain.empty,
mergeMode: MergeMode = ParMode
) {
Expand All @@ -40,33 +37,28 @@ private[inline] case class Inline(
case ParMode => Chain.one(ParModel.wrap(l))
}

Inline(
flattenValues,
desugaredPredo
)
Inline(desugaredPredo)
}

def mergeWith(inline: Inline, mode: MergeMode): Inline = {
val left = desugar
val right = inline.desugar

Inline(left.flattenValues ++ right.flattenValues, left.predo ++ right.predo, mode)
Inline(left.predo ++ right.predo, mode)
}
}

// TODO may not be needed there
private[inline] object Inline {
val empty: Inline = Inline()

def preload(pairs: (String, ValueRaw)*): Inline = Inline(ListMap.from(pairs))

def tree(tr: OpModel.Tree): Inline = Inline(predo = Chain.one(tr))

given Monoid[Inline] with
override val empty: Inline = Inline()

override def combine(a: Inline, b: Inline): Inline =
Inline(a.flattenValues ++ b.flattenValues, a.predo ++ b.predo)
Inline(a.predo ++ b.predo)

def parDesugarPrefix(ops: List[OpModel.Tree]): Option[OpModel.Tree] = ops match {
case Nil => None
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
package aqua.model.inline

import aqua.model.{CallModel, CallServiceModel, LiteralModel, OpModel, SeqModel, ValueModel, VarModel}
import aqua.model.{
CallModel,
CallServiceModel,
LiteralModel,
OpModel,
SeqModel,
ValueModel,
VarModel
}
import aqua.model.inline.raw.RawInliner
import cats.data.Chain
import aqua.model.inline.state.{Arrows, Exports, Mangler}
Expand Down Expand Up @@ -52,7 +60,6 @@ object MakeStructRawInliner extends RawInliner[MakeStructRaw] {
(
varModel,
Inline(
valsInline.flattenValues,
Chain.one(SeqModel.wrap((valsInline.predo :+ objCreation).toList: _*))
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package aqua.model.inline
import aqua.model.inline.state.{Arrows, Counter, Exports, Mangler}
import aqua.model.*
import aqua.model.inline.raw.{
ApplyBoolOpRawInliner,
ApplyFunctorRawInliner,
ApplyGateRawInliner,
ApplyPropertiesRawInliner,
Expand All @@ -13,15 +14,16 @@ import aqua.model.inline.raw.{
import aqua.raw.ops.*
import aqua.raw.value.*
import aqua.types.{ArrayType, LiteralType, OptionType, StreamType}

import cats.syntax.traverse.*
import cats.syntax.monoid.*
import cats.syntax.functor.*
import cats.syntax.flatMap.*
import cats.syntax.apply.*
import cats.instances.list.*
import cats.data.{Chain, State, StateT}
import cats.syntax.applicative.*
import scribe.Logging
import aqua.model.inline.raw.ApplyBoolOpRawInliner

object RawValueInliner extends Logging {

Expand Down Expand Up @@ -62,22 +64,11 @@ object RawValueInliner extends Logging {

private[inline] def inlineToTree[S: Mangler: Exports: Arrows](
inline: Inline
): State[S, List[OpModel.Tree]] = {
inline.flattenValues.toList.traverse { case (name, v) =>
valueToModel(v).map {
case (vv, Some(op)) =>
SeqModel.wrap(op, FlattenModel(vv, name).leaf)

case (vv, _) =>
FlattenModel(vv, name).leaf
}
}.map { predo =>
inline.mergeMode match
case SeqMode =>
SeqModel.wrap((inline.predo.toList ++ predo): _*) :: Nil
case ParMode => inline.predo.toList ::: predo
}
}
): State[S, List[OpModel.Tree]] =
(inline.mergeMode match {
case SeqMode => SeqModel.wrap(inline.predo) :: Nil
case ParMode => inline.predo.toList
}).pure

private[inline] def toModel[S: Mangler: Exports: Arrows](
unfoldF: State[S, (ValueModel, Inline)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,7 @@ object ApplyGateRawInliner extends RawInliner[ApplyGateRaw] with Logging {

val tree = SeqModel.wrap(idxInline.predo.toList :+ gate)

val treeInline =
Inline(idxInline.flattenValues, predo = Chain.one(tree))
val treeInline = Inline(predo = Chain.one(tree))

(
VarModel(uniqueResultName, ArrayType(afr.streamType.element)),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
package aqua.model.inline.raw

import aqua.model.{CallModel, CallServiceModel, LiteralModel, OpModel, SeqModel, ValueModel, VarModel}
import aqua.model.{
CallModel,
CallServiceModel,
LiteralModel,
OpModel,
SeqModel,
ValueModel,
VarModel
}
import aqua.model.inline.{Inline, SeqMode, TagInliner}
import aqua.model.inline.MakeStructRawInliner.createObj
import aqua.model.inline.RawValueInliner.unfold
Expand Down Expand Up @@ -52,7 +60,6 @@ object ApplyIntoCopyRawInliner extends Logging {
(
varModel,
Inline(
valsInline.flattenValues,
Chain.one(SeqModel.wrap((valsInline.predo :+ objCopy).toList: _*)),
SeqMode
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ object ApplyPropertiesRawInliner extends RawInliner[ApplyPropertyRaw] with Loggi
newVI <- ApplyFunctorRawInliner(flatten, f)
} yield {
newVI._1 -> Inline(
inline.flattenValues ++ newVI._2.flattenValues,
inline.predo ++ newVI._2.predo,
mergeMode = SeqMode
)
Expand All @@ -198,7 +197,6 @@ object ApplyPropertiesRawInliner extends RawInliner[ApplyPropertyRaw] with Loggi
newVI <- ApplyIntoCopyRawInliner(varModel, ic)
} yield {
newVI._1 -> Inline(
inline.flattenValues ++ newVI._2.flattenValues,
inline.predo ++ newVI._2.predo,
mergeMode = SeqMode
)
Expand All @@ -218,7 +216,6 @@ object ApplyPropertiesRawInliner extends RawInliner[ApplyPropertyRaw] with Loggi
case (vm @ VarModel(_, _, _), inline) if vm.properties.nonEmpty =>
removeProperties(vm).map { case (vf, inlf) =>
PropertyRawWithModel(iir, Option(IntoIndexModel(vf.name, t))) -> Inline(
inline.flattenValues ++ inlf.flattenValues,
inline.predo ++ inlf.predo,
mergeMode = SeqMode
)
Expand Down Expand Up @@ -254,7 +251,6 @@ object ApplyPropertiesRawInliner extends RawInliner[ApplyPropertyRaw] with Loggi
(
vm,
Inline(
leftInline.flattenValues ++ inl.flattenValues,
leftInline.predo ++ inl.predo,
mergeMode = SeqMode
)
Expand All @@ -269,15 +265,13 @@ object ApplyPropertiesRawInliner extends RawInliner[ApplyPropertyRaw] with Loggi
case (v, i) if !propertiesAllowed && v.properties.nonEmpty =>
removeProperties(v).map { case (vf, inlf) =>
vf -> Inline(
leftInline.flattenValues ++ i.flattenValues ++ inlf.flattenValues,
leftInline.predo ++ i.predo ++ inlf.predo,
mergeMode = SeqMode
)
}
case (v, i) =>
State.pure(
v -> Inline(
leftInline.flattenValues ++ i.flattenValues,
leftInline.predo ++ i.predo,
mergeMode = SeqMode
)
Expand All @@ -304,7 +298,6 @@ object ApplyPropertiesRawInliner extends RawInliner[ApplyPropertyRaw] with Loggi
unfoldProperties(gateResInline, gateResVal, properties, propertiesAllowed).map {
case (v, i) =>
v -> Inline(
inl.flattenValues ++ i.flattenValues,
inl.predo ++ i.predo,
mergeMode = SeqMode
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ object CallArrowRawInliner extends RawInliner[CallArrowRaw] with Logging {
cd <- callToModel(call, true)
sd <- valueToModel(serviceId)
} yield cd._1.exportTo.map(_.asVar.resolveWith(exports)) -> Inline(
ListMap.empty,
Chain(
SeqModel.wrap(
sd._2.toList ++
Expand Down Expand Up @@ -58,7 +57,6 @@ object CallArrowRawInliner extends RawInliner[CallArrowRaw] with Logging {
.callArrowRet(fn, cm)
.map { case (body, vars) =>
vars -> Inline(
ListMap.empty,
Chain.one(
// Leave meta information in tree after inlining
MetaModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ object MakeAbilityRawInliner extends RawInliner[AbilityRaw] {
(
varModel,
Inline(
valsInline.flattenValues,
Chain.one(SeqModel.wrap(valsInline.predo))
)
)
Expand Down

0 comments on commit e199c56

Please sign in to comment.