{ "info": { "author": "Peter Sharpe", "author_email": "peterdsharpe@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering :: Physics" ], "description": "# [AeroSandbox](https://peterdsharpe.github.io/AeroSandbox/) \nby [Peter Sharpe](https://peterdsharpe.github.io) ()\n\n\n## About\nAeroSandbox is a Python package for aircraft design optimization, fully-coupled viscous/inviscid 3D aerodynamics, and reverse-mode automatic differentiation for computing gradients of design variables.\n\nThe 10-second elevator pitch: **In half a second, you can calculate not only the aerodynamic performance of an airplane, but also the sensitivity of aerodynamic performance with respect to an effectively-infinite number of design variables.** This can be used to perform gradient-based aircraft design optimization extremely quickly.\n\nWork in progress!\n\n\n![VLM3 Image](media/images/vlm3_with_control_surfaces.png)\n*VLM3 simulation of a glider, aileron deflections of +-30\u00b0. Runtime of 0.35 sec on a typical laptop (i7-8750H).*\n\n![PANEL1 Image](media/images/panel1_naca4412.png)\n*PANEL1 simulation of a wing (extruded NACA2412, \u03b1=15\u00b0, AR=4). Note the strong three-dimensionality of the flow near the tip.*\n\n## Getting Started\n\n### Installation\n\nThere are several easy ways to get started with AeroSandbox! (Assuming you already have Python >=3.7 installed, preferably via the [Anaconda distribution](https://www.anaconda.com/distribution/#download-section) - if not, do this first.)\n\n1. (Recommended) Download the latest release here: [https://github.com/peterdsharpe/AeroSandbox/releases](https://github.com/peterdsharpe/AeroSandbox/releases). Then, run \"pip install AeroSandbox\" in your command prompt to ensure that all dependencies are satisfied.\n\n2. If you just want the raw package (and no test cases or examples), install by simply entering \"pip install AeroSandbox\" into your terminal. \n\n3. Both of the above options will download the latest official release of AeroSandbox. If you'd rather get a nightly/dev version (which has more features but may be buggy), clone or download directly from [the AeroSandbox GitHub page](https://github.com/peterdsharpe/AeroSandbox).\n\nThere are many example cases you can try out in the /examples/ directory! Specifically, try running \"/examples/vlm3_conventional.py\".\n\n### Usage\nAeroSandbox is designed to have extremely intuitive, high-level, and human-readable code. You (yes, you!) can probably learn to analyze a simple airplane and visualize airflow around it within 5 minutes of downloading AeroSandbox. For example, here is all the code that is needed to design a glider, analyze its aerodynamics in flight, and visualize it (found in \"/examples/vlm3_conventional.py\"):\n\n```python\nfrom aerosandbox import *\n\nglider = Airplane(\n name=\"Peter's Glider\",\n xyz_ref=[0, 0, 0], # CG location\n wings=[\n Wing(\n name=\"Main Wing\",\n xyz_le=[0, 0, 0], # Coordinates of the wing's leading edge\n symmetric=True,\n xsecs=[ # The wing's cross (\"X\") sections\n WingXSec( # Root\n xyz_le=[0, 0, 0], # Coordinates of the XSec's leading edge, relative to the wing's leading edge.\n chord=0.18,\n twist=2, # degrees\n airfoil=Airfoil(name=\"naca4412\"),\n control_surface_type='symmetric', # Flap # Control surfaces are applied between a given XSec and the next one.\n control_surface_deflection=0, # degrees\n control_surface_hinge_point=0.75 # as chord fraction\n ),\n WingXSec( # Mid\n xyz_le=[0.01, 0.5, 0],\n chord=0.16,\n twist=0,\n airfoil=Airfoil(name=\"naca4412\"),\n control_surface_type='asymmetric', # Aileron\n control_surface_deflection=0,\n control_surface_hinge_point=0.75\n ),\n WingXSec( # Tip\n xyz_le=[0.08, 1, 0.1],\n chord=0.08,\n twist=-2,\n airfoil=Airfoil(name=\"naca4412\"),\n )\n ]\n ),\n Wing(\n name=\"Horizontal Stabilizer\",\n xyz_le=[0.6, 0, 0.1],\n symmetric=True,\n xsecs=[\n WingXSec( # root\n xyz_le=[0, 0, 0],\n chord=0.1,\n twist=-10,\n airfoil=Airfoil(name=\"naca0012\"),\n control_surface_type='symmetric', # Elevator\n control_surface_deflection=0,\n control_surface_hinge_point=0.75\n ),\n WingXSec( # tip\n xyz_le=[0.02, 0.17, 0],\n chord=0.08,\n twist=-10,\n airfoil=Airfoil(name=\"naca0012\")\n )\n ]\n ),\n Wing(\n name=\"Vertical Stabilizer\",\n xyz_le=[0.6, 0, 0.15],\n symmetric=False,\n xsecs=[\n WingXSec(\n xyz_le=[0, 0, 0],\n chord=0.1,\n twist=0,\n airfoil=Airfoil(name=\"naca0012\"),\n control_surface_type='symmetric', # Rudder\n control_surface_deflection=0,\n control_surface_hinge_point=0.75\n ),\n WingXSec(\n xyz_le=[0.04, 0, 0.15],\n chord=0.06,\n twist=0,\n airfoil=Airfoil(name=\"naca0012\")\n )\n ]\n )\n ]\n)\n\naero_problem = vlm3( # Analysis type: Vortex Lattice Method, version 3\n airplane=glider,\n op_point=OperatingPoint(\n velocity=10,\n alpha=5,\n beta=0,\n p=0,\n q=0,\n r=0,\n ),\n)\n\naero_problem.run() # Runs and prints results to console\naero_problem.draw() # Creates an interactive display of the surface pressures and streamlines\n```\n\nThe best part is that by adding just a few more lines of code, you can not only get the performance at a specified design point, but also the derivatives of any performance variable with respect to any design variable. Thanks to reverse-mode automatic differentiation, this process only requires the time of one additional flow solution, regardless of the number of design variables. For an example of this, see \"/examples/gradient_test_vlm2.py\".\n\nOne final point to note: as we're all sensible and civilized human beings here, all inputs and outputs to AeroSandbox are expressed in base metric units, or derived units thereof (meters, Newtons, meters per second, kilograms, etc.).\n\n### Dependencies\n\nThe fastest way to ensure that all dependencies are satisfied is by simply running \"pip install AeroSandbox\" in your command prompt. However, you can also install dependencies on your own if you'd like. You'll need the following libraries:\n* numpy\n* scipy\n* matplotlib\n* numba\n* autograd\n* pyvista\n\nIf you installed Python via the [Anaconda distribution](https://www.anaconda.com/distribution/#download-section), you likely have all of these except autograd. (Install this with \"pip install autograd\" in the command prompt.)\n\nOpenGL is also required for visualization, though this should already be installed on nearly every computer. (No promises if you try to run AeroSandbox on a Raspberry Pi or something!)\n\n## Current Features\n* User-friendly, concise, high-level, object-oriented structure for airplane geometry definition and analysis.\n* Fully reverse-mode AD compatible vortex-lattice method flow solver (\"VLM3\")! Very fast (~0.35s for typical problems) and fully compatible with arbitrary combinations of lifting surfaces. With this, you can get the gradient of a design space with arbitrary dimensionality almost instantly.\n\n## Purpose\nThe primary purpose for this repository is to explore existing methods for aerodynamic analysis and develop new methods within a unified code base.\n\nThis package eventually seeks to develop the following:\nAn aerodynamics tool that models flow around any general triangulated 3D shape (with non-separated flow) using strongly-coupled viscous/inviscid methods. If successful, this could be orders of magnitude faster than volume-mesh-based CFD while retaining high accuracy (XFoil is a 2D example of this).\n\nThis code is made open-source in hopes that the aerospace community can benefit from this work. I've benefitted so much from open-source aerospace tools that came before me (XFoil, AVL, QProp, GPKit, XFLR5, OpenVSP, SU2, and SUAVE, just to name a few), so I hope to pay it forward, at least in small part!\n\n## Future Goals\nIn descending order of priority/feasibility:\n* (DONE) Finish implementing a traditional VLM for simulating multiple thin lifting surfaces.\n* (DONE) Implement proper stability derivative calculation (i.e. not using finite-differencing).\n* (SKIPPING) Perhaps implement a viscous drag buildup on wings from interpolated 2D XFOIL data (a la XFLR5's method for approximation of viscous drag).\n* (SKIPPING) Perhaps implement a hybrid ring/horseshoe vortex VLM (a la XFLR5's VLM2) for simulating multiple thin lifting surfaces (hopefully with improved speed and robustness over the VLM1 approach).\n* (SKIPPING) Implement a viscous drag buildup on nearly-axisymmetric bodies (using the method detailed in Drela's TASOPT v2.00 documentation, Appendix E)\n* (SKIPPING) Perhaps consider implementing a free-wake compatible VLM model?\n* (DONE) Implement an inviscid 3D panel method for simulating multiple objects of arbitrary thickness.\n* (IN PROGRESS) Make the aforementioned 3D panel method able to use triangular panels for use with generalized geometries (e.g. blended wing bodies), given prescribed trailing edge stagnation points.\n* (IN PROGRESS) Implement a 2.5D coupled viscous/inviscid method directly using the viscous methods described in Drela's paper \"Viscous-Inviscid Analysis of Transonic and Low Reynolds Number Airfoils\". Inviscid flow would be fully 3D, while viscous flow would make the assumption of negligible spanwise flow.\n* Implement a fully 3D coupled viscous/inviscid method, compatible with triangular panels (a la Drela's IBL3 approach detailed in his paper \"Three-Dimensional Integral Boundary Layer Formulation for General Configurations\"). Ideally, the trailing edge stagnation points will be automatically identified, and nothing more than a surface triangulation along with freestream conditions will be required to compute forces and moments.\n\n\n## Usefulness\nAeroSandbox attempts to improve over existing conceptual-level aerodynamics tools. The following strengths and weaknesses are identified with existing tools, based purely off the author's experience:\n\nStrengths:\n* XFLR5: Reliability, speed, accuracy, visualization\n* AVL: Reliability, speed, accuracy, scriptability\n* Tornado: Implementation in a high-level, widely-used language (reduces dev. time and increases flexibility for users)\n* VSPAero: Rapid CAD/geometry integration, geometric flexibility\n\nWeaknesses:\n* XFLR5: Lack of scriptability, limited geometric flexibility, one-way-coupled viscous analysis\n* AVL: Single-precision calculation (low gradient accuracy), bottlenecking due to file I/O, no viscous analysis\n* Tornado: Speed, user-friendliness, no viscous analysis\n* VSPAero: Robustness, speed, accuracy, and reliability, decoupled viscous analysis\n* All tools: None of these tools are capable of reverse-mode automatic differentiation for gradient computations.\n\nWith any luck, the list of strengths and weaknesses here will help to drive AeroSandbox development to retain positive qualities and eliminate negative ones. \n\nSpecifically, the following desirable qualities (and associated quantitative metrics) have been identified:\n* Fast (for point analysis, VLM calculations should yield a solution (CL, CDi) within 5% of the Richardson-extrapolated solution in less than 1 second for the ExampleAirplanes.conventional() airplane on a typical desktop computer)\n* Accurate (in the limit of high panel density, the solution (CL, CDi) given by VLM1 must match AVL or XFLR5 to within 1%)\n* Reliable/Robust (gradients of the outputs w.r.t. inputs are always finite and physical)\n* User-friendly (eventually, a GUI will be created, and AeroSandbox will optionally ship as a packaged executable)\n* Scriptable (the code will be object-oriented; the GUI will contain a CLI)\n* Readable (every class and function will be documented; code will be PEP-8-compatible where reasonable)\n* Optimizer-friendly (design gradients and stability derivatives will be efficiently computed through automatic differentiation, not finite differencing - perhaps with the autograd library?)\n* Visualization (visualization will be provided through an OpenGL-compatible library - perhaps PyVista?)\n\n## Donating\nIf you like this software, please consider donating to support development via PayPal at [paypal.me/peterdsharpe](https://paypal.me/peterdsharpe)! I'm a poor grad student, so every dollar you donate helps wean me off my diet of instant coffee and microwaved ramen noodles.\n\n## Bugs\nPlease, please report all bugs by creating a new issue at [https://github.com/peterdsharpe/AeroSandbox/issues](https://github.com/peterdsharpe/AeroSandbox/issues)!\n\nPlease note that, while the entirety of the codebase should be cross-platform compatible, AeroSandbox has only been tested on Windows 10 in Python 3.7 via the [Anaconda distribution](https://www.anaconda.com/distribution/#download-section).\n\n## Contributing\n\nThanks for your interest in helping with the development of AeroSandbox - contributions are always so, so welcome! If you have a change you'd like to make, the easiest way to do that is by submitting a pull request. \n\nIf you've made several additions and would like to be involved in a more long-term capacity, please message me at (pds at mit dot edu) and we can add you as a collaborator here on Github!\n\nRight now, branching is basically nonexistent. This is because there's currently only one contributor - me. As soon as this changes, we'll need to implement [proper branching](https://nvie.com/posts/a-successful-git-branching-model/). \n\n## License\n\nMIT License\n\nCopyright (c) 2019 Peter Sharpe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\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://peterdsharpe.github.io/AeroSandbox/", "keywords": "aerodynamics airplane cfd mdo mdao aircraft design aerospace optimization", "license": "", "maintainer": "", "maintainer_email": "", "name": "AeroSandbox", "package_url": "https://pypi.org/project/AeroSandbox/", "platform": "", "project_url": "https://pypi.org/project/AeroSandbox/", "project_urls": { "Bug Reports": "https://github.com/peterdsharpe/AeroSandbox/issues", "Homepage": "https://peterdsharpe.github.io/AeroSandbox/", "Source": "https://github.com/peterdsharpe/AeroSandbox" }, "release_url": "https://pypi.org/project/AeroSandbox/0.2.0/", "requires_dist": [ "pyvista", "autograd", "numpy", "numba", "matplotlib", "scipy" ], "requires_python": ">=3, <4", "summary": "A Python 3 package for playing around with aerodynamics ideas related to vortex lattice methods, coupled viscous/inviscid methods, automatic differentiation for gradient computation, aircraft design optimization, and the like.", "version": "0.2.0" }, "last_serial": 6004598, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "9df9457ce49dde9d53b7442536f68a01", "sha256": "1095cc2b2c086d18b04d4bd888cddb67af7284255ddae1c5d2203b58c4e29c79" }, "downloads": -1, "filename": "AeroSandbox-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9df9457ce49dde9d53b7442536f68a01", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3, <4", "size": 19542, "upload_time": "2019-06-25T21:42:59", "url": "https://files.pythonhosted.org/packages/8a/72/60d103400565524f674773b7e826f972d007880dcf06fdaeac7f4b37f075/AeroSandbox-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "face33c2a0882381a55155ec2cd3680f", "sha256": "a5fa5b95b9d1d979852010b8d8724ded301326a643ce59e9770fe64a62d5bb81" }, "downloads": -1, "filename": "AeroSandbox-0.1.1.tar.gz", "has_sig": false, "md5_digest": "face33c2a0882381a55155ec2cd3680f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 20011, "upload_time": "2019-06-25T21:43:01", "url": "https://files.pythonhosted.org/packages/df/ba/d9e2a7addc8814804150914e8ba3d057392bd88306614a8629d692883adc/AeroSandbox-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "344ad7880ce4f58cf4672aea051770af", "sha256": "94ce1090b20b952e872390e1fc3d189bca22c2f6ddbbee1f0e0e561ddd272891" }, "downloads": -1, "filename": "AeroSandbox-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "344ad7880ce4f58cf4672aea051770af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3, <4", "size": 24506, "upload_time": "2019-06-27T05:21:24", "url": "https://files.pythonhosted.org/packages/fb/d5/0f01e829ccf866a89dca3846b54b689781d9be0a6409f7fdc11b64019aad/AeroSandbox-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5edd6b049047b2850f05833f795867f2", "sha256": "18983ecdc2dd7075e1aa639ea1e37d3fab652e1704849d4208b9a16d191502d8" }, "downloads": -1, "filename": "AeroSandbox-0.1.2.tar.gz", "has_sig": false, "md5_digest": "5edd6b049047b2850f05833f795867f2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 25054, "upload_time": "2019-06-27T05:21:25", "url": "https://files.pythonhosted.org/packages/c9/3f/53b3b3de92b219a8473fce10e972a5dda51f6ffa01eecf0009eeb9213d96/AeroSandbox-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "7bf74e7f67ce7c2402b802bbba890ef9", "sha256": "e570f5471a18d98aa81774faf70e33d40368b0557d0cb934511f4e00029a380c" }, "downloads": -1, "filename": "AeroSandbox-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7bf74e7f67ce7c2402b802bbba890ef9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3, <4", "size": 33832, "upload_time": "2019-07-03T03:48:10", "url": "https://files.pythonhosted.org/packages/b4/9b/eba02da045eb97c7d482ec9b596e8bc9ffc7b8c56e7ec5905e028b7f12a2/AeroSandbox-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46afe6e0fd0d5a520cb279334420b4da", "sha256": "d609c6378e96b925be1955a2ccdb69d16eccdd04519aeb359d0596b78d23610a" }, "downloads": -1, "filename": "AeroSandbox-0.1.3.tar.gz", "has_sig": false, "md5_digest": "46afe6e0fd0d5a520cb279334420b4da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 34861, "upload_time": "2019-07-03T03:48:11", "url": "https://files.pythonhosted.org/packages/f2/8d/ea965bf7dc9bbb58170a157e27fe145db15636cacb92ea8f70ab28c337f0/AeroSandbox-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "3b112c234795871f967e5dc3f58ce45a", "sha256": "5c6f220df56f4e9b3ff4d21d9cbf6d7e07ca569abddc48eec438c8cdadfe66aa" }, "downloads": -1, "filename": "AeroSandbox-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3b112c234795871f967e5dc3f58ce45a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3, <4", "size": 39010, "upload_time": "2019-07-06T19:06:40", "url": "https://files.pythonhosted.org/packages/1a/51/0e8d7afba76ecbb227be6697ecdec8686c0949035c8ad819c3a24b3c6be5/AeroSandbox-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56b13cb46ab66d745728d216a9bcb2b4", "sha256": "716e1b01bc0e93d78129d368eb7b35c975a4971e6c38450cadb909cb87774d97" }, "downloads": -1, "filename": "AeroSandbox-0.1.4.tar.gz", "has_sig": false, "md5_digest": "56b13cb46ab66d745728d216a9bcb2b4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 39471, "upload_time": "2019-07-06T19:06:42", "url": "https://files.pythonhosted.org/packages/f7/2f/9fe99f519e8aaeadb724d2b77e446891d3a430cf2665cbcff416f418f75e/AeroSandbox-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "e5d7ebd25a30a60b03babc9134a27580", "sha256": "e564012b5ac33f621254462ee19c5ecb2851163b4d7053bcc431ff6f9d310517" }, "downloads": -1, "filename": "AeroSandbox-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e5d7ebd25a30a60b03babc9134a27580", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3, <4", "size": 54389, "upload_time": "2019-07-15T03:55:47", "url": "https://files.pythonhosted.org/packages/2d/ad/76e3016994fbb2a92edb174d5673c416a77ddb80f39eedbce32c2935bfee/AeroSandbox-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2489e6a68bfb3d86a8967821edad6857", "sha256": "e83c0d2cd945fc1a017762e72e43eb54f4031370fa7ec2be48f71d86462c9394" }, "downloads": -1, "filename": "AeroSandbox-0.1.5.tar.gz", "has_sig": false, "md5_digest": "2489e6a68bfb3d86a8967821edad6857", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 54544, "upload_time": "2019-07-15T03:55:49", "url": "https://files.pythonhosted.org/packages/48/cb/7aebe03c1fe04f54cb50c77cc04cc1106f6ac664acdfa203b8249eb22c06/AeroSandbox-0.1.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1fd3b054f61c2e7841582fa2ce5ce499", "sha256": "e239f0d98b2a6a3224d6e438452742885e0acedc90bf4e3c1e5d45ea6a775b2e" }, "downloads": -1, "filename": "AeroSandbox-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1fd3b054f61c2e7841582fa2ce5ce499", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3, <4", "size": 59877, "upload_time": "2019-10-20T20:33:29", "url": "https://files.pythonhosted.org/packages/2b/28/7436a3d86437650cec909dbb040c3fc4a1fc48877e7f4ffc65071b1723cf/AeroSandbox-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df8ff7f70c9825c6b06198e7002dac54", "sha256": "598c6350595ce4c83b4e0322e04ce0f92a79a0f2e4951d76737b5baa04877856" }, "downloads": -1, "filename": "AeroSandbox-0.2.0.tar.gz", "has_sig": false, "md5_digest": "df8ff7f70c9825c6b06198e7002dac54", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 57285, "upload_time": "2019-10-20T20:33:31", "url": "https://files.pythonhosted.org/packages/c3/53/c52381cd8f9e6076ece84b50fba2a970db13e612c6b81d28074bc5805caf/AeroSandbox-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1fd3b054f61c2e7841582fa2ce5ce499", "sha256": "e239f0d98b2a6a3224d6e438452742885e0acedc90bf4e3c1e5d45ea6a775b2e" }, "downloads": -1, "filename": "AeroSandbox-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1fd3b054f61c2e7841582fa2ce5ce499", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3, <4", "size": 59877, "upload_time": "2019-10-20T20:33:29", "url": "https://files.pythonhosted.org/packages/2b/28/7436a3d86437650cec909dbb040c3fc4a1fc48877e7f4ffc65071b1723cf/AeroSandbox-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df8ff7f70c9825c6b06198e7002dac54", "sha256": "598c6350595ce4c83b4e0322e04ce0f92a79a0f2e4951d76737b5baa04877856" }, "downloads": -1, "filename": "AeroSandbox-0.2.0.tar.gz", "has_sig": false, "md5_digest": "df8ff7f70c9825c6b06198e7002dac54", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 57285, "upload_time": "2019-10-20T20:33:31", "url": "https://files.pythonhosted.org/packages/c3/53/c52381cd8f9e6076ece84b50fba2a970db13e612c6b81d28074bc5805caf/AeroSandbox-0.2.0.tar.gz" } ] }