# Command-Line Interface

When a command is executed from a console (terminal) of the operating system, it is usually for generating an XCSP$^3$ instance from a PyCSP$^3$ model. You execute something like:

python <file> [options]


with:

• <file>: a Python file to be executed, describing a model in PyCSP$^3$

Among the options, we find:

• -data=<data_value>: allows us to specify the data to be used by the model. It can be:
• elementary: -data=5
• a simple list: -data=[9,0,0,3,9]
• a JSON file: -data=Bibd-3-4-6.json

Data can then be directly used in the PyCSP$^3$ model by means of a predefined variable data.

• -dataparser=<file>: a Python file for reading/parsing data given under any arbitrary form (e.g., by a text file). See Example Nonogram for an illustration.

• -dataexport: exports (saves) the data in JSON format. See Example Nonogram for an illustration.

• -dataformat: formats numbers in the filename of the generated XCSP$^3$ instance.

By default, a file containing the XCSP$^3$ instance is generated, unless you use the option:

• -display: displays the XCSP$^3$ instance in the system standard output, instead of generating an XCSP$^3$ file

## Setting the Filename

The option -output allows us to indicate what must be the name of the generated filename (instead of the one that is automatically chosen).

For example, the name of the generated XCSP$^3$ file is ‘Queens-4.xml’ when executing:

python Queens.py -data=4


whereas it is ‘myname.xml’ when executing:

python Queens.py -data=4 -output=myname


This option can be also given the name of a directory. See examples given for Problem BIBD in the guide.

## Variants and Subvariants

The option -variant allows us to choose between several possible variants of a model. Actually, it is possible to reason with both a variant name and a subvariant name. It is the case when the name contains the character ‘-‘ separating the variant name from the subvariant name. In PySCP$^3$, we then use the functions variant() and subvariant(). Let us consider the following example (piece of code in a file called ‘TestVariant.py’):

from pycsp3 import *

x = Var(0,1)

if not variant():
print("no variant")
elif variant("v1"):
print("variant v1")
elif variant("v2"):
print("variant v2")
if not subvariant():
print("no subvariant")
elif subvariant("a"):
print("subvariant a")
elif subvariant("b"):
print("subvariant b")


Here are the results we obtain for various command lines:

python TestVariant.py                 // no variant
python TestVariant.py -variant=v1     // variant v1
python TestVariant.py -variant=v2     // variant v2
python testVariant.py -variant=v2-a   // variant v2  subvariant a
python testVariant.py -variant=v2-b   // variant v2  subvariant b


## Solving

The following options concern the solving process.

  -solve
-solver


When using -solve, the default solver, ACE, is called. When using -solver, one must indicate the name of the solver (ace or choco, case insensitive), and possibly other solver options, in which case, square brackets are required. Among the solver options, one can use v (for verbose) or vv (for very verbose), and args that must then be followed by the symbol ‘=’ and a string corresponding to some specific solver options. Here are a few examples:

python Queens.py -data=4 -solve
python Queens.py -data=4 -solver=choco
python Queens.py -data=4 -solver=ace
python Queens.py -data=4 -solver=[choco,v]
python Queens.py -data=4 -solver=[ace,vv]
python Queens.py -data=4 -solver=[ace,v,args="-s=2"]


## Other Options

Finally, there are some other options, used as flags, i.e., requiring no argument:

• -display displays the XCSP$^3$ instance in the system standard output, instead of generating an XCSP$^3$ file (not compatible with -solve and -solver)
• -verbose displays some additional information when compiling
• -sober does not include side notes in the XCSP$^3$ file
• -ev may display additional information when an error occurs
• -lzma compresses the XCSP$^3$ file with lzma (requires lzma to be installed)
• -safe performs some operations (possibly based on parallelism) in a safer manner
• -keepHybrid keeps compressed forms of hybrid tables
• -restrictTablesWrtDomains removes useless tuples (because invalid) in ordinary/starred tables
• -dontRunCompactor prevents from compacting the representation of constraints and objectives
• -dontCompactValues prevents from compressing lists of integers (with character ‘x’ as in 0x20)
• -groupSumCoeffs gathers coefficients that are associated with the same variables (e.g., in a constraint Sum)
• -mini attempts to generate instances in the perimeter of the mini-tracks of XCSP competitions
• -uncurse prevents from redefining some operators (with module ‘forbiddenfruit’)