{ "info": { "author": "Foley Lab", "author_email": "foleyj10@wpunj.edu", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows :: Windows 10", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3" ], "description": "\"drawing\" \nPioneering the design of materials for harnessing heat.\n\n## Overview\nWPTherml stands for **W**illiam **P**aterson University's tool for **Th**ermal **E**nergy and **R**adiation management with **M**ulti **L**ayer nanostructures.\nThe vision of this software package is to provide an easy-to-use platform for the design of materials with tailored optical and thermal properties for\nthe vast number of energy applications where control of absorption and emission of radiation, or conversion of heat to radiation or vice versa, is paramount.\nThe optical properties are treated within classical electrodynamics, and the current version uses the Transfer Matrix Method to rigorously solve Maxwell's equations\nfor layered isotropic media. WPTherml was conceived and developed by the [Foley Lab](https://foleylab.github.io) at William Paterson University. More details of the Transfer Matrix equations, along will the full mathematical formulation currently implemented in WPTherml, can be found in\nthe [documentation](https://github.com/FoleyLab/wptherml/blob/master/docs/Equations.pdf).\n\n## Quick Start\n- WPTherml is written in Python 3 and requires the numpy, scipy, and matplotlib packages. Current installation of the Anaconda Python 3 package should provide all you need \non Windows, Mac, or Linux platforms\n- To install from github: \n * `git clone https://github.com/FoleyLab/wptherml.git`\n * `cd wptherml`\n * `python3 setup.py install`\n\n- To run unit tests from cloned repository:\n * `cd test`\n * `python3 -m pytest test.py`\n\n- The test script for running unit tests can be downloaded [here](https://github.com/FoleyLab/wptherml/blob/master/example/test/test.py)\n\n- To install with pip3:\n * `pip3 install wptherml`\n\n\n- Open a new .py file in your favorite text editor or IDE, e.g.\n\n`vim example.py`\n\nThe capabilities of this package are contained within a class called multilayer. A basic example \nof a script that imports the multilayer class, computes the reflectivity of 20 nm gold film coated with 50 nm of \nTiO2 and 100 nm SiO2, and plots\nit using pyplot follows:\n\n```python\nfrom wptherml.wpml import multilayer\nfrom matplotlib import pyplot as plt\n\n### dictionary that stores basic properties \n### of the multilayer structure you want to simulate\nstructure = {\n ### actual materials the structure is made from... note terminal layers are air and\n \t### top-side layer (layer upon which light is incident) is SiO2.\n ### Refractive index values are stored in the attribute self.n\n 'Material_List': ['Air', 'SiO2', 'TiO2', 'Au', 'Air'],\n ### thickness of each layer... terminal layers must be set to zero\n ### values are stored in attribute self.d\n 'Thickness_List': [0, 100e-9, 50e-9, 20e-9, 0],\n ### range of wavelengths optical properties will be calculated for\n ### values are stored in the array self.lam\n 'Lambda_List': [400e-9, 800e-9, 1000]\n }\n\n### create the instance called coated_au_film\ncoated_au_film = multilayer(structure)\n\n### create a plot of the reflectivity of the coated au film - use red lines\n### the wavelengths are stored in SI units so we will multiply by 1e9 to \n### plot them in nanometers\nplt.plot(1e9*coated_au_film.lambda_array, coated_au_film.reflectivity_array, 'red')\nplt.show()\n```\n{: .language-python}\n\n- Save this script and run it either in the terminal as\n\n`python3 example.py`\n\nwhere example.py is the name of the file you created, or if you were doing this in an IDE, execute it within your IDE!\n\nThe schematic that illustrates the above example is shown in the figure below. Note the ordering of the \nlayers in the picture and how they are specified through Material_List and Thickness_List relative to \nthe incident, reflected, transmitted, and thermally-emitted light.\n\n\"drawing\"\n\n\nThere are illustrative examples of using the features of the multilayer class contained in Jupyter notebooks within this repository, including:\n\n- [Validation of Basic Optical Properties](https://github.com/FoleyLab/wptherml/blob/master/example/Validate_Fresnel.ipynb)\n\n- [Examples of Computing Basic Optical Properties](https://github.com/FoleyLab/wptherml/blob/master/example/Example1.ipynb)\n\n- [Modeling Incandescent Sources](https://github.com/FoleyLab/wptherml/blob/master/example/Example2.ipynb)\n\n- [Modeling Radiative Cooling Surfaces](https://github.com/FoleyLab/wptherml/blob/master/example/Validate_Cooling.ipynb)\n\n- [Video Demo for Radiative Cooling](https://youtu.be/LC4TrnB8JK4)\n\nMore will be added in the near future!\n\n\n## Playlist\nThe developers of WPTherml compiled a thematic [Spotify Playlist called \"Everything Thermal\"](https://open.spotify.com/playlist/1Vb7MV4WwjOMMHLbrX4TNN); we hope it will inspire you to imagine new possibilities for \nharnessing heat and thermal radiation!\n\n## Features List\n1. Computes Reflectivity, Transmissivity, and Absorptivity/Emissivity spectrum of arbitrary multi-layered planar structures using the Transfer Matrix Method\n2. Computes Thermal Emission spectrum at a given temperature of multi-layer structure as emissivity * Blackbody spectrum \n3. Computes solar power absorbed from absorptivity * AM1.5 spectrum\n4. From the quantities above, the following performance-related quantities can be computed for various thermal-related applications:\n * Spectral Efficiency of (S)TPV Emitters for a given PV\n * Useful Power Density (S)TPV Emitters for a given PV\n * Short Circuit Current Density (S)TPV Emitter for a given PV\n * TPV Efficiency (S)TPV Emitters for a given PV\n * Absorber Efficiency for STPV Absorbers for a given concentration factor\n * Luminous Efficiency/Luminous Efficacy of Incandescent bulb filaments\n * Cooling Power for day-time radiative cooling for a given ambient temperature and temperature of the multi-layer\n5. From optical quantities, the following analysis can be performed\n * Identify Surface Plasmon Polariton modes\n * Identify Perfectly Absorbing modes\n * Rendering of color of a multi-layer at cool temperatures and at elevated temperatures\n\nThe calculations of the quantities above are facilitated by a class called *multilayer*. The *multilayer* class parses a dictionary for key \nstructural data like the material and thicknesses that comprise the multi-layer structure being modeled, the types of applications one wants to\nconsider the multi-layer structure for. The following is the complete list of dictionary keys the *multilayer* class will recognize, along with\nthe data the user can supply in association with each key:\n```python\n'Lambda_List' # a list of three floats that includes in order (i) shortest wavelength in meters, (ii) longest wavelength in meters, and (iii) total number of wavelengths where you would like the optical quantities to be evaluated. (Default is [400e-9,6000e-9,1000])\n\n'Thickness_List' # a list of floats that specify the thickness in meters of each layer. Note that the terminal layers (first and last) must have thickness of 0. (Default is [0, 900e-9, 0].)\n\n'Material_List' # a list of strings that specify the materials in each layer (Default is ['Air', 'W', 'Air']. \nThe following strings are currently recognized for the following supported materials:\n * 'Air' - keyword for Air\n * 'SiO2' - keyword for Glass\n * 'HfO2' - keyword for Hafnium Oxide\n * 'Al2O3' - keyword for Aluminum Oxide\n * 'TiO2' - keyword for Titanium Oxide\n * 'AlN' - keyword for Aluminum Nitride\n * 'TiN' - keyword for Titanium Nitride\n * 'Ag' - keyword for Silver\n * 'Au' - keyword for Gold\n * 'Pd' - keyword for Palladium\n * 'Pt' - keyword for Platinum\n * 'W' - keyword for Tungsten\n\n'Temperature' # a float specifying the temperature of the multi-layer structure in Kelvin. (Default is 300 K)\n\n'PV_Temperature' # a float specifying the temperature of a PV cell in a (S)TPV device in Kelvin. (Default is 300 K).\n\n'Ambient_Temperature' # a float specifying the ambient temperature in Kelvin for radiative cooling applications. (Default is 300 K).\n\n'STPV_EMIT' # an int where '1' means compute properties associated with (S)TPV emitters. (Default is 0, do not compute these quantities).\n\n'STPV_ABS' # an int where '1' means compute properties associated with STPV/Concentrated Solar absorbers. (Default is 0).\n\n'COOLING' # an int where '1' means compute properties associated with radiative cooling. (Default is 0).\n\n'LIGHTBULB' # an int where '1' means compute properties associated with incandescent sources. (Default is 0).\n\n'COLOR' # an int where '1' means compute and display the ambient and thermal color of a structure. (Default is 0).\n\n'EXPLICIT_ANGLE' # an int where '1' means compute the optical properties and thermal emission at a range of angles and, when applicable, compute performance properties with explicit angular dependence. (Default is 0, meaning most quantities will be computed assuming the emissivity does not depend upon angle.)\n\n'DEG' # an int that specifies the number of different angles that will be considered \nin the calculation of optical and thermal emission properties as a function of angle. (Default is 7, which has been observed to give reasonably good accuracy when all angular integrals are performed using Gauss-Legendre quadrature).\n```\n{: .language-python}\n## Method and attribute list for multilayer class\nGiven the input parameters specified above, the *multilayer* class uses different methods to compute properties relevant for thermal applications, and those properties are stored as attributes\nof the *multilayer* object. The following is a list of methods of the *multilayer* class and their related attributes:\n\n\n```python\n\tdef inline_structure(structure):\n \t### a method to parse input parameters from a dictionary (here called structure, all currently-supported dictionary \n \t### keys are defined above. This method is called by the __init__ and defines the following attributes:\n\n\tself.lambda_array \t# the list of wavelengths in meters that will be used to evaluate optical and thermal spectra\n\tself.d\t\t \t# the list of thicknesses that define the geometry of the multilayer\n\tself.matlist \t# the list of strings that specify the materials\n\tself.n\t\t \t# the 2D arrays of refractive index values for each material for each wavelength (inner index specifies material, outter index wavelength)\n\tself.T_ml \t# the temperature of the multi-layer in Kelvin\n\tself.T_cell \t# the temperature of the PV cell in Kelvin\n\tself.T_amb \t# the ambient temperature in Kelvin\n\tself.stpv_emitter_calc # the flag that determines if (S)TPV emitter properties will be computed\n\tself.stpv_absorber_calc # the flag that determines if (S)TPV absorber properties will be computed\n\tself.cooling_calc \t# the flag that determines if radiative cooling properties will be computed\n\tself.lightbulb_calc # the flag that determines if incandescent properties will be computed\n\tself.color_calc \t# the flag that determines if colors will be rendered\n\tself.explicit_angle \t# the flag that determines if explicit angle-dependence of optical properties will be considered\n\tself.deg\t\t# the number of different angles that will be computed for angle-dependent optical properties\n ```\n{: .language-python}\nIn addition to the attributes that are explicitly set by parsing user input, several more attributes that are arrays will be \nallocated based on attributes defined by inline_structure:\n```python\n\t### The following are always created\n\tself.reflectivity_array \t# initialized as an array of zeros the same length as self.lambda_array\n\tself.transmissivity_array\t# initialized as an array of zeros the same length as self.lambda_array\n\tself.emissivity_array\t\t# initialized as an array of zeros the same length as self.lambda_array\n\tself.thermal_emission_array\t# initialized as an array of zeros the same length as self.lambda_array\n\n\t### The following are created if self.explicit_angle == 1\n\tself.x\t\t\t\t# points from Gauss-Legendre grid of degree self.deg from 0 to 1\n\tself.t\t\t\t\t# self.deg angles on Gauss-Legendre grid transformed to be between 0 and pi/2\n\tself.w\t\t\t\t# self.deg weights from Gauss-Legendre grid transformed to be between 0 and pi/2\n\n\tself.reflectivity_array_p # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n self.reflectivity_array_s # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n self.transmissivity_array_p # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n self.transmissivity_array_s # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n self.emissivity_array_p # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n self.emissivity_array_s # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n self.thermal_emission_array_p # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n self.thermal_emission_array_s # initialized as a 2D array of zeros, inner dimension same as self.deg and outter same as self.lambda_array\n```\n{: .language-python}\n```python\n''' Method to compute optical properties of reflectivity, transmissivity, and \nemissivity of structure as a function of wavelength assuming normal incidence '''\ndef fresnel()\n\n### Upon execution, the following arrays are filled with their respective values\n### for every wavelength in self.lambda_array\nself.reflectivity_array\nself.transmissivity_array\nself.emissivity_array\n```\n{: .language-python}\n```python\n''' Method to compute optical properties of reflectivity, transmissivity, and \nemissivity of structure as a function of wavelength and angle, both p- and s-polarizations\nare considered '''\ndef fresnel_ea()\n\n### Upon execution, the following arrays are filled with their respective values\n### for every wavelength in self.lambda_array and every angle in self.t\nself.reflectivity_array_p\nself.reflectivity_array_s\nself.transmissivity_array_p\nself.transmissivity_array_s\nself.emissivity_array_p\nself.emissivity_array_s\n```\n{: .language-python}\n```python\n''' Method to compute thermal emission spectrum of a structure at a given temperature;\nnote temperature specified by self.T_ml '''\ndef thermal_emission()\n\n### Upon execution, the following arrays are computed for every wavelength in self.lambda_array\n### for temperature given by self.T_ml\nself.BBs # Blackbody spectrum\nself.thermal_emission_array ## thermal emission of structure defined as Blackbody * emissivity\n```\n{: .language-python}\n\n```python\n''' Method to compute thermal emission spectrum of a structure at a given temperature for a range of angles '''\ndef thermal_emission_ea()\n\n### Upon execution, the following arrays are computed for every wavelength in self.lambda_array\n### and every angle in self.t for temperature given by self.T_ml\nself.thermal_emission_array_p ## thermal emission of structure defined as Blackbody * p-polarized emissivity\nself.thermal_emission_array_s ## thermal emission of structure defined as Blackbody * s-polarized emissivity\n```\n{: .language-python}\n```python\n''' Method to compute optical properties of reflectivity, transmissivity, \nand emissivity as a function of angle for a given polarization self.pol and wavelength lambda_0 '''\ndef angular_fresnel(self, lambda_0)\n\n### Upon execution, the following arrays are computed for 180 angles between 0 and pi/2\nself.r_vs_theta # reflectivity\nself.t_vs_theta # transmissivity\nself.eps_vs_theta # emissivity\n```\n{: .language-python}\n```python\n''' The following three methods compute figures of merit relevant for STPV emitters for a given\n temperature self.T_ml, PV type self.PV and bandgap self.lbg, and PV temperature self.T_cell.\n These methods assume the emissivity does not change with angle, and perform an analytic\n integration over solid angles that make the computations much quicker, though also less realistic.'''\nself.stpv_se() # compute the spectral efficiency and stores it in the attribute self.spectral_efficiency_val\nself.stpv_pd() # computes the useful power density and stores it in the attribute self.power_density_val\nself.stpv_etatpv() # computes the TPV emitter efficiency and stores it in the attribute self.tpv_efficiency_val\n```\n{: .language-python}\n```python\n''' The following methods compute figures of merit relevant for STPV emitters for a given\n temperature self.T_ml, PV type self.PV and bandgap self.lbg, and PV temperature self.T_cell.\n These methods explicitly account for the angular dependence of the emissivity, making these calculations\n more realistic but also more time consuming. '''\nself.stpv_se_ea() # compute the spectral efficiency and stores it in the attribute self.spectral_efficiency_val\nself.stpv_pd_ea() # computes the useful power density and stores it in the attribute self.power_density_val\nself.stpv_etatpv_ea() # computes the TPV emitter efficiency and stores it in the attribute self.tpv_efficiency_val\n```\n{: .language-python}\n```python\n''' The following methods compute the absorber efficiency of a STPV or concentrated solar absorber at a \n given temperature self.T_ml '''\ndef stpv_etaabs_ea() # computes absorber efficiency and stores it in the attribute self.absorber_efficiency_val\n```\n{: .language-python}\n```python\n''' method to render color of a structure from its thermal emission at a given temperature self.T_ml '''\ndef thermal_color()\n''' method to render color of a structure from its reflection spectrum '''\ndef ambient_color()\n''' method to render color in a +/- 5nm band around the wavelength lambda '''\ndef pure_color(lambda)\n```\n{: .language-python}\n```python\n''' Method to compute the luminous efficiency of a structure at temperature self.T_ml.\n Stores value to self.luminous_efficiency_val '''\ndef luminous_efficiency()\n\n''' Method to compute the radiative cooling power of a structure at temperature self.T_ml in ambient\n temperature self.T_amb while being illuminated by the AM1.5 spectrum. Upon execution, the relevant\n values are stored to the attributes self.radiative_power_val (this is the flux that cools the structure),\n self.atmospheric_power_val (part of flux that warms the structure) and self.solar_power_val (part of the flux \n that warms the structure).'''\ndef cooling_power()\n\n\n''' Method to add a layer to the structure; material of the layer to be added will be specified by 'material' argument\n and thickness of the layer will be specified by the 'thickness' argument. The layer will be inserted after\n the 'layer_number' layer. The method will also update spectral and performance quantities after the layer is\n added; the instance name will be preserved after execution, so this is like a mutation operation.'''\ndef insert_layer(layer_number, material, thickness)\n\n''' Method to extract the array of refractive index values associated with a specific layer; the method returns \n this array. '''\ndef layer_ri(layer_number)\n\n''' Method to define the refractive index of an existing layer (specified by layer_number) as an alloy\n of material_1 and material_2 with a specified volume_fraction of material_1 in material_2 according\n to either the Maxwell-Garnett or the Bruggeman effective medium theory. Using 'Bruggeman' as the\n argument for model will use Bruggeman's effective medium theory, while any other string will default\n to Maxwell-Garnett theory. Optical properties and performance figures are NOT updated upon execution of this method.'''\ndef layer_alloy(layer_number, volume_fraction, material_1, material_2, model)\n\n''' Method to define the refractive index of an existing layer (specified by layer number) as a single\n complex number (specified by refractive_index_value) for all wavelengths. Optical properties and performance figures are NOT updated upon execution of this method.'''\ndef layer_static_ri(layer_number, refractive_index_value)\n\n''' Method to compute complex wavevector magnitude associated with the surface plasmon polariton mode on a given multi-layer\n structure at a wavelength specified by the int wavelength_index, where self.lambda_array[wavelength_index] returns\n the wavelength you are interested in in meters. Upon completion, the spp wavevector is stored in\n self.spp_resonance_val '''\ndef find_spp(wavelength_index)\n\n''' Method to compute complex wavevector magnitude associated with the perfectly absorbing mode on a given multi-layer\n structure at a wavelength specified by the int wavelength_index, where self.lambda_array[wavelength_index] returns\n the wavelength you are interested in in meters. Upon completion, the pa wavevector is stored in\n self.pa_resonance_val '''\ndef find_pa()\n```\n{: .language-python}\n\n## Extending the multilayer class\n\nThe multilayer class should provide a convenient mechanism for extension of the package to include \nadditional applications (which might require different manipulations of the Fresnel \nquantities stored as the attributes self.reflectivity_array, self.emissivity_array, \nself.transmissivity_array, or the thermal emission stored as the attribute \nself.thermal_emission_array), or to include different classes of structures \n(non-planar structures, for example, where the same attributes self.reflectivity_array, etc., \nwould be computed by a different method than the transfer matrix method). The typical \nworkflow to extend the capabilities of the package could include\n\n- Identifying any new properties that will be computed by the \nextension and adding appropriate attributes to the multilayer class\n- Adding one or more functions to the libraries (stpvlib, etc.) \nthat manipulates the Fresnel and/or thermal emission quantites as \nrequired to compute the new desired property\n- Adding one or more multilayer methods to call the new library functions \nand store the resulting data in new or existing multilayer attributes as appropriate.\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://foleylab.github.io/wptherml/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "wptherml", "package_url": "https://pypi.org/project/wptherml/", "platform": "", "project_url": "https://pypi.org/project/wptherml/", "project_urls": { "Homepage": "https://foleylab.github.io/wptherml/" }, "release_url": "https://pypi.org/project/wptherml/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "A Python package for the design of materials for harnessing heat.", "version": "1.0.0" }, "last_serial": 5703945, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "5d15b03435d321d8bb005597cba6349a", "sha256": "404ef52f546dd87b498afd25df67234e3c53d128add01af3a615931538a16182" }, "downloads": -1, "filename": "wptherml-1.0.0-py3.7.egg", "has_sig": false, "md5_digest": "5d15b03435d321d8bb005597cba6349a", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 1098124, "upload_time": "2019-08-20T15:23:17", "url": "https://files.pythonhosted.org/packages/85/de/244c7fd0b88fd3444424817b496a681d89ee7480a5e1f18a9675e508a106/wptherml-1.0.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "e2d501e23b4320ea180e1141d5c3d4fa", "sha256": "042acd5ccc1482af6a7163be36cf19a635df344d226304ba78654e24e5a7b961" }, "downloads": -1, "filename": "wptherml-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e2d501e23b4320ea180e1141d5c3d4fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1085076, "upload_time": "2019-08-20T15:23:14", "url": "https://files.pythonhosted.org/packages/20/2e/484f8af5ba3516407d226cdd2aec810aab905b947d2a4d49c933ae4932e9/wptherml-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "279f5e70ace4cebd79fd2693922cc9ec", "sha256": "e5296840be7037a903a448c5df9034001de9dbd625e714779b0e9368eb591e4d" }, "downloads": -1, "filename": "wptherml-1.0.0.tar.gz", "has_sig": false, "md5_digest": "279f5e70ace4cebd79fd2693922cc9ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3263390, "upload_time": "2019-08-20T15:23:19", "url": "https://files.pythonhosted.org/packages/48/f9/6d9fd4f40a32532d8f4a406efef3a6ecedda0078f147fa68e04dd14e9f4b/wptherml-1.0.0.tar.gz" } ], "1.0.11b0": [ { "comment_text": "", "digests": { "md5": "329c16ed4d7881ac091e74e78c2b8c1f", "sha256": "2f441b90e47c7c56a9cef577bde81871e6694498a41e21c2df5bf6d94acddc70" }, "downloads": -1, "filename": "wptherml-1.0.11b0-py3-none-any.whl", "has_sig": false, "md5_digest": "329c16ed4d7881ac091e74e78c2b8c1f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1423810, "upload_time": "2019-07-01T10:26:39", "url": "https://files.pythonhosted.org/packages/7f/e9/f735b263c64674cbb41adcd89871385bd9274478b94fe1db4ae68546c3e0/wptherml-1.0.11b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df245d42f74e499270dae0b5b23099ff", "sha256": "3ca04e894914b211ff2ba98e875817ccbd52520d2e4c81b8cac53a4fe23b1b68" }, "downloads": -1, "filename": "wptherml-1.0.11b0.tar.gz", "has_sig": false, "md5_digest": "df245d42f74e499270dae0b5b23099ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5780068, "upload_time": "2019-07-01T10:26:44", "url": "https://files.pythonhosted.org/packages/0a/83/000089f1b77b8064d29858d497f1a73636480bb60cea4c8457201351134f/wptherml-1.0.11b0.tar.gz" } ], "1.0.12b0": [ { "comment_text": "", "digests": { "md5": "f939d603aa3d66382393877463c5ba53", "sha256": "eb7d5db06208ee4d472158964aa2968b2cfd0198c93d551ce9077f92db6d27b9" }, "downloads": -1, "filename": "wptherml-1.0.12b0-py3-none-any.whl", "has_sig": false, "md5_digest": "f939d603aa3d66382393877463c5ba53", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1614282, "upload_time": "2019-07-05T13:34:46", "url": "https://files.pythonhosted.org/packages/8a/e3/335e8229b8678f708cb0a273c92ab50c023f2b2dd55c0fbff73c94a60895/wptherml-1.0.12b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8bd962e4f35d396ac8cc720e2d86134b", "sha256": "6dcb41b550a466266cbb12da43183ad5005ab187bb193698f323c0af1e114d37" }, "downloads": -1, "filename": "wptherml-1.0.12b0.tar.gz", "has_sig": false, "md5_digest": "8bd962e4f35d396ac8cc720e2d86134b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3797783, "upload_time": "2019-07-05T13:34:50", "url": "https://files.pythonhosted.org/packages/15/eb/cca635e561441b8398857a49fb48f3e01327963327ddb57a123e9f2c3369/wptherml-1.0.12b0.tar.gz" } ], "1.0.13b0": [ { "comment_text": "", "digests": { "md5": "6de59b93a7eb853a1fe25acc84b83700", "sha256": "e1458a3dc386a913598f11886582be968798851bc611dcfb9bccab6415c08c60" }, "downloads": -1, "filename": "wptherml-1.0.13b0-py3-none-any.whl", "has_sig": false, "md5_digest": "6de59b93a7eb853a1fe25acc84b83700", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1085955, "upload_time": "2019-07-10T14:43:21", "url": "https://files.pythonhosted.org/packages/9f/4b/af15ca52db105fdd285be3d404bd0fbf57988c022eddbaa24ebeb1586730/wptherml-1.0.13b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96abb63c0fc6d288a976d11a70730d92", "sha256": "c750a3898a07e5ce9a6945cce4f8d8a41ecdd08094a359f2c130bece9150a6b3" }, "downloads": -1, "filename": "wptherml-1.0.13b0.tar.gz", "has_sig": false, "md5_digest": "96abb63c0fc6d288a976d11a70730d92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3270990, "upload_time": "2019-07-10T14:43:41", "url": "https://files.pythonhosted.org/packages/44/8c/aad53d6cdfda80a00974ae7d8b5fa0066f5ebe996c93f8489bbea729d75a/wptherml-1.0.13b0.tar.gz" } ], "1.0.14b0": [ { "comment_text": "", "digests": { "md5": "8ab003df1fe83466778ee6a9b2c51976", "sha256": "08e692a15c0707546480beb9a1598dfb8bb45c82609b9e3ea8c09427b978771f" }, "downloads": -1, "filename": "wptherml-1.0.14b0-py3-none-any.whl", "has_sig": false, "md5_digest": "8ab003df1fe83466778ee6a9b2c51976", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1091778, "upload_time": "2019-08-03T16:39:39", "url": "https://files.pythonhosted.org/packages/ab/c1/a781c6958ea28a24738c5612053cb168f6e575672ea9dfc7b927a69c6e8e/wptherml-1.0.14b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d81eb13a80dfc596d8dbdc62872601c0", "sha256": "778a4dd2ee4d155d31f68bead2789572ed14928f9aed19f039a1c12dbdc0b55e" }, "downloads": -1, "filename": "wptherml-1.0.14b0.tar.gz", "has_sig": false, "md5_digest": "d81eb13a80dfc596d8dbdc62872601c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3271006, "upload_time": "2019-08-03T16:39:43", "url": "https://files.pythonhosted.org/packages/d0/2d/3ed880777b7c827872108457619188f53c5de6dc6354933a1cdbb522a590/wptherml-1.0.14b0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5d15b03435d321d8bb005597cba6349a", "sha256": "404ef52f546dd87b498afd25df67234e3c53d128add01af3a615931538a16182" }, "downloads": -1, "filename": "wptherml-1.0.0-py3.7.egg", "has_sig": false, "md5_digest": "5d15b03435d321d8bb005597cba6349a", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 1098124, "upload_time": "2019-08-20T15:23:17", "url": "https://files.pythonhosted.org/packages/85/de/244c7fd0b88fd3444424817b496a681d89ee7480a5e1f18a9675e508a106/wptherml-1.0.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "e2d501e23b4320ea180e1141d5c3d4fa", "sha256": "042acd5ccc1482af6a7163be36cf19a635df344d226304ba78654e24e5a7b961" }, "downloads": -1, "filename": "wptherml-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e2d501e23b4320ea180e1141d5c3d4fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1085076, "upload_time": "2019-08-20T15:23:14", "url": "https://files.pythonhosted.org/packages/20/2e/484f8af5ba3516407d226cdd2aec810aab905b947d2a4d49c933ae4932e9/wptherml-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "279f5e70ace4cebd79fd2693922cc9ec", "sha256": "e5296840be7037a903a448c5df9034001de9dbd625e714779b0e9368eb591e4d" }, "downloads": -1, "filename": "wptherml-1.0.0.tar.gz", "has_sig": false, "md5_digest": "279f5e70ace4cebd79fd2693922cc9ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3263390, "upload_time": "2019-08-20T15:23:19", "url": "https://files.pythonhosted.org/packages/48/f9/6d9fd4f40a32532d8f4a406efef3a6ecedda0078f147fa68e04dd14e9f4b/wptherml-1.0.0.tar.gz" } ] }