M: Improve restore ordering
This commit is contained in:
parent
fca8eb71e1
commit
b30a72e997
|
|
@ -22,14 +22,11 @@ class OrderManager:
|
|||
self._fix_semantic_children()
|
||||
self._override_order()
|
||||
|
||||
def _fix_topological(self) -> None:
|
||||
sorted_ids = self._semantic.graph.sort_stable([cst.pk for cst in self._items])
|
||||
sorted_items = [next(cst for cst in self._items if cst.pk == id) for id in sorted_ids]
|
||||
self._items = sorted_items
|
||||
|
||||
def _fix_kernel(self) -> None:
|
||||
result = [cst for cst in self._items if cst.cst_type == CstType.BASE]
|
||||
result = result + [cst for cst in self._items if cst.cst_type == CstType.CONSTANT]
|
||||
result = result + \
|
||||
[cst for cst in self._items if result.count(cst) == 0 and len(self._semantic.graph.inputs[cst.pk]) == 0]
|
||||
kernel = [
|
||||
cst.pk for cst in self._items if
|
||||
cst.cst_type in [CstType.STRUCTURED, CstType.AXIOM] or
|
||||
|
|
@ -40,6 +37,11 @@ class OrderManager:
|
|||
result = result + [cst for cst in self._items if result.count(cst) == 0]
|
||||
self._items = result
|
||||
|
||||
def _fix_topological(self) -> None:
|
||||
sorted_ids = self._semantic.graph.sort_stable([cst.pk for cst in self._items])
|
||||
sorted_items = [next(cst for cst in self._items if cst.pk == id) for id in sorted_ids]
|
||||
self._items = sorted_items
|
||||
|
||||
def _fix_semantic_children(self) -> None:
|
||||
result: list[Constituenta] = []
|
||||
marked: set[Constituenta] = set()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
''' Testing models: api_RSForm. '''
|
||||
''' Testing models: RSForm. '''
|
||||
from django.forms import ValidationError
|
||||
|
||||
from apps.rsform.models import Constituenta, CstType, RSForm
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
''' Testing models: api_RSForm. '''
|
||||
''' Testing models: RSFormCached. '''
|
||||
from apps.rsform.models import Attribution, Constituenta, CstType, OrderManager, RSFormCached
|
||||
from apps.users.models import User
|
||||
from shared.DBTester import DBTester
|
||||
|
|
@ -106,6 +106,25 @@ class TestRSFormCached(DBTester):
|
|||
self.assertEqual(s2.definition_raw, '@{X11|plur}')
|
||||
|
||||
|
||||
def test_insert_from(self):
|
||||
self.schema.insert_last('X2')
|
||||
self.schema.insert_last('D2')
|
||||
self.schema.insert_last('X3')
|
||||
self.schema.insert_last(
|
||||
alias='D1',
|
||||
definition_formal='X2 = X3'
|
||||
)
|
||||
test_ks = RSFormCached.create(title='Test')
|
||||
test_ks.insert_from(self.schema.model.pk)
|
||||
items = Constituenta.objects.filter(schema=test_ks.model).order_by('order')
|
||||
self.assertEqual(len(items), 4)
|
||||
self.assertEqual(items[0].alias, 'X2')
|
||||
self.assertEqual(items[1].alias, 'D2')
|
||||
self.assertEqual(items[2].alias, 'X3')
|
||||
self.assertEqual(items[3].alias, 'D1')
|
||||
self.assertEqual(items[3].definition_formal, 'X2 = X3')
|
||||
|
||||
|
||||
def test_delete_cst(self):
|
||||
x1 = self.schema.insert_last('X1')
|
||||
x2 = self.schema.insert_last('X2')
|
||||
|
|
@ -210,6 +229,10 @@ class TestRSFormCached(DBTester):
|
|||
alias='A1',
|
||||
definition_formal=r'D3=∅',
|
||||
)
|
||||
a2 = self.schema.insert_last(
|
||||
alias='A2',
|
||||
definition_formal=r'P1[S1]',
|
||||
)
|
||||
d3 = self.schema.insert_last(
|
||||
alias='D3',
|
||||
definition_formal=r'Pr2(S2)',
|
||||
|
|
@ -226,6 +249,10 @@ class TestRSFormCached(DBTester):
|
|||
alias='F2',
|
||||
definition_formal=r'[α∈ℬ(X1)] X1\α',
|
||||
)
|
||||
p1 = self.schema.insert_last(
|
||||
alias='P1',
|
||||
definition_formal=r'[α∈ℬ(R1)] card(α)=0',
|
||||
)
|
||||
|
||||
OrderManager(self.schema).restore_order()
|
||||
x1.refresh_from_db()
|
||||
|
|
@ -240,19 +267,23 @@ class TestRSFormCached(DBTester):
|
|||
f1.refresh_from_db()
|
||||
f2.refresh_from_db()
|
||||
a1.refresh_from_db()
|
||||
a2.refresh_from_db()
|
||||
p1.refresh_from_db()
|
||||
|
||||
self.assertEqual(x1.order, 0)
|
||||
self.assertEqual(x2.order, 1)
|
||||
self.assertEqual(c1.order, 2)
|
||||
self.assertEqual(s1.order, 3)
|
||||
self.assertEqual(d1.order, 4)
|
||||
self.assertEqual(s2.order, 5)
|
||||
self.assertEqual(d3.order, 6)
|
||||
self.assertEqual(a1.order, 7)
|
||||
self.assertEqual(d4.order, 8)
|
||||
self.assertEqual(d2.order, 9)
|
||||
self.assertEqual(f1.order, 10)
|
||||
self.assertEqual(f2.order, 11)
|
||||
self.assertEqual(p1.order, 3)
|
||||
self.assertEqual(s1.order, 4)
|
||||
self.assertEqual(a2.order, 5)
|
||||
self.assertEqual(d1.order, 6)
|
||||
self.assertEqual(s2.order, 7)
|
||||
self.assertEqual(d3.order, 8)
|
||||
self.assertEqual(a1.order, 9)
|
||||
self.assertEqual(d4.order, 10)
|
||||
self.assertEqual(d2.order, 11)
|
||||
self.assertEqual(f1.order, 12)
|
||||
self.assertEqual(f2.order, 13)
|
||||
|
||||
|
||||
def test_reset_aliases(self):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user