Skip to main content

Python interface to Piccolo/Ganessa_SIM and Picalor simulation kernel

Project description

Piccolo5/Piccolo6/Picalor6 and Ganessa_SIM API python calling interface

What is it?

A python package enabling users to call a set of Picwin32.dll or Ganessa_SIM.dll API functions and subroutines within python scripts. Initially provided for python 2.7 32 bits only. 1.9.x versions served as python 3.5 / 3.6 pre-release.

Starting with version 2.0.0, the wheel package is provided for 32 bits version for python 2.7 / 3.5 / 3.6 / 3.7 (Piccolo kernel is a 32 bits application) and 64 bits version for python 3.6 / 3.7 (Ganessa_SIM is available as 32 and 64 bits).

Starting with version 2.1.0, the wheel package is provided for 32 bits version for python 2.7 / 3.7 / 3.8 (Piccolo kernel is a 32 bits application) and 64 bits version for python 3.7 / 3.8 (Ganessa_SIM is available as 32 and 64 bits).

Starting with version 2.1.8, the wheel package is provided for 32 bits version for python 2.7 / 3.7 / 3.8 / 3.9 (Piccolo kernel is a 32 bits application) and 64 bits version for python 3.7 / 3.8 / 3.9 (Ganessa_SIM is available as 32 and 64 bits).

Version 2.1.9 is the last version that supported python 2.7. Version 2.2.4 is the last version for which a wheel is provided for python 3.7.

Starting with version 2.2.5, the wheel package is provided for 32 bits version for python 3.8 / 3.9 / 3.10 (Piccolo kernel is a 32 bits application) and 64 bits version for python 3.8 / 3.9 / 3.10 (Ganessa_SIM is available as 32 and 64 bits).

Starting with version 2.3.3, the wheel package is provided for 32 bits version for python 3.8 / 3.9 / 3.10 / 3.11 (Piccolo kernel is a 32 bits application) and 64 bits version for python 3.8 / 3.9 / 3.10 / 3.11 (Ganessa_SIM is available as 32 and 64 bits).

Starting with version 2.3.10, the wheel package is provided for 32 bits version for python 3.8 / 3.9 / 3.10 / 3.11 / 3.12 (Piccolo kernel is a 32 bits application) and 64 bits version for python 3.8 / 3.9 / 3.10 / 3.11 / 3.12 (Ganessa_SIM is available as 32 and 64 bits).

Starting with version 2.4.2, the wheel package is provided for 32 bits version for python 3.8 / 3.9 / 3.10 / 3.11 / 3.12 / 3.13 (Piccolo kernel is a 32 bits application) and 64 bits version for python 3.8 / 3.9 / 3.10 / 3.11 / 3.12 / 3.13 (Ganessa_SIM is available as 32 and 64 bits).

Installation

Windows only

pip install ganessa

Obsolete Requirements (32 bits)

  1. python 2.7, 3.5, 3.6, 3.7

  2. obsolete python requirements: numpy 1.11 or above (python 2.7) / numpy 1.13.1 or above (python 3.5 - 3.6) / numpy 1.15.1 (python 3.7)

  3. Piccolo or Picalor kernel library (picwin32.dll), starting from version 5 (141203) for python 2.7

  4. valid Piccolo or Picalor or Ganessa_SIM license

Requirements (32 bits)

  1. python 3.8 - 3.13

  2. numpy 1.15.1 (python 3.8) / numpy 1.19.4 (python 3.9) / numpy 1.21.3 (python 3.10) / numpy 1.23.3 (python 3.11+)

  3. numpy < 2.0 if python < 3.12 or ganessa < 2.4.4

  4. Piccolo6 or Picalor6 kernel library (picwin32.dll), or recent Ganessa_SIM.dll. Note that a recent (2020 or newer) version of Piccolo kernel is required for use with python 3.12

  5. valid Piccolo or Picalor or Ganessa_SIM license (for commercial releases)

Requirements (64 bits)

  1. python 3.8 - 3.13

  2. numpy 1.15.1 (python 3.8) / numpy 1.19.4 (python 3.9) / numpy 1.21.3 (python 3.10) / numpy 1.23.3 (python 3.11+)

  3. numpy < 2.0 if python < 3.12 or ganessa < 2.4.4

  4. recent Ganessa_SIM_x64.dll (64 bit dll)

  5. valid Ganessa_SIM license (for commercial releases)

This tool expects Picwin32.dll to be in the PATH or in one of the following folders:

                %localappdata%/Programs/Safege/Piccolo_ or
                %localappdata%/Programs/Suez/Piccolo_ or
                %localappdata%/Programs/Gfi Progiciels/Piccolo6_ or
                %localappdata%/Programs/Inetum/Piccolo6_ or
[[E: or D:] or C:] / [
                'Program Files (x86)/Safege/Piccolo_' or
                'Program Files (x86)/Suez/Piccolo_' or
                'Program Files (x86)/Gfi Progiciels/Piccolo6_'  or
                'Program Files (x86)/Inetum/Piccolo6_'  or
                'Program Files (x86)/Gfi Progiciels/Picalor6_' or
                'Program Files/Adelior/Piccolo5_'
               ]
             + ['fr' or 'uk' or 'esp' or 'eng'] + ['' or '_ck']

Or one of Ganessa_SIM.dll or Ganessa_TH.dll or Ganessa_SIM_x64.dll in:

           '%localappdata%/Programs/Safege/Ganessa_ or
           '%localappdata%/Programs/Suez/Ganessa_ or
[[E: or D:] or C:] / [
               'Program Files (x86)/Safege/Ganessa_' or
               'Program Files (x86)/Suez/Ganessa_' or
               'Program Files/Safege/Ganessa_' (Ganessa_SIM_x64 only) or
               'Program Files/Suez/Ganessa_' (Ganessa_SIM_x64 only)
              ]
             + ['fr' or 'uk' or 'esp' or 'eng']

With custom installations, PICCOLO_DIR or GANESSA_DIR environment variables can be set to define the path.

Content

The package provides:
  1. ‘sim’ package:
    • a few basic functions for reading or loading a model, running hydraulic and WQ simulations.

    • ‘getter’ functions for individual objects and attributes, time series vectors, attribute vector of all object (attribute maps).

    • iterators over links, nodes, tanks, demands, and tables, or over Piccolo command language selections.

    • a Graph class built from the current model graph, with propagation functions.

    • almost no ‘setter’ functions, but ‘cmd’, ‘execute’ and ‘cmdfile’ any Piccolo command language instruction(s)/file.

  2. ‘th’ package: same functions for Picalor except running extended period simulations and time series getters.

  3. ‘util’ package: conversion and formatting and other miscellaneous functions.

  4. ‘OpenFileMMI’ provides classes for opening dialog frame for a .dat/.bin/.pic/.inp model file (see en2emu below), folder, and input/output (result) file. It should be imported after ‘sim’ or ‘th’.

  5. ‘plot’ provides easy multiple simulation vs reference graphs plot settings - requires matplotlib.

  6. ‘proj’ provides a ‘guess_proj’ function returning the model CRS as EPSG:xxxx or mnemonic, and ‘get_spatial_ref’

  7. ‘sort’ provides a heapsort based on heapq.

  8. ‘midfile’ provides minimal mif/mid functions similar to shp/dbf shapefile handler (pyshp package).

  9. ‘geojsonfile’ provides minimal geojson functions similar to shp/dbf shapefile handler (pyshp package).

  10. ‘epanet2’ provides limited epanet2.0.12 python API for win32 (thanks to Assela Pathirana - mailto: assela@pathirana.net) similar to EpanetTools-0.4.2; with epanet.getlinknodes and calculation of tank diameter corrected (from 0.9.2 and 1.0.0).

  11. ‘epanet22’ provides a single threaded, low-level python API for epanet2.2, equivalent/compatible with above epanet2.

  12. ‘owa_epanet22’ provides an EpanetTools compatibility layer for owa-epanet 2.2.3/2.3.4: it defines EN_XXX constants and single project ENxxx API functions. All owa-epanet API functions are available.

  13. ‘en2emu’ provides minimal ‘sim’ compatibility for Epanet models being opened with OpenFileMMI.SelectModel, wrapper functions for running hydraulic and WQ simulations and collecting results as numpy arrays, iterators etc. See the doc.

  14. ‘parallel’ provides a simple parallel simulations handling framework based on multiprocessing, returning either elementary or reduced results.

Model objects and parameters can be modified using Piccolo command language (see cmd, cmdfile and execute).

Recently introduced functions and classes may not be functional with old versions of Piccolo / Ganessa_SIM kernel.

Documentation

Documentation is provided as pyGanessa.html in the installation folder, possibly in docs subfolder. It includes package history.

History of the README document

  • Created 2013-07-04

  • Revised 2015-05-03: since 2014-12-04 Picwin32.dll is compatible with this API.

  • Revised 2016-07-07: provided as .rst.

  • Revised 2017-08-08: install using pip; Piccolo/Ganessa dll folder search order.

  • Revised 2017-09-12: split sim into core, core_sim, core_th.

  • Revised 2017-11-13: added sort, midfile, epanet2 modules.

  • Revised 2017-11-30: added parallel.

  • Revised 2018-03-29: minor changes / extension to python 3.5-3.6.

  • Revised 2018-06-08: OpenFileMMI and epanet2 details, added example.

  • Revised 2018-08-16: 64 bits compatibility (Ganessa_SIM and python 3.7 / 3.8 only).

  • Revised 2018-08-27: numpy requirements.

  • Revised 2019-09-13: minor changes.

  • Revised 2019-10-09: extension to python 3.8.

  • Revised 2019-10-15: README rst fix.

  • Revised 2020-02-05: added sim.Graph; README rst fix.

  • Revised 2020-11-20: README rst fix.

  • Revised 2021-04-29: extension to python 3.9.

  • Revised 2021-06-17: python 2.7 compatibility removed since 2.2.0; folder lookup paths.

  • Revised 2021-10-27: python 3.7 removed & python 3.10 added since 2.2.5.

  • Revised 2022-04-21: dll lookup order as E:, D:, C:; example updated.

  • Revised 2022-09-27: python 3.11 added; proj package added.

  • Revised 2023-07-12: added epanet22.

  • Revised 2023-08-10: added owa_epanet22.

  • Revised 2023-10-18: added en2emu.

  • Revised 2023-11-06: added python 3.12.

  • Revised 2024-01-17: updated 64 bits requirements.

  • Revised 2024-03-18: updated .dll search paths.

  • Revised 2024-06-16: added python 3.13; fixed lookup paths.

  • Revised 2024-07-11: numpy 2.0 restriction to ganessa >= 2.4.4 and python >= 3.12

Examples

# file: Example_EN.py
"""Example program for ganessa
requires a Piccolo model 'model.dat' in the current folder
Example using English command language"""

import os
import matplotlib.pyplot as plt
import ganessa.sim as pic

# This code sample runs under python 3.8+
# but requires ganessa 2.3.0 or higher

if __name__ == "__main__":
    wkfold = os.path.dirname(__file__)
    if not wkfold:
        wkfold = os.getcwd()
        print("Current folder is:", wkfold)
    os.chdir(wkfold)
    # will create work files here
    pic.init(wkfold)
    # loads the model - change the name here...
    pic.cmdfile("model.dat")
    # select small pipe (diameter below 155)
    # using iterator and D getter, by id
    def pipefilter(diameter):
        return 0 < diameter < 155
    pipes = [p for p in pic.Links() if pipefilter(pic.linkattr(p, "D"))]
    # using iterator and D getter, by index (less concise but slightly faster)
    pipes = [
        pic.getid(pic.LINK, k)
        for k in range(1, pic.nbobjects(pic.LINK) + 1)
        if pipefilter(pic.nlinkattr(k, "D"))
    ]
    # Most Piccoloic, using (english) command language selection
    pic.setlang("English")
    # Selectid has been introduced in 2.3.0; it is equivalent to Selected(..., False)
    pipes = list(pic.Selectid("PIPE (D < 155) END"))
    # minimal setter functions for links, nodes, tanks attributes
    pid = pipes[len(pipes) // 2]
    diam = pic.linkattr(pid, "D")
    pic.setlinkattr(pid, "D", diam * 2)
    # language-independant commands: MODIF MULT D 2 BRANCH {pid} END
    KWEND = pic.getkeyword(pic.DICT.END)
    pic.gencmdw(pic.M.MOD, pic.M.MOD.MULT, pic.M.NONE, "D 2")
    pic.gencmd(pic.M.LNK, pic.M.LNK.NONE, pic.M.NONE, pid + " " + KWEND, 1)
    # Use command language to set / modify / delete objects
    pic.execute("MODIF", f"DELETE BRANCH {pid} END")
    pic.execute("MODIF", "MERGE NODE (AB = 1) END", "MERGE NODE (AB = 1) END")
    # or change parameters
    pic.execute("SIMUL", "CRITX 0.05", "MXITER 75")
    # get demand profile TS
    nb = pic.tsdemandlen("DEFAUT", "HAUT")
    print("Profile length for area HAUT:", nb)
    res = pic.tsdemand("DEFAUT", "HAUT")
    # Unlike epanet, first run simulation then browse/ query results
    pic.full_solveH(silent=True, retry=True)
    print("Simulation done.")
    pic.browseH(3600 * 8.5)
    fig = plt.figure(figsize=(16 - 1, 9 - 1))
    # plot 3D elevation and hydraulic head
    ax = fig.add_subplot(projection="3d")
    for a in pic.Links():
        x, y, z, v, nb = pic.linkXYZV(a, "HH")
        if nb > 0:
            ax.plot(x, y, z, "r-")
            ax.plot(x, y, v, "b-")
    plt.title("Hydraulic head at t= 08:30")
    plt.show()
    # print min/max pressure over the EPS
    attr = "P"
    minpax_p = list(pic.getMinMax(pic.NODE, attr))
    for nid, vmin, vmax, vmoy in minpax_p[:10]:
        print(nid, attr + "min:", vmin, attr + "max:", vmax)
    print("\t...")
    for nid, vmin, vmax, vmoy in minpax_p[-10:]:
        print(nid, attr + "min:", vmin, attr + "max:", vmax)
    # get current volume simulation (internal variable steps) and measurement TS
    for tid in pic.Tanks():
        t1, v1, nb1 = pic.tsval(pic.TANK, tid, "CV")
        t2, v2, nb2 = pic.msval(pic.TANK, tid, "CV")
    # get current volume simulation results at measurement sampling
    for tid in pic.Tanks():
        t3, v3, nb3 = pic.tsvalbymts(pic.TANK, tid, "CV")
    # export as Epanet .inp
    pic.exportEpanet("model.inp")
    pic.execute("XXMEM BRANCH : D")
    pic.savemodel("model_xx.dat", extra_data=[("BRANCH (D > 149) END", "XX")])
    # WQ source data optional argument is a specific node - not used here
    print("\nWQ source data (input forcing and TS at nodes):")
    for n, cd, attr, t, c, nb in pic.WQSources():
        print(n, cd, attr, nb, t, c)
    print("Done.")
    # use reset() for switching model, close() to terminate
    pic.close()



# file: Example_FR.py
"""Example program for ganessa
requires a Piccolo model 'model.dat' in the current folder
Example using French command language"""

import os
import matplotlib.pyplot as plt
import ganessa.sim as pic

# This code sample runs under python 3.8+
# but requires ganessa 2.3.0 or higher

if __name__ == "__main__":
    wkfold = os.path.dirname(__file__)
    if not wkfold:
        wkfold = os.getcwd()
        print("Current folder is:", wkfold)
    os.chdir(wkfold)
    # will create work files here
    pic.init(wkfold)
    # loads the model - change the name here...
    pic.cmdfile("model.dat")
    # select small pipe (diameter below 155)
    # using iterator and D getter, by id
    def pipefilter(diameter):
        return 0 < diameter < 155
    pipes = [p for p in pic.Links() if pipefilter(pic.linkattr(p, "D"))]
    # using iterator and D getter, by index (less concise but slightly faster)
    pipes = [
        pic.getid(pic.LINK, k)
        for k in range(1, pic.nbobjects(pic.LINK) + 1)
        if pipefilter(pic.nlinkattr(k, "D"))
    ]
    # Most Piccoloic, using (french) command language selection
    pic.setlang("French")
    # Selectid has been introduced in 2.3.0; it is equivalent to Selected(..., False)
    pipes = list(pic.Selectid("TUYAU (D < 155) FIN"))
    # minimal setter functions for links, nodes, tanks attributes
    pid = pipes[len(pipes) // 2]
    diam = pic.linkattr(pid, "D")
    pic.setlinkattr(pid, "D", diam * 2)
    # language-independant commands: MODIF MULT D 2 ARC {pid} FIN
    KWEND = pic.getkeyword(pic.DICT.END)
    pic.gencmdw(pic.M.MOD, pic.M.MOD.MULT, pic.M.NONE, "D 2")
    pic.gencmd(pic.M.LNK, pic.M.LNK.NONE, pic.M.NONE, pid + " " + KWEND, 1)
    # Use command language to set / modify / delete objects
    pic.execute("MODIF", f"DETR ARC {pid} FIN")
    pic.execute("MODIF", "FUSION NOEU (AA = 1) FIN", "FUSION NOEU (AA = 1) FIN")
    # or change parameters
    pic.execute("SIMUL", "CRITX 0.05", "MXITER 75")
    # get demand profile TS
    nb = pic.tsdemandlen("DEFAUT", "HAUT")
    print("Profile length for area HAUT:", nb)
    res = pic.tsdemand("DEFAUT", "HAUT")
    # Unlike epanet, first run simulation then browse/ query results
    pic.full_solveH(silent=True, retry=True)
    print("Simulation done.")
    pic.browseH(3600 * 8.5)
    fig = plt.figure(figsize=(16 - 1, 9 - 1))
    # plot 3D elevation and hydraulic head
    ax = fig.add_subplot(projection="3d")
    for a in pic.Links():
        x, y, z, v, nb = pic.linkXYZV(a, "CH")
        if nb > 0:
            ax.plot(x, y, z, "r-")
            ax.plot(x, y, v, "b-")
    plt.title("Plan de charge a t= 08:30")
    plt.show()
    # print min/max pressure over the EPS
    attr = "P"
    minpax_p = list(pic.getMinMax(pic.NODE, attr))
    for nid, vmin, vmax, vmoy in minpax_p[:10]:
        print(nid, attr + "min:", vmin, attr + "max:", vmax)
    print("\t...")
    for nid, vmin, vmax, vmoy in minpax_p[-10:]:
        print(nid, attr + "min:", vmin, attr + "max:", vmax)
    # get current volume simulation (internal variable steps) and measurement TS
    for tid in pic.Tanks():
        t1, v1, nb1 = pic.tsval(pic.TANK, tid, "VC")
        t2, v2, nb2 = pic.msval(pic.TANK, tid, "VC")
    # get current volume simulation results at measurement sampling
    for tid in pic.Tanks():
        t3, v3, nb3 = pic.tsvalbymts(pic.TANK, tid, "VC")
    # export as Epanet .inp
    pic.exportEpanet("model.inp")
    pic.execute("XXMEM ARC : D")
    pic.savemodel("model_xx.dat", extra_data=[("ARC (D > 149) FIN", "XX")])
    # WQ source data optional argument is a specific node - not used here
    print("\nWQ source data (input forcing and TS at nodes):")
    for n, cd, attr, t, c, nb in pic.WQSources():
        print(n, cd, attr, nb, t, c)
    print("Done.")
    # use reset() for switching model, close() to terminate
    pic.close()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

ganessa-2.4.6-cp313-cp313-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.13 Windows x86-64

ganessa-2.4.6-cp313-cp313-win32.whl (2.7 MB view details)

Uploaded CPython 3.13 Windows x86

ganessa-2.4.6-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12 Windows x86-64

ganessa-2.4.6-cp312-cp312-win32.whl (2.5 MB view details)

Uploaded CPython 3.12 Windows x86

ganessa-2.4.6-cp311-cp311-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.11 Windows x86-64

ganessa-2.4.6-cp311-cp311-win32.whl (3.8 MB view details)

Uploaded CPython 3.11 Windows x86

ganessa-2.4.6-cp310-cp310-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.10 Windows x86-64

ganessa-2.4.6-cp310-cp310-win32.whl (3.9 MB view details)

Uploaded CPython 3.10 Windows x86

ganessa-2.4.6-cp39-cp39-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.9 Windows x86-64

ganessa-2.4.6-cp39-cp39-win32.whl (3.9 MB view details)

Uploaded CPython 3.9 Windows x86

ganessa-2.4.6-cp38-cp38-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.8 Windows x86-64

ganessa-2.4.6-cp38-cp38-win32.whl (4.4 MB view details)

Uploaded CPython 3.8 Windows x86

File details

Details for the file ganessa-2.4.6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cc629d1ff1a6a949635b6346de96fd0d2e4d0f20ea259f002da87909fd5418bc
MD5 d3405440313331a73a4174c1ed84eb46
BLAKE2b-256 22c02fe9a990f07b0cc8d8d4edfc7ad115e4da3e23b29330a7f2b4184745ef8c

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp313-cp313-win32.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp313-cp313-win32.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 84fe55848b2bda6041d59c6c1e65b4fb685ea617c905a20f3c43fe76fae0b5e8
MD5 7e69867f3e1e928b4f1d227361a6eae5
BLAKE2b-256 f75f0abe624a9a8c41d0434bb21a49ac2616107375c65bdc0d8e5f2bf03f72e4

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0bca6efd5ee24912bb725e061f8f9dad4fb9e91427455300476660abb735643d
MD5 51fb5b0d3a447fec5027bb682a70c92d
BLAKE2b-256 16985351168986e30e25ed4785703df2c0b012c403fd2243a6bd35d9e9e5ba80

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp312-cp312-win32.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp312-cp312-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 7818cd789f1c8faa6b0ed9de6e9ca8ad77a8c2eb7268319460a4b2a38d36ebcb
MD5 dc67b34b4b8c28abca268cf80d412a68
BLAKE2b-256 927d95b613cd8b582602164f786708bcbe74a286344bd50a23637f44e51b1807

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ae6ef9b3c67a257b34792617c4d645d95cf608ffb499291ea27ab640ea2f32a3
MD5 d673c04de19e9ac57a32c22ceea7e550
BLAKE2b-256 88c24425b4d15e599e34900fe5a51e79ce097c915558937897d2bbcfd813e8c3

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp311-cp311-win32.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp311-cp311-win32.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 ce38adbbb7e06c01e375351a89f356f0761de6b7506a9e64604de7164f03017b
MD5 028e20fef5cd85d770bd88d3c4dcf335
BLAKE2b-256 c8bfeefc2dd89fdeed58198edc05c484b88c1eaafef890100fb5071d44e74b25

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a8adfb97a66d2cda3a6e013043598442481781ae64752ac58fecf2313b07265c
MD5 c27a43fee860cdd61f03b707662b4a8a
BLAKE2b-256 977a56248e915f387a25d0d174c7e34b1990421d5d4854ca52cf1de056777cf4

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp310-cp310-win32.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp310-cp310-win32.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 18af71054e92dcf87941162664db285277b82ae5ec02699e42e79f58a36089dd
MD5 3b8932482a9ec020e97a8bf78c83eb20
BLAKE2b-256 3ec2345346613f958f7d21db3d2babbbb2db676c08fa22222a8d365890e81baf

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 971b407607a5f0ea158a12072f49b67652ff2add7f071f02ff92872f7e23d752
MD5 76b42de072eaa9fe065f871bb0b9965f
BLAKE2b-256 f1b845ab4f1cf8d928581815888afdd6a0e4865d18f329042db8c57706c7b7ac

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp39-cp39-win32.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp39-cp39-win32.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 9a59b3cceb92489aab5ab688dd5612ffbad8f1617bb40a4c44abab11f279268c
MD5 7e245a980058dde77f4eda695541a77c
BLAKE2b-256 abfaab806730ca090d413527b2566d8c255f77b22dc08e44a2b34ef8fecf7e98

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 16fe4b65719a01089546e25462df06e05f4183507d46c31113e0ea7dc5ee5959
MD5 91689cbef1db99da525f9b1ca8ae1e81
BLAKE2b-256 14ad6382353601aed2532516f18cc8f1876faaca580ca44b2b6fa456aa09187c

See more details on using hashes here.

File details

Details for the file ganessa-2.4.6-cp38-cp38-win32.whl.

File metadata

  • Download URL: ganessa-2.4.6-cp38-cp38-win32.whl
  • Upload date:
  • Size: 4.4 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for ganessa-2.4.6-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 7111186deb5156ab02d6becd0ee0a77ec33290ef81dd896ecb752962d4e5af42
MD5 e14a3a9ac9b80d6c4989f028a1567e39
BLAKE2b-256 44a1ee472bba15a989569c3bbbae457953235b1a99745d8b37503c0a0d020c89

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page