Metadata-Version: 2.4
Name: civilpy
Version: 0.1.29
Summary: Civil Engineering Tools in Python
Home-page: https://daneparks.com/Dane/civilpy
Author: Dane Parks
Author-email: Dane@daneparks.com
License: AGPL-V3
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=2.0.2
Requires-Dist: folium>=0.12.1
Requires-Dist: pandas>=1.1.5
Requires-Dist: Pillow>=10.2.0
Requires-Dist: Pint>=0.12.2
Requires-Dist: coverage>=7.1.0
Requires-Dist: webdriver-manager>=3.8.5
Requires-Dist: msedge-selenium-tools>=3.141.4
Requires-Dist: Flask>=2.2.2
Requires-Dist: PyPDF2>=3.0.1
Requires-Dist: beautifulsoup4>=4.11.1
Requires-Dist: sympy>=1.10.0
Requires-Dist: sshtunnel>=0.4.0
Requires-Dist: termcolor>=1.1.0
Requires-Dist: icalendar>=4.0.7
Requires-Dist: html5lib>=1.1
Requires-Dist: geopandas>=0.6.2
Requires-Dist: fiona>=1.8.22
Requires-Dist: tifftools>=1.3.7
Requires-Dist: natsort>=8.2.0
Requires-Dist: html5lib>=1.1
Requires-Dist: requests>=2.28.2
Requires-Dist: pyntcloud>=0.3.1
Requires-Dist: openpyxl>=3.1.2
Requires-Dist: tqdm>=4.65.0
Requires-Dist: pytesseract>=0.3.10
Requires-Dist: pytest>=7.4.1
Provides-Extra: full
Requires-Dist: matplotlib>=3.6.3; extra == "full"
Requires-Dist: selenium>=3.141.0; extra == "full"
Requires-Dist: msedge-selenium-tools>=3.141.4; extra == "full"
Requires-Dist: jupyter>=1.0.0; extra == "full"
Requires-Dist: PyMuPDF>=1.23.7; extra == "full"
Requires-Dist: simplekml>=1.3.6; extra == "full"
Requires-Dist: psycopg2-binary>=2.9.5; extra == "full"
Requires-Dist: sympy>=1.10.0; extra == "full"
Requires-Dist: latex>=0.7.0; extra == "full"
Requires-Dist: laspy>=2.4.1; extra == "full"
Requires-Dist: earthpy>=0.9.4; extra == "full"
Requires-Dist: pymupdf>=1.22.3; extra == "full"
Requires-Dist: pyodbc>=4.0.39; extra == "full"
Requires-Dist: kivymd>=1.1.1; extra == "full"
Requires-Dist: PyQt5>=5.15.9; extra == "full"
Requires-Dist: tox>=4.11.1; extra == "full"
Requires-Dist: markdownify>=0.13.1; extra == "full"
Requires-Dist: pytest-cov>=4.1.0; extra == "full"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: summary

# CivilPy

![PyPI - License](https://img.shields.io/pypi/l/civilpy)
<img alt="Project badge" aria-hidden="" class="project-badge" src="https://daneparks.com/Dane/civilpy/badges/master/pipeline.svg">
<img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/civilpy">
<img alt="Project badge" aria-hidden="" class="project-badge" src="https://daneparks.com/Dane/civilpy/badges/master/coverage.svg">
[![PyPI Downloads](https://static.pepy.tech/badge/civilpy/month)](https://pepy.tech/projects/civilpy)


# [Source Code](https://daneparks.com/Dane/civilpy)

Code snippets for Civil Engineering related tasks

## About (Skip to the "Installation" section to start running code)

Welcome to the CivilPy repository.  This is a simple software package to give civil engineers cleaner access
to some of the packages from the python ecosystem.  The package is focused on civil engineering related tasks such as 
file management, pdf data extraction, image manipulation mapping and unit conversions.  I did my best to make the user 
interface obvious to use and tried to keep the functionality compatible with tools available to the average Civil 
engineer.

## Intro

This repository was created in order for me to gain a better understanding of software development work flows and how they can be
re-purposed for civil engineering related tasks.  This is by no means a comprehensive or even functional repository but 
is more a way for me to track my progress while learning more about another industry.  There may occasionally be how-tos
and other code posted here but this repository is not meant as tutorial or in depth explanation for how coding works. 
For those types of things I highly suggest you instead check <a href=https://www.youtube.com/>Youtube</a> for general 
lessons or <a href=https://stackoverflow.com/>Stack Overflow</a> for specific issues.  I highly recommend the 
<a href=https://www.youtube.com/user/cs50tv>Harvard CS50 YouTube Channel</a> for conceptual level programming lessons or
<a href=https://www.youtube.com/user/schafer5>CoreyMS's Youtube Channel</a> for lessons in practical uses of 
programming. 

For an interesting somewhat working examples see the files `Useful Tricks and Tools.ipynb` and `NBI STandards - Conversion`
files to have a better understanding of what function the DOT/SNBI files are performing. 

## Installation

Run the following code to install the package:

```bash
$ pip install civilpy
```

## Usage

to check the package installed correctly, run:

```python
from civilpy.structural.steel import W

# Load a W steel section as a python object
W40X390 = W("W40X390")
W40X390.A
```

# Contributing

Clone, ctl+f, "# //TODO -"

For PRs reach out to me on github or at dane@daneparks.com. Github version of the libary
is a mirror that often falls out of date whenever a large file sneaks into the repo. 

# How to determine where to store functions within the package

Here is the decision tree for function organization within the package, the goal
is to keep importing and running functions as simple as possible for non-programmers,
while maintaining an organizational structure capable of supporting many tools.

i.e., the end user should be able to access any of your functions from a simple import:

```python
from civilpy.state.ohio.DOT.legacy import help_function
```

<div class="center">

```mermaid
graph TD
    A[Does the function more relate to a particular state<br> requirement/system, or a branch of Civil Engineering?] --> |State| B("Does it apply state wide <br> or a specific department?")
    A --> |Branch| C("Which branch does it most closely fit? ")
    C --> |construction| D(Save under <br> civilpy.construction)
    C --> |structural| E(Save under <br> civilpy.structural)
    C --> |geotechnical| F(Save under <br> civilpy.geotechnical)
    C --> |environmental| G(Save under <br> civilpy.environmental)
    C --> |transportation| H(Save under <br> civilpy.transportation)
    C --> |water_resources| I(Save under <br> civilpy.water_resources)
    A --> |Neither| P
    D --> K("Is it related to a particular standard, (i.e. AASHTO)")
    E --> K
    F --> K
    G --> K
    H --> K
    I --> K
    B --> |Statewide| L("civilpy.[state].__init__.py")
    B --> |Department| M("civilpy.[state].department")
    K --> |Yes| N("Save under a file for the standard<br>i.e. civilpy.structural.aisc")
    K --> |No| O("save to the relevant __init__.py")
    P("Save under civilpy.general.[relevant_file]")
    N --> |Doesn't make sense to put it there| P
    O --> |Doesn't make sense to put it there|P
```
</div>
