Source code for gismo.parameters

import logging

logging.basicConfig()
log = logging.getLogger("Gismo")

ALPHA = .5
"""
Default value for damping factor.
Controls the trade-off between closeness and centrality.
"""

N_ITER = 4
"""
Default value for the number of round-trip diffusions to perform.
Higher value means better precision but longer execution time.
"""

OFFSET = 1.0
"""
Default offset value.
Controls how much of the initial fluid should be deduced from the relevance.
"""

MEMORY = 0.0
"""
Default memory value.
Controls how much of previous computation is kept
when performing a new diffusion.
"""

STRETCH = 2.0
"""
Default stretch value.
When performing covering, defines the ratio between considered pages and
selected covering pages.
"""

RESOLUTION = 0.7
"""
Default resolution value.
Defines how strict the merging of cluster is during recursive clustering.
"""

MAX_K = 100
"""
Default top population size for estimating k.
"""

TARGET_K = 1.0
"""
Default threshold for estimating k.
"""

WIDE = True
"""
Default Covering behavior for covering.
True for wide variant, false for core variant.
"""

POST = True
"""
Default post policy.
If True, post function is applied on items and clusters.
"""

DISTORTION = 1.0
"""
Default distortion.
Controls how much of diteration relevance is mixed into the embedding
for similarity computation.
"""

DEFAULT_PARAMETERS = {'alpha': ALPHA,
                      'n_iter': N_ITER,
                      'offset': OFFSET,
                      'memory': MEMORY,
                      'stretch': STRETCH,
                      'resolution': RESOLUTION,
                      'max_k': MAX_K,
                      'target_k': TARGET_K,
                      'wide': WIDE,
                      'post': POST,
                      'distortion': DISTORTION
                      }
"""
Dictionary of default `runtime` :class:`~gismo.gismo.Gismo` parameters.
"""

X_DENSITY = 1000
"""Default number of documents representing a :class:`~gismo.landmarks.Landmarks` entry."""

Y_DENSITY = 1000
"""Default number of features representing a :class:`~gismo.landmarks.Landmarks` entry."""

BALANCE = 0.5
"""Default documents/features trade-off in :class:`~gismo.landmarks.Landmarks`."""

DEFAULT_LANDMARKS_PARAMETERS = {
    'stretch': STRETCH,
    'resolution': RESOLUTION,
    'max_k': MAX_K,
    'target_k': TARGET_K,
    'wide': WIDE,
    'post': POST,
    'distortion': DISTORTION,
    'x_density': X_DENSITY,
    'y_density': Y_DENSITY,
    'balance': BALANCE,
    'rank': lambda g, q: g.rank(q)
}
"""
Dictionary of default `runtime` :class:`~gismo.landmarks.Landmarks` parameters.
"""


[docs]class Parameters: """ Manages :class:`~gismo.gismo.Gismo` runtime parameters. When called, an instance will yield a dictionary of parameters. Is also used for other Gismo classes like :class:`~gismo.landmarks.Landmarks`. Parameters ---------- parameter_list: dict, optional Indicates which paramaters to manage. Default to Gismo runtime parameter. kwargs: dict Parameters that need to be distinct from default values. Examples -------- Use default parameters. >>> p = Parameters() >>> p() # doctest: +NORMALIZE_WHITESPACE {'alpha': 0.5, 'n_iter': 4, 'offset': 1.0, 'memory': 0.0, 'stretch': 2.0, 'resolution': 0.7, 'max_k': 100, 'target_k': 1.0, 'wide': True, 'post': True, 'distortion': 1.0} Use default parameters with changed `stretch`. >>> p = Parameters(stretch=1.7) >>> p()['stretch'] 1.7 Note that parameters that do not exist will be ignored and (a warning will be issued) >>> p = Parameters(strech=1.7) >>> p() # doctest: +NORMALIZE_WHITESPACE {'alpha': 0.5, 'n_iter': 4, 'offset': 1.0, 'memory': 0.0, 'stretch': 2.0, 'resolution': 0.7, 'max_k': 100, 'target_k': 1.0, 'wide': True, 'post': True, 'distortion': 1.0} You can change the value of an attribute to alter the returned parameter. >>> p.alpha = 0.85 >>> p()['alpha'] 0.85 You can also apply on-the-fly parameters by passing them when calling the instance. >>> p(resolution=0.9)['resolution'] 0.9 Like for construction, parameters that do not exist are ignored and a warning is issued. >>> p(resolutio = .9) # doctest: +NORMALIZE_WHITESPACE {'alpha': 0.85, 'n_iter': 4, 'offset': 1.0, 'memory': 0.0, 'stretch': 2.0, 'resolution': 0.7, 'max_k': 100, 'target_k': 1.0, 'wide': True, 'post': True, 'distortion': 1.0} Note the possibility to store a custom set of parameters if one uses ``parameter_list`` in construction. >>> p = Parameters(parameter_list={'a': 1.0, 'b': True}, a=1.5) >>> p() {'a': 1.5, 'b': True} """ def __init__(self, parameter_list=None, **kwargs): if parameter_list is None: parameter_list = DEFAULT_PARAMETERS for key, value in parameter_list.items(): setattr(self, key, value) for key, value in kwargs.items(): if hasattr(self, key): if value is not None: setattr(self, key, value) else: log.warning(f"No parameter named {key}!") def __call__(self, **kwargs): d = {key: value for key, value in self.__dict__.items()} for key, value in kwargs.items(): if key in d: if value is not None: d[key] = value else: log.warning(f"No parameter named {key}!") return d