2014-10-25 1 views
2

Я работаю в мудреце. Кажется, что Python автоматически определяет степени для циклических изменяемых/неизменяемых графов. Это затрудняет мои вычисления. Что здесь происходит?Ошибка Sage python в вычислении степени графа графа?

q=graphs.CompleteGraph(2) 
q.allow_loops(True) 
q.allow_multiple_edges(True) 
q.add_edge([1,1]) 
a=q.copy(immutable=True) 
b=q.copy(immutable=False) 

sage: a==b 
True 
sage: a.degree() 
[1, 2] 
sage: b.degree() 
[1, 3] 
+0

Вы можете увидеть, является ли исправление в http://trac.sagemath.org/ticket/17225 будет хорошим исправление для вашей ситуации? Я считаю, что «две степени для цикла» обычны, но, может быть, нет? – kcrisman

ответ

2

Это неприятная ошибка. Вот почему.

sage: a._backend 
<class 'sage.graphs.base.static_sparse_backend.StaticSparseBackend'> 
sage: b._backend 
<class 'sage.graphs.base.sparse_graph.SparseGraphBackend'> 

В обычном бэкэнд для ненаправленных графов есть такой код.

if self._loops and self.has_edge(v, v, None): 
     if self._multiple_edges: 
      d += len(self.get_edge_label(v, v)) 
     else: 
      d += 1 

В статической, мы просто получить

 else: 
      return cg.out_degree(v) 
+1

Я сообщил об этом по адресу http://trac.sagemath.org/ticket/17225 Спасибо за отчет! – kcrisman

+0

Как обходной путь, я думаю, вы могли бы попытаться сделать ваши графики не разреженными и посмотреть, что происходит, или просто придерживаться изменчивых графов. (С другой стороны, вероятно, было бы не слишком сложно попробовать подражать коду для одного в другом, если вы знакомы с разработкой Sage, но это было бы для дополнительного кредита.) – kcrisman

+0

Followup - это исправлено, и, вероятно, будет в Sage 6.5 через месяц или два (или три). – kcrisman