Skip to content

Commit

Permalink
Add dim_order to BaseFormatter
Browse files Browse the repository at this point in the history
Move the proposed `dim_sort` functionality from being a system registry property to being a formatter property, specifically `BaseFormatter`.

Also fix typos noticed in `pint/testsuite/conftest.py`.

Signed-off-by: Michael Tiemann <[email protected]>
  • Loading branch information
MichaelTiemannOSC committed Jan 15, 2024
1 parent 5dde2f7 commit f9e9dba
Show file tree
Hide file tree
Showing 7 changed files with 12 additions and 15 deletions.
2 changes: 1 addition & 1 deletion CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ Pint Changelog
0.24 (unreleased)
-----------------

- Add `dim_order` property to BaseFormatter.
- Add `dim_sort` parameter to formatter.
(PR #1864, fixes Issue #1841)
- Nothing changed yet.


0.23 (2023-12-08)
Expand Down
2 changes: 0 additions & 2 deletions pint/default_en.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@
@defaults
group = international
system = mks
# This default order for sorting dimensions was described in the proposed ISO 80000 specification.
dim_order = [ "[substance]", "[mass]", "[current]", "[luminosity]", "[length]", "[]", "[time]", "[temperature]", ]
@end


Expand Down
5 changes: 2 additions & 3 deletions pint/delegates/formatter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@
"""


from .base_formatter import BabelFormatter
from .iso80000_formatter import ISO80000Formatter
from .base_formatter import BaseFormatter, BabelFormatter


class Formatter(ISO80000Formatter, BabelFormatter):
class Formatter(BabelFormatter, BaseFormatter):
# TODO: this should derive from all relevant formaters to
# reproduce the current behavior of Pint.
pass
Expand Down
3 changes: 3 additions & 0 deletions pint/delegates/formatter/base_formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@


class BaseFormatter:
# This default order for sorting dimensions was described in the proposed ISO 80000 specification.
dim_order = ( "[substance]", "[mass]", "[current]", "[luminosity]", "[length]", "[]", "[time]", "[temperature]", )

def format_quantity(
self, quantity: PlainQuantity[MagnitudeT], spec: str = ""
) -> str:
Expand Down
5 changes: 1 addition & 4 deletions pint/facets/plain/definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import ast
from dataclasses import dataclass
from functools import cached_property
from typing import Any, List, Optional
from typing import Any, Optional

from ..._typing import Magnitude
from ... import errors
Expand Down Expand Up @@ -61,15 +61,12 @@ class DefaultsDefinition:

group: ty.Optional[str]
system: ty.Optional[str]
dim_order: ty.Optional[List[str]]

def items(self):
if self.group is not None:
yield "group", self.group
if self.system is not None:
yield "system", self.system
if self.dim_order is not None:
yield "dim_order", ast.literal_eval(self.dim_order)


@dataclass(frozen=True)
Expand Down
4 changes: 2 additions & 2 deletions pint/formatting.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ def format_compact(unit: UnitsContainer, registry: UnitRegistry, **options) -> s


def dim_sort(items: Iterable[Tuple[str, Number]], registry: UnitRegistry):
"""Sort a list of units by dimensional order (from `registry._defaults['dim_order']`).
"""Sort a list of units by dimensional order (from `registry.formatter.dim_order`).
Parameters
----------
Expand All @@ -329,7 +329,7 @@ def dim_sort(items: Iterable[Tuple[str, Number]], registry: UnitRegistry):
if registry is None or len(items) <= 1:
return items
ret_dict = dict()
dim_order = registry._defaults["dim_order"]
dim_order = registry.formatter.dim_order
for unit_name, unit_exponent in items:
cname = registry.get_name(unit_name)
if not cname:
Expand Down
6 changes: 3 additions & 3 deletions pint/testsuite/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,19 +70,19 @@ def func_registry():

@pytest.fixture(scope="class")
def class_registry():
"""Only use for those test that do not modify the registry."""
"""Only use for those tests that do not modify the registry."""
return pint.UnitRegistry()


@pytest.fixture(scope="module")
def module_registry():
"""Only use for those test that do not modify the registry."""
"""Only use for those tests that do not modify the registry."""
return pint.UnitRegistry()


@pytest.fixture(scope="session")
def sess_registry():
"""Only use for those test that do not modify the registry."""
"""Only use for those tests that do not modify the registry."""
return pint.UnitRegistry()


Expand Down

0 comments on commit f9e9dba

Please sign in to comment.