Skip to content

Commit

Permalink
Merge c095e1b into 5d67174
Browse files Browse the repository at this point in the history
  • Loading branch information
ahuang11 committed Nov 16, 2020
2 parents 5d67174 + c095e1b commit 11fe7df
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions param/ipython.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
__author__ = "Jean-Luc Stevens"

import re
import sys
import itertools
import textwrap
import param

Expand Down Expand Up @@ -124,6 +126,24 @@ def param_docstrings(self, info, max_col_len=100, only_changed=False):
return "\n".join(contents)


def sort_by_precedence(self, parameters):
"""Sort the provided dictionary of parameters by their precedence value.
In Python 3, preserves the original ordering for parameters with the
same precedence; for Python 2 sorts them lexicographically by name."""
params = [(p, pobj) for p, pobj in parameters.items()]
key_fn = lambda x: x[1].precedence if x[1].precedence is not None else 1e-8
sorted_precedence = sorted(params, key=key_fn)
filtered = [(k, p) for k, p in sorted_precedence]
groups = itertools.groupby(filtered, key=key_fn)
# Params preserve definition order in Python 3.6+
dict_ordered_py3 = (sys.version_info.major == 3 and sys.version_info.minor >= 6)
dict_ordered = dict_ordered_py3 or (sys.version_info.major > 3)
ordered_groups = [list(grp) if dict_ordered else sorted(grp) for (_, grp) in groups]
ordered_params = [el[0] for group in ordered_groups for el in group
if (el[0] != 'name' or el[0] in parameters)]
return ordered_params


def _build_table(self, info, order, max_col_len=40, only_changed=False):
"""
Collect the information about parameters needed to build a
Expand All @@ -134,7 +154,9 @@ def _build_table(self, info, order, max_col_len=40, only_changed=False):
(params, val_dict, changed) = info
col_widths = dict((k,0) for k in order)

for name, p in params.items():
ordering = self.sort_by_precedence(params)
for name in ordering:
p = params[name]
if only_changed and not (name in changed):
continue

Expand Down Expand Up @@ -202,7 +224,7 @@ def _tabulate(self, info_dict, col_widths, changed, order, bounds_dict):
contents.append(blue % ''.join(title_row)+"\n")

# Format the table rows
for row in sorted(info_dict):
for row in info_dict:
row_list = []
info = info_dict[row]
for i,col in enumerate(columns):
Expand Down

0 comments on commit 11fe7df

Please sign in to comment.