class_docstr: The ProjectReport class allows to generate general information about a
  Data Science project.
  It analyzes the data and the model used in order to provide interesting
  insights that can be shared with non technical person.
  
  Parameters
  ----------
  explainer : shapash.explainer.smart_explainer.SmartExplainer
      A shapash SmartExplainer object that has already be compiled.
  project_info_file : str
      Path to the yml file containing information about the project (author, description, ...).
  config : dict, optional
      Contains configuration options for the report.
  
  Attributes
  ----------
  explainer : shapash.explainer.smart_explainer.SmartExplainer
       A shapash SmartExplainer object that has already be compiled.
  metadata : dict
      Information about the project (author, description, ...).
  x_train : pd.DataFrame
      DataFrame used for training the model.
  y_test : pd.Series or pd.DataFrame
      Series of labels in the train set.
  y_test : pd.Series or pd.DataFrame
      Series of labels in the test set.
  config : dict, optional
      Configuration options for the report.
class_docstr_tok: ["The","ProjectReport","class","allows","to","generate","general","information","about","a","Data","Science","project",".","It","analyzes","the","data","and","the","model","used","in","order","to","provide","interesting","insights","that","can","be","shared","with","non","technical","person",".","Parameters","--","--","--","--","--","explainer",":","shapash.explainer.smart_explainer.SmartExplainer","A","shapash","SmartExplainer","object","that","has","already","be","compiled",".","project_info_file",":","str","Path","to","the","yml","file","containing","information","about","the","project","(","author",",","description",",","...",")",".","config",":","dict",",","optional","Contains","configuration","options","for","the","report",".","Attributes","--","--","--","--","--","explainer",":","shapash.explainer.smart_explainer.SmartExplainer","A","shapash","SmartExplainer","object","that","has","already","be","compiled",".","metadata",":","dict","Information","about","the","project","(","author",",","description",",","...",")",".","x_train",":","pd.DataFrame","DataFrame","used","for","training","the","model",".","y_test",":","pd.Series","or","pd.DataFrame","Series","of","labels","in","the","train","set",".","y_test",":","pd.Series","or","pd.DataFrame","Series","of","labels","in","the","test","set",".","config",":","dict",",","optional","Configuration","options","for","the","report","."]
docstr: Displays information about the model used : class name, library name, library version,
  model parameters, ...
docstr_tok: ["Displays","information","about","the","model","used",":","class","name",",","library","name",",","library","version",",","model","parameters",",","..."]
code: def display_model_analysis(self):
      """
      Displays information about the model used : class name, library name, library version,
      model parameters, ...
      """
      print_md(
          f"**Model used :** {self.explainer.model.__class__.__name__}"
      )
  
      print_md(
          f"**Library :** {self.explainer.model.__class__.__module__}"
      )
  
      for name, module in sorted(sys.modules.items()):
          if (
              hasattr(module, "__version__")
              and self.explainer.model.__class__.__module__.split(".")[
                  0
              ]
              == module.__name__
          ):
              print_md(f"**Library version :** {module.__version__}")
  
      print_md("**Model parameters :** ")
      model_params = self.explainer.model.__dict__
      table_template = template_env.get_template("double_table.html")
      print_html(
          table_template.render(
              columns1=["Parameter key", "Parameter value"],
              rows1=[
                  {
                      "name": truncate_str(str(k), 50),
                      "value": truncate_str(str(v), 300),
                  }
                  for k, v in list(model_params.items())[
                      : len(model_params) // 2 :
                  ]
              ],  # Getting half of the parameters
              columns2=["Parameter key", "Parameter value"],
              rows2=[
                  {
                      "name": truncate_str(str(k), 50),
                      "value": truncate_str(str(v), 300),
                  }
                  for k, v in list(model_params.items())[
                      len(model_params) // 2 :
                  ]
              ],  # Getting 2nd half of the parameters
          )
      )
      print_md("---")
  
imports: from typing import Optional, Union, Tuple
  import logging
  import sys
  import os
  from numbers import Number
  from datetime import date
  import jinja2
  import pandas
  import numpy
  import plotly
  from shapash.utils.transform import inverse_transform, apply_postprocessing, handle_categorical_missing
  from shapash import SmartExplainer
  from shapash.utils.io import load_yml
  from shapash.utils.utils import get_project_root, truncate_str
  from shapash.report.visualisation import print_md, print_html, print_css_style, convert_fig_to_html, print_javascript_misc
  from shapash.report.data_analysis import perform_global_dataframe_analysis, perform_univariate_dataframe_analysis
  from shapash.report.plots import generate_fig_univariate, generate_confusion_matrix_plot
  from shapash.report.common import series_dtype, get_callable, compute_col_types, VarType, display_value
  from shapash.webapp.utils.utils import round_to_k
label_desc: Use image node_id 6 for calling the ProjectReport obj's underlying member method code with example usage: obj.display_model_analysis() without return types