Skip to content

Commit

Permalink
It should be setup_requires - fade to black...
Browse files Browse the repository at this point in the history
  • Loading branch information
hoffmang9 committed Sep 2, 2020
1 parent da48004 commit b31f60e
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 73 deletions.
136 changes: 73 additions & 63 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,77 +11,86 @@


class CMakeExtension(Extension):
def __init__(self, name, sourcedir=''):
Extension.__init__(self, name, sources=['./'])
def __init__(self, name, sourcedir=""):
Extension.__init__(self, name, sources=["./"])
self.sourcedir = os.path.abspath(sourcedir)


class CMakeBuild(build_ext):
def run(self):
try:
out = subprocess.check_output(['cmake', '--version'])
out = subprocess.check_output(["cmake", "--version"])
except OSError:
raise RuntimeError("CMake must be installed to build"
+ " the following extensions: "
+ ", ".join(e.name for e in self.extensions))
raise RuntimeError(
"CMake must be installed to build"
+ " the following extensions: "
+ ", ".join(e.name for e in self.extensions)
)

if platform.system() == "Windows":
cmake_version = LooseVersion(
re.search(r'version\s*([\d.]+)', out.decode()).group(1))
if cmake_version < '3.1.0':
re.search(r"version\s*([\d.]+)", out.decode()).group(1)
)
if cmake_version < "3.1.0":
raise RuntimeError("CMake >= 3.1.0 is required on Windows")

for ext in self.extensions:
self.build_extension(ext)

def build_extension(self, ext):
extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name)))
cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + str(extdir),
'-DPYTHON_EXECUTABLE=' + sys.executable]
cmake_args = [
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=" + str(extdir),
"-DPYTHON_EXECUTABLE=" + sys.executable,
]

cfg = 'Debug' if self.debug else 'Release'
build_args = ['--config', cfg]
cfg = "Debug" if self.debug else "Release"
build_args = ["--config", cfg]

if platform.system() == "Windows":
cmake_args += ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'
.format(cfg.upper(), extdir)]
if sys.maxsize > 2**32:
cmake_args += ['-A', 'x64']
build_args += ['--', '/m']
cmake_args += [
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}".format(cfg.upper(), extdir)
]
if sys.maxsize > 2 ** 32:
cmake_args += ["-A", "x64"]
build_args += ["--", "/m"]
else:
cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg]
build_args += ['--', '-j', '6']
cmake_args += ["-DCMAKE_BUILD_TYPE=" + cfg]
build_args += ["--", "-j", "6"]

env = os.environ.copy()
env['CXXFLAGS'] = '{} -DVERSION_INFO=\\"{}\\"'.format(
env.get('CXXFLAGS', ''),
self.distribution.get_version())
env["CXXFLAGS"] = '{} -DVERSION_INFO=\\"{}\\"'.format(
env.get("CXXFLAGS", ""), self.distribution.get_version()
)
if not os.path.exists(self.build_temp):
os.makedirs(self.build_temp)
subprocess.check_call(['cmake', ext.sourcedir] +
cmake_args, cwd=self.build_temp, env=env)
subprocess.check_call(['cmake', '--build', '.'] +
build_args, cwd=self.build_temp)
subprocess.check_call(
["cmake", ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env
)
subprocess.check_call(
["cmake", "--build", "."] + build_args, cwd=self.build_temp
)


class get_pybind_include(object):
"""Helper class to determine the pybind11 include path
The purpose of this class is to postpone importing pybind11
until it is actually installed, so that the ``get_include()``
method can be invoked. """
method can be invoked."""

def __init__(self, user=False):
self.user = user

def __str__(self):
import pybind11

return pybind11.get_include(self.user)


ext_modules = [
Extension(
'chiapos',
"chiapos",
[
"lib/FiniteStateEntropy/lib/entropy_common.c",
"lib/FiniteStateEntropy/lib/fse_compress.c",
Expand Down Expand Up @@ -116,8 +125,9 @@ def has_flag(compiler, flagname):
the specified compiler.
"""
import tempfile
with tempfile.NamedTemporaryFile('w', suffix='.cpp') as f:
f.write('int main (int argc, char **argv) { return 0; }')

with tempfile.NamedTemporaryFile("w", suffix=".cpp") as f:
f.write("int main (int argc, char **argv) { return 0; }")
try:
compiler.compile([f.name], extra_postargs=[flagname])
except setuptools.distutils.errors.CompileError:
Expand All @@ -130,42 +140,42 @@ def cpp_flag(compiler):
The newer version is prefered over c++11 (when it is available).
"""
flags = ['-std=c++17', '-std=c++14', '-std=c++11']
flags = ["-std=c++17", "-std=c++14", "-std=c++11"]

for flag in flags:
if has_flag(compiler, flag):
return flag

raise RuntimeError('Unsupported compiler -- at least C++11 support '
'is needed!')
raise RuntimeError("Unsupported compiler -- at least C++11 support " "is needed!")


class BuildExt(build_ext):
"""A custom build extension for adding compiler-specific options."""

c_opts = {
'msvc': ['/EHsc', '/std:c++17', '/O2'],
'unix': [""],
"msvc": ["/EHsc", "/std:c++17", "/O2"],
"unix": [""],
}
l_opts = {
'msvc': [""],
'unix': [""],
"msvc": [""],
"unix": [""],
}

if sys.platform == 'darwin':
darwin_opts = ['-stdlib=libc++', '-mmacosx-version-min=10.14']
c_opts['unix'] += darwin_opts
l_opts['unix'] += darwin_opts
if sys.platform == "darwin":
darwin_opts = ["-stdlib=libc++", "-mmacosx-version-min=10.14"]
c_opts["unix"] += darwin_opts
l_opts["unix"] += darwin_opts

def build_extensions(self):
ct = self.compiler.compiler_type
opts = self.c_opts.get(ct, [])
link_opts = self.l_opts.get(ct, [])
if ct == 'unix':
if ct == "unix":
opts.append('-DVERSION_INFO="%s"' % self.distribution.get_version())
opts.append(cpp_flag(self.compiler))
if has_flag(self.compiler, '-fvisibility=hidden'):
opts.append('-fvisibility=hidden')
elif ct == 'msvc':
if has_flag(self.compiler, "-fvisibility=hidden"):
opts.append("-fvisibility=hidden")
elif ct == "msvc":
opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version())
for ext in self.extensions:
ext.extra_compile_args = opts
Expand All @@ -175,32 +185,32 @@ def build_extensions(self):

if platform.system() == "Windows":
setup(
name='chiapos',
author='Mariano Sorgente',
author_email='[email protected]',
description='Chia proof of space plotting, proving, and verifying (wraps C++)',
license='Apache License',
python_requires='>=3.7',
long_description=open('README.md').read(),
name="chiapos",
author="Mariano Sorgente",
author_email="[email protected]",
description="Chia proof of space plotting, proving, and verifying (wraps C++)",
license="Apache License",
python_requires=">=3.7",
long_description=open("README.md").read(),
long_description_content_type="text/markdown",
url="https://github.com/Chia-Network/chiapos",
build_requires=["pybind11"],
setup_requires=["pybind11"],
ext_modules=ext_modules,
cmdclass={'build_ext': BuildExt},
cmdclass={"build_ext": BuildExt},
zip_safe=False,
)
else:
setup(
name='chiapos',
author='Mariano Sorgente',
author_email='[email protected]',
description='Chia proof of space plotting, proving, and verifying (wraps C++)',
license='Apache License',
python_requires='>=3.7',
long_description=open('README.md').read(),
name="chiapos",
author="Mariano Sorgente",
author_email="[email protected]",
description="Chia proof of space plotting, proving, and verifying (wraps C++)",
license="Apache License",
python_requires=">=3.7",
long_description=open("README.md").read(),
long_description_content_type="text/markdown",
url="https://github.com/Chia-Network/chiavdf",
ext_modules=[CMakeExtension('chiapos', '.')],
ext_modules=[CMakeExtension("chiapos", ".")],
cmdclass=dict(build_ext=CMakeBuild),
zip_safe=False,
)
)
62 changes: 52 additions & 10 deletions tests/test_python_bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,47 @@ class TestPythonBindings(unittest.TestCase):
def test_k_21(self):
challenge: bytes = bytes([i for i in range(0, 32)])

plot_seed: bytes = bytes([5, 104, 52, 4, 51, 55, 23, 84, 91, 10, 111, 12, 13,
222, 151, 16, 228, 211, 254, 45, 92, 198, 204, 10, 9,
10, 11, 129, 139, 171, 15, 23])
plot_seed: bytes = bytes(
[
5,
104,
52,
4,
51,
55,
23,
84,
91,
10,
111,
12,
13,
222,
151,
16,
228,
211,
254,
45,
92,
198,
204,
10,
9,
10,
11,
129,
139,
171,
15,
23,
]
)

pl = DiskPlotter()
pl.create_plot_disk(".", ".", ".", "myplot.dat", 21, bytes([1, 2, 3, 4, 5]), plot_seed, 2*1024)
pl.create_plot_disk(
".", ".", ".", "myplot.dat", 21, bytes([1, 2, 3, 4, 5]), plot_seed, 2 * 1024
)
pl = None

pr = DiskProver(str(Path("myplot.dat")))
Expand All @@ -28,13 +63,17 @@ def test_k_21(self):
challenge = sha256(i.to_bytes(4, "big")).digest()
for index, quality in enumerate(pr.get_qualities_for_challenge(challenge)):
proof = pr.get_full_proof(challenge, index)
assert len(proof) == 8*pr.get_size()
computed_quality = v.validate_proof(plot_seed, pr.get_size(), challenge, proof)
assert len(proof) == 8 * pr.get_size()
computed_quality = v.validate_proof(
plot_seed, pr.get_size(), challenge, proof
)
assert computed_quality == quality
total_proofs += 1

print(f"total proofs {total_proofs} out of {iterations}\
{total_proofs / iterations}")
print(
f"total proofs {total_proofs} out of {iterations}\
{total_proofs / iterations}"
)
assert total_proofs > 4000
assert total_proofs < 6000
pr = None
Expand All @@ -44,10 +83,13 @@ def test_k_21(self):
for byte_block in iter(lambda: f.read(4096), b""):
sha256_plot_hash.update(byte_block)
plot_hash = str(sha256_plot_hash.hexdigest())
assert plot_hash == "80e32f560f3a4347760d6baae8d16fbaf484948088bff05c51bdcc24b7bc40d9"
assert (
plot_hash
== "80e32f560f3a4347760d6baae8d16fbaf484948088bff05c51bdcc24b7bc40d9"
)
print(f"\nPlotfile asserted sha256: {plot_hash}\n")
Path("myplot.dat").unlink()


if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()

0 comments on commit b31f60e

Please sign in to comment.