Analyze Sage Build

A time evolution picture of packages built by Sage

EXAMPLES:

sage: from slabbe.analyze_sage_build import draw_sage_build
sage: t = draw_sage_build()
sage: _ = t.pdf(view=False)

AUTHOR:

  • Sébastien Labbé, December 9-11, 2016
slabbe.analyze_sage_build.build_duration_logs(path_to_file, pattern=None)

INPUT:

  • path_to_file – string, file to parse
  • pattern – string or None, string to parse. If None, it returns 0 seconds.

OUTPUT:

list of timedelta objects

EXAMPLES:

sage: L = [ ('/../ptestlong.log', 'Total time for all tests: '),
....:       ('/../dochtml.log', 'Elapsed time: '),
....:       ('/../start.log', None),
....:       ('/sagelib-7.5.beta6.log', 'real\t'),
....:       ('/sqlite.log', 'real\t')]
sage: from slabbe.analyze_sage_build import build_duration_logs
sage: from sage.env import SAGE_ROOT
sage: import os
sage: SAGE_LOGS_PKGS = os.path.join(SAGE_ROOT,'logs','pkgs')
sage: import os
sage: for (file, pattern) in L:                  # random
....:     print(file)
....:     if not os.path.exists(SAGE_LOGS_PKGS+file):
....:         continue
....:     build_duration_logs(SAGE_LOGS_PKGS+file, pattern)
/../ptestlong.log
/../dochtml.log
[datetime.timedelta(0, 471, 700000)]
/../start.log
[]
/sagelib-7.5.beta6.log
/sqlite.log
[]
slabbe.analyze_sage_build.draw_sage_build(start=None, stop=None, consider='last', verbose=False)

Return a time evolution picture of packages built by Sage

INPUT:

  • start – datetime object (default is January 1st, 2000)
  • stop – datetime object (default is now)
  • consider - string (default: 'last'), 'last' or 'all', in any log file, consider the last duration found or the sum of all of them
  • verbose - boolean (default: False)

OUTPUT:

TikzPicture object

EXAMPLES:

sage: from slabbe.analyze_sage_build import draw_sage_build
sage: t = draw_sage_build()

During the previous 7 day:

sage: import datetime
sage: stop = datetime.datetime.now()
sage: start = stop - datetime.timedelta(7r)
sage: t = draw_sage_build(start, stop)        # not tested
sage: t = draw_sage_build(stop=datetime.datetime(2016,12,9)) # not tested

TESTS:

It may fail if nothing is found during the period:

sage: t = draw_sage_build()  # not tested
Traceback (most recent call last):
...
ValueError: no package found built between start date (=2016-12-08
16:58:35.189127) and stop date (=2016-12-09 16:58:35.189127). Oldest is
2016-02-16 11:38:00.673327. Newest is 2016-12-08 11:27:03.312340.
slabbe.analyze_sage_build.last_modified_datetime(path_to_file)

EXAMPLES:

sage: from slabbe.analyze_sage_build import last_modified_datetime
sage: from sage.env import SAGE_ROOT
sage: last_modified_datetime(SAGE_ROOT+'/README.md')
datetime.datetime(..., ..., ..., ..., ..., ...)
sage: last_modified_datetime(SAGE_ROOT+'/VERSION.txt')
datetime.datetime(..., ..., ..., ..., ..., ...)
slabbe.analyze_sage_build.sage_logs_datetime_list(consider='last', verbose=False)

Return a dictionnary of duration and last modified information from the sage log files.

INPUT:

  • consider - string (default: 'last'), 'last' or 'all', in any log file, consider the last duration found or the sum of all of them
  • verbose - boolean (default: False)

EXAMPLES:

sage: import datetime
sage: from slabbe.analyze_sage_build import sage_logs_datetime_list
sage: L = sage_logs_datetime_list()
sage: L = sage_logs_datetime_list()
sage: stop = datetime.datetime.now()
sage: start = stop - datetime.timedelta(14r)
sage: L_filtered = [(A,B,delta,file) for (A,B,delta,file) in L
....:                  if start <= A and B <= stop]