Package pyffi :: Package utils :: Module vertex_cache :: Class VertexScore
[hide private]
[frames] | no frames]

Class VertexScore

source code

Vertex score calculation.
Instance Methods [hide private]
 
__init__(self) source code
 
precalculate(self) source code
 
update_score(self, vertex_info)
Update score:
source code
Class Variables [hide private]
  CACHE_SIZE = 32
The size of the modeled cache.
  CACHE_DECAY_POWER = 1.5
  LAST_TRI_SCORE = 0.75
  VALENCE_BOOST_SCALE = 2.0
  VALENCE_BOOST_POWER = 0.5
  MAX_TRIANGLES_PER_VERTEX = 255
Method Details [hide private]

update_score(self, vertex_info)

source code 

Update score:

  • -1 if vertex has no triangles
  • cache score + valence score otherwise

where cache score is

  • 0 if vertex is not in cache
  • 0.75 if vertex has been used very recently (position 0, 1, or 2)
  • (1 - (cache position - 3) / (32 - 3)) ** 1.5 otherwise

and valence score is 2 * (num triangles ** (-0.5))

>>> vertex_score = VertexScore()
>>> def get_score(cache_position, triangle_indices):
...     vert = VertexInfo(cache_position=cache_position,
...                       triangle_indices=triangle_indices)
...     vertex_score.update_score(vert)
...     return vert.score
>>> for cache_position in [-1, 0, 1, 2, 3, 4, 5]:
...     print("cache position = {0}".format(cache_position))
...     for num_triangles in range(4):
...         print("  num triangles = {0} : {1:.3f}"
...               .format(num_triangles,
...                       get_score(cache_position,
...                                 list(range(num_triangles)))))
cache position = -1
  num triangles = 0 : -1.000
  num triangles = 1 : 2.000
  num triangles = 2 : 1.414
  num triangles = 3 : 1.155
cache position = 0
  num triangles = 0 : -1.000
  num triangles = 1 : 2.750
  num triangles = 2 : 2.164
  num triangles = 3 : 1.905
cache position = 1
  num triangles = 0 : -1.000
  num triangles = 1 : 2.750
  num triangles = 2 : 2.164
  num triangles = 3 : 1.905
cache position = 2
  num triangles = 0 : -1.000
  num triangles = 1 : 2.750
  num triangles = 2 : 2.164
  num triangles = 3 : 1.905
cache position = 3
  num triangles = 0 : -1.000
  num triangles = 1 : 3.000
  num triangles = 2 : 2.414
  num triangles = 3 : 2.155
cache position = 4
  num triangles = 0 : -1.000
  num triangles = 1 : 2.949
  num triangles = 2 : 2.363
  num triangles = 3 : 2.103
cache position = 5
  num triangles = 0 : -1.000
  num triangles = 1 : 2.898
  num triangles = 2 : 2.313
  num triangles = 3 : 2.053