@@ -621,6 +621,11 @@ def model_devi_amber_args() -> list[Argument]:
621621 ]
622622
623623
624+ def _is_scalar_or_singleton (value ) -> bool :
625+ """Accept legacy one-item lists while rejecting ambiguous CALYPSO values."""
626+ return not isinstance (value , list ) or len (value ) == 1
627+
628+
624629def model_devi_calypso_jobs_args () -> Argument :
625630 """Return native CALYPSO structure-generation settings."""
626631 return Argument (
@@ -660,8 +665,10 @@ def model_devi_calypso_jobs_args() -> Argument:
660665 ),
661666 Argument (
662667 "Volume" ,
663- [None , float , int ],
668+ [None , float , int , list [ float ], list [ int ] ],
664669 optional = True ,
670+ extra_check = _is_scalar_or_singleton ,
671+ extra_check_errmsg = "Volume must be a scalar or a one-item list." ,
665672 doc = "Volume per formula unit in cubic Angstrom." ,
666673 ),
667674 Argument (
@@ -672,30 +679,38 @@ def model_devi_calypso_jobs_args() -> Argument:
672679 ),
673680 Argument (
674681 "PsoRatio" ,
675- float ,
682+ [ float , int , list [ float ], list [ int ]] ,
676683 optional = True ,
677684 default = 0.6 ,
685+ extra_check = _is_scalar_or_singleton ,
686+ extra_check_errmsg = "PsoRatio must be a scalar or a one-item list." ,
678687 doc = "Fraction of structures generated by particle-swarm optimization." ,
679688 ),
680689 Argument (
681690 "PopSize" ,
682- int ,
691+ [ int , list [ int ]] ,
683692 optional = True ,
684693 default = 30 ,
694+ extra_check = _is_scalar_or_singleton ,
695+ extra_check_errmsg = "PopSize must be an integer or a one-item list." ,
685696 doc = "CALYPSO population size." ,
686697 ),
687698 Argument (
688699 "MaxStep" ,
689- int ,
700+ [ int , list [ int ]] ,
690701 optional = True ,
691702 default = 5 ,
703+ extra_check = _is_scalar_or_singleton ,
704+ extra_check_errmsg = "MaxStep must be an integer or a one-item list." ,
692705 doc = "Maximum particle-swarm optimization steps." ,
693706 ),
694707 Argument (
695708 "ICode" ,
696- int ,
709+ [ int , list [ int ]] ,
697710 optional = True ,
698711 default = 1 ,
712+ extra_check = _is_scalar_or_singleton ,
713+ extra_check_errmsg = "ICode must be an integer or a one-item list." ,
699714 doc = "CALYPSO local-optimization interface code." ,
700715 ),
701716 Argument (
@@ -714,8 +729,10 @@ def model_devi_calypso_jobs_args() -> Argument:
714729 ),
715730 Argument (
716731 "MaxNumAtom" ,
717- int ,
732+ [ int , list [ int ]] ,
718733 optional = True ,
734+ extra_check = _is_scalar_or_singleton ,
735+ extra_check_errmsg = "MaxNumAtom must be an integer or a one-item list." ,
719736 doc = "Maximum atoms per cell when VSC is enabled." ,
720737 ),
721738 Argument (
@@ -733,9 +750,11 @@ def model_devi_calypso_jobs_args() -> Argument:
733750 ),
734751 Argument (
735752 "fmax" ,
736- float ,
753+ [ float , int , list [ float ], list [ int ]] ,
737754 optional = True ,
738755 default = 0.01 ,
756+ extra_check = _is_scalar_or_singleton ,
757+ extra_check_errmsg = "fmax must be a scalar or a one-item list." ,
739758 doc = "Force convergence threshold in eV/Angstrom." ,
740759 ),
741760 Argument (
0 commit comments