Source code for astropy.units.format.console

# -*- coding: utf-8 -*-
# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""
Handles the "Console" unit format.
"""
from __future__ import absolute_import, division, print_function, unicode_literals

from . import base
from . import utils


[docs]class Console(base.Base): """ Output-only format for to display pretty formatting at the console. For example:: >>> print fluxunit.to_string('console') erg ------ s cm^2 """ def __init__(self): pass _times = "*" _line = "-" def _get_unit_name(self, unit): return unit.get_format_name('console') def _format_superscript(self, number): return '^{0}'.format(number) def _format_unit_list(self, units): out = [] for base, power in units: if power == 1: out.append(self._get_unit_name(base)) else: out.append('{0}{1}'.format( self._get_unit_name(base), self._format_superscript(str(power)))) return ' '.join(out) def _format_exponential_notation(self, val): m, ex = utils.split_mantissa_exponent(val) parts = [] if m: parts.append(m) if ex: parts.append("10{0}".format( self._format_superscript(ex))) return self._times.join(parts)
[docs] def to_string(self, unit): from .. import core if isinstance(unit, core.CompositeUnit): if unit.scale != 1: s = self._format_exponential_notation(unit.scale) else: s = '' if len(unit.bases): positives, negatives = utils.get_grouped_by_powers( unit.bases, unit.powers) if len(negatives): if len(positives): positives = self._format_unit_list(positives) else: positives = '1' negatives = self._format_unit_list(negatives) l = len(s) r = max(len(positives), len(negatives)) f = "{{0:^{0}s}} {{1:^{1}s}}".format(l, r) lines = [ f.format('', positives), f.format(s, self._line * r), f.format('', negatives) ] s = '\n'.join(lines) else: positives = self._format_unit_list(positives) s += positives elif isinstance(unit, core.NamedUnit): s = self._get_unit_name(unit) return s

Page Contents