Textualize / rich

Rich is a Python library for rich text and beautiful formatting in the terminal.
https://rich.readthedocs.io/en/latest/
MIT License
49.61k stars 1.73k forks source link

[REQUEST] Ability to suppress the length of local variables or completely filter them in Rich tracebacks. #1810

Open pbsds opened 2 years ago

pbsds commented 2 years ago

Have you checked the issues for a similar suggestions?

318 and #1378 is related

How would you improve Rich?

Showing the local variables in Rich tracebacks is incredibly helpful, but this does at times become too verbose prompting me to disable it. Especially when dealing with types such as torch.nn.Module, which feature very long __repr__ and __str__ outputs (example of a single frame featured below). My feature request is twofold: the ability to filter certain local variables entierly, and the ability to suppress/truncate the length of others.

Variable names that start with a double underscore prefix (e.g. __init__) is a prime target for filtering. I imagine parametrizing such behavior in rich.traceback.install with an optional lambda function (e.g. locals_filterer=lambda x: not x.startswith("__")).

For suppressing/truncating the length, one could either fallback to the default object.__repr__ format, or simply clip all __repr__() output to n lines with trailing ellipsis (as dictionaries already seem to do). For deciding which locals to suppress, if not all, one could either provide a list of qualified class names (type(obj).__qualname__) and types (kinda like the existing suppress argument for modules), or provide a lambda which determines if it should be supressed (e.g. locals_suppress=lambda x: any(isinstance(x, i) for i in list_of_types_to_suppress))

Example output (note the `module = MyMachineLearningModel`): ``` │ /home/pbsds/ntnu/xxxxxxxxxxxxxxxxxxxxxxxxxx/yyyyyy/cli.py:332 in log_training_setup │ │ │ │ 329 │ │ if logger is not None: │ │ 330 │ │ │ print(f"{logger.__class__.__qualname__} hparams:") │ │ 331 │ │ │ print_dict_twocolumn(config.logging) │ │ ❱ 332 │ │ │ logging.log_config(logger, logger = {"_class": logger.__class__.__name__} | │ │ 333 │ │ │ │ │ 334 │ │ │ # host info │ │ 335 │ │ │ def cmd(cmd: Union[str, list[str]]) -> str: │ │ │ │ ╭───────────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────────╮ │ │ │ args = Namespace(mode='module', data_dir=, samples_per_object=12500, │ │ │ │ batch_size=5, dataset_workers=4, checkpoint_callback=None, enable_checkpointing=True, │ │ │ │ default_root_dir=None, gradient_clip_val=None, gradient_clip_algorithm=None, process_position=0, │ │ │ │ num_nodes=1, num_processes=1, devices=None, gpus=None, auto_select_gpus=False, tpu_cores=None, │ │ │ │ ipus=None, log_gpu_memory=True, progress_bar_refresh_rate=None, enable_progress_bar=True, │ │ │ │ overfit_batches=0.0, track_grad_norm=-1, check_val_every_n_epoch=1, fast_dev_run=False, │ │ │ │ accumulate_grad_batches=None, max_epochs=None, min_epochs=None, max_steps=-1, min_steps=None, │ │ │ │ max_time=None, limit_train_batches=1.0, limit_val_batches=1.0, limit_test_batches=1.0, │ │ │ │ limit_predict_batches=1.0, val_check_interval=1.0, flush_logs_every_n_steps=None, │ │ │ │ log_every_n_steps=50, accelerator=None, strategy=None, sync_batchnorm=False, precision=32, │ │ │ │ enable_model_summary=True, weights_summary='top', weights_save_path=None, num_sanity_val_steps=2, │ │ │ │ resume_from_checkpoint=None, profiler=None, benchmark=False, deterministic=False, │ │ │ │ reload_dataloaders_every_n_epochs=0, reload_dataloaders_every_epoch=False, auto_lr_find=False, │ │ │ │ replace_sampler_ddp=True, detect_anomaly=False, auto_scale_batch_size=False, │ │ │ │ prepare_data_per_node=None, plugins=None, amp_backend='native', amp_level=None, │ │ │ │ move_metrics_to_cpu=False, multiple_trainloader_mode='max_size_cycle', │ │ │ │ stochastic_weight_avg=False, terminate_on_nan=None, template=PosixPath('-'), │ │ │ │ jinja2_variables=[['select', '0'], ['hypernetwork_type', 'hypernetwork']], dot=False, onnx=None, │ │ │ │ yaml=False, repr=False, summary=False) │ │ │ │ config = Munch({'trainer': {}, 'datamodule': {}, 'logging': {'save_dir': 'logdir', 'type': 'tensorboard', │ │ │ │ 'project': 'yyyyyy'}, 'experiment_name': 'experiment_0-20220106-1537-jmdb', │ │ │ │ 'MyMachineLearningModel': {'mode': 'medial_sphere', 'extended_plucker': False, 'latent_features': │ │ │ │ 256, 'hidden_features': 256, 'hidden_layers': 4, 'compute_gradients': False, 'n_atoms': 1, │ │ │ │ 'normalization': None, 'nonlinearity': 'relu', 'use_film': False, 'dropout_prob': 0.0, 'omega_0': │ │ │ │ 30, 'geom_init': None, 'HyperNetwork': {'hidden_layers': 4, 'hidden_features': 256, │ │ │ │ 'nonlinearity': 'relu', 'normalization': 'layernorm'}}}) │ │ │ │ datamodule = <__main__.TODODataModule object at 0x7ff85256b430> │ │ │ │ logger = │ │ │ │ module = MyMachineLearningModel( │ │ │ │ (net): MedialAtomNet( │ │ │ │ │ (net): FCBlock( │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=6, out_features=256, bias=True) │ │ │ │ │ │ │ (1): ReLU(inplace=True) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ (1): ReLU(inplace=True) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ (1): ReLU(inplace=True) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ (1): ReLU(inplace=True) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ (1): ReLU(inplace=True) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=4, bias=True) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ ) │ │ │ │ │ ) │ │ │ │ │ (hyper_net): HyperNetwork( │ │ │ │ │ (nets): ModuleList( │ │ │ │ │ │ (0): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=1536, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (1): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (2): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=65536, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (3): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (4): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=65536, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (5): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (6): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=65536, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (7): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (8): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=65536, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (9): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (10): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=1024, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ (11): FCBlock( │ │ │ │ │ │ (net): MetaSequential( │ │ │ │ │ │ │ (0): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (1): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (2): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (3): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (4): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=256, bias=True) │ │ │ │ │ │ │ │ (1): LayerNorm((256,), eps=1e-05, elementwise_affine=True) │ │ │ │ │ │ │ │ (2): ReLU(inplace=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ (5): FCLayer( │ │ │ │ │ │ │ (parts): MetaSequential( │ │ │ │ │ │ │ │ (0): MetaBatchLinear(in_features=256, out_features=4, bias=True) │ │ │ │ │ │ │ ) │ │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ │ ) │ │ │ │ │ ) │ │ │ │ │ ) │ │ │ │ ) │ │ │ │ ) │ │ │ │ module_hparams = "HyperNetwork": {'hidden_layers': 4, 'hidden_features': 256, 'nonlinearity': 'relu', │ │ │ │ 'normalization': 'layernorm'} │ │ │ │ "compute_gradients": False │ │ │ │ "dropout_prob": 0.0 │ │ │ │ "extended_plucker": False │ │ │ │ "geom_init": None │ │ │ │ "hidden_features": 256 │ │ │ │ "hidden_layers": 4 │ │ │ │ "latent_features": 256 │ │ │ │ "mode": medial_sphere │ │ │ │ "n_atoms": 1 │ │ │ │ "nonlinearity": relu │ │ │ │ "normalization": None │ │ │ │ "omega_0": 30 │ │ │ │ "use_film": False │ │ │ │ params_d = mappingproxy({ │ │ │ │ │ 'self': , │ │ │ │ │ 'data_dir': , │ │ │ │ │ 'samples_per_object': , │ │ │ │ │ 'batch_size': , │ │ │ │ │ 'dataset_workers': │ │ │ │ }) │ │ │ │ params_trainer = mappingproxy({ │ │ │ │ │ 'self': , │ │ │ │ │ 'logger': , │ │ │ │ │ 'checkpoint_callback': , │ │ │ │ │ 'enable_checkpointing': , │ │ │ │ │ 'callbacks': , │ │ │ │ │ 'default_root_dir': , │ │ │ │ │ 'gradient_clip_val': , │ │ │ │ │ 'gradient_clip_algorithm': , │ │ │ │ │ 'process_position': , │ │ │ │ │ 'num_nodes': , │ │ │ │ │ ... +52 │ │ │ │ }) │ │ │ │ print_dict_twocolumn = .print_dict_twocolumn at 0x7ff8525819d0> │ │ │ │ self = CliInterface( │ │ │ │ │ module_cls=, │ │ │ │ │ datamodule_cls=, │ │ │ │ │ subparser_dest='mode', │ │ │ │ │ _included_in_config={ │ │ │ │ │ │ 'trainer': ( │ │ │ │ │ │ │ , │ │ │ │ │ │ │ { │ │ │ │ │ │ │ │ 'commented': True, │ │ │ │ │ │ │ │ 'exclude_list': {'logger'}, │ │ │ │ │ │ │ │ 'defaults': {'log_gpu_memory': True} │ │ │ │ │ │ │ } │ │ │ │ │ │ ), │ │ │ │ │ │ 'datamodule': (, {'commented': True}), │ │ │ │ │ │ 'logging': ( │ │ │ │ │ │ │ , │ │ │ │ │ │ │ {'commented': False, 'save_dir': 'logdir'} │ │ │ │ │ │ ) │ │ │ │ │ } │ │ │ │ ) │ │ │ │ trainer_hparams = { │ │ │ │ │ 'checkpoint_callback': None, │ │ │ │ │ 'enable_checkpointing': True, │ │ │ │ │ 'default_root_dir': None, │ │ │ │ │ 'gradient_clip_val': None, │ │ │ │ │ 'gradient_clip_algorithm': None, │ │ │ │ │ 'process_position': 0, │ │ │ │ │ 'num_nodes': 1, │ │ │ │ │ 'num_processes': 1, │ │ │ │ │ 'devices': None, │ │ │ │ │ 'gpus': None, │ │ │ │ │ ... +49 │ │ │ │ } │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ ```

What problem does it solve for you?

When running my program on a supercluster, which often feature a queue time of several hours, it sucks for it to immediately crash without me having set show_locals=True in rich.traceback.install simply due to it being too verbose. Having it be enabled all the time, without it being too noisy, would greatly reduce development friction and put a smile on my face.

cmckain commented 2 years ago

I have implemented a similar feature in my own fork of Rich (my own requirements are probably not general enough for direct inclusion into Rich). If anyone needs inspiration, cmckain@rich and take note of locals_to_ignore and clean_values.

willmcgugan commented 2 years ago

How about?

locals_suppress=<callable> locals_max_length=<optional int

actforjason commented 2 years ago

locals_suppress=<callable> locals_max_length=<optional int

rich.traceback.install doesn't have these parameters,how do it?

femtomc commented 2 years ago

Bumping this issue -- running into similar problems where locals prints to egregiously large numpy arrays.

Really like having the locals, but having to turn them off when working with arrays is not the best.