bany


Namebany JSON
Version 1.4.6 PyPI version JSON
download
home_pagehttps://github.com/AdamGagorik/bany
SummaryA collection of scripts for personal finance
upload_time2024-08-04 00:11:39
maintainerNone
docs_urlNone
authorAdam Gagorik
requires_python<3.12,>=3.11
licenseWTFPL
keywords ynab finance budgeting
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # BANY

A collection of scripts to...

1) Convert text in a PDF into YNAB transactions
2) Split a series of transactions between people
3) Solve the constrained partitioning problem for investing

# Setup

```bash
pyenv local 3.11.1
pipx install bany --python $(which python)
bany --help
```

# Commands

## `bany extract`

Create YNAB transactions from a PDF

### Examples

- Run the extract command to parse a PDF and upload transactions to YNAB

```bash
bany extract pdf --inp /path/to/pdf --config config.yaml
bany extract pdf --inp /path/to/pdf --config config.yaml --upload
```

### `config.yaml`

- Some examples can be found in the `./cfg` directory
- Define rules to match patterns in the text of a PDF
- Define the transactions to create from these matches

```yaml
# Regular Expressions defined for date like values
dates:
  Force Date:
    value: |-
      2023-01-01

  Check Date:
    regex: |-
      Check\s+Date\s+(?P<DATE>{MONTHS}\s+\d+,?\s+\d\d\d\d)

# Regular Expressions defined for money like values
amounts:
  401K:
    group: EARNINGS
    inflow: true
    regex: |-
      401K\s+
      (?P<HOURS>{NUMBER})\s+
      (?P<MONEY>{AMOUNT})\s+
      (?P<TOTAL>{AMOUNT})

  Salary:
    group: EARNINGS
    inflow: true
    regex: |-
      REGULAR\s+
      (?P<RATES>{NUMBER})\s+
      (?P<HOURS>{NUMBER})\s+
      (?P<MONEY>{AMOUNT})\s+
      (?P<TOTAL>{AMOUNT})

  TOTAL-EARNINGS:
    group: EARNINGS
    inflow: true
    total: true
    regex: |-
      Gross\s+Earnings\s+
      (?P<HOURS>{NUMBER})\s+
      (?P<MONEY>{AMOUNT})\s+
      (?P<TOTAL>{AMOUNT})

# Transactions to push to a YNAB budget (these may reference the matches defined above)
transactions:
- budget: 2023
  account: 'Checking'
  category: 'Internal Master Category: Inflow: Ready to Assign'
  payee: Company
  color: red
  amount: Salary
  date: Check Date

- budget: 2023
  account: 'Company'
  category: 'Investment: Fidelity'
  payee: 'Transfer : Fidelity : Syapse'
  memo: 2023
  color: yellow
  amount: 401K
  date: Check Date

```

## `bany split`

This is a script to help split transactions between multiple people.

### Examples

This script opens an interactive loop.

```bash
bany split
```

#### Run a series of commands

You can run a series of commands defined in a text file (see example in `./cfg` directory.

```text
split -a 12.79 -p Costco -C Food -d Dad=1 Adam=0   Doug=0   -c Adam=1
split -a  7.49 -p Costco -C Food -d Dad=1 Adam=0   Doug=0   -c Adam=1
summarize
```

```bash
bany > @ costco.txt
```

#### Show the possible commands

```bash
bany > help

Documented commands (use 'help -v' for verbose/'help <topic>' for details):

My Category
===========
clear  delete  show  split  summarize  tax  tip

Uncategorized
=============
help  history  quit  set  shortcuts
```

#### Split some transactions between some people

```bash
bany > split --amount 10.00 --payee GroceryStore --category Food --debit Alice=2/5 Bob=3/5 --credit Bob=1

   group  amount  rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$ Who  Delta
0      0  $10.00     0  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00   -  $0.00

bany > split --amount 15.75 --payee Restaurant --category Dinner --debit Alice=1/2 Bob=1/2 --credit Alice=1

   group  amount  rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta
0      0  $10.00     0  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00
1      1  $15.75     0    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01
```

#### Add taxes and tips for the previous transaction

```bash
bany > tip --amount 5.00 --category Tips

   group  amount     rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta
0      0  $10.00  0.00000  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00
1      1  $15.75  0.00000    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01
2      1   $5.00  0.31746    Restaurant     Tips  (Alice, Bob)   (Alice)    250  250      0.5    0.5   $2.50  $2.50      -   $0.00
```

```bash
bany > tax --rate 0.07 --payee SalesTax

   group  amount     rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta
0      0  $10.00  0.00000  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00
1      1  $15.75  0.00000    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01
2      1   $5.00  0.31746    Restaurant     Tips  (Alice, Bob)   (Alice)    250  250      0.5    0.5   $2.50  $2.50      -   $0.00
3      1   $1.10  0.07000      SalesTax   Dinner  (Alice, Bob)   (Alice)     55   55      0.5    0.5   $0.55  $0.55      -   $0.00
```

#### Display the current transactions

```bash
bany > show

   group  amount     rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta
0      0  $10.00  0.00000  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00
1      1  $15.75  0.00000    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01
2      1   $5.00  0.31746    Restaurant     Tips  (Alice, Bob)   (Alice)    250  250      0.5    0.5   $2.50  $2.50      -   $0.00
3      1   $1.10  0.07000      SalesTax   Dinner  (Alice, Bob)   (Alice)     55   55      0.5    0.5   $0.55  $0.55      -   $0.00
```

#### Aggregate by categories and people

```bash
bany > summarize

   amount category         payee Alice.$  Bob.$
0  $10.00     Food  GroceryStore   $4.00  $6.00
1  $15.75   Dinner    Restaurant   $7.87  $7.88
2   $5.00     Tips    Restaurant   $2.50  $2.50
3   $1.10   Dinner      SalesTax   $0.55  $0.55
```

## `bany solve`

This is a script to solve a math problem.

- I have a few investment funds and want them each to have a certain percent of my savings.
- I need to know which funds to put the money in to reach my desired allocation.

> We have a histogram and want to morph it into a new shape

  1)  Given a set of labeled buckets with known item counts...
  2)  Given a new amount of items to place into the buckets...
  3)  Given a desired distribution of items for the buckets...

How should we place the new items into the buckets?

### Examples

```bash
# The problem will be solved in an unconstrained way by default
# Values can be added or removed from existing bins
bany solve unconstrained --config allocate.yaml

# The problem can be solved in a constrained way as well
# Values can only be added to bins
bany solve constrained --config allocate.yaml

# A Monte Carlo based solver also exists, which is non-deterministic
# Values can be added in fixed sizes
bany solve montecarlo --config allocate.yaml --stepsize 25
```

#### Input Distribution

```bash
TOTAL     level=[0] current_value=[ 6,000.00] optimal_ratio=[1.000] amount_to_add=[ 8,000.00]
 ├─VIGAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.220] amount_to_add=[     0.00]
 ├─VVIAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.280] amount_to_add=[     0.00]
 ├─VMGMX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[     0.00]
 ├─VMVAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[     0.00]
 ├─VSGAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[     0.00]
 └─VSIAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[     0.00]
```

#### Output Distribution

```bash
TOTAL     level=[0] results_value=[14,000.00] results_ratio=[1.000] amount_to_add=[     0.00]
 ├─VIGAX  level=[1] results_value=[ 3,080.00] results_ratio=[0.220] amount_to_add=[ 2,080.00]
 ├─VVIAX  level=[1] results_value=[ 3,920.00] results_ratio=[0.280] amount_to_add=[ 2,920.00]
 ├─VMGMX  level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[   400.00]
 ├─VMVAX  level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]
 ├─VSGAX  level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[   400.00]
 └─VSIAX  level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]
```

### `config.yaml`

The input is a hierarchy of bins with current values and desired ratios.

##### yaml

The input can be given as a YAML file.

```yaml
- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: [
    'VIGAX', 'VVIAX', 'VMGMX', 'VMVAX', 'VSGAX', 'VSIAX'] }
- { label: 'VIGAX', optimal_ratio:  22, current_value: 1000, amount_to_add:    0, children: [] }
- { label: 'VVIAX', optimal_ratio:  28, current_value: 1000, amount_to_add:    0, children: [] }
- { label: 'VMGMX', optimal_ratio:  10, current_value: 1000, amount_to_add:    0, children: [] }
- { label: 'VMVAX', optimal_ratio:  15, current_value: 1000, amount_to_add:    0, children: [] }
- { label: 'VSGAX', optimal_ratio:  10, current_value: 1000, amount_to_add:    0, children: [] }
- { label: 'VSIAX', optimal_ratio:  15, current_value: 1000, amount_to_add:    0, children: [] }
```

You can use regular expressions when specifying the children of a category.

```yaml
- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: ['regex::.*'] }
...
```

##### csv

The input can be given as a CSV file.

```csv
   label  optimal_ratio  current_value  amount_to_add                             children
0  TOTAL          100.0         6000.0         8000.0  VIGAX;VVIAX;VMGMX;VMVAX;VSGAX;VSIAX
1  VIGAX           22.0         1000.0            0.0
2  VVIAX           28.0         1000.0            0.0
3  VMGMX           10.0         1000.0            0.0
4  VMVAX           15.0         1000.0            0.0
5  VSGAX           10.0         1000.0            0.0
6  VSIAX           15.0         1000.0            0.0
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/AdamGagorik/bany",
    "name": "bany",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.12,>=3.11",
    "maintainer_email": null,
    "keywords": "YNAB, finance, budgeting",
    "author": "Adam Gagorik",
    "author_email": "adam.gagorik@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/95/1a/e1761709b5de6f7564d7ed93dfc6a20ecaf9d0371cdcd9b04cdfab4096bd/bany-1.4.6.tar.gz",
    "platform": null,
    "description": "# BANY\n\nA collection of scripts to...\n\n1) Convert text in a PDF into YNAB transactions\n2) Split a series of transactions between people\n3) Solve the constrained partitioning problem for investing\n\n# Setup\n\n```bash\npyenv local 3.11.1\npipx install bany --python $(which python)\nbany --help\n```\n\n# Commands\n\n## `bany extract`\n\nCreate YNAB transactions from a PDF\n\n### Examples\n\n- Run the extract command to parse a PDF and upload transactions to YNAB\n\n```bash\nbany extract pdf --inp /path/to/pdf --config config.yaml\nbany extract pdf --inp /path/to/pdf --config config.yaml --upload\n```\n\n### `config.yaml`\n\n- Some examples can be found in the `./cfg` directory\n- Define rules to match patterns in the text of a PDF\n- Define the transactions to create from these matches\n\n```yaml\n# Regular Expressions defined for date like values\ndates:\n  Force Date:\n    value: |-\n      2023-01-01\n\n  Check Date:\n    regex: |-\n      Check\\s+Date\\s+(?P<DATE>{MONTHS}\\s+\\d+,?\\s+\\d\\d\\d\\d)\n\n# Regular Expressions defined for money like values\namounts:\n  401K:\n    group: EARNINGS\n    inflow: true\n    regex: |-\n      401K\\s+\n      (?P<HOURS>{NUMBER})\\s+\n      (?P<MONEY>{AMOUNT})\\s+\n      (?P<TOTAL>{AMOUNT})\n\n  Salary:\n    group: EARNINGS\n    inflow: true\n    regex: |-\n      REGULAR\\s+\n      (?P<RATES>{NUMBER})\\s+\n      (?P<HOURS>{NUMBER})\\s+\n      (?P<MONEY>{AMOUNT})\\s+\n      (?P<TOTAL>{AMOUNT})\n\n  TOTAL-EARNINGS:\n    group: EARNINGS\n    inflow: true\n    total: true\n    regex: |-\n      Gross\\s+Earnings\\s+\n      (?P<HOURS>{NUMBER})\\s+\n      (?P<MONEY>{AMOUNT})\\s+\n      (?P<TOTAL>{AMOUNT})\n\n# Transactions to push to a YNAB budget (these may reference the matches defined above)\ntransactions:\n- budget: 2023\n  account: 'Checking'\n  category: 'Internal Master Category: Inflow: Ready to Assign'\n  payee: Company\n  color: red\n  amount: Salary\n  date: Check Date\n\n- budget: 2023\n  account: 'Company'\n  category: 'Investment: Fidelity'\n  payee: 'Transfer : Fidelity : Syapse'\n  memo: 2023\n  color: yellow\n  amount: 401K\n  date: Check Date\n\n```\n\n## `bany split`\n\nThis is a script to help split transactions between multiple people.\n\n### Examples\n\nThis script opens an interactive loop.\n\n```bash\nbany split\n```\n\n#### Run a series of commands\n\nYou can run a series of commands defined in a text file (see example in `./cfg` directory.\n\n```text\nsplit -a 12.79 -p Costco -C Food -d Dad=1 Adam=0   Doug=0   -c Adam=1\nsplit -a  7.49 -p Costco -C Food -d Dad=1 Adam=0   Doug=0   -c Adam=1\nsummarize\n```\n\n```bash\nbany > @ costco.txt\n```\n\n#### Show the possible commands\n\n```bash\nbany > help\n\nDocumented commands (use 'help -v' for verbose/'help <topic>' for details):\n\nMy Category\n===========\nclear  delete  show  split  summarize  tax  tip\n\nUncategorized\n=============\nhelp  history  quit  set  shortcuts\n```\n\n#### Split some transactions between some people\n\n```bash\nbany > split --amount 10.00 --payee GroceryStore --category Food --debit Alice=2/5 Bob=3/5 --credit Bob=1\n\n   group  amount  rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$ Who  Delta\n0      0  $10.00     0  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00   -  $0.00\n\nbany > split --amount 15.75 --payee Restaurant --category Dinner --debit Alice=1/2 Bob=1/2 --credit Alice=1\n\n   group  amount  rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta\n0      0  $10.00     0  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00\n1      1  $15.75     0    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01\n```\n\n#### Add taxes and tips for the previous transaction\n\n```bash\nbany > tip --amount 5.00 --category Tips\n\n   group  amount     rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta\n0      0  $10.00  0.00000  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00\n1      1  $15.75  0.00000    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01\n2      1   $5.00  0.31746    Restaurant     Tips  (Alice, Bob)   (Alice)    250  250      0.5    0.5   $2.50  $2.50      -   $0.00\n```\n\n```bash\nbany > tax --rate 0.07 --payee SalesTax\n\n   group  amount     rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta\n0      0  $10.00  0.00000  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00\n1      1  $15.75  0.00000    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01\n2      1   $5.00  0.31746    Restaurant     Tips  (Alice, Bob)   (Alice)    250  250      0.5    0.5   $2.50  $2.50      -   $0.00\n3      1   $1.10  0.07000      SalesTax   Dinner  (Alice, Bob)   (Alice)     55   55      0.5    0.5   $0.55  $0.55      -   $0.00\n```\n\n#### Display the current transactions\n\n```bash\nbany > show\n\n   group  amount     rate         payee category       debtors creditors  Alice  Bob  Alice.w  Bob.w Alice.$  Bob.$    Who   Delta\n0      0  $10.00  0.00000  GroceryStore     Food  (Alice, Bob)     (Bob)    400  600      0.4    0.6   $4.00  $6.00      -   $0.00\n1      1  $15.75  0.00000    Restaurant   Dinner  (Alice, Bob)   (Alice)    787  787      0.5    0.5   $7.87  $7.88  Alice  -$0.01\n2      1   $5.00  0.31746    Restaurant     Tips  (Alice, Bob)   (Alice)    250  250      0.5    0.5   $2.50  $2.50      -   $0.00\n3      1   $1.10  0.07000      SalesTax   Dinner  (Alice, Bob)   (Alice)     55   55      0.5    0.5   $0.55  $0.55      -   $0.00\n```\n\n#### Aggregate by categories and people\n\n```bash\nbany > summarize\n\n   amount category         payee Alice.$  Bob.$\n0  $10.00     Food  GroceryStore   $4.00  $6.00\n1  $15.75   Dinner    Restaurant   $7.87  $7.88\n2   $5.00     Tips    Restaurant   $2.50  $2.50\n3   $1.10   Dinner      SalesTax   $0.55  $0.55\n```\n\n## `bany solve`\n\nThis is a script to solve a math problem.\n\n- I have a few investment funds and want them each to have a certain percent of my savings.\n- I need to know which funds to put the money in to reach my desired allocation.\n\n> We have a histogram and want to morph it into a new shape\n\n  1)  Given a set of labeled buckets with known item counts...\n  2)  Given a new amount of items to place into the buckets...\n  3)  Given a desired distribution of items for the buckets...\n\nHow should we place the new items into the buckets?\n\n### Examples\n\n```bash\n# The problem will be solved in an unconstrained way by default\n# Values can be added or removed from existing bins\nbany solve unconstrained --config allocate.yaml\n\n# The problem can be solved in a constrained way as well\n# Values can only be added to bins\nbany solve constrained --config allocate.yaml\n\n# A Monte Carlo based solver also exists, which is non-deterministic\n# Values can be added in fixed sizes\nbany solve montecarlo --config allocate.yaml --stepsize 25\n```\n\n#### Input Distribution\n\n```bash\nTOTAL     level=[0] current_value=[ 6,000.00] optimal_ratio=[1.000] amount_to_add=[ 8,000.00]\n \u251c\u2500VIGAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.220] amount_to_add=[     0.00]\n \u251c\u2500VVIAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.280] amount_to_add=[     0.00]\n \u251c\u2500VMGMX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[     0.00]\n \u251c\u2500VMVAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[     0.00]\n \u251c\u2500VSGAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[     0.00]\n \u2514\u2500VSIAX  level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[     0.00]\n```\n\n#### Output Distribution\n\n```bash\nTOTAL     level=[0] results_value=[14,000.00] results_ratio=[1.000] amount_to_add=[     0.00]\n \u251c\u2500VIGAX  level=[1] results_value=[ 3,080.00] results_ratio=[0.220] amount_to_add=[ 2,080.00]\n \u251c\u2500VVIAX  level=[1] results_value=[ 3,920.00] results_ratio=[0.280] amount_to_add=[ 2,920.00]\n \u251c\u2500VMGMX  level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[   400.00]\n \u251c\u2500VMVAX  level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]\n \u251c\u2500VSGAX  level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[   400.00]\n \u2514\u2500VSIAX  level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]\n```\n\n### `config.yaml`\n\nThe input is a hierarchy of bins with current values and desired ratios.\n\n##### yaml\n\nThe input can be given as a YAML file.\n\n```yaml\n- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: [\n    'VIGAX', 'VVIAX', 'VMGMX', 'VMVAX', 'VSGAX', 'VSIAX'] }\n- { label: 'VIGAX', optimal_ratio:  22, current_value: 1000, amount_to_add:    0, children: [] }\n- { label: 'VVIAX', optimal_ratio:  28, current_value: 1000, amount_to_add:    0, children: [] }\n- { label: 'VMGMX', optimal_ratio:  10, current_value: 1000, amount_to_add:    0, children: [] }\n- { label: 'VMVAX', optimal_ratio:  15, current_value: 1000, amount_to_add:    0, children: [] }\n- { label: 'VSGAX', optimal_ratio:  10, current_value: 1000, amount_to_add:    0, children: [] }\n- { label: 'VSIAX', optimal_ratio:  15, current_value: 1000, amount_to_add:    0, children: [] }\n```\n\nYou can use regular expressions when specifying the children of a category.\n\n```yaml\n- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: ['regex::.*'] }\n...\n```\n\n##### csv\n\nThe input can be given as a CSV file.\n\n```csv\n   label  optimal_ratio  current_value  amount_to_add                             children\n0  TOTAL          100.0         6000.0         8000.0  VIGAX;VVIAX;VMGMX;VMVAX;VSGAX;VSIAX\n1  VIGAX           22.0         1000.0            0.0\n2  VVIAX           28.0         1000.0            0.0\n3  VMGMX           10.0         1000.0            0.0\n4  VMVAX           15.0         1000.0            0.0\n5  VSGAX           10.0         1000.0            0.0\n6  VSIAX           15.0         1000.0            0.0\n```\n",
    "bugtrack_url": null,
    "license": "WTFPL",
    "summary": "A collection of scripts for personal finance",
    "version": "1.4.6",
    "project_urls": {
        "Homepage": "https://github.com/AdamGagorik/bany",
        "Repository": "https://github.com/AdamGagorik/bany"
    },
    "split_keywords": [
        "ynab",
        " finance",
        " budgeting"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "325927fa77097eba5a210a95fa49bce6e5fa4ee5eebdb48cbd6a6912eeef2d8f",
                "md5": "88d58b250bce2b91786a653a107059cc",
                "sha256": "39680128b36a1f471392ee6a054873e46a1e80dee3000cf8570e115533989880"
            },
            "downloads": -1,
            "filename": "bany-1.4.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "88d58b250bce2b91786a653a107059cc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.12,>=3.11",
            "size": 41211,
            "upload_time": "2024-08-04T00:11:38",
            "upload_time_iso_8601": "2024-08-04T00:11:38.178403Z",
            "url": "https://files.pythonhosted.org/packages/32/59/27fa77097eba5a210a95fa49bce6e5fa4ee5eebdb48cbd6a6912eeef2d8f/bany-1.4.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "951ae1761709b5de6f7564d7ed93dfc6a20ecaf9d0371cdcd9b04cdfab4096bd",
                "md5": "255295a0bf448e7369fa7d35ebd845d3",
                "sha256": "9df6dde3e4263a637960fc53cb6c38dfba800e296de9a437d783fb4dbfa1d663"
            },
            "downloads": -1,
            "filename": "bany-1.4.6.tar.gz",
            "has_sig": false,
            "md5_digest": "255295a0bf448e7369fa7d35ebd845d3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.12,>=3.11",
            "size": 32971,
            "upload_time": "2024-08-04T00:11:39",
            "upload_time_iso_8601": "2024-08-04T00:11:39.439434Z",
            "url": "https://files.pythonhosted.org/packages/95/1a/e1761709b5de6f7564d7ed93dfc6a20ecaf9d0371cdcd9b04cdfab4096bd/bany-1.4.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-04 00:11:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "AdamGagorik",
    "github_project": "bany",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "bany"
}
        
Elapsed time: 1.08154s