def main() -> None:
"""Main entry point for the easy-pmf command-line tool."""
parser = argparse.ArgumentParser(
description="Easy PMF - Command Line Interface for Positive Matrix "
"Factorization",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
easy-pmf --interactive # Interactive dataset selection
easy-pmf --analyze-all # Analyze all datasets in data/ folder
easy-pmf --help # Show this help message
For more information, visit: https://github.com/easy-pmf/easy-pmf
""",
)
parser.add_argument(
"--interactive",
"-i",
action="store_true",
help="Run interactive analysis (default)",
)
parser.add_argument(
"--analyze-all",
"-a",
action="store_true",
help="Analyze all datasets automatically",
)
parser.add_argument(
"--data-dir",
type=str,
default="data",
help="Directory containing data files (default: data)",
)
parser.add_argument(
"--output-dir",
type=str,
default="output",
help="Directory for output files (default: output)",
)
parser.add_argument(
"--factors",
"-f",
type=int,
default=7,
help="Number of PMF factors (default: 7)",
)
parser.add_argument("--version", "-v", action="version", version="Easy PMF 0.1.0")
args = parser.parse_args()
# If no specific mode is chosen, default to interactive
if not args.analyze_all:
args.interactive = True
try:
if args.interactive:
run_interactive_analysis(args)
elif args.analyze_all:
run_batch_analysis(args)
except KeyboardInterrupt:
print("\nAnalysis cancelled by user.")
sys.exit(1)
except Exception as e:
print(f"Error: {e}")
sys.exit(1)