content: [tool.pyright]
  venvPath = "."
  venv = ".venv"
  include = [ "src/python" ]
  # TODO: improve!
  # typeCheckingMode = "strict"
  reportUnnecessaryTypeIgnoreComment = "error"
  reportImportCycles = "error"
  typeCheckingMode = "basic"
  reportArgumentType = "none"
  reportAssignmentType = "none"
  reportAttributeAccessIssue = "none"
  reportCallIssue = "none"
  reportGeneralTypeIssues = "none"
  reportIndexIssue = "none"
  reportInvalidStringEscapeSequence = "none"
  # this is really important to fix
  reportMissingImports = "none"
  reportUnusedExpression = "none"
  reportOptionalMemberAccess = "none"
  reportOptionalContextManager = "none"
  reportOptionalIterable = "none"
  reportOperatorIssue = "none"
  reportOptionalOperand = "none"
  reportOptionalSubscript = "none"
  reportRedeclaration = "none"
  
  [tool.ruff]
  line-length = 200
  indent-width = 2
  
  [tool.ruff.lint]
  select = ["ALL"]
  
  # disabling/enabling of rules
  ignore = [
    # These rules are disabled because they have violations, we should fix those!
    # Remove an item, fix the issues, and send us a pull request!
    "A001",    # Variable is shadowing a Python builtin
    "A002",    # Function argument is shadowing a Python builtin
    "ANN001",  # Missing type annotation for function argument
    "ANN002",  # Missing type annotation for function *argument
    "ANN003",  # Missing type annotation for `**kwArgs`
    "ANN201",  # Missing return type annotation for public function
    "ANN202",  # Missing return type annotation for private function
    "ANN204",  # Missing return type annotation for special method `__init__`
    "ANN205",  # Missing return type annotation for staticmethod
    "ARG001",  # Unused function argument
    "ARG002",  # Unused method argument
    "B006",    # Do not use mutable data structures for argument defaults
    "B007",    # Loop control variable not used within loop body
    "B011",    # Do not `assert False` (`python -O` removes these calls), raise `AssertionError()`
    "B018",    # Found useless expression. Either assign it to a variable or remove it.
    "C400",    # Unnecessary generator (rewrite as a list comprehension)
    "C402",    # Unnecessary generator (rewrite as a dict comprehension)
    "C403",    # Unnecessary list comprehension (rewrite as a set comprehension)
    "C404",    # Unnecessary list comprehension (rewrite as a dict comprehension)
    "C405",    # Unnecessary list literal (rewrite as a set literal)
    "C408",    # Unnecessary `dict()` call (rewrite as a literal)
    "C901",    # Function is too complex
    "D100",    # Missing docstring in public module
    "D101",    # Missing docstring in public class
    "D102",    # Missing docstring in public method
    "D103",    # Missing docstring in public function
    "D105",    # Missing docstring in magic method
    "D107",    # Missing docstring in `__init__`
    "D205",    # 1 blank line required between summary line and description
    "D400",    # First line should end with a period
    "D401",    # First line of docstring should be in imperative mood
    "D415",    # First line should end with a period, question mark, or exclamation point
    "DTZ001",  # `datetime.datetime()` called without a `tzinfo` argument
    "DTZ005",  # `datetime.datetime.now()` called without a `tz` argument
    "DTZ004",  # `datetime.datetime.utcfromtimestamp()` used
    "DTZ006",  # `datetime.datetime.fromtimestamp()` called without a `tz` argument
    "DTZ007",  # Naive datetime constructed using `datetime.datetime.strptime()` without %z
    "E402",    # Module level import not at top of file
    "E711",    # Comparison to `None` should be `cond is None`
    "E722",    # Do not use bare `except`
    "E731",    # Do not assign a `lambda` expression, use a `def`
    "E741",    # Ambiguous variable name
    "EM101",   # Exception must not use a string literal, assign to variable first
    "EM102",   # Exception must not use an f-string literal, assign to variable
    "ERA001",  # Found commented-out code
    "EXE001",  # Shebang is present but file is not executable
    "F507",    # `%`-format string has 3 placeholder(s) but 2 substitution(s)
    "F633",    # Use of `>>` is invalid with `print` function
    "F811",    # Redefinition of unused variable
    "F841",    # Local variable is assigned to but never used
    "FBT002",  # Boolean default positional argument in function definition
    "FBT003",  # Boolean positional value in function call
    "FIX001",  # Line contains FIXME, consider resolving the issue
    "FIX002",  # Line contains TODO, consider resolving the issue
    "FIX003",  # Line contains XXX, consider resolving the issue
    "FURB129", # Instead of calling `readlines()`, iterate over file object directly
    "INP001",  # File is part of an implicit namespace package. Add an `__init__.py`.
    "N802",    # Function name `camelCase` should be lowercase
    "N803",    # Argument name `camelCase` should be lowercase
    "N806",    # Variable `camelCase` in function should be lowercase
    "N812",    # Lowercase `gnuplot` imported as non-lowercase `Gnuplot`
    "N815",    # Variable `camelCase` in class scope should not be mixedCase
    "N816",    # Variable `camelCase` in global scope should not be mixedCase
    "PERF102", # When using only the values of a dict use the `values()` method
    "PERF203", # `try`-`except` within a loop incurs performance overhead
    "PERF401", # Use `list.extend` to create a transformed list
    "PERF403", # Use a dictionary comprehension instead of a for-loop
    "PIE810",  # Call `endswith` once with a `tuple`
    "PLR0912", # Too many branches
    "PLR0913", # Too many arguments in function definition
    "PLR0915", # Too many statements
    "PLR1714", # Consider merging multiple comparisons. Use a `set` if the elements are hashable.
    "PLR2004", # Magic value used in comparison, consider replacing with a constant variable
    "PLW0128", # Redeclared variable in assignment
    "PLW0602", # Using global for `VERBOSE` but no assignment is done
    "PLW0603", # Using the global statement to update `camelCase` is discouraged
    "PLW1507", # Shallow copy of `os.environ` via `copy.copy(os.environ)`
    "PLW1509", # `preexec_fn` argument is unsafe when using threads
    "PLW2901", # `for` loop variable overwritten by assignment target
    "PT018",   # Assertion should be broken down into multiple parts
    "PTH100",  # `os.path.abspath()` should be replaced by `Path.resolve()`
    "PTH101",  # `os.chmod()` should be replaced by `Path.chmod()`
    "PTH102",  # `os.mkdir()` should be replaced by `Path.mkdir()`
    "PTH103",  # `os.makedirs()` should be replaced by `Path.mkdir(parents=True)`
    "PTH104",  # `os.rename()` should be replaced by `Path.rename()`
    "PTH107",  # `os.remove()` should be replaced by `Path.unlink()`
    "PTH109",  # `os.getcwd()` should be replaced by `Path.cwd()`
    "PTH110",  # `os.path.exists()` should be replaced by `Path.exists()`
    "PTH112",  # `os.path.isdir()` should be replaced by `Path.is_dir()`
    "PTH113",  # `os.path.isfile()` should be replaced by `Path.is_file()`
    "PTH116",  # `os.stat()` should be replaced by `Path.stat()`, `Path.owner()`, or `Path.group()`
    "PTH118",  # `os.path.join()` should be replaced by `Path` with `/` operator
    "PTH119",  # `os.path.basename()` should be replaced by `Path.name`
    "PTH123",  # `open()` should be replaced by `Path.open()`
    "PTH202",  # `os.path.getsize` should be replaced by `Path.stat().st_size`
    "PTH204",  # `os.path.getmtime` should be replaced by `Path.stat().st_mtime`
    "PTH206",  # Replace `.split(os.sep)` with `Path.parts`
    "PTH207",  # Replace `glob` with `Path.glob` or `Path.rglob`
    "PTH208",  # Use `pathlib.Path.iterdir()` instead.
    "PYI024",  # Use `typing.NamedTuple` instead of `collections.namedtuple`
    "RET504",  # Unnecessary assignment to variable before `return` statement
    "RET503",  # Missing explicit `return` at the end of function able to return non-`None` value
    "RUF005",  # Consider `["Foo", *series]` instead of concatenation
    "RUF012",  # Mutable class attributes should be annotated with `typing.ClassVar`
    "RUF046",  # Value being cast to `int` is already an integer
    "S101",    # Use of `assert` detected
    "S102",    # Use of `exec` detected
    "S104",    #  Possible binding to all interfaces
    "S108",    # Probable insecure usage of temporary file or directory
    "SIM222",  # Use `True` instead of `True or ...`
    "SIM223",  # Use `False` instead of `False and ...`
    "S301",    # `pickle` deserialization, possible security issue
    "S310",    # Audit URL open for permitted schemes.
    "S311",    # Standard pseudo-random generators are not suitable for cryptographic purposes
    "S314",    # Using `xml` to parse untrusted data, use `defusedxml` equivalents
    "S602",    # `subprocess` call with `shell=True` seems safe, but may be changed in the future
    "S603",    # `subprocess` call: check for execution of untrusted input
    "S605",    # Starting a process with a shell: seems safe, but may be changed in the future
    "S606",    # Starting a process without a shell
    "S607",    # Starting a process with a partial executable path
    "SIM102",  # Use a single `if` statement instead of nested `if` statements
    "SIM105",  # Use `contextlib.suppress(KeyError)` instead of `try`-`except`-`pass`
    "SIM108",  # Use ternary operator instead of `if`-`else`-block
    "SIM113",  # Use `enumerate()` for index variable `count` in `for` loop
    "SIM115",  # Use a context manager for opening files
    "SIM117",  # Use a single `with` statement with multiple contexts instead of nested `with` statements
    "SIM118",  # Use `key in dict` instead of `key in dict.keys()`
    "SLF001",  # Private member accessed: `_current_frames`
    "T201",    # `print` found
    "TD001",   # Invalid TODO tag: `XXX`
    "TD002",   # Missing author in TODO
    "TD003",   # Missing issue link for this TODO
    "TD004",   # Missing colon in TODO
    "TD005",   # Missing issue description after `TODO`
    "TRY003",  # Avoid specifying long messages outside the exception class
    "TRY201",  # Use `raise` without specifying exception name
    "TRY203",  # Remove exception handler; error is immediately re-raised
    "TRY300",  # Consider moving this statement to an `else` block
    "TRY301",  # Abstract `raise` to an inner function
    "UP031",   # Use format specifiers instead of percent format
    "UP036",   # Version block is outdated for minimum Python version
    "W291",    # Trailing whitespace
    "W293",    # Blank line contains whitespace
  
    # These rules are disabled on purpose
    "PT015",   # Assertion always fails, replace with `pytest.fail()` [pytest is not in use]
    "D203",    # incompatible with D211
    "D213",    # incompatible with D212
  
    # These rules are always disabled: conflict with the formatter
    # don't enable! https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
    "W191", "E111", "E114", "E117", "D206", "D300", "Q000", "Q001",
    "Q002", "Q003", "COM812", "COM819", "ISC001", "ISC002", "E501",
  ]
  