code: def score(self):
      #
      # Current principles:
      #
      # Provider and dev-tools PRs should be considered, but should matter 20% less.
      #
      # A review is worth twice as much as a comment, and a comment is worth twice as much as a reaction.
      #
      # If a PR changed more than 20 files, it should matter less the more files there are.
      #
      # If the avg # of changed lines/file is < 5 and there are > 10 files, it should matter 30% less.
      # If the avg # of changed lines/file is > 20 and there are > 10 files, it should matter 20% more.
      #
      # If there are over 3000 characters worth of comments, the PR should matter 30% more.
      # If there are fewer than 200 characters worth of comments, the PR should matter 20% less.
      # If the body contains over 2000 characters, the PR should matter 40% more.
      # If the body contains fewer than 1000 characters, the PR should matter 20% less.
      #
      # Weight PRs with protm tags more heavily:
      # If there is at least one protm tag, multiply the interaction score by the number of tags, up to 3.
      #
      self.calc_comments()
      self.calc_conv_comments()
      self.calc_interaction_score()
      self.adjust_interaction_score()
  
      return round(
          self.interaction_score
          * self.label_score
          * self.length_score
          * self.change_score
          / (
              math.log10(self.num_changed_files)
              if self.num_changed_files > 20
              else 1
          ),
          3,
      )
  
imports: from __future__ import annotations
  import heapq
  import logging
  import math
  import pickle
  import re
  import textwrap
  from datetime import datetime
  from functools import cached_property
  from typing import TYPE_CHECKING
  import pendulum
  import rich_click
  from github import Github, UnknownObjectException
  from rich.console import Console
label_desc: Use image node_id 18 for calling the PrStat obj's underlying member method code with example usage: obj.score() and returns: round