浏览代码

Fixed LaTeX generation issue

rparedis 2 年之前
父节点
当前提交
337cd349f2
共有 2 个文件被更改,包括 19 次插入3 次删除
  1. 3 0
      src/CBD/converters/latexify/CBD2Latex.py
  2. 16 3
      src/CBD/converters/latexify/functions.py

+ 3 - 0
src/CBD/converters/latexify/CBD2Latex.py

@@ -258,6 +258,9 @@ class CBD2Latex:
 					if eq.lhs == d.name:
 						deqs.append(eq)
 			for deq in deqs:
+				# prevent cyclic dependency
+				if deq.rhs.contains(deq.lhs):
+					continue
 				if deq.lhs not in outputs:
 					oeq.apply(deq)
 					to_delete.add(deq.lhs)

+ 16 - 3
src/CBD/converters/latexify/functions.py

@@ -210,13 +210,23 @@ class Fnc:
 		return self.__class__(self.name, time, eq_time)
 
 	def apply(self, eq):
-		nargs = self.args[:]
 		for i, a in enumerate(self.args):
 			res = a.apply(eq)
-			nargs[i] = res
-		self.args = nargs
+			self.args[i] = res
 		return self
 
+	def contains(self, other):
+		"""
+		Checks if the function relies on another value.
+
+		Args:
+			other (str):    The name that must be checked.
+		"""
+		for arg in self.args:
+			if arg.contains(other):
+				return True
+		return False
+
 	@staticmethod
 	def _cross_product_fncs(l1, l2, *lists):
 		res = []
@@ -438,6 +448,9 @@ class VarFnc(Fnc):
 			return eq.rhs
 		return self
 
+	def contains(self, other):
+		return self.name == other
+
 
 class DelayFnc(Fnc):
 	def at(self, time):