def main():
    parser = create_parser()
    # Parse command line options

    options, args = parser.parse_args()

    if not len(args) == 1:
        parser.print_help()
        sys.exit(1)

    filename = args[0]

    if filename[-4:] == ".csv":
        outFilenameBase = filename[:-4]
    else:
        outFilenameBase = filename

    outFilename = outFilenameBase + "_complexPlaces.csv"

    print "output to", outFilename

    censusTable = readCensusTable(filename, convertData=False)

    fieldnames = censusTable.header
    if not "NumberOfComplexPlaces" in fieldnames:
        fieldnames = fieldnames + ["NumberOfComplexPlaces"]

    csv_writer = csv.DictWriter(open(outFilename, "w"), fieldnames=fieldnames)

    csv_writer.writerow(dict(zip(fieldnames, fieldnames)))

    for row in censusTable.listOfDicts:
        if row.has_key("InvariantTraceField"):
            if row["InvariantTraceField"] and not row["InvariantTraceField"] == "-":

                pariStr = "nfinit(%s).r2" % row["InvariantTraceField"]

                row["NumberOfComplexPlaces"] = pari.pari_eval(pariStr)

        csv_writer.writerow(row)
from csvUtilities.readCensusTable import readCensusTable
import globalsettings
import mpmath
from linearCombinations import binarySearch, filterRepresentativeMfds, twoTerms
from linearCombinations.formatLinearCombination import formatLinearCombination

mpmath.mp.dps = 70
globalsettings.setSetting("maximalError", mpmath.mpf("0.1") ** 50)
globalsettings.setSetting("maximalErrorDigits", 50)

testCensusTablePath = globalsettings.getSetting("testCensusTablePath")
censusTableFile = testCensusTablePath + "/exampleCensusTable.csv"
censusTable = readCensusTable(censusTableFile, sortKey="Volume")

representatives = filterRepresentativeMfds.filterRepresentativeMfds(censusTable.listOfDicts)


def checkBinarySearchResult(vol, resultNames):

    if isinstance(vol, str):
        vol = mpmath.mpf(vol)

    rows = binarySearch.matchingRows(censusTable.listOfDicts, "Volume", vol)
    names = [row["Name"] for row in rows]

    assert set(resultNames) == set(names), Exception("Expected: %s\nGot %s" % (resultNames, names))


def testBinarySearch():

    checkBinarySearchResult(