Source code for chipiron.scripts.main_chipiron

"""
Launching the main chipiron
"""

import argparse
import logging
import sys
from typing import Any

from chipiron.scripts.factory import create_script
from chipiron.scripts.iscript import IScript
from chipiron.scripts.script_gui.script_gui_custom import script_gui
from chipiron.scripts.script_type import ScriptType

sys.path.append("../../")

# Configure parsley_coco logging to reduce noise
try:
    from parsley_coco.logger import set_verbosity

    set_verbosity(logging.WARNING)
except ImportError:
    # parsley_coco might not be available in all environments
    pass


[docs]def get_script_and_args( raw_command_line_arguments: list[str], ) -> tuple[ScriptType, dict[str, Any] | None, str | None]: """ Args: raw_command_line_arguments: the list of arguments of the scripts given by command line Returns: A string for the name of script and a dictionary of parameters """ script_type: ScriptType extra_args: dict[str, Any] | None = None config_file_name: str | None = None # Whether command line arguments are provided or not we ask for more info through a GUI if len(raw_command_line_arguments) == 1: # No args provided # use a gui to get user input gui_extra_args: dict[str, Any] | None script_type, gui_extra_args, config_file_name = script_gui() extra_args = gui_extra_args else: # first parse/retrieve the name of the script then look for the names of the parameters related to this script # then parse again and retrieve the parameters related to the script if specified # Capture the script argument in the command line arguments parser_default: argparse.ArgumentParser = argparse.ArgumentParser() parser_default.add_argument( "--script_name", type=str, default=None, help="name of the script" ) args_obj, _ = parser_default.parse_known_args() args_command_line: dict[Any, Any] = vars( args_obj ) # converting into dictionary format # print("command line arguments:", args_command_line) # the script name must be specified otherwise fail if args_command_line["script_name"] is None: raise ValueError( "Expecting command line arguments of the shape python chipiron.py --script_name **name_of script**" ) script_type_str: str = args_command_line["script_name"] script_type = ScriptType(script_type_str) extra_args = None # print("extra_args", extra_args) return script_type, extra_args, config_file_name
[docs]def main() -> None: """ The main function """ # Print chipiron startup banner with chipiron-themed icons print("=" * 60) print(" 🦑 ♛ CHIPIRON MAIN STARTS ♛ 🦑") print(" 🐙 AI Chess Engine & Learning System 🐙") print(" ♔. Ready to play and learn chess like a pro! .♕") print(" 🦑 ~ Swimming through chess possibilities ~ 🦑") print("=" * 60) print() # Getting the command line arguments from the system raw_command_line_arguments: list[str] = sys.argv # the type of script to be executed script_type: ScriptType # arguments provided to the script from the outside. Here it can be from a gui or command line extra_args: dict[str, Any] | None # extracting the script_name and possibly some input arguments from either the gui or a yaml file or command line script_type, extra_args, config_file_name = get_script_and_args( raw_command_line_arguments ) # creating the script object from its name and arguments script_object: IScript = create_script( script_type=script_type, extra_args=extra_args, config_file_name=config_file_name, should_parse_command_line_arguments=True, ) # run the script script_object.run() # terminate the script script_object.terminate()
if __name__ == "__main__": # checking if the version of python is high enough message = ( "A version of Python higher than 3.10 is required to run chipiron.\n" + ' Try using "python3 main_chipiron.py" instead' ) assert sys.version_info >= (3, 10), message # launching the real main python script. # this allows the to bypass the automatic full interpreter check of python that would raise a syntax error before # the assertion above in case of a wrong python version main()